diff gpp/contests/tests/model_tests.py @ 540:51fa1e0ca218

For #243, create a contests application.
author Brian Neal <bgneal@gmail.com>
date Mon, 09 Jan 2012 01:13:08 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gpp/contests/tests/model_tests.py	Mon Jan 09 01:13:08 2012 +0000
@@ -0,0 +1,166 @@
+"""
+Model tests for the contests application.
+
+"""
+import datetime
+
+from django.test import TestCase
+from django.contrib.auth.models import User
+
+from contests.models import Contest
+
+
+class ContestTestCase(TestCase):
+
+    def test_creation_date(self):
+
+        c = Contest(title='test',
+                slug='test',
+                description='test',
+                is_public=False,
+                end_date=datetime.datetime.now() + datetime.timedelta(days=30))
+
+        c.save()
+
+        self.assertTrue(c.creation_date)
+        self.assertTrue(datetime.datetime.now() - c.creation_date <
+                datetime.timedelta(seconds=1))
+
+    def test_is_active(self):
+
+        now = datetime.datetime.now()
+        start = now + datetime.timedelta(days=7)
+        end = start + datetime.timedelta(days=30)
+
+        c = Contest(title='test',
+                slug='test',
+                description='test',
+                is_public=False,
+                creation_date=start,
+                end_date=end)
+
+        self.failIf(c.is_active())
+
+        start = now - datetime.timedelta(days=7)
+        end = start + datetime.timedelta(days=30)
+
+        c = Contest(title='test',
+                slug='test',
+                description='test',
+                is_public=True,
+                creation_date=start,
+                end_date=end)
+
+        self.assertTrue(c.is_active())
+
+        start = now - datetime.timedelta(days=7)
+        end = start - datetime.timedelta(days=3)
+
+        c = Contest(title='test',
+                slug='test',
+                description='test',
+                is_public=True,
+                creation_date=start,
+                end_date=end)
+
+        self.failIf(c.is_active())
+
+    def test_can_enter(self):
+
+        now = datetime.datetime.now()
+        start = now + datetime.timedelta(days=7)
+        end = start + datetime.timedelta(days=30)
+
+        c = Contest(title='test',
+                slug='test',
+                description='test',
+                is_public=False,
+                creation_date=start,
+                end_date=end)
+
+        self.failIf(c.can_enter())
+
+        start = now - datetime.timedelta(days=7)
+        end = start + datetime.timedelta(days=30)
+
+        c = Contest(title='test',
+                slug='test',
+                description='test',
+                is_public=True,
+                creation_date=start,
+                end_date=end)
+
+        self.assertTrue(c.can_enter())
+
+        start = now - datetime.timedelta(days=7)
+        end = start - datetime.timedelta(days=3)
+
+        c = Contest(title='test',
+                slug='test',
+                description='test',
+                is_public=True,
+                creation_date=start,
+                end_date=end)
+
+        self.failIf(c.can_enter())
+
+        start = now - datetime.timedelta(days=7)
+        end = start + datetime.timedelta(days=30)
+
+        user = User.objects.create_user('test_user', '', 'password')
+        user.save()
+
+        c = Contest(title='test',
+                slug='test',
+                description='test',
+                is_public=True,
+                creation_date=start,
+                end_date=end,
+                winner=user,
+                win_date=now)
+
+        self.failIf(c.can_enter())
+
+        start = now - datetime.timedelta(days=7)
+        end = start - datetime.timedelta(days=3)
+
+        c = Contest(title='test',
+                slug='test',
+                description='test',
+                is_public=True,
+                creation_date=start,
+                end_date=end,
+                winner=user,
+                win_date=end + datetime.timedelta(days=1))
+
+        self.failIf(c.can_enter())
+
+    def test_pick_winner(self):
+
+        now = datetime.datetime.now()
+        start = now - datetime.timedelta(days=7)
+        end = start - datetime.timedelta(days=3)
+
+        c = Contest(title='test',
+                slug='test',
+                description='test',
+                is_public=False,
+                creation_date=start,
+                end_date=end)
+        c.save()
+
+        user1 = User.objects.create_user('test_user1', '', 'password')
+        user1.save()
+        user2 = User.objects.create_user('test_user2', '', 'password')
+        user2.save()
+        user3 = User.objects.create_user('test_user3', '', 'password')
+        user3.save()
+
+        c.contestants.add(user1, user2, user3)
+
+        c.pick_winner()
+
+        self.assertTrue(datetime.datetime.now() - c.win_date <
+                datetime.timedelta(seconds=1))
+        self.assertTrue(c.winner.id in [user1.id, user2.id, user3.id])
+