优化大量推送问题

This commit is contained in:
strepsiades
2026-04-02 11:14:44 +08:00
parent f93a6c5c68
commit bb8ea931b5
8 changed files with 343 additions and 7 deletions
@@ -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"