bgneal@540: """
bgneal@540: View tests for the contests application.
bgneal@540: 
bgneal@540: """
bgneal@540: import datetime
bgneal@679: import json
bgneal@679: 
bgneal@540: from django.test import TestCase
bgneal@540: from django.contrib.auth.models import User
bgneal@540: from django.core.urlresolvers import reverse
bgneal@540: 
bgneal@540: from contests.models import Contest
bgneal@540: 
bgneal@540: 
bgneal@540: class NoConstestsTestCase(TestCase):
bgneal@540: 
bgneal@540:     def test_no_contests(self):
bgneal@540:         response = self.client.get(reverse('contests-index'))
bgneal@540:         self.assertEqual(response.status_code, 200)
bgneal@540: 
bgneal@540:         url = reverse('contests-contest', kwargs={'slug': 'test'})
bgneal@540:         response = self.client.get(url)
bgneal@540:         self.assertEqual(response.status_code, 404)
bgneal@540: 
bgneal@540: 
bgneal@540: class ConstestsTestCase(TestCase):
bgneal@540: 
bgneal@540:     def setUp(self):
bgneal@540:         now = datetime.datetime.now()
bgneal@540:         start = now - datetime.timedelta(days=7)
bgneal@540:         end = start - datetime.timedelta(days=3)
bgneal@540: 
bgneal@540:         user = User.objects.create_user('test_user', '', 'password')
bgneal@540:         user.save()
bgneal@540: 
bgneal@540:         c = Contest(title='test',
bgneal@540:                 slug='test',
bgneal@540:                 description='test',
bgneal@540:                 is_public=True,
bgneal@540:                 creation_date=start,
bgneal@540:                 end_date=end,
bgneal@796:                 win_date=end + datetime.timedelta(days=1),
bgneal@796:                 num_winners=1)
bgneal@540:         c.save()
bgneal@796:         c.contestants.add(user)
bgneal@796:         c.winners.add(user)
bgneal@540:         self.contest_id = c.id
bgneal@540: 
bgneal@540:     def test_contests(self):
bgneal@540:         response = self.client.get(reverse('contests-index'))
bgneal@540:         self.assertEqual(response.status_code, 200)
bgneal@540: 
bgneal@540:         url = reverse('contests-contest', kwargs={'slug': 'test'})
bgneal@540:         response = self.client.get(url)
bgneal@540:         self.assertEqual(response.status_code, 200)
bgneal@540: 
bgneal@540: 
bgneal@540: class ContestEntryTestCase(TestCase):
bgneal@540: 
bgneal@540:     def setUp(self):
bgneal@540:         self.username = 'test_user'
bgneal@540:         self.pw = 'password'
bgneal@540:         self.user = User.objects.create_user(self.username, '', self.pw)
bgneal@540:         self.user.save()
bgneal@540:         self.assertTrue(self.client.login(username=self.username,
bgneal@540:             password=self.pw))
bgneal@540: 
bgneal@540:         now = datetime.datetime.now()
bgneal@540:         start = now - datetime.timedelta(days=7)
bgneal@540:         end = now + datetime.timedelta(days=3)
bgneal@540: 
bgneal@540:         c = Contest(title='test',
bgneal@540:                 slug='test',
bgneal@540:                 description='test',
bgneal@540:                 is_public=True,
bgneal@540:                 creation_date=start,
bgneal@796:                 end_date=end,
bgneal@796:                 num_winners=1)
bgneal@540:         c.save()
bgneal@540:         self.contest_id = c.id
bgneal@540: 
bgneal@540:     def test_entry_toggle(self):
bgneal@540:         response = self.client.post(reverse('contests-enter'),
bgneal@540:                 {'contest_id': self.contest_id},
bgneal@540:                 HTTP_X_REQUESTED_WITH='XMLHttpRequest')
bgneal@540:         self.assertEqual(response.status_code, 200)
bgneal@540: 
bgneal@679:         c = json.loads(response.content)
bgneal@679:         self.assertTrue(c['entered'])
bgneal@540: 
bgneal@540:         contest = Contest.objects.get(pk=self.contest_id)
bgneal@540:         self.assertTrue(self.user in contest.contestants.all())
bgneal@540: 
bgneal@540:         response = self.client.post(reverse('contests-enter'),
bgneal@540:                 {'contest_id': self.contest_id},
bgneal@540:                 HTTP_X_REQUESTED_WITH='XMLHttpRequest')
bgneal@540:         self.assertEqual(response.status_code, 200)
bgneal@540: 
bgneal@679:         c = json.loads(response.content)
bgneal@744:         self.assertFalse(c['entered'])
bgneal@540: 
bgneal@540:         contest = Contest.objects.get(pk=self.contest_id)
bgneal@744:         self.assertFalse(self.user in contest.contestants.all())
bgneal@540: 
bgneal@540: 
bgneal@540: class NoPublicConstestsTestCase(TestCase):
bgneal@540: 
bgneal@540:     def setUp(self):
bgneal@540:         now = datetime.datetime.now()
bgneal@540:         start = now - datetime.timedelta(days=7)
bgneal@540:         end = start - datetime.timedelta(days=3)
bgneal@540: 
bgneal@540:         c = Contest(title='test',
bgneal@540:                 slug='test',
bgneal@540:                 description='test',
bgneal@540:                 is_public=False,
bgneal@540:                 creation_date=start,
bgneal@540:                 end_date=end)
bgneal@540:         c.save()
bgneal@540: 
bgneal@540:     def test_contests(self):
bgneal@540:         response = self.client.get(reverse('contests-index'))
bgneal@540:         self.assertEqual(response.status_code, 200)
bgneal@540: 
bgneal@540:         url = reverse('contests-contest', kwargs={'slug': 'test'})
bgneal@540:         response = self.client.get(url)
bgneal@540:         self.assertEqual(response.status_code, 404)