diff options
author | Aurélien Bompard <aurelien@bompard.org> | 2013-02-13 18:13:46 +0100 |
---|---|---|
committer | Aurélien Bompard <aurelien@bompard.org> | 2013-02-13 18:30:04 +0100 |
commit | 02d09d5304823de3439bc0eb701cddbdb66c0d42 (patch) | |
tree | 4ee675714d4d2babbef65e4621f278f7a725f3dc /hyperkitty/tests | |
parent | 0e96a34e0d54b06c79750afafc503a3444bcddfd (diff) | |
download | hyperkitty-02d09d5304823de3439bc0eb701cddbdb66c0d42.tar.gz hyperkitty-02d09d5304823de3439bc0eb701cddbdb66c0d42.tar.xz hyperkitty-02d09d5304823de3439bc0eb701cddbdb66c0d42.zip |
Allow cancelling a vote
Diffstat (limited to 'hyperkitty/tests')
-rw-r--r-- | hyperkitty/tests/test_views.py | 98 |
1 files changed, 81 insertions, 17 deletions
diff --git a/hyperkitty/tests/test_views.py b/hyperkitty/tests/test_views.py index b4d897f..e29d90b 100644 --- a/hyperkitty/tests/test_views.py +++ b/hyperkitty/tests/test_views.py @@ -25,14 +25,18 @@ import urllib from mock import Mock, patch +import django.utils.simplejson as json from django.test import TestCase from django.test.client import Client, RequestFactory -from django.contrib.auth.models import User +from django.test.utils import override_settings +from django.contrib.auth.models import User, AnonymousUser from django.core.urlresolvers import reverse -#from hyperkitty.views.list import archives +from hyperkitty.models import Rating + +@override_settings(USE_SSL=False, USE_INTERNAL_AUTH=True) class AccountViewsTestCase(TestCase): def setUp(self): @@ -44,7 +48,7 @@ class AccountViewsTestCase(TestCase): self.assertRedirects(response, "%s?next=%s" % (reverse('user_login'), reverse('user_profile'))) def test_profile(self): - User.objects.create_user('testuser', 'syst3m.w0rm+test@gmail.com', 'testPass') + User.objects.create_user('testuser', 'test@example.com', 'testPass') user = self.client.login(username='testuser', password='testPass') response = self.client.get(reverse('user_profile')) @@ -58,13 +62,13 @@ class AccountViewsTestCase(TestCase): def test_registration(self): - - User.objects.create_user('testuser', 'syst3m.w0rm+test@gmail.com', 'testPass') + User.objects.create_user('testuser', 'test@example.com', 'testPass') user = self.client.login(username='testuser', password='testPass') - # If the user if already logged in, redirect to index page..don't let him register again + # If the user if already logged in, redirect to index page... + # Don't let him register again response = self.client.get(reverse('user_registration')) - self.assertRedirects(response, reverse('index')) + self.assertRedirects(response, reverse('root')) self.client.logout() # Access the user registration page after logging out and try to register now @@ -74,23 +78,83 @@ class AccountViewsTestCase(TestCase): # @TODO: Try to register a user and verify its working -class MessageViewsTestCase(TestCase): - def setUp(self): - self.client = Client() +from hyperkitty.views.message import vote - def test_good_vote(self): - User.objects.create_user('testuser', 'syst3m.w0rm+test@gmail.com', 'testPass') - user = self.client.login(username='testuser', password='testPass') +class MessageViewsTestCase(TestCase): - resp = self.client.post(reverse('message_vote', kwargs={'mlist_fqdn': 'list@list.com'}), {'vote': 1, 'message_id_hash': 123, }) + def setUp(self): + self.user = User.objects.create_user( + 'testuser', 'test@example.com', 'testPass') + # Fake KittStore + class FakeMessage(object): + def __init__(self, h): + self.message_id_hash = h + self.store = Mock() + self.store.get_message_by_hash_from_list.side_effect = \ + lambda l, h: FakeMessage(h) + defaults = {"kittystore.store": self.store} + self.factory = RequestFactory(**defaults) + + + def test_vote_up(self): + request = self.factory.post("/vote", {"vote": "1"}) + request.user = self.user + resp = vote(request, 'list@example.com', '123') self.assertEqual(resp.status_code, 200) - - def test_unauth_vote(self): - resp = self.client.post(reverse('message_vote', kwargs={'mlist_fqdn': 'list@list.com'}), {'vote': 1, 'message_id_hash': 123, }) + v = Rating.objects.get(user=self.user, messageid="123", + list_address='list@example.com') + self.assertEqual(v.vote, 1) + result = json.loads(resp.content) + self.assertEqual(result["like"], 1) + self.assertEqual(result["dislike"], 0) + + + def test_vote_down(self): + request = self.factory.post("/vote", {"vote": "-1"}) + request.user = self.user + resp = vote(request, 'list@example.com', '123') + self.assertEqual(resp.status_code, 200) + v = Rating.objects.get(user=self.user, messageid="123", + list_address='list@example.com') + self.assertEqual(v.vote, -1) + result = json.loads(resp.content) + self.assertEqual(result["like"], 0) + self.assertEqual(result["dislike"], 1) + + + def test_vote_cancel(self): + v = Rating(list_address="list@example.com", messageid="m1", vote=1) + v.user = self.user + v.save() + v = Rating(list_address="list@example.com", messageid="m2", vote=-1) + v.user = self.user + v.save() + for msg in ["m1", "m2"]: + request = self.factory.post("/vote", {"vote": "0"}) + request.user = self.user + resp = vote(request, 'list@example.com', msg) + self.assertEqual(resp.status_code, 200) + try: + Rating.objects.get(user=self.user, messageid=msg, + list_address='list@example.com') + except Rating.DoesNotExist: + pass + else: + self.fail("Vote for msg %s should have been deleted" % msg) + result = json.loads(resp.content) + self.assertEqual(result["like"], 0) + self.assertEqual(result["dislike"], 0) + + + def test_unauth_vote(self): + request = self.factory.post("/vote", {"vote": "1"}) + request.user = AnonymousUser() + resp = vote(request, 'list@example.com', '123') self.assertEqual(resp.status_code, 403) + from hyperkitty.views.list import archives class ListArchivesTestCase(TestCase): |