diff --git a/driving_log/templates/dashboard.html b/driving_log/templates/dashboard.html
index d36e917..9b992e9 100644
--- a/driving_log/templates/dashboard.html
+++ b/driving_log/templates/dashboard.html
@@ -43,6 +43,7 @@
Student progress
{{ format_minutes(totals.total_minutes) }} / 60h
Total driving
+
Remaining: {{ format_minutes([0, 3600 - totals.total_minutes] | max) }}
@@ -50,13 +51,13 @@ Student progress
{{ format_minutes(totals.night_minutes) }} / 10h
Night driving
+
Remaining: {{ format_minutes([0, 600 - totals.night_minutes] | max) }}
- Remaining{{ format_minutes([0, 3600 - totals.total_minutes] | max) }}
Recorded drives{{ totals.drive_count }}
{% if overages %}
diff --git a/tests/test_web.py b/tests/test_web.py
index 5e92869..e961d14 100644
--- a/tests/test_web.py
+++ b/tests/test_web.py
@@ -1178,6 +1178,22 @@ async def add_drive(day: int, duration_minutes: int) -> None:
)
self.assertEqual(response.status_code, 303)
+ async def add_night_drive(day: int) -> None:
+ start = datetime(2026, 7, day, 22, tzinfo=ZoneInfo(DEFAULT_TIMEZONE))
+ response = await client.post(
+ "/drives",
+ data={
+ "request_id": str(uuid.uuid4()),
+ "driver_name": "Daniel Ahern",
+ "started_at_local": start.strftime("%Y-%m-%dT%H:%M"),
+ "ended_at_local": (start + timedelta(hours=8)).strftime(
+ "%Y-%m-%dT%H:%M"
+ ),
+ "road_type": "local",
+ },
+ )
+ self.assertEqual(response.status_code, 303)
+
await add_drive(1, 18)
dashboard = await client.get("/")
self.assertIn(
@@ -1210,11 +1226,24 @@ async def add_drive(day: int, duration_minutes: int) -> None:
self.assertIn(">100%", dashboard.text)
await add_drive(16, 288)
+ await add_night_drive(20)
+ await add_night_drive(22)
+ await add_night_drive(24)
dashboard = await client.get("/")
self.assertIn(
- 'aria-label="108 percent of required driving completed"', dashboard.text
+ 'aria-label="148 percent of required driving completed"', dashboard.text
+ )
+ self.assertIn(">148%", dashboard.text)
+ self.assertIn(
+ "Total driving\n Remaining: 0h 00m",
+ dashboard.text,
+ )
+ self.assertIn(
+ "Night driving\n Remaining: 0h 00m",
+ dashboard.text,
)
- self.assertIn(">108%", dashboard.text)
+ self.assertNotIn("Total remaining", dashboard.text)
+ self.assertNotIn("Nighttime remaining", dashboard.text)
self.run_async(scenario)