Интегрирован 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,178 @@
import os
import tempfile
import unittest
from datetime import datetime
from app import create_app, db
from app.models import Recipe, SyncConflict, SyncQueue
from config import TestingConfig
class LegacyFourthBatchConfig(TestingConfig):
_TMP_DIR = tempfile.mkdtemp(prefix="wesp-legacy-batch4-tests-")
SQLALCHEMY_DATABASE_URI = f"sqlite:///{os.path.join(_TMP_DIR, 'recipes_test.db')}"
SQLALCHEMY_BINDS = {"reports": f"sqlite:///{os.path.join(_TMP_DIR, 'reports_test.db')}"}
AUTH_LOGIN = "legacy4-admin"
AUTH_PASSWORD = "legacy4-secret"
class LegacyCompatFourthBatchTests(unittest.TestCase):
def setUp(self) -> None:
self.app = create_app(LegacyFourthBatchConfig)
self.client = self.app.test_client()
self.ctx = self.app.app_context()
self.ctx.push()
db.create_all()
login = self.client.post(
"/api/auth/login", json={"login": "legacy4-admin", "password": "legacy4-secret"}
)
self.assertEqual(login.status_code, 200)
def tearDown(self) -> None:
db.session.remove()
db.drop_all()
self.ctx.pop()
def test_sync_extended_endpoints(self) -> None:
init_resp = self.client.post("/api/sync/init")
self.assertEqual(init_resp.status_code, 200)
metadata_resp = self.client.get("/api/sync/metadata")
self.assertEqual(metadata_resp.status_code, 200)
self.assertEqual(metadata_resp.get_json()["node_type"], "server")
register_resp = self.client.post(
"/api/sync/register", json={"client_id": "client-4", "client_name": "Client 4"}
)
self.assertEqual(register_resp.status_code, 200)
client_resp = self.client.get("/api/sync/clients/client-4")
self.assertEqual(client_resp.status_code, 200)
self.assertEqual(client_resp.get_json()["node_id"], "client-4")
db.session.add(
SyncQueue(
table_name="recipe",
record_id="r-any",
action="update",
status="pending",
priority=2,
retry_count=0,
max_retries=3,
created_at=datetime.now(),
)
)
db.session.add(
SyncConflict(
table_name="recipe",
record_id="r-any",
conflict_type="version_mismatch",
local_data="{}",
remote_data="{}",
)
)
db.session.commit()
queue_resp = self.client.get("/api/sync/queue")
self.assertEqual(queue_resp.status_code, 200)
self.assertGreaterEqual(len(queue_resp.get_json()), 1)
stats_resp = self.client.get("/api/sync/queue/stats")
self.assertEqual(stats_resp.status_code, 200)
self.assertIn("pending", stats_resp.get_json())
conflicts_resp = self.client.get("/api/sync/conflicts")
self.assertEqual(conflicts_resp.status_code, 200)
conflicts = conflicts_resp.get_json()
self.assertGreaterEqual(len(conflicts), 1)
conflict_id = conflicts[0]["id"]
resolve_resp = self.client.post(
f"/api/sync/conflicts/{conflict_id}/resolve", json={"resolution": "remote"}
)
self.assertEqual(resolve_resp.status_code, 200)
status_resp = self.client.get("/api/sync/status")
self.assertEqual(status_resp.status_code, 200)
self.assertIn("queue", status_resp.get_json())
check_db_resp = self.client.post("/api/sync/check-db")
self.assertEqual(check_db_resp.status_code, 200)
self.assertTrue(check_db_resp.get_json()["success"])
check_client_resp = self.client.post("/api/sync/check-db-client", json={"client_id": "client-4"})
self.assertEqual(check_client_resp.status_code, 200)
self.assertEqual(check_client_resp.get_json()["client_id"], "client-4")
def test_reports_legacy_endpoints(self) -> None:
recipe = Recipe(id="r-legacy4", name="Recipe 4", heads_per_trip=10, mixing_time=5)
db.session.add(recipe)
db.session.commit()
save_report_resp = self.client.post(
"/api/save_report",
json={
"recipe_id": "r-legacy4",
"total_weight": 100.5,
"target_mixing_time": 5,
"actual_mixing_time": 6,
"components": [
{"name": "Corn", "target_weight": 50, "actual_weight": 49, "overload": 1}
],
"component_loading_times": [
{
"component_name": "Corn",
"start_time": "2026-01-01T10:00:00",
"end_time": "2026-01-01T10:01:00",
"loading_duration": 60,
"loading_order": 1,
}
],
},
)
self.assertEqual(save_report_resp.status_code, 200)
report_id = save_report_resp.get_json()["report_id"]
loading_times_resp = self.client.get(f"/api/reports/{report_id}/loading_times")
self.assertEqual(loading_times_resp.status_code, 200)
self.assertEqual(loading_times_resp.get_json()["status"], "success")
consumption_resp = self.client.get("/api/consumption_by_component")
self.assertEqual(consumption_resp.status_code, 200)
self.assertIsInstance(consumption_resp.get_json(), list)
save_unloading_resp = self.client.post(
"/api/save_unloading_report",
json={
"loading_report_id": report_id,
"recipe_id": "r-legacy4",
"total_weight": 100.5,
"total_unloaded_weight": 99.0,
"remaining_weight": 1.5,
"unloading_groups": [
{
"name": "Group A",
"target_weight": 100.5,
"unloaded_weight": 99.0,
"remaining_weight": 1.5,
"distribution_type": "percent",
"distribution_value": 100,
"order": 1,
}
],
},
)
self.assertEqual(save_unloading_resp.status_code, 200)
unloading_report_id = save_unloading_resp.get_json()["unloading_report_id"]
unloading_reports_resp = self.client.get("/api/unloading_reports")
self.assertEqual(unloading_reports_resp.status_code, 200)
self.assertGreaterEqual(len(unloading_reports_resp.get_json()), 1)
unloading_groups_resp = self.client.get(f"/api/reports/{unloading_report_id}/unloading_groups")
self.assertEqual(unloading_groups_resp.status_code, 200)
self.assertEqual(unloading_groups_resp.get_json()["status"], "success")
if __name__ == "__main__":
unittest.main()