Интегрирован wesp в сайт
CI / quality (push) Canceled after 0s

This commit is contained in:
влад
2026-07-17 12:57:18 +03:00
parent 5dfa06ddbe
commit 355c0ef9f1
883 changed files with 194576 additions and 177 deletions
@@ -0,0 +1,69 @@
"""Dual sync: устаревший push на master не перезаписывает сервер."""
from __future__ import annotations
import unittest
from app import db
from app.models import Recipe
from app.services.recipe_update_service import update_recipe_from_payload
from app.services.sync_manager import SyncManager
from tests.helpers.mill_recipe_fixtures import (
create_recipe_with_children,
recipe_update_payload,
)
from tests.helpers.sync_dual_harness import SyncDualInstanceHarness
SCENARIO_DUAL_CONCURRENT_RECIPE = "DUAL_CONCURRENT_RECIPE"
class SyncDualConcurrentRecipeTests(unittest.TestCase):
def setUp(self) -> None:
self.harness = SyncDualInstanceHarness()
self.harness.start()
def tearDown(self) -> None:
self.harness.stop()
def test_stale_push_does_not_overwrite_server_master(self) -> None:
with self.harness.server_ctx():
recipe_id, _, _ = create_recipe_with_children(name="Initial")
self.harness.drain_sync()
with self.harness.server_ctx():
recipe = db.session.get(Recipe, recipe_id)
update_recipe_from_payload(
recipe_id,
recipe_update_payload(recipe, ingredients=[], groups=[])
| {"name": "Server authoritative"},
)
db.session.commit()
server_version = int(recipe.version or 1)
self.harness.drain_sync()
with self.harness.server_ctx():
result = SyncManager.process_push(
client_id=self.harness.NODE_A,
changes=[
{
"table_name": "recipe",
"record_id": recipe_id,
"action": "update",
"data": {
"id": recipe_id,
"name": "Stale from client",
"version": max(1, server_version - 1),
},
}
],
)
self.assertEqual(result["status_code"], 200)
with self.harness.server_ctx():
row = db.session.get(Recipe, recipe_id)
self.assertEqual(row.name, "Server authoritative")
if __name__ == "__main__":
unittest.main()