"""API /api/sklad — CRUD остатков (root sklad.py).""" from __future__ import annotations import unittest import uuid from app import create_app, db from app.models import Component from app.services.setup_state import mark_setup_complete from tests.helpers.zootech_test_helpers import ZootechTestConfig class SkladApiTests(unittest.TestCase): def setUp(self) -> None: self.app = create_app(ZootechTestConfig) self.client = self.app.test_client() self.ctx = self.app.app_context() self.ctx.push() db.create_all() mark_setup_complete(self.app) self.client.post( "/api/auth/login", json={"login": "zootech-test-admin", "password": "zootech-test-secret"}, ) self.comp_id = str(uuid.uuid4()) db.session.add( Component( id=self.comp_id, name="Зерно склад", type="grain", dry_matter=85.0, protein=0.0, energy=0.0, price=0.0, ) ) db.session.commit() def tearDown(self) -> None: db.session.remove() db.drop_all() self.ctx.pop() def test_sklad_add_set_move_delete_flow(self) -> None: add = self.client.post("/api/sklad/add", json={"component_id": self.comp_id}) self.assertEqual(add.status_code, 200) self.assertTrue(add.get_json()["success"]) listed = self.client.get("/api/sklad") self.assertEqual(listed.status_code, 200) items = listed.get_json()["items"] self.assertEqual(len(items), 1) set_total = self.client.post( f"/api/sklad/{self.comp_id}", json={"total_kg": 1000.0, "inflow_kg": 50.0}, ) self.assertEqual(set_total.status_code, 200) self.assertEqual(set_total.get_json()["item"]["total_kg"], 1000.0) move = self.client.put( f"/api/sklad/{self.comp_id}/move", json={"to_index": 0}, ) self.assertEqual(move.status_code, 200) chart = self.client.get(f"/api/sklad/{self.comp_id}/chart") self.assertEqual(chart.status_code, 200) self.assertIn("points", chart.get_json()) delete = self.client.delete(f"/api/sklad/{self.comp_id}") self.assertEqual(delete.status_code, 200) empty = self.client.get("/api/sklad") self.assertEqual(len(empty.get_json()["items"]), 0) if __name__ == "__main__": unittest.main()