def test_order_for_user(self): a = repr( CaseFactory( name="CaseA", last_action=timezone.now() + timedelta(days=0), last_send=timezone.now() + timedelta(days=+1), )) b = repr( CaseFactory( name="CaseB", last_action=timezone.now() + timedelta(days=+2), last_send=timezone.now() + timedelta(days=-1), )) c = repr( CaseFactory( name="CaseC", last_action=timezone.now() + timedelta(days=-1), last_send=timezone.now() + timedelta(days=+3), )) user = UserFactory(is_staff=True) self.assertQuerysetEqual( Case.objects.order_for_user(user, True).all(), [c, a, b]) self.assertQuerysetEqual( Case.objects.order_for_user(user, False).all(), [b, a, c]) user = UserFactory(is_staff=False) self.assertQuerysetEqual( Case.objects.order_for_user(user, True).all(), [b, a, c]) self.assertQuerysetEqual( Case.objects.order_for_user(user, False).all(), [c, a, b])
class CaseGroupPermissionViewTestCase(TestCase): def setUp(self): self.actor = UserFactory() self.user_with_permission = UserFactory(is_staff=True) self.object = CaseFactory() assign_perm('cases.can_assign', self.actor) self.client.login(username=self.actor, password='******') self.url = reverse_lazy('cases:permission_grant', kwargs={ 'pk': self.object.pk }) def test_view_loads_correctly(self): resp = self.client.get(self.url) self.assertEqual(resp.status_code, 200) self.assertContains(resp, self.object.name) def test_assign_permission(self): self.assertFalse(self.user_with_permission.has_perm('can_send_to_client', self.object)) pg = PermissionGroupFactory(permissions=('can_send_to_client', )) resp = self.client.post(self.url, data={'user': self.user_with_permission.pk, 'group': pg.pk}) self.assertEqual(resp.status_code, 302) self.assertTrue(self.user_with_permission.has_perm('cases.can_send_to_client', self.object))
class CaseGroupPermissionViewTestCase(PermissionStatusMixin, TestCase): permission = ['cases.can_manage_permission', 'cases.can_assign'] def setUp(self): self.user = UserFactory(username="******") self.user_with_permission = UserFactory(is_staff=True) self.object = CaseFactory() self.url = reverse('cases:permission_grant', kwargs={ 'pk': self.object.pk }) def test_view_loads_correctly(self): self.login_permitted_user() resp = self.client.get(self.url) self.assertEqual(resp.status_code, 200) self.assertContains(resp, self.object.name) def test_assign_permission(self): self.login_permitted_user() self.assertFalse(self.user_with_permission.has_perm('can_send_to_client', self.object)) pg = PermissionGroupFactory(permissions=('can_send_to_client',)) resp = self.client.post(self.url, data={'user': self.user_with_permission.pk, 'group': pg.pk}) self.assertEqual(resp.status_code, 302) self.assertTrue(self.user_with_permission.has_perm('cases.can_send_to_client', self.object))
def test_with_case_count(self): user = UserFactory() CaseFactory.create_batch(size=25, client=user) self.assertEqual(User.objects.with_case_count().get(pk=user.pk).case_count, 25) self.assertEqual( User.objects.with_case_count().get(pk=UserFactory().pk).case_count, 0 )
def case_with_assignees(self, case_status, staff_assignees=0, non_staff_assignees=0): """ Build a case with a given set of assignees and set its status afterwards. Will throw if provided params result in a volatile case, i.e. one that might change its status on the first `status_update` call. Such cases are not feasible for testing status restoration. """ perm_id = "cases.can_send_to_client" case = CaseFactory() for i in range(staff_assignees): assign_perm(perm_id, UserFactory(is_staff=True), case) for i in range(non_staff_assignees): assign_perm(perm_id, UserFactory(is_staff=False), case) case.status = case_status case.save() # Check if the status is valid, i.e. didn't change on the status update after making no changes. case.status_update() if case.status != case_status: raise Exception( f"Invalid case specified. Status changed to {case.status} after first update. Expected {case_status}." )
def setUp(self): self.object = UserFactory(is_staff=False) self.url = self.object.get_absolute_url() self.client_filter_url = reverse('cases:list') + '?client=' + str( self.object.pk) self.permission_filter_url = reverse( 'cases:list') + '?permission=' + str(self.object.pk)
def setUp(self): self.user = UserFactory(username="******", password="******") self.user_with_permission = UserFactory() self.permission_object = None # use global perms self.object = CaseFactory() self.url = reverse("cases:permission_add", kwargs={"pk": self.object.pk})
def test_form_fields(self): su_user = UserFactory(is_staff=True, is_superuser=True) self.assertCountEqual( self.get_filter(user=su_user).form.fields.keys(), [ "status", "handled", "id", "client", "name", "has_project", "permission", "has_advice", "o", ], ) self.assertCountEqual( self.get_filter(user=UserFactory( is_staff=True)).form.fields.keys(), [ "status", "handled", "id", "client", "name", "has_project", "permission", "has_advice", "o", ], )
class CaseGroupPermissionViewTestCase(PermissionStatusMixin, TestCase): permission = ["cases.can_manage_permission", "cases.can_assign"] def setUp(self): self.user = UserFactory(username="******") self.user_with_permission = UserFactory(is_staff=True) self.object = CaseFactory() self.url = reverse("cases:permission_grant", kwargs={"pk": self.object.pk}) def test_view_loads_correctly(self): self.login_permitted_user() resp = self.client.get(self.url) self.assertEqual(resp.status_code, 200) self.assertContains(resp, self.object.name) def test_assign_permission(self): self.login_permitted_user() self.assertFalse( self.user_with_permission.has_perm("can_send_to_client", self.object)) pg = PermissionGroupFactory(permissions=("can_send_to_client", )) resp = self.client.post(self.url, data={ "user": self.user_with_permission.pk, "group": pg.pk }) self.assertEqual(resp.status_code, 302) self.assertTrue( self.user_with_permission.has_perm("cases.can_send_to_client", self.object))
def setUp(self): self.object = UserFactory(is_staff=False) self.url = self.object.get_absolute_url() self.client_filter_url = ( reverse("cases:list") + "?client=" + str(self.object.pk) ) self.permission_filter_url = ( reverse("cases:list") + "?permission=" + str(self.object.pk) )
def test_codename_visibility(self): # Show for staff self.assertIn('codename', UserForm(instance=UserFactory(is_staff=True)).fields) # Non-show for non-staff self.assertNotIn('codename', UserForm(instance=UserFactory(is_staff=False)).fields) # Non show for new object self.assertNotIn('codename', UserForm().fields)
def test_permission_filter(self): obj = CaseFactory() self.assertFalse( self.get_permission_filter_qs(user=UserFactory(is_staff=True), pk=obj.pk).exists()) user = UserFactory(is_staff=True) assign_perm("cases.can_view", user, obj) self.assertTrue( self.get_permission_filter_qs(user=user, pk=obj.pk).exists())
def _prepare_users(self, db_data): admin = None for created_on in db_data: if admin is None: obj = UserFactory(is_superuser=True) admin = obj else: obj = UserFactory() obj.created_on = make_aware(created_on) if created_on is not None else None obj.save() return admin
def make_privileged_user(self): """Returns a user with permissions granted""" permissions = self.get_permissions() if "superuser" in permissions: permissions.pop(permissions.index("superuser")) user = UserFactory(username="******", is_superuser=True) else: user = UserFactory(username="******") for perm in permissions: assign_perm(perm, user) return user
def test_for_user_manager(self): UserFactory() u1 = UserFactory() u2 = UserFactory(is_staff=True) u3 = UserFactory(is_staff=True, is_superuser=True) self.assertEqual(User.objects.for_user(u1).registered().count(), 3) # self + 2 staff self.assertEqual(User.objects.for_user(u2).registered().count(), 2) # 2 staff with self self.assertEqual(User.objects.for_user(u3).registered().count(), 4) # all
def test_perm_check(self): u1 = UserFactory() assign_perm("cases.can_view", u1) u2 = UserFactory() assign_perm("cases.can_view", u2, self.object) self.assertTrue(self.object.perm_check(u1, "can_view")) self.assertTrue(self.object.perm_check(u2, "can_view")) with self.assertRaises(PermissionDenied): self.object.perm_check(UserFactory(), "can_view")
def test_notify_user_with_notify_unassigned_letter(self): management_user = UserFactory(notify_unassigned_letter=True) self.user = UserFactory(is_staff=True) assign_perm("can_add_record", self.user, self.case) self.client.login(username=self.user.username, password="******") data = self.post_data.copy() data["project"] = "True" self.client.post(self.url, data=data) self.assertMailSend(to=management_user.email)
def test_form_fields(self): su_user = UserFactory(is_staff=True, is_superuser=True) self.assertItemsEqual( self.get_filter(user=su_user).form.fields.keys(), [ 'status', 'handled', 'id', 'client', 'name', 'has_project', 'permission', 'o' ]) self.assertItemsEqual( self.get_filter(user=UserFactory( is_staff=True)).form.fields.keys(), [ 'status', 'handled', 'id', 'client', 'name', 'has_project', 'permission', 'o' ])
def test_not_notify_management_if_has_lawyer(self): management_user = UserFactory(notify_unassigned_letter=True) self.user = UserFactory(is_staff=False) assign_perm("can_add_record", self.user, self.case) assign_perm("can_send_to_client", UserFactory(is_staff=True), self.case) self.client.login(username=self.user.username, password="******") data = self.post_data.copy() self.client.post(self.url, data=data) self.assertMailSend(to=management_user.email, expected_count=0)
def test_not_notify_management_if_has_lawyer(self): management_user = UserFactory(notify_unassigned_letter=True) self.user = UserFactory(is_staff=False) assign_perm("can_add_record", self.user, self.case) assign_perm("can_send_to_client", UserFactory(is_staff=True), self.case) self.client.login(username=self.user.username, password="******") data = self.post_data.copy() self.client.post(self.url, data=data) emails = [x.to[0] for x in mail.outbox] self.assertNotIn(management_user.email, emails)
class TranslatedUserObjectPermissionsFormTestCase(TestCase): def setUp(self): self.obj = UserFactory() self.user = UserFactory() def test_delete_all_permissions(self): assign_perm('users.change_user', self.user, self.obj) self.assertTrue(self.user.has_perm('users.change_user', self.obj)) form = TranslatedUserObjectPermissionsForm(data={'permissions': ''}, user=self.user, obj=self.obj) self.assertTrue(form.is_valid()) form.save_obj_perms() self.assertFalse(self.user.has_perm('users.change_user', self.obj)) self.assertEqual(get_perms(self.user, self.obj), [])
def test_limit_choices_of_users(self): obj = UserFactory() managed_user = UserFactory() form = TranslatedManageObjectPermissionForm( data={"permissions": ["change_user"], "users": [managed_user.pk]}, actor=managed_user, obj=obj, ) self.assertTrue(form.is_valid()) form = TranslatedManageObjectPermissionForm( data={"permissions": ["change_user"], "users": [UserFactory().pk]}, actor=managed_user, obj=obj, ) self.assertFalse(form.is_valid())
def test_notify_user_with_notify_unassigned_letter(self): management_user = UserFactory(notify_unassigned_letter=True) self.user = UserFactory(is_staff=True) assign_perm('can_add_record', self.user, self.case) self.client.login(username=self.user.username, password='******') data = self.post_data.copy() data["project"] = "True" self.client.post(self.url, data=data) emails = [x.to[0] for x in mail.outbox] self.assertIn(management_user.email, emails)
def get_data(self): self.email = UserFactory.build().email return { "attachment_set-0-DELETE": "", "attachment_set-0-attachment": "", "attachment_set-0-id": "", "attachment_set-0-letter": "", "attachment_set-1-DELETE": "", "attachment_set-1-attachment": "", "attachment_set-1-id": "", "attachment_set-1-letter": "", "attachment_set-2-DELETE": "", "attachment_set-2-attachment": "", "attachment_set-2-id": "", "attachment_set-2-letter": "", "attachment_set-INITIAL_FORMS": "0", "attachment_set-MAX_NUM_FORMS": "1000", "attachment_set-MIN_NUM_FORMS": "0", "attachment_set-TOTAL_FORMS": "3", "client-autocomplete": "", "email": self.email, "giodo": "on", "name": "Lorem ipsum subject example", "text": "Lorem ipsum example text", }
def setUp(self): self.user = UserFactory(username=settings.JUDGEMENT_BOT_USERNAME) self.stdout = StringIO() self.stderr = StringIO() self.manager = Manager(bot=self.user, stdout=self.stdout, stderr=self.stderr)
def setUp(self): self.user = UserFactory(username="******") self.user_with_permission = UserFactory(is_staff=True) self.object = CaseFactory() self.url = reverse('cases:permission_grant', kwargs={ 'pk': self.object.pk })
def test_basic(self): db_data = [ (datetime(2015, 1, 2), self.non_staff_user), (datetime(2015, 1, 2), self.staff_user), (datetime(2015, 2, 3), self.non_staff_user), ] user = UserFactory(is_superuser=True) self.client.login(username=user.username, password="******") self._prepare_letters(db_data) result = self.client.get(self.url).json() expected = [ { "date": "2015-01", "staff": 1, "client": 1 }, { "date": "2015-02", "staff": 0, "client": 1 }, ] self.assertEqual(result, expected)
def test_permission_access_and_filter(self): self.client.login(username=UserFactory().username, password="******") resp = self.client.get(self.url) self.assertEqual(resp.status_code, 302) self.client.login(username=UserFactory(is_staff=True).username, password="******") resp = self.client.get(self.url) self.assertContains(resp, self.staff_list[0].username) self.assertNotContains(resp, self.user_list[0].username) user = UserFactory(is_staff=True) assign_perm("users.can_view_other", user) self.client.login(username=user.username, password="******") resp = self.client.get(self.url) self.assertContains(resp, self.object_list[0].username) self.assertContains(resp, self.object_list[0].username)
def test_no_cases(self): user = UserFactory(is_superuser=True) self.client.login(username=user.username, password="******") result = self.client.get(self.url).json() expected = [] self.assertEqual(result, expected)
def test_gap_by_month(self): db_data = [ ( datetime(2015, 1, 2), [(datetime(2015, 4, 2), self.staff_user, Letter.STATUS.done)], ), ( datetime(2015, 3, 3), [(datetime(2015, 3, 4), self.staff_user, Letter.STATUS.done)], ), ] user = UserFactory(is_superuser=True) self.client.login(username=user.username, password="******") self._prepare_cases(db_data) result = self.client.get(self.url).json() expected = [ { "date": "2015-01", "reaction_time": 89 }, { "date": "2015-02", "reaction_time": 0 }, { "date": "2015-03", "reaction_time": 1 }, ] self.assertEqual(result, expected)
def test_with_case_count_assigned(self): user = UserFactory() self.assertEqual( User.objects.with_case_count_assigned().get( pk=user.pk).case_assigned_sum, 0) SIZE_PATTERN = [(1, Case.STATUS.free), (2, Case.STATUS.assigned), (3, Case.STATUS.closed)] for size, status in SIZE_PATTERN: for obj in CaseFactory.create_batch(size=size, status=status): assign_perm('cases.can_view', user, obj) user = User.objects.with_case_count_assigned().get(pk=user.pk) self.assertEqual(user.case_assigned_free, 1) self.assertEqual(user.case_assigned_active, 2) self.assertEqual(user.case_assigned_closed, 3) self.assertEqual(user.case_assigned_sum, 6) SIZE_PATTERN_UPDATED = [(4, Case.STATUS.free), (5, Case.STATUS.assigned), (6, Case.STATUS.closed)] for size, status in SIZE_PATTERN_UPDATED: for obj in CaseFactory.create_batch(size=size, status=status): assign_perm('cases.can_view', user, obj) user_updated = User.objects.with_case_count_assigned().get(pk=user.pk) self.assertEqual(user_updated.case_assigned_free, 5) self.assertEqual(user_updated.case_assigned_active, 7) self.assertEqual(user_updated.case_assigned_closed, 9) self.assertEqual(user_updated.case_assigned_sum, 21)
class CaseAdminTestCase(AdminTestCaseMixin, TestCase): user_factory_cls = UserFactory factory_cls = CaseFactory model = Case def setUp(self): self.site = AdminSite() super().setUp() def assertIsValid(self, model_admin, model): # See django/tests/modeladmin/tests.py#L602 admin_obj = model_admin(model, self.site) if django.VERSION > (1, 9): errors = admin_obj.check() else: errors = admin_obj.check(model) expected = [] self.assertEqual(errors, expected) def test_is_valid(self): self.assertIsValid(CaseAdmin, Case) def test_record_count(self): case = CaseFactory() LetterFactory.create_batch(size=25, case=case) admin_obj = CaseAdmin(Case, AdminSite()) request = RequestFactory().get( reverse_lazy("admin:cases_case_changelist")) request.user = UserFactory(is_staff=True, is_superuser=True) qs = admin_obj.get_queryset(request) obj = qs.get(pk=case.pk) self.assertTrue(hasattr(obj, "record_count")) self.assertEqual(admin_obj.record_count(obj), 25)
def setUp(self): super(CaseCourtDeleteViewTestCase, self).setUp() self.user = UserFactory(username='******') self.court_case = CourtCaseFactory() self.permission_object = self.court_case.case self.url = reverse('judgements:delete', kwargs={'pk': self.court_case.pk})
def test_gap_by_month(self): db_data = [ (1, Case.STATUS.free, datetime(2015, 1, 2)), (2, Case.STATUS.assigned, datetime(2015, 1, 2)), (3, Case.STATUS.closed, datetime(2015, 1, 2)), (2, Case.STATUS.free, datetime(2015, 3, 2)), (1, Case.STATUS.assigned, datetime(2015, 3, 2)), ] user = UserFactory(is_superuser=True) self.client.login(username=user.username, password="******") self._prepare_cases(db_data) result = self.client.get(self.url).json() expected = [ { "date": "2015-01", "open": 1, "assigned": 2, "closed": 3 }, { "date": "2015-02", "open": 0, "assigned": 0, "closed": 0 }, { "date": "2015-03", "open": 2, "assigned": 1, "closed": 0 }, ] self.assertEqual(result, expected)
def setUp(self): self.actor = UserFactory() self.user_with_permission = UserFactory(is_staff=True) self.object = CaseFactory() assign_perm('cases.can_assign', self.actor) self.client.login(username=self.actor, password='******') self.url = reverse_lazy('cases:permission_grant', kwargs={ 'pk': self.object.pk })
class UserDetailViewTestCase(TestCase): def setUp(self): self.object = UserFactory(is_staff=False) self.url = self.object.get_absolute_url() self.client_filter_url = reverse('cases:list') + '?client=' + str(self.object.pk) self.permission_filter_url = (reverse('cases:list') + '?permission=' + str(self.object.pk)) def test_no_redirect_loop_if_no_auth(self): resp = self.client.get(self.url, follow=True) self.assertLess(len(resp.redirect_chain), 1) self.assertEqual(resp.status_code, 403) def test_can_view_self(self): self.client.login(username=self.object, password='******') resp = self.client.get(self.url) self.assertEqual(resp.status_code, 200) def test_need_permission(self): user = UserFactory() self.client.login(username=user, password='******') resp = self.client.get(self.url) self.assertEqual(resp.status_code, 403) def test_has_permission_to_view(self): user = UserFactory() assign_perm("users.can_view_other", user) self.client.login(username=user, password='******') resp = self.client.get(self.url) self.assertEqual(resp.status_code, 200) def test_has_link_to_self_assigned_cases(self): self.client.login(username=self.object, password='******') resp = self.client.get(self.url) self.assertContains(resp, self.client_filter_url) self.assertNotContains(resp, self.permission_filter_url) def test_has_link_to_user_assigned_cases(self): user = UserFactory() assign_perm('users.can_view_other', user) assign_perm('cases.can_assign', user) self.client.login(username=user, password='******') resp = self.client.get(self.url) self.assertEqual(resp.status_code, 200) self.assertContains(resp, self.client_filter_url) self.assertContains(resp, self.permission_filter_url)
def get_data(self): self.email = UserFactory.build().email return {u'attachment_set-0-DELETE': '', u'attachment_set-0-attachment': '', u'attachment_set-0-id': '', u'attachment_set-0-letter': '', u'attachment_set-1-DELETE': '', u'attachment_set-1-attachment': '', u'attachment_set-1-id': '', u'attachment_set-1-letter': '', u'attachment_set-2-DELETE': '', u'attachment_set-2-attachment': '', u'attachment_set-2-id': '', u'attachment_set-2-letter': '', u'attachment_set-INITIAL_FORMS': '0', u'attachment_set-MAX_NUM_FORMS': '1000', u'attachment_set-MIN_NUM_FORMS': '0', u'attachment_set-TOTAL_FORMS': '3', u'client-autocomplete': '', u'email': self.email, u'giodo': 'on', u'name': 'Lorem ipsum subject example', u'text': 'Lorem ipsum example text'}
def setUp(self): self.object = UserFactory(is_staff=False) self.url = self.object.get_absolute_url() self.client_filter_url = reverse('cases:list') + '?client=' + str(self.object.pk) self.permission_filter_url = (reverse('cases:list') + '?permission=' + str(self.object.pk))
def setUp(self): self.user_list = UserFactory.create_batch(size=1, is_staff=False) self.staff_list = UserFactory.create_batch(size=1, is_staff=True) self.object_list = self.user_list + self.staff_list
def setUp(self): self.obj = UserFactory() self.user = UserFactory()