64 lines
2.0 KiB
Python
64 lines
2.0 KiB
Python
"""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()
|