ponytracker/issue/tests.py
2014-08-11 23:56:06 -07:00

220 lines
9.5 KiB
Python

from django.test import TestCase, Client
from issue.models import *
class TestPermissions(TestCase):
fixtures = ['test_perms']
def test_team_user_membership(self):
user = User.objects.get(username='user1')
team = Team.objects.get(name='team1')
self.assertEqual(len(user.teams), 1)
self.assertEqual(user.teams[0], team)
def test_team_group_membership(self):
user = User.objects.get(username='user2')
team = Team.objects.get(name='team2')
self.assertEqual(len(user.teams), 1)
self.assertEqual(user.teams[0], team)
def test_global_no_perms(self):
user = User.objects.get(username='user4')
self.assertFalse(user.has_perm('create_project'))
self.assertFalse(user.has_perm('modify_project'))
self.assertFalse(user.has_perm('delete_project'))
def test_global_user_perms(self):
user = User.objects.get(username='user3')
self.assertTrue(user.has_perm('create_project'))
self.assertFalse(user.has_perm('modify_project'))
self.assertFalse(user.has_perm('delete_project'))
def test_global_group_perms(self):
user = User.objects.get(username='user2')
self.assertFalse(user.has_perm('create_project'))
self.assertTrue(user.has_perm('modify_project'))
self.assertFalse(user.has_perm('delete_project'))
def test_global_team_perms(self):
user = User.objects.get(username='user1')
self.assertFalse(user.has_perm('create_project'))
self.assertFalse(user.has_perm('modify_project'))
self.assertTrue(user.has_perm('delete_project'))
def test_project_no_perms(self):
user = User.objects.get(username='user4')
project = Project.objects.get(name='project-1')
self.assertFalse(user.has_perm('create_issue', project))
self.assertFalse(user.has_perm('modify_issue', project))
self.assertFalse(user.has_perm('delete_issue', project))
def test_project_user_perms(self):
user = User.objects.get(username='user3')
project = Project.objects.get(name='project-1')
self.assertTrue(user.has_perm('create_issue', project))
self.assertFalse(user.has_perm('modify_issue', project))
self.assertFalse(user.has_perm('delete_issue', project))
def test_project_group_perms(self):
user = User.objects.get(username='user2')
project = Project.objects.get(name='project-1')
self.assertFalse(user.has_perm('create_issue', project))
self.assertTrue(user.has_perm('modify_issue', project))
self.assertFalse(user.has_perm('delete_issue', project))
def test_project_team_perms(self):
user = User.objects.get(username='user1')
project = Project.objects.get(name='project-1')
self.assertFalse(user.has_perm('create_issue', project))
self.assertFalse(user.has_perm('modify_issue', project))
self.assertTrue(user.has_perm('delete_issue', project))
def test_unregistered_project_list(self):
response = self.client.get('/')
projects = response.context['projects']
project = Project.objects.get(name='project-1')
self.assertEqual(len(projects), 1)
self.assertEqual(projects[0], project)
def test_ungranted_project_list(self):
self.client.login(username='user1', password='user1')
response = self.client.get('/')
projects = response.context['projects']
project = Project.objects.get(name='project-1')
self.assertEqual(len(projects), 1)
self.assertEqual(projects[0], project)
self.client.logout()
def test_granted_project_list(self):
self.client.login(username='user2', password='user2')
response = self.client.get('/')
projects = response.context['projects']
project1 = Project.objects.get(name='project-1')
project2 = Project.objects.get(name='project-2')
self.assertEqual(len(projects), 2)
self.assertTrue(project1 in projects)
self.assertTrue(project2 in projects)
class TestViews(TestCase):
fixtures = ['test_perms']
def test_404(self):
response = self.client.get('/deliberately/broken')
self.assertEqual(response.status_code, 404)
def test_home_as_anonymous(self):
expected = Project.objects.filter(name='project-1')
url = reverse('list-project')
self.assertEqual(url, '/')
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertQuerysetEqual(expected, response.context['projects'], lambda x: x)
def test_home_as_user1(self):
expected = Project.objects.filter(name='project-1')
self.client.login(username='user1', password='user1')
url = reverse('list-project')
self.assertEqual(url, '/')
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertQuerysetEqual(expected, response.context['projects'], lambda x: x, ordered=False)
self.assertNotContains(response, 'New project')
def test_home_as_user2(self):
expected = Project.objects.all()
self.client.login(username='user2', password='user2')
url = reverse('list-project')
self.assertEqual(url, '/')
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertQuerysetEqual(expected, response.context['projects'], lambda x: x, ordered=False)
self.assertNotContains(response, 'New project')
def test_home_as_user3(self):
expected = Project.objects.filter(name='project-1')
self.client.login(username='user3', password='user3')
url = reverse('list-project')
self.assertEqual(url, '/')
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
self.assertQuerysetEqual(expected, response.context['projects'], lambda x: x, ordered=False)
self.assertContains(response, 'New project')
def test_add_project_granted(self):
self.client.login(username='user3', password='user3')
expected_url = reverse('list-project-permission', args=['project-3'])
url = reverse('add-project')
response = self.client.post(url, {
'name': 'project-3',
'display_name': 'Project 3',
'description': 'This is the third project.',
})
self.assertRedirects(response, expected_url)
self.assertQuerysetEqual(Project.objects.all(), ['project-1', 'project-2', 'project-3'], lambda x: x.name, ordered=False)
def test_add_project_forbidden(self):
self.client.login(username='user1', password='user1')
url = reverse('add-project')
response = self.client.post(url, {
'name': 'project-3',
'display_name': 'Project 3',
'description': 'This is the third project.',
})
self.assertEqual(response.status_code, 403)
self.assertQuerysetEqual(Project.objects.all(), ['project-1', 'project-2'], lambda x: x.name, ordered=False)
def test_add_project_forbidden_ano(self):
expected_url = reverse('login') + '?next=' + reverse('add-project')
url = reverse('add-project')
response = self.client.post(url, {
'name': 'project-3',
'display_name': 'Project 3',
'description': 'This is the third project.',
})
self.assertRedirects(response, expected_url)
self.assertQuerysetEqual(Project.objects.all(), ['project-1', 'project-2'], lambda x: x.name, ordered=False)
def test_delete_project_granted(self):
self.client.login(username='user1', password='user1')
expected_url = reverse('list-project')
url = reverse('delete-project', args=['project-1'])
response = self.client.get(url)
self.assertRedirects(response, expected_url)
self.assertQuerysetEqual(Project.objects.all(), ['project-2'], lambda x: x.name, ordered=False)
def test_delete_project_forbidden(self):
self.client.login(username='user2', password='user2')
url = reverse('delete-project', args=['project-1'])
response = self.client.get(url)
self.assertEqual(response.status_code, 403)
self.assertQuerysetEqual(Project.objects.all(), ['project-1', 'project-2'], lambda x: x.name, ordered=False)
def test_delete_project_forbidden_ano(self):
expected_url = reverse('login') + '?next=' + reverse('delete-project', args=['project-1'])
url = reverse('delete-project', args=['project-1'])
response = self.client.get(url)
self.assertRedirects(response, expected_url)
self.assertQuerysetEqual(Project.objects.all(), ['project-1', 'project-2'], lambda x: x.name, ordered=False)
def test_list_issue_granted(self):
self.client.login(username='user2', password='user2')
url = reverse('list-issue', args=['project-2'])
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
def test_list_issue_forbidden(self):
self.client.login(username='user1', password='user1')
expected_url = reverse('login') + '?next=' + reverse('list-issue', args=['project-2'])
url = reverse('list-issue', args=['project-2'])
response = self.client.get(url)
self.assertEqual(response.status_code, 403)
def test_list_issue_forbidden_ano(self):
expected_url = reverse('login') + '?next=' + reverse('list-issue', args=['project-2'])
url = reverse('list-issue', args=['project-2'])
response = self.client.get(url)
self.assertRedirects(response, expected_url)