"""API /api/reports — фильтр по датам.""" from __future__ import annotations import unittest from datetime import datetime, timedelta from app import create_app, db from app.models import LoadingReport from app.services.setup_state import mark_setup_complete from tests.helpers.zootech_test_helpers import ZootechTestConfig class ReportsApiTests(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"}, ) today = datetime.now() yesterday = today - timedelta(days=1) old = today - timedelta(days=10) for rid, start, name in ( ("rep-today", today, "Today"), ("rep-yesterday", yesterday, "Yesterday"), ("rep-old", old, "Old"), ): db.session.add( LoadingReport( id=rid, recipe_id="r-reports", recipe_name=name, start_time=start, dispenser_type="dispenser", ) ) db.session.commit() def tearDown(self) -> None: db.session.remove() db.drop_all() self.ctx.pop() def test_reports_date_filter_excludes_out_of_range(self) -> None: today_s = datetime.now().strftime("%Y-%m-%d") resp = self.client.get(f"/api/reports?date_from={today_s}&date_to={today_s}") self.assertEqual(resp.status_code, 200) payload = resp.get_json() self.assertIsInstance(payload, list) ids = {row["id"] for row in payload} self.assertIn("rep-today", ids) self.assertNotIn("rep-old", ids) if __name__ == "__main__": unittest.main()