@@ -0,0 +1,81 @@
|
||||
"""Разовый 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)
|
||||
Reference in New Issue
Block a user