django-tos/tos/tests/test_views.py

95 lines
3.5 KiB
Python

from django.conf import settings
from django.core.urlresolvers import reverse
from django.test import TestCase
# Django 1.4 compatability
try:
from django.contrib.auth import get_user_model
except ImportError:
from django.contrib.auth.models import User
get_user_model = lambda: User
from tos.models import TermsOfService, UserAgreement, has_user_agreed_latest_tos, USER_MODEL as USER
class TestViews(TestCase):
def setUp(self):
self.user1 = USER.objects.create_user('user1', 'user1@example.com', 'user1pass')
self.user2 = USER.objects.create_user('user2', 'user2@example.com', 'user2pass')
self.tos1 = TermsOfService.objects.create(
content="first edition of the terms of service",
active=True
)
self.tos2 = TermsOfService.objects.create(
content="second edition of the terms of service",
active=False
)
self.login_url = getattr(settings, 'LOGIN_URL', '/login/')
UserAgreement.objects.create(
terms_of_service=self.tos1,
user=self.user1
)
def test_login(self):
""" Make sure we didn't break the authentication system
This assumes that login urls are named 'login'
"""
self.assertTrue(has_user_agreed_latest_tos(self.user1))
login = self.client.login(username='user1', password='user1pass')
self.failUnless(login, 'Could not log in')
self.assertTrue(has_user_agreed_latest_tos(self.user1))
def test_need_agreement(self):
""" user2 tries to login and then has to go and agree to terms"""
self.assertFalse(has_user_agreed_latest_tos(self.user2))
response = self.client.post(self.login_url, dict(username='user2', password='user2pass'))
self.assertContains(response, "first edition of the terms of service")
self.assertFalse(has_user_agreed_latest_tos(self.user2))
def test_reject_agreement(self):
self.assertFalse(has_user_agreed_latest_tos(self.user2))
response = self.client.post(self.login_url, dict(username='user2', password='user2pass'))
self.assertContains(response, "first edition of the terms of service")
url = reverse('tos_check_tos')
response = self.client.post(url, {'accept': 'reject'})
self.assertFalse(has_user_agreed_latest_tos(self.user2))
def test_accept_agreement(self):
self.assertFalse(has_user_agreed_latest_tos(self.user2))
response = self.client.post(self.login_url, dict(username='user2', password='user2pass'))
self.assertContains(response, "first edition of the terms of service")
self.assertFalse(has_user_agreed_latest_tos(self.user2))
url = reverse('tos_check_tos')
response = self.client.post(url, {'accept': 'accept'})
self.assertTrue(has_user_agreed_latest_tos(self.user2))
def test_bump_new_agreement(self):
# Change the tos
self.tos2.active = True
self.tos2.save()
# is user1 agreed now?
self.assertFalse(has_user_agreed_latest_tos(self.user1))
# user1 agrees again
response = self.client.post(self.login_url, dict(username='user1', password='user1pass'))
self.assertContains(response, "second edition of the terms of service")
self.assertFalse(has_user_agreed_latest_tos(self.user2))
url = reverse('tos_check_tos')
response = self.client.post(url, {'accept': 'accept'})
self.assertTrue(has_user_agreed_latest_tos(self.user1))