70 lines
2.6 KiB
Python
70 lines
2.6 KiB
Python
"""Unit-тесты skip компонентов и групп выгрузки."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import unittest
|
|
|
|
from app import create_app, db
|
|
from app.services.daily_plan.builder import build_daily_plan
|
|
from app.services.daily_plan.skips import (
|
|
skip_ingredient,
|
|
skip_unloading_group,
|
|
unskip_ingredient,
|
|
unskip_unloading_group,
|
|
)
|
|
from app.services.setup_state import mark_setup_complete
|
|
from tests.helpers.dispenser_recipe_fixtures import (
|
|
E2E_DISP_ID,
|
|
E2E_DISP_RECIPE_1,
|
|
E2E_PERIOD_A,
|
|
seed_dispenser_period_recipes,
|
|
)
|
|
from tests.helpers.zootech_test_helpers import ZootechTestConfig
|
|
|
|
|
|
class DailyPlanPartSkipServiceTests(unittest.TestCase):
|
|
def setUp(self) -> None:
|
|
self.app = create_app(ZootechTestConfig)
|
|
self.ctx = self.app.app_context()
|
|
self.ctx.push()
|
|
db.create_all()
|
|
mark_setup_complete(self.app)
|
|
seed_dispenser_period_recipes()
|
|
|
|
def tearDown(self) -> None:
|
|
db.session.remove()
|
|
db.drop_all()
|
|
self.ctx.pop()
|
|
|
|
def test_skip_and_unskip_ingredient(self) -> None:
|
|
plan_date = "2026-06-10"
|
|
row = skip_ingredient(E2E_DISP_RECIPE_1, "e2e-disp-ing-1", plan_date)
|
|
self.assertEqual(row.ingredient_id, "e2e-disp-ing-1")
|
|
self.assertTrue(unskip_ingredient(E2E_DISP_RECIPE_1, "e2e-disp-ing-1", plan_date))
|
|
|
|
def test_skip_and_unskip_unloading_group(self) -> None:
|
|
plan_date = "2026-06-11"
|
|
row = skip_unloading_group(E2E_DISP_RECIPE_1, "e2e-disp-grp-1", plan_date)
|
|
self.assertEqual(row.unloading_group_id, "e2e-disp-grp-1")
|
|
self.assertTrue(
|
|
unskip_unloading_group(E2E_DISP_RECIPE_1, "e2e-disp-grp-1", plan_date)
|
|
)
|
|
|
|
def test_builder_excludes_skipped_parts(self) -> None:
|
|
plan_date = "2026-06-12"
|
|
skip_ingredient(E2E_DISP_RECIPE_1, "e2e-disp-ing-1", plan_date)
|
|
skip_unloading_group(E2E_DISP_RECIPE_1, "e2e-disp-grp-1", plan_date)
|
|
plan = build_daily_plan(dispenser_id=E2E_DISP_ID, plan_date=plan_date)
|
|
morning = next(p for p in plan["periods"] if p["id"] == E2E_PERIOD_A)
|
|
trip = next(t for t in morning["trips"] if t["recipeId"] == E2E_DISP_RECIPE_1)
|
|
self.assertEqual(trip["ingredients"][0]["skippedToday"], True)
|
|
self.assertEqual(trip["unloadingGroups"][0]["skippedToday"], True)
|
|
self.assertEqual(len(plan["skippedIngredients"]), 1)
|
|
self.assertEqual(len(plan["skippedUnloadingGroups"]), 1)
|
|
totals = {row["name"]: row["totalKg"] for row in plan["ingredientTotals"]}
|
|
self.assertNotIn("Ing 1", totals)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|