from __future__ import unicode_literals try: # Py3 from unittest import mock except ImportError: # Py2 import mock from django.test import TestCase from django import urls from django.contrib.auth.models import Group, Permission from alliance_auth.tests.auth_utils import AuthUtils import six class PermissionsToolViewsTestCase(TestCase): def setUp(self): self.member = AuthUtils.create_member('auth_member') self.member.set_password('password') self.member.email = 'auth_member@example.com' self.member.save() self.none_user = AuthUtils.create_user('none_user', disconnect_signals=True) self.none_user2 = AuthUtils.create_user('none_user2', disconnect_signals=True) self.none_user3 = AuthUtils.create_user('none_user3', disconnect_signals=True) self.no_perm_user = AuthUtils.create_user('no_perm_user', disconnect_signals=True) self.no_perm_user.set_password('password') AuthUtils.disconnect_signals() self.no_perm_group = Group.objects.create(name="No Permission Group") self.test_group = Group.objects.create(name="Test group") self.test_group.user_set.add(self.none_user) self.test_group.user_set.add(self.none_user2) self.test_group.user_set.add(self.none_user3) self.permission = Permission.objects.get_by_natural_key(codename='audit_permissions', app_label='permissions_tool', model='permissionstool') self.test_group.permissions.add(self.permission) self.member.user_permissions.add(self.permission) AuthUtils.connect_signals() def test_menu_item(self): self.client.login(username=self.member.username, password='password') response = self.client.get(urls.reverse('permissions_tool:overview')) response_content = response.content if six.PY3: response_content = str(response_content, encoding='utf8') self.assertInHTML( '
  • Permissions Audit
  • ', response_content) def test_permissions_overview(self): self.client.login(username=self.member.username, password='password') response = self.client.get(urls.reverse('permissions_tool:overview')) self.assertEqual(response.status_code, 200) self.assertTemplateUsed('permissions_tool/overview.html') self.assertContains(response, self.permission.codename) self.assertContains(response, self.permission.content_type.app_label) self.assertContains(response, self.permission.content_type.model) tested_context = False # Test the context for perm in response.context['permissions']: if perm['permission'] == self.permission: tested_context = True self.assertDictContainsSubset({'users': 1}, perm) self.assertDictContainsSubset({'groups': 1}, perm) self.assertDictContainsSubset({'group_users': 3}, perm) break self.assertTrue(tested_context) def test_permissions_overview_perms(self): # Ensure permission effectively denys access self.client.login(username=self.no_perm_user.username, password='password') response = self.client.get(urls.reverse('permissions_tool:overview')) self.assertEqual(response.status_code, 302) def test_permissions_audit(self): self.client.login(username=self.member.username, password='password') response = self.client.get(urls.reverse('permissions_tool:audit', kwargs={ 'app_label': self.permission.content_type.app_label, 'model': self.permission.content_type.model, 'codename': self.permission.codename, })) self.assertTemplateUsed('permissions_tool/audit.html') self.assertTemplateUsed('permissions_tool/audit_row.html') self.assertContains(response, self.permission.codename) self.assertContains(response, self.none_user) self.assertContains(response, self.none_user3) self.assertContains(response, self.test_group) self.assertNotContains(response, self.no_perm_user) def test_permissions_audit_perms(self): # Ensure permission effectively denys access self.client.login(username=self.no_perm_user.username, password='password') response = self.client.get(urls.reverse('permissions_tool:audit', kwargs={ 'app_label': self.permission.content_type.app_label, 'model': self.permission.content_type.model, 'codename': self.permission.codename, })) self.assertEqual(response.status_code, 302)