优化sync_system代码质量
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
from types import SimpleNamespace
|
||||
from unittest.mock import AsyncMock, MagicMock, patch
|
||||
|
||||
import pytest
|
||||
|
||||
from sync_state_machine.domain.project_detail.sync_strategy import ProjectDetailSyncStrategy
|
||||
from sync_state_machine.sync_system.config import UpdateDirection
|
||||
from sync_state_machine.sync_system.strategy_ops import BoundNodePair
|
||||
|
||||
|
||||
def _fake_node(*, node_id: str, key: str):
|
||||
data = {"id": node_id, "key": key}
|
||||
return SimpleNamespace(
|
||||
node_id=node_id,
|
||||
data_id=node_id,
|
||||
action=None,
|
||||
context={},
|
||||
get_data=lambda: data,
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_project_detail_update_partitions_group_production_plans_before_generic_logic():
|
||||
strategy = ProjectDetailSyncStrategy("project_detail_data", MagicMock(), MagicMock(), MagicMock())
|
||||
|
||||
pull_pair = BoundNodePair(
|
||||
local_node=_fake_node(node_id="local-pull", key="ensure_production"),
|
||||
remote_node=_fake_node(node_id="remote-pull", key="ensure_production"),
|
||||
)
|
||||
generic_pair = BoundNodePair(
|
||||
local_node=_fake_node(node_id="local-generic", key="production"),
|
||||
remote_node=_fake_node(node_id="remote-generic", key="production"),
|
||||
)
|
||||
pull_node = SimpleNamespace(node_id="pull-update")
|
||||
generic_node = SimpleNamespace(node_id="generic-update")
|
||||
|
||||
with patch.object(
|
||||
strategy,
|
||||
"collect_update_pairs",
|
||||
new=AsyncMock(return_value=[pull_pair, generic_pair]),
|
||||
), patch(
|
||||
"sync_state_machine.domain.project_detail.sync_strategy.build_data_id_normalization_map",
|
||||
new=AsyncMock(return_value={}),
|
||||
), patch.object(
|
||||
strategy,
|
||||
"prepare_update_for_direction",
|
||||
new=AsyncMock(return_value=pull_node),
|
||||
) as mock_prepare, patch.object(
|
||||
strategy,
|
||||
"update_pair",
|
||||
new=AsyncMock(return_value=[generic_node]),
|
||||
) as mock_update_pair:
|
||||
updated_nodes = await strategy.update()
|
||||
|
||||
assert updated_nodes == [pull_node, generic_node]
|
||||
mock_prepare.assert_awaited_once_with(
|
||||
pull_pair.local_node,
|
||||
pull_pair.remote_node,
|
||||
UpdateDirection.PULL,
|
||||
{},
|
||||
)
|
||||
mock_update_pair.assert_awaited_once_with(generic_pair.local_node, generic_pair.remote_node, {})
|
||||
|
||||
|
||||
def test_project_detail_domain_option_is_typed_schema() -> None:
|
||||
strategy = ProjectDetailSyncStrategy("project_detail_data", MagicMock(), MagicMock(), MagicMock())
|
||||
|
||||
assert strategy.domain_option.pull_group_production_plans is True
|
||||
Reference in New Issue
Block a user