"""Разовый 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)