优化大量推送问题
This commit is contained in:
@@ -15,6 +15,7 @@ from sync_state_machine.domain.project_detail.sync_strategy import ProjectDetail
|
||||
from sync_state_machine.domain.project_detail.sync_node import ProjectDetailSyncNode
|
||||
from sync_state_machine.sync_system.config import UpdateDirection
|
||||
from sync_state_machine.sync_system.strategy_ops import BoundNodePair
|
||||
from pydantic import BaseModel
|
||||
|
||||
|
||||
def _fake_node(*, node_id: str, key: str):
|
||||
@@ -44,6 +45,19 @@ def _build_project_detail_node(*, node_id: str, data_id: str, key: str) -> Proje
|
||||
)
|
||||
|
||||
|
||||
class _ProjectSchema(BaseModel):
|
||||
id: str
|
||||
plan_production_date: str | None = None
|
||||
plan_full_production_date: str | None = None
|
||||
actual_production_date: str | None = None
|
||||
actual_full_production_date: str | None = None
|
||||
|
||||
|
||||
class _ProjectNode(SyncNode[_ProjectSchema]):
|
||||
node_type = "project"
|
||||
schema = _ProjectSchema
|
||||
|
||||
|
||||
@pytest_asyncio.fixture
|
||||
async def project_detail_env(tmp_path):
|
||||
persistence = SQLitePersistenceBackend(str(tmp_path / "project-detail.db"))
|
||||
@@ -144,4 +158,65 @@ async def test_project_detail_bind_does_not_push_group_production_plan_from_loca
|
||||
|
||||
assert created_nodes == []
|
||||
assert remote.filter(node_type="project_detail_data") == []
|
||||
assert await binding_manager.get_remote_id("project_detail_data", local_node.node_id) is None
|
||||
assert await binding_manager.get_remote_id("project_detail_data", local_node.node_id) is None
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_project_detail_create_remote_production_carries_project_plan_dates(project_detail_env) -> None:
|
||||
local, remote, binding_manager, _ = project_detail_env
|
||||
strategy = ProjectDetailSyncStrategy("project_detail_data", local, remote, binding_manager)
|
||||
|
||||
local_project = _ProjectNode(
|
||||
node_id="local-project-node",
|
||||
data_id="local-project-id",
|
||||
data={
|
||||
"id": "local-project-id",
|
||||
"plan_production_date": "2023-12-30",
|
||||
"plan_full_production_date": "2024-12-30",
|
||||
"actual_production_date": "2023-12-30",
|
||||
"actual_full_production_date": "2024-12-30",
|
||||
},
|
||||
)
|
||||
remote_project = _ProjectNode(
|
||||
node_id="remote-project-node",
|
||||
data_id="remote-project-id",
|
||||
data={"id": "remote-project-id"},
|
||||
)
|
||||
await local.add(local_project)
|
||||
await remote.add(remote_project)
|
||||
await binding_manager.bind("project", local_project.node_id, remote_project.node_id)
|
||||
|
||||
local_detail = ProjectDetailSyncNode(
|
||||
node_id="local-detail-node",
|
||||
data_id="local-detail-id",
|
||||
data={
|
||||
"id": "local-detail-id",
|
||||
"project_id": "local-project-id",
|
||||
"key": "production",
|
||||
"value": [{"date": "2023-12-30", "capacity": 3.0}],
|
||||
},
|
||||
)
|
||||
await local.add(local_detail)
|
||||
|
||||
created_remote = ProjectDetailSyncNode(
|
||||
node_id="remote-detail-node",
|
||||
data_id="",
|
||||
data={
|
||||
"id": "",
|
||||
"project_id": "remote-project-id",
|
||||
"key": "production",
|
||||
"value": [{"date": "2023-12-30", "capacity": 3.0}],
|
||||
},
|
||||
)
|
||||
await remote.add(created_remote)
|
||||
await binding_manager.bind("project_detail_data", local_detail.node_id, created_remote.node_id)
|
||||
|
||||
await strategy._enrich_created_production_nodes([created_remote], source_is_local=True)
|
||||
|
||||
created_data = created_remote.get_data()
|
||||
assert created_data is not None
|
||||
assert created_data["project_id"] == "remote-project-id"
|
||||
assert created_data["plan_production_date"] == "2023-12-30"
|
||||
assert created_data["plan_full_production_date"] == "2024-12-30"
|
||||
assert created_data["actual_production_date"] == "2023-12-30"
|
||||
assert created_data["actual_full_production_date"] == "2024-12-30"
|
||||
Reference in New Issue
Block a user