changeset 1224:d7c7a4777dd7 modernize tip

Add unit tests for contests template tags.
author Brian Neal <bgneal@gmail.com>
date Mon, 10 Mar 2025 20:28:14 -0500
parents 0807b202b776
children
files contests/tests/test_contest_tags.py
diffstat 1 files changed, 60 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contests/tests/test_contest_tags.py	Mon Mar 10 20:28:14 2025 -0500
@@ -0,0 +1,60 @@
+"""
+Tests for the contests application's template tags.
+
+"""
+from django.template import Context, Template
+from django.test import TestCase
+
+from datetime import datetime, timedelta
+
+from contests.models import Contest
+from contests.templatetags.contest_tags import latest_contests_block
+
+
+class ContestsTemplateTagsTestCase(TestCase):
+    def setUp(self):
+        now = datetime.now()
+        then = now - timedelta(days=3)
+        end = now + timedelta(days=30)
+        contests = [
+            Contest(title='Active Contest', is_public=True,
+                    creation_date=then, end_date=end, slug='active'),
+            Contest(title='Non-public Contest', is_public=False,
+                    creation_date=then, end_date=end, slug='secret'),
+            Contest(title='Past Contest', is_public=True,
+                    creation_date=then, win_date=now, end_date=end,
+                    slug='past'),
+        ]
+        for contest in contests:
+            contest.save()
+
+        self.template_string = ('{% load contest_tags %}'
+            '{% latest_contests_block %}')
+
+    def render_template(self, context_dict=None):
+        template = Template(self.template_string)
+        context = Context(context_dict)
+        return template.render(context)
+
+    def test_latest_contests_block(self):
+        rendered = self.render_template()
+
+        self.assertIn('Active Contest', rendered)
+        self.assertNotIn('Non-public Contest', rendered)
+        self.assertNotIn('Past Contest', rendered)
+
+    def test_latest_contests_block_v3(self):
+        rendered = self.render_template({'V3_DESIGN': True})
+
+        self.assertIn('Active Contest', rendered)
+        self.assertNotIn('Non-public Contest', rendered)
+        self.assertNotIn('Past Contest', rendered)
+
+    def test_latest_contests_block_with_no_contests(self):
+        Contest.objects.all().delete()
+        rendered = self.render_template({'V3_DESIGN': True})
+
+        self.assertNotIn('Active Contest', rendered)
+        self.assertNotIn('Non-public Contest', rendered)
+        self.assertNotIn('Past Contest', rendered)
+        self.assertIn('No contests at this time', rendered)