@@ -0,0 +1,52 @@
|
||||
"""Классификация кормов по группам для авторациона."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
|
||||
from app import create_app, db
|
||||
from app.lab.calc.feed_groups import classify_feed_group, validate_group_selections
|
||||
from app.models import Component
|
||||
from app.models.base import default_uuid
|
||||
from app.services.setup_state import mark_setup_complete
|
||||
from tests.helpers.zootech_test_helpers import ZootechTestConfig
|
||||
|
||||
|
||||
class LabFeedGroupsTests(unittest.TestCase):
|
||||
@classmethod
|
||||
def setUpClass(cls) -> None:
|
||||
cls.app = create_app(ZootechTestConfig)
|
||||
cls.ctx = cls.app.app_context()
|
||||
cls.ctx.push()
|
||||
db.create_all()
|
||||
mark_setup_complete(cls.app)
|
||||
|
||||
@classmethod
|
||||
def tearDownClass(cls) -> None:
|
||||
db.session.remove()
|
||||
db.drop_all()
|
||||
cls.ctx.pop()
|
||||
|
||||
def _comp(self, name: str, ctype: str) -> Component:
|
||||
c = Component(id=default_uuid(), name=name, type=ctype, dry_matter=80.0, price=10.0)
|
||||
db.session.add(c)
|
||||
db.session.commit()
|
||||
return c
|
||||
|
||||
def test_classify_by_canonical_type(self) -> None:
|
||||
self.assertEqual(classify_feed_group(self._comp("Сено", "Грубые корма")), "rough")
|
||||
self.assertEqual(classify_feed_group(self._comp("Силос", "Сочные корма")), "succulent")
|
||||
self.assertEqual(classify_feed_group(self._comp("Комбикорм", "Концентрированные")), "concentrate")
|
||||
self.assertEqual(classify_feed_group(self._comp("Премикс", "Добавки")), "other")
|
||||
|
||||
def test_classify_legacy_type_fallback(self) -> None:
|
||||
self.assertEqual(classify_feed_group(self._comp("Комбикорм", "зерновые")), "concentrate")
|
||||
self.assertEqual(classify_feed_group(self._comp("Сено", "объемные корма")), "rough")
|
||||
|
||||
def test_validate_requires_rough_and_three_total(self) -> None:
|
||||
errs = validate_group_selections({"rough": ["a"], "succulent": [], "concentrate": [], "other": []})
|
||||
self.assertIn("pool:need_3", errs)
|
||||
errs2 = validate_group_selections(
|
||||
{"rough": ["a"], "succulent": ["b"], "concentrate": ["c"], "other": []}
|
||||
)
|
||||
self.assertEqual(errs2, [])
|
||||
Reference in New Issue
Block a user