from datetime import datetime, timezone from django.test import SimpleTestCase from rest_framework.test import APIClient from .recommendations import build_bass_plan class RecommendationEngineTests(SimpleTestCase): def test_plan_is_explainable_and_actionable(self): plan = build_bass_plan(datetime(2026, 9, 5, 11, tzinfo=timezone.utc)) self.assertGreaterEqual(plan["bite_score"], 80) self.assertEqual(plan["primary_pattern"]["name"], "Wind-blown points") self.assertEqual(len(plan["evidence"]), 4) self.assertIn("spinnerbait", plan["tackle"]["lure"]) class DemoPlanApiTests(SimpleTestCase): def setUp(self): self.client = APIClient() def test_demo_plan_requires_no_account(self): response = self.client.post("/api/demo/plan/", {"starts_at": "2026-09-05T06:30:00-05:00"}, format="json") self.assertEqual(response.status_code, 200) self.assertEqual(response.data["trip"]["water_body"], "Lake Eufaula") self.assertIn("professor_finn", response.data["plan"]) def test_invalid_date_is_clear(self): self.assertEqual(self.client.post("/api/demo/plan/", {"starts_at": "Saturday morning"}, format="json").status_code, 400)