Интегрирован 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,136 @@
import os
import tempfile
import unittest
from datetime import datetime
from app import create_app, db
from app.models import FeedDispenser, FeedingPeriod, PeriodRecipe, Recipe
from config import TestingConfig
class LegacyThirdBatchConfig(TestingConfig):
_TMP_DIR = tempfile.mkdtemp(prefix="wesp-legacy-batch3-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 = "legacy3-admin"
AUTH_PASSWORD = "legacy3-secret"
class LegacyCompatThirdBatchTests(unittest.TestCase):
def setUp(self) -> None:
self.app = create_app(LegacyThirdBatchConfig)
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": "legacy3-admin", "password": "legacy3-secret"}
)
self.assertEqual(login.status_code, 200)
def tearDown(self) -> None:
db.session.remove()
db.drop_all()
self.ctx.pop()
def test_feed_dispenser_crud_legacy_endpoints(self) -> None:
create_resp = self.client.post(
"/api/feed_dispensers",
json={"name": "Disp A", "farm": "Farm A", "operator": "Op A", "type": "dispenser"},
)
self.assertEqual(create_resp.status_code, 201)
dispenser_id = create_resp.get_json()["id"]
get_resp = self.client.get(f"/api/feed_dispensers/{dispenser_id}")
self.assertEqual(get_resp.status_code, 200)
self.assertEqual(get_resp.get_json()["name"], "Disp A")
update_resp = self.client.put(
f"/api/feed_dispensers/{dispenser_id}",
json={"name": "Disp A+", "operator": "Op A+"},
)
self.assertEqual(update_resp.status_code, 200)
get_after_update = self.client.get(f"/api/feed_dispensers/{dispenser_id}")
self.assertEqual(get_after_update.status_code, 200)
self.assertEqual(get_after_update.get_json()["name"], "Disp A+")
delete_resp = self.client.delete(f"/api/feed_dispensers/{dispenser_id}")
self.assertEqual(delete_resp.status_code, 200)
get_after_delete = self.client.get(f"/api/feed_dispensers/{dispenser_id}")
self.assertEqual(get_after_delete.status_code, 404)
def test_period_mutation_and_period_recipe_attach_detach(self) -> None:
dispenser = FeedDispenser(
id="d-legacy3", name="Disp B", farm="Farm B", operator="Op B", type="dispenser"
)
recipe = Recipe(
id="r-legacy3", name="Route B", heads_per_trip=20, mixing_time=9, trip_percent=100
)
db.session.add_all([dispenser, recipe])
db.session.commit()
create_period = self.client.post(
"/api/feed_dispensers/d-legacy3/periods", json={"name": "Morning"}
)
self.assertEqual(create_period.status_code, 201)
period_id = create_period.get_json()["id"]
update_period = self.client.put(
f"/api/feed_dispensers/d-legacy3/periods/{period_id}", json={"name": "Morning+"}
)
self.assertEqual(update_period.status_code, 200)
attach_recipe = self.client.post(
f"/api/feed_dispensers/d-legacy3/periods/{period_id}/recipes/r-legacy3"
)
self.assertEqual(attach_recipe.status_code, 200)
list_period_recipes = self.client.get(f"/api/periods/{period_id}/recipes")
self.assertEqual(list_period_recipes.status_code, 200)
self.assertEqual([r["id"] for r in list_period_recipes.get_json()], ["r-legacy3"])
detach_recipe = self.client.delete(
f"/api/feed_dispensers/d-legacy3/periods/{period_id}/recipes/r-legacy3"
)
self.assertEqual(detach_recipe.status_code, 200)
list_after_detach = self.client.get(f"/api/periods/{period_id}/recipes")
self.assertEqual(list_after_detach.status_code, 200)
self.assertEqual(list_after_detach.get_json(), [])
delete_period = self.client.delete(f"/api/feed_dispensers/d-legacy3/periods/{period_id}")
self.assertEqual(delete_period.status_code, 200)
def test_delete_recipe_link_keeps_period_alive(self) -> None:
dispenser = FeedDispenser(
id="d-legacy3-2", name="Disp C", farm="Farm C", operator="Op C", type="dispenser"
)
period = FeedingPeriod(id="p-legacy3-2", name="Evening", dispenser_id=dispenser.id)
recipe = Recipe(id="r-legacy3-2", name="Route C", heads_per_trip=10, mixing_time=5)
db.session.add_all([dispenser, period, recipe])
db.session.flush()
db.session.add(
PeriodRecipe(
period_id=period.id,
recipe_id=recipe.id,
order=1,
created_at=datetime.now(),
created_by="system",
updated_by="system",
)
)
db.session.commit()
resp = self.client.delete(
"/api/feed_dispensers/d-legacy3-2/periods/p-legacy3-2/recipes/r-legacy3-2"
)
self.assertEqual(resp.status_code, 200)
period_still_exists = FeedingPeriod.query.filter_by(id=period.id, is_deleted=False).first()
self.assertIsNotNone(period_still_exists)
if __name__ == "__main__":
unittest.main()