feat: add recap page
This commit is contained in:
+60
-6
@@ -347,19 +347,73 @@ class TodayPageTests(TrackerTestCase):
|
||||
self.assertContains(response, "More playful than yesterday.")
|
||||
self.assertContains(response, "Vet on Friday.")
|
||||
|
||||
def test_the_graph_appears_once_there_are_two_readings(self):
|
||||
def test_the_page_links_to_the_recap(self):
|
||||
self.client.force_login(self.user)
|
||||
response = self.client.get(reverse("tracker:today"))
|
||||
self.assertContains(response, reverse("tracker:recap"))
|
||||
|
||||
|
||||
class RecapTests(TrackerTestCase):
|
||||
def test_the_page_requires_login(self):
|
||||
response = self.client.get(reverse("tracker:recap"))
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertIn("/admin/login/", response["Location"])
|
||||
|
||||
def test_a_fully_ticked_day_reads_as_complete(self):
|
||||
today = timezone.localdate()
|
||||
for dose in (self.morning, self.morning_only, self.evening):
|
||||
DoseLog.objects.create(scheduled_dose=dose, date=today, taken=True)
|
||||
|
||||
recap = self.client.get("/api/tracker/recap", **self.auth_header()).json()
|
||||
|
||||
self.assertEqual(recap[0]["date"], today.isoformat())
|
||||
self.assertTrue(recap[0]["complete"])
|
||||
self.assertEqual(recap[0]["taken"], 3)
|
||||
self.assertEqual(recap[0]["expected"], 3)
|
||||
|
||||
def test_a_missed_or_unrecorded_dose_leaves_the_day_incomplete(self):
|
||||
today = timezone.localdate()
|
||||
DoseLog.objects.create(scheduled_dose=self.morning, date=today, taken=True)
|
||||
DoseLog.objects.create(scheduled_dose=self.evening, date=today, taken=False)
|
||||
# morning_only is not recorded at all.
|
||||
|
||||
recap = self.client.get("/api/tracker/recap", **self.auth_header()).json()
|
||||
|
||||
self.assertFalse(recap[0]["complete"])
|
||||
self.assertEqual(recap[0]["taken"], 1)
|
||||
|
||||
def test_the_recap_carries_pulse_and_note(self):
|
||||
yesterday = timezone.localdate() - timedelta(days=1)
|
||||
PulseReading.objects.create(date=yesterday, bpm=180)
|
||||
DailyNote.objects.create(date=yesterday, body="Ate well.")
|
||||
|
||||
recap = self.client.get("/api/tracker/recap", **self.auth_header()).json()
|
||||
|
||||
self.assertEqual(recap[1]["bpm"], 180)
|
||||
self.assertEqual(recap[1]["note"], "Ate well.")
|
||||
self.assertIsNone(recap[0]["bpm"])
|
||||
|
||||
def test_the_page_shows_the_table_graph_and_notes(self):
|
||||
self.client.force_login(self.user)
|
||||
today = timezone.localdate()
|
||||
|
||||
response = self.client.get(reverse("tracker:today"))
|
||||
self.assertContains(response, "at least two days")
|
||||
|
||||
PulseReading.objects.create(date=today - timedelta(days=1), bpm=170)
|
||||
PulseReading.objects.create(date=today, bpm=190)
|
||||
DailyNote.objects.create(date=today, body="More playful than yesterday.")
|
||||
for dose in (self.morning, self.morning_only, self.evening):
|
||||
DoseLog.objects.create(scheduled_dose=dose, date=today, taken=True)
|
||||
|
||||
response = self.client.get(reverse("tracker:today"))
|
||||
response = self.client.get(reverse("tracker:recap"))
|
||||
|
||||
self.assertContains(response, "✅")
|
||||
self.assertContains(response, "0/3") # every earlier day is incomplete
|
||||
self.assertContains(response, "<polyline")
|
||||
self.assertContains(response, "180.0 bpm") # average
|
||||
self.assertContains(response, "More playful than yesterday.")
|
||||
|
||||
def test_the_graph_explains_itself_without_readings(self):
|
||||
self.client.force_login(self.user)
|
||||
response = self.client.get(reverse("tracker:recap"))
|
||||
self.assertContains(response, "at least two days")
|
||||
|
||||
|
||||
class PwaTests(TrackerTestCase):
|
||||
|
||||
Reference in New Issue
Block a user