ponytracker/accounts/tests.py
2014-09-06 11:42:26 -07:00

397 lines
19 KiB
Python

from django.test import TestCase
from django.core.urlresolvers import reverse
from django import VERSION
import json
from accounts.models import *
class TestViews(TestCase):
fixtures = ['test_accounts_views']
def setUp(self):
self.client.login(username='admin', password='admin')
# Profile
def test_profile(self):
response = self.client.get(reverse('profile'))
self.assertEqual(response.status_code, 200)
response = self.client.post(reverse('profile'), {
'update-profile': '',
'first_name': 'newfirstname',
'notifications': User.NOTIFICATIONS_OTHERS,
}, follow=True)
self.assertRedirects(response, reverse('profile'))
self.assertContains(response, 'Profile updated successfully')
user = User.objects.get(username='admin')
self.assertEqual(user.first_name, 'newfirstname')
with self.settings(EXTERNAL_AUTH=True):
response = self.client.get(reverse('profile'))
self.assertEqual(response.status_code, 200)
self.assertNotContains(response, 'update-password')
response = self.client.post(reverse('profile'), {
'update-password': '',
'old_password': 'admin',
'new_password1': 'newpassword',
'new_password2': 'newpassword',
}, follow=True)
self.assertEqual(response.status_code, 200)
self.assertNotContains(response, 'successfully')
user = User.objects.get(username='admin')
self.assertFalse(user.check_password('newpassword'))
response = self.client.post(reverse('profile'), {
'update-password': '',
'old_password': 'admin',
'new_password1': 'newpassword',
'new_password2': 'newpassword',
}, follow=True)
if VERSION >= (1, 7):
# since django 1.7, session are invalid after a password change
self.assertRedirects(response, reverse('login')+'?next='+reverse('profile'))
else:
self.assertRedirects(response, reverse('profile'))
self.assertContains(response, 'Password updated successfully')
user = User.objects.get(username='admin')
self.assertTrue(user.check_password('newpassword'))
# Users
def test_user_list(self):
response = self.client.get(reverse('list-user'))
self.assertEqual(response.status_code, 200)
self.assertContains(response, "user1")
self.assertContains(response, "Firstname1 Lastname1")
def test_user_details(self):
user = User.objects.get(username="user1")
response = self.client.get(reverse('show-user', args=[user.id]))
self.assertEqual(response.status_code, 200)
self.assertContains(response, "user1")
self.assertContains(response, "group1")
self.assertContains(response, "team1")
def test_user_add(self):
user_count = User.objects.count()
response = self.client.post(reverse('add-user'), {
'username': 'newuser',
'notifications': User.NOTIFICATIONS_OTHERS,
})
self.assertEqual(User.objects.count(), user_count + 1)
user = User.objects.get(username='newuser')
self.assertRedirects(response, reverse('show-user', args=[user.id]))
def test_user_edit(self):
user = User.objects.get(username='user1')
response = self.client.get(reverse('edit-user', args=[user.id]))
self.assertEqual(response.status_code, 200)
self.assertContains(response, 'Username')
with self.settings(EXTERNAL_AUTH=True):
response = self.client.get(reverse('edit-user', args=[user.id]))
self.assertEqual(response.status_code, 200)
self.assertNotContains(response, 'Username')
response = self.client.post(reverse('edit-user', args=[user.id]), {
'username': user.username,
'first_name': 'newfirstname',
'notifications': User.NOTIFICATIONS_OTHERS,
})
self.assertRedirects(response, reverse('show-user', args=[user.id]))
user = User.objects.get(pk=user.pk)
self.assertEqual(user.first_name, 'newfirstname')
def test_user_disable_activate(self):
user = User.objects.get(username='user1')
response = self.client.get(reverse('activate-user', args=[user.id]), follow=True)
self.assertRedirects(response, reverse('show-user', args=[user.id]))
self.assertContains(response, 'already activated')
response = self.client.get(reverse('disable-user', args=[user.id]), follow=True)
self.assertRedirects(response, reverse('show-user', args=[user.id]))
self.assertContains(response, 'disabled successfully')
user = User.objects.get(pk=user.pk)
self.assertFalse(user.is_active)
response = self.client.get(reverse('disable-user', args=[user.id]), follow=True)
self.assertRedirects(response, reverse('show-user', args=[user.id]))
self.assertContains(response, 'already disabled')
response = self.client.get(reverse('activate-user', args=[user.id]), follow=True)
self.assertRedirects(response, reverse('show-user', args=[user.id]))
self.assertContains(response, 'activated successfully')
user = User.objects.get(pk=user.pk)
self.assertTrue(user.is_active)
def test_user_edit_password(self):
user = User.objects.get(username='user1')
self.assertTrue(user.check_password("user1"))
response = self.client.get(reverse('edit-user-password', args=[user.id]))
self.assertEqual(response.status_code, 200)
with self.settings(EXTERNAL_AUTH=True):
response = self.client.get(reverse('edit-user-password', args=[user.id]))
self.assertEqual(response.status_code, 404)
response = self.client.post(reverse('edit-user-password', args=[user.id]), {
'password1': 'newpassword',
'password2': 'newpassword',
})
self.assertRedirects(response, reverse('show-user', args=[user.id]))
user = User.objects.get(username='user1')
self.assertTrue(user.check_password('newpassword'))
def test_user_delete(self):
user_count = User.objects.count()
user = User.objects.get(username='user1')
response = self.client.get(reverse('delete-user', args=[user.id]))
self.assertEqual(response.status_code, 405) # method not allowed
self.assertEqual(User.objects.count(), user_count)
user = User.objects.get(username='user1')
response = self.client.post(reverse('delete-user', args=[user.id]))
self.assertRedirects(response, reverse('list-user'))
self.assertEqual(User.objects.count(), user_count - 1)
def test_user_add_group(self):
user = User.objects.get(username='user1')
group = Group.objects.create(name='newgroup')
with self.settings(GROUP_MANAGMENT=False):
response = self.client.get(reverse('add-group-to-user', args=[user.id]) + '?query=new')
self.assertEqual(response.status_code, 404)
response = self.client.get(reverse('add-group-to-user', args=[user.id]))
self.assertEqual(response.status_code, 404)
response = self.client.get(reverse('add-group-to-user', args=[user.id]) + '?query=new')
self.assertEqual(response.status_code, 200)
available = json.loads(response.content.decode('utf-8'))
name = available['suggestions'][0]['data']
response = self.client.post(reverse('add-group-to-user', args=[user.id]), {
'group': name,
})
self.assertRedirects(response, reverse('show-user', args=[user.id]))
user = User.objects.get(pk=user.pk)
self.assertTrue(user.groups.filter(pk=group.pk).exists())
def test_user_remove_group(self):
user = User.objects.get(username='user1')
group = user.groups.first()
with self.settings(GROUP_MANAGMENT=False):
response = self.client.get(reverse('remove-group-from-user', args=[user.id, group.id]))
self.assertEqual(response.status_code, 404)
user = User.objects.get(pk=user.pk)
self.assertTrue(user.groups.filter(pk=group.pk).exists())
response = self.client.get(reverse('remove-group-from-user', args=[user.id, group.id]))
self.assertEqual(response.status_code, 200)
user = User.objects.get(pk=user.pk)
self.assertFalse(user.groups.filter(pk=group.pk).exists())
def test_user_add_team(self):
user = User.objects.get(username='user1')
team = Team.objects.create(name='newteam')
response = self.client.get(reverse('add-team-to-user', args=[user.id]))
self.assertEqual(response.status_code, 404)
response = self.client.get(reverse('add-team-to-user', args=[user.id]) + '?query=new')
self.assertEqual(response.status_code, 200)
available = json.loads(response.content.decode('utf-8'))
name = available['suggestions'][0]['data']
response = self.client.post(reverse('add-team-to-user', args=[user.id]), {
'team': name,
})
self.assertRedirects(response, reverse('show-user', args=[user.id]))
team = Team.objects.get(pk=team.pk)
self.assertTrue(team.users.filter(pk=user.pk).exists())
def test_user_remove_team(self):
user = User.objects.get(username='user1')
team = user.teams.first()
response = self.client.get(reverse('remove-team-from-user', args=[user.id, team.id]))
self.assertEqual(response.status_code, 200)
team = Team.objects.get(pk=team.pk)
self.assertFalse(team.users.filter(pk=user.pk).exists())
# Group
def test_group_list(self):
response = self.client.get(reverse('list-group'))
self.assertEqual(response.status_code, 200)
self.assertContains(response, "group1")
def test_group_details(self):
group = Group.objects.get(name="group1")
response = self.client.get(reverse('show-group', args=[group.id]))
self.assertEqual(response.status_code, 200)
self.assertContains(response, "user1")
def test_group_add(self):
group_count = Group.objects.count()
response = self.client.post(reverse('add-group'), {
'name': 'newgroup',
})
self.assertEqual(Group.objects.count(), group_count + 1)
group = Group.objects.get(name='newgroup')
self.assertRedirects(response, reverse('show-group', args=[group.id]))
def test_group_edit(self):
group = Group.objects.get(name='group1')
response = self.client.get(reverse('edit-group', args=[group.id]))
self.assertEqual(response.status_code, 200)
with self.settings(GROUP_MANAGMENT=False):
response = self.client.post(reverse('edit-group', args=[group.id]), {
'name': 'newname',
})
self.assertEqual(response.status_code, 404)
response = self.client.post(reverse('edit-group', args=[group.id]), {
'name': 'newname',
})
self.assertRedirects(response, reverse('show-group', args=[group.id]))
group = Group.objects.get(pk=group.pk)
self.assertEqual(group.name, 'newname')
def test_group_delete(self):
group_count = Group.objects.count()
group = Group.objects.get(name='group1')
response = self.client.get(reverse('delete-group', args=[group.id]))
self.assertEqual(response.status_code, 405) # method not allowed
self.assertEqual(Group.objects.count(), group_count)
with self.settings(GROUP_MANAGMENT=False):
response = self.client.post(reverse('delete-group', args=[group.id]))
self.assertEqual(response.status_code, 404)
self.assertEqual(Group.objects.count(), group_count)
response = self.client.post(reverse('delete-group', args=[group.id]))
self.assertRedirects(response, reverse('list-group'))
self.assertEqual(Group.objects.count(), group_count - 1)
def test_group_add_user(self):
group = Group.objects.get(name='group1')
user = User.objects.create(username='newuser')
with self.settings(GROUP_MANAGMENT=False):
response = self.client.get(reverse('add-user-to-group', args=[group.id]) + '?query=new')
self.assertEqual(response.status_code, 404)
user = User.objects.get(pk=user.pk)
self.assertFalse(user.groups.filter(pk=group.pk).exists())
response = self.client.get(reverse('add-user-to-group', args=[group.id]))
self.assertEqual(response.status_code, 404)
response = self.client.get(reverse('add-user-to-group', args=[group.id]) + '?query=new')
self.assertEqual(response.status_code, 200)
available = json.loads(response.content.decode('utf-8'))
name = available['suggestions'][0]['data']
response = self.client.post(reverse('add-user-to-group', args=[group.id]), {
'user': name,
})
self.assertRedirects(response, reverse('show-group', args=[group.id]))
user = User.objects.get(pk=user.pk)
self.assertTrue(user.groups.filter(pk=group.pk).exists())
def test_group_remove_user(self):
user = User.objects.get(username='user1')
group = user.groups.first()
with self.settings(GROUP_MANAGMENT=False):
response = self.client.get(reverse('remove-user-from-group', args=[group.id, user.id]))
self.assertEqual(response.status_code, 404)
user = User.objects.get(pk=user.pk)
self.assertTrue(user.groups.filter(pk=group.pk).exists())
response = self.client.get(reverse('remove-user-from-group', args=[group.id, user.id]))
self.assertEqual(response.status_code, 200)
self.assertFalse(user.groups.filter(pk=group.pk).exists())
# Team
def test_team_list(self):
response = self.client.get(reverse('list-team'))
self.assertEqual(response.status_code, 200)
self.assertContains(response, 'team1')
self.assertContains(response, 'team2')
def test_team_details(self):
team = Team.objects.get(name="team2")
response = self.client.get(reverse('show-team', args=[team.id]))
self.assertEqual(response.status_code, 200)
self.assertContains(response, "user2")
self.assertContains(response, "group2")
def test_team_add(self):
team_count = Team.objects.count()
response = self.client.get(reverse('add-team'))
self.assertEqual(response.status_code, 200)
response = self.client.post(reverse('add-team'), {
'name': 'newteam',
})
self.assertEqual(Team.objects.count(), team_count + 1)
team = Team.objects.get(name='newteam')
self.assertRedirects(response, reverse('show-team', args=[team.id]))
def test_team_edit(self):
team = Team.objects.get(name='team1')
response = self.client.get(reverse('edit-team', args=[team.id]))
self.assertEqual(response.status_code, 200)
response = self.client.post(reverse('edit-team', args=[team.id]), {
'name': 'newname',
})
self.assertRedirects(response, reverse('show-team', args=[team.id]))
team = Team.objects.get(pk=team.pk)
self.assertEqual(team.name, 'newname')
def test_team_delete(self):
team_count = Team.objects.count()
team = Team.objects.get(name='team1')
response = self.client.get(reverse('delete-team', args=[team.id]))
self.assertEqual(response.status_code, 405) # method not allowed
self.assertEqual(Team.objects.count(), team_count)
response = self.client.post(reverse('delete-team', args=[team.id]))
self.assertRedirects(response, reverse('list-team'))
self.assertEqual(Team.objects.count(), team_count - 1)
def test_team_add_user(self):
team = Team.objects.get(name='team2')
user = User.objects.create(username='newuser')
response = self.client.get(reverse('add-user-to-team', args=[team.id]))
self.assertEqual(response.status_code, 404)
response = self.client.get(reverse('add-user-to-team', args=[team.id]) + '?query=new')
self.assertEqual(response.status_code, 200)
available = json.loads(response.content.decode('utf-8'))
name = available['suggestions'][0]['data']
response = self.client.post(reverse('add-user-to-team', args=[team.id]), {
'user': name,
})
self.assertRedirects(response, reverse('show-team', args=[team.id]))
team = Team.objects.get(pk=team.pk)
self.assertTrue(team.users.filter(pk=user.pk).exists())
def test_team_remove_user(self):
team = Team.objects.get(name='team2')
user = team.users.first()
response = self.client.get(reverse('remove-user-from-team', args=[team.id, user.id]))
self.assertEqual(response.status_code, 200)
team = Team.objects.get(pk=team.pk)
self.assertFalse(team.users.filter(pk=user.pk).exists())
def test_team_add_group(self):
team = Team.objects.get(name='team2')
group = Group.objects.create(name='newgroup')
response = self.client.get(reverse('add-group-to-team', args=[team.id]))
self.assertEqual(response.status_code, 404)
response = self.client.get(reverse('add-group-to-team', args=[team.id]) + '?query=new')
self.assertEqual(response.status_code, 200)
available = json.loads(response.content.decode('utf-8'))
name = available['suggestions'][0]['data']
response = self.client.post(reverse('add-group-to-team', args=[team.id]), {
'group': name,
})
self.assertRedirects(response, reverse('show-team', args=[team.id]))
team = Team.objects.get(pk=team.pk)
self.assertTrue(team.groups.filter(pk=group.pk).exists())
def test_team_remove_group(self):
team = Team.objects.get(name='team2')
group = team.groups.first()
response = self.client.get(reverse('remove-group-from-team', args=[team.id, group.id]))
self.assertEqual(response.status_code, 200)
team = Team.objects.get(pk=team.pk)
self.assertFalse(team.groups.filter(pk=group.pk).exists())
class TestModels(TestCase):
def test_user(self):
user = User.objects.create(username='user')
self.assertEqual(user.username_and_fullname, 'user')
user.first_name = 'Firstname'
self.assertEqual(user.username_and_fullname, 'user (Firstname)')
user.last_name = 'Lastname'
self.assertEqual(user.username_and_fullname, 'user (Firstname Lastname)')
user.first_name = ''
self.assertEqual(user.username_and_fullname, 'user (Lastname)')