COVERAGE: patch 91% → 96%+ — 603 tests, tasks.py at 100%

New/extended tests across billboard, dashboard, drama, epic, gameboard,
and lyric to cover previously untested branches: dev_login view, scroll
position endpoints, sky preview error paths, drama to_prose/to_activity
branches, consumer broadcast handlers, tarot deck draw/shuffle, astrology
model __str__, character model, sig reserve/ready/confirm views, natus
preview/save views, and the full tasks.py countdown scheduler.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Disco DeDisco
2026-04-17 23:23:28 -04:00
parent 7c03bded8d
commit 758c9c5377
10 changed files with 903 additions and 2 deletions

View File

@@ -85,3 +85,25 @@ class LoginViewTest(TestCase):
mock_auth.authenticate.call_args,
mock.call(uid="abc123")
)
class DevLoginViewTest(TestCase):
def test_happy_path_sets_session_cookie_and_redirects(self):
from django.test import override_settings
with override_settings(DEBUG=True):
response = self.client.get("/lyric/dev-login/testsessionkey/")
self.assertEqual(response.status_code, 302)
self.assertEqual(response["Location"], "/")
self.assertIn("sessionid", response.cookies)
def test_next_param_sets_redirect_target(self):
from django.test import override_settings
with override_settings(DEBUG=True):
response = self.client.get("/lyric/dev-login/key/?next=/gameboard/")
self.assertEqual(response["Location"], "/gameboard/")
def test_returns_404_when_debug_is_false(self):
from django.test import override_settings
with override_settings(DEBUG=False):
response = self.client.get("/lyric/dev-login/key/")
self.assertEqual(response.status_code, 404)

View File

@@ -1,7 +1,8 @@
from django.test import SimpleTestCase
from django.utils import timezone
from unittest.mock import Mock
from apps.lyric.templatetags.lyric_extras import display_name, truncate_email
from apps.lyric.templatetags.lyric_extras import display_name, relative_ts, truncate_email
class TruncateEmailTest(SimpleTestCase):
@@ -34,3 +35,30 @@ class DisplayNameFilterTest(SimpleTestCase):
def test_returns_username_when_set(self):
user = Mock(username="earthman", email="sesquipedalian@abc.de")
self.assertEqual(display_name(user), "earthman")
class RelativeTsFilterTest(SimpleTestCase):
def test_returns_empty_string_for_none(self):
self.assertEqual(relative_ts(None), "")
def test_returns_time_for_recent_dt(self):
dt = timezone.now() - timezone.timedelta(hours=1)
result = relative_ts(dt)
self.assertRegex(result, r'\d+:\d+')
def test_returns_weekday_for_2_day_old_dt(self):
dt = timezone.now() - timezone.timedelta(days=2)
result = relative_ts(dt)
self.assertIn(result, ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"])
def test_returns_month_day_for_30_day_old_dt(self):
dt = timezone.now() - timezone.timedelta(days=30)
result = relative_ts(dt)
import re
self.assertRegex(result, r'^\d{2} \w{3}$')
def test_returns_month_day_year_for_over_1_year_old_dt(self):
dt = timezone.now() - timezone.timedelta(days=400)
result = relative_ts(dt)
import re
self.assertRegex(result, r'^\d{2} \w{3} \d{4}$')