@@ -0,0 +1,103 @@
|
||||
"""Dual sync: loading_report доходит до обоих терминалов."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
from datetime import datetime
|
||||
|
||||
from sqlalchemy import select
|
||||
|
||||
from app import db
|
||||
from app.models import LoadingReport
|
||||
from app.services.sync_manager import enqueue_sync_queue_task
|
||||
from tests.helpers.mill_recipe_fixtures import create_recipe_with_children
|
||||
from tests.helpers.sync_dual_harness import SyncDualInstanceHarness
|
||||
|
||||
SCENARIO_DUAL_REPORTS_SYNC = "DUAL_REPORTS_SYNC"
|
||||
|
||||
|
||||
class SyncDualReportsTests(unittest.TestCase):
|
||||
def setUp(self) -> None:
|
||||
self.harness = SyncDualInstanceHarness()
|
||||
self.harness.start()
|
||||
|
||||
def tearDown(self) -> None:
|
||||
self.harness.stop()
|
||||
|
||||
def test_loading_report_reaches_both_terminals(self) -> None:
|
||||
with self.harness.server_ctx():
|
||||
recipe_id, _, _ = create_recipe_with_children(name="Report recipe")
|
||||
report_id = "dual-lr-1"
|
||||
db.session.add(
|
||||
LoadingReport(
|
||||
id=report_id,
|
||||
recipe_id=recipe_id,
|
||||
recipe_name="Report recipe",
|
||||
start_time=datetime.now(),
|
||||
dispenser_type="dispenser",
|
||||
total_weight=100.0,
|
||||
)
|
||||
)
|
||||
db.session.commit()
|
||||
enqueue_sync_queue_task(
|
||||
"loading_report", report_id, "create", priority=2, target_node_id=None
|
||||
)
|
||||
db.session.commit()
|
||||
|
||||
self.harness.drain_sync()
|
||||
|
||||
for term in ("a", "b"):
|
||||
with self.harness.terminal_ctx(term):
|
||||
row = db.session.get(LoadingReport, report_id)
|
||||
self.assertIsNotNone(row, msg=f"terminal {term}")
|
||||
self.assertEqual(float(row.total_weight or 0), 100.0)
|
||||
|
||||
def test_unloading_report_chain_listed_on_server(self) -> None:
|
||||
client = self.harness.server_test_client()
|
||||
with self.harness.server_ctx():
|
||||
recipe_id, _, _ = create_recipe_with_children(name="Unload R")
|
||||
save_loading = client.post(
|
||||
"/api/save_report",
|
||||
json={
|
||||
"recipe_id": recipe_id,
|
||||
"total_weight": 50.0,
|
||||
"target_mixing_time": 5,
|
||||
"actual_mixing_time": 5,
|
||||
"components": [
|
||||
{"name": "C1", "target_weight": 50, "actual_weight": 50, "overload": 0}
|
||||
],
|
||||
},
|
||||
)
|
||||
self.assertEqual(save_loading.status_code, 200)
|
||||
report_id = save_loading.get_json()["report_id"]
|
||||
|
||||
save_unloading = client.post(
|
||||
"/api/save_unloading_report",
|
||||
json={
|
||||
"loading_report_id": report_id,
|
||||
"recipe_id": recipe_id,
|
||||
"total_weight": 50.0,
|
||||
"total_unloaded_weight": 48.0,
|
||||
"remaining_weight": 2.0,
|
||||
"unloading_groups": [
|
||||
{
|
||||
"name": "G1",
|
||||
"target_weight": 50.0,
|
||||
"unloaded_weight": 48.0,
|
||||
"remaining_weight": 2.0,
|
||||
"distribution_type": "percent",
|
||||
"distribution_value": 100,
|
||||
"order": 1,
|
||||
}
|
||||
],
|
||||
},
|
||||
)
|
||||
self.assertEqual(save_unloading.status_code, 200)
|
||||
|
||||
listed = client.get("/api/unloading_reports")
|
||||
self.assertEqual(listed.status_code, 200)
|
||||
self.assertGreaterEqual(len(listed.get_json()), 1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user