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

61 lines
2.1 KiB
Python

"""Доп. тесты calc engine (пустой рацион, compound)."""
from __future__ import annotations
import unittest
from app.lab.calc.engine import calculate_ration
class LabCalcEngineTests(unittest.TestCase):
def test_empty_lines_returns_errors_or_totals(self) -> None:
result = calculate_ration("BEEF", [], {})
self.assertIn("totals", result)
self.assertIn("indicators", result)
def test_dairy_ration_type(self) -> None:
result = calculate_ration(
"DAIRY",
[
{
"daily_kg": 50,
"in_ration": True,
"in_compound": True,
"dry_matter": 850,
"nutrients": {"Сыр. Протеин": 100},
}
],
{},
)
total = next(t["value"] for t in result["totals"] if t["key"] == "total_kg")
self.assertEqual(total, 50)
def test_bra_derived_from_protein_and_usp(self) -> None:
result = calculate_ration(
"DAIRY",
[
{
"daily_kg": 10,
"in_ration": True,
"in_compound": False,
"dry_matter": 850,
"nutrients": {"Сыр. Протеин": 100, "уСП": 80},
},
{
"daily_kg": 5,
"in_ration": True,
"in_compound": False,
"dry_matter": 880,
"nutrients": {"Сыр. Протеин": 200, "уСП": 160},
},
],
{},
heads_per_trip=1,
)
cp = next(i["content"] for i in result["indicators"] if i["key"] == "crude_protein")
usp = next(i["content"] for i in result["indicators"] if i["key"] == "usp")
rnb = next(i["content"] for i in result["indicators"] if i["key"] == "rnb")
self.assertAlmostEqual(cp, 10 * 100 + 5 * 200)
self.assertAlmostEqual(usp, 10 * 80 + 5 * 160)
self.assertAlmostEqual(rnb, (cp - usp) / 6.25)