Files
site/WESP_REL/tests/test_lab_demo_nutrients_seed.py
2026-07-17 12:57:18 +03:00

82 lines
3.0 KiB
Python

"""Разовый seed nutrients для демо-компонентов."""
from __future__ import annotations
import unittest
from app import create_app, db
from app.lab.commands.seed_demo_component_nutrients import (
_marker_path,
seed_demo_component_nutrients_once,
)
from app.lab.models import LabComponentNutrientValue
from app.lab.services.component_nutrients import nutrients_api_dict
from app.models.component import Component
from app.services.setup_state import mark_setup_complete
from tests.helpers.zootech_test_helpers import ZootechTestConfig
class LabDemoNutrientsSeedTests(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)
marker = _marker_path()
if marker.is_file():
marker.unlink()
def tearDown(self) -> None:
marker = _marker_path()
if marker.is_file():
marker.unlink()
db.session.remove()
db.drop_all()
self.ctx.pop()
def _add(self, name: str, type_: str, dry_matter: float = 0.0) -> Component:
comp = Component(
name=name,
type=type_,
dry_matter=dry_matter,
price=10.0,
)
db.session.add(comp)
db.session.commit()
return comp
def test_seed_runs_once_and_fills_all_empty(self) -> None:
self._add("комбикорм", "Зерновые")
self._add("жом свекловичный гранулы", "Энергетические", dry_matter=900.0)
self._add("Другой корм", "Зерновые")
first = seed_demo_component_nutrients_once()
self.assertTrue(first["seeded"])
self.assertEqual(first["updated"], 3)
self.assertTrue(_marker_path().is_file())
comb = Component.query.filter_by(name="комбикорм").first()
nutrients = nutrients_api_dict(comb.id)
self.assertEqual(nutrients.get("Сыр. Протеин"), 170)
self.assertEqual(comb.dry_matter, 88.0)
pulp = Component.query.filter_by(name="жом свекловичный гранулы").first()
self.assertEqual(pulp.dry_matter, 90.0)
other = Component.query.filter_by(name="Другой корм").first()
other_n = nutrients_api_dict(other.id)
self.assertIn("Сыр. Протеин", other_n)
self.assertGreaterEqual(LabComponentNutrientValue.query.count(), 3)
second = seed_demo_component_nutrients_once()
self.assertFalse(second["seeded"])
self.assertEqual(second["reason"], "nothing_to_update")
self._add("комбикорм 1", "Зерновые")
third = seed_demo_component_nutrients_once()
self.assertTrue(third["seeded"])
self.assertEqual(third["updated"], 1)
comb1 = Component.query.filter_by(name="комбикорм 1").first()
self.assertEqual(nutrients_api_dict(comb1.id).get("Сыр. Протеин"), 170)