Ejemplo n.º 1
0
 def test_multi_org_redirect_on_login_with_orglist_next_query(self):
     user = UserFactory()
     org_user1 = OrganizationUserFactory(user=user)
     org_user2 = OrganizationUserFactory(user=user)
     user.set_password('test')
     user.save()
     response = self.client.post(reverse('auth_login')+'?next=/',
         {'username': user.username, 'password': '******'},
         follow = True)
     expected_url = reverse('organization_list') 
     self.assertRedirects(response, expected_url)
Ejemplo n.º 2
0
 def test_redirect_for_many_organizations(self):
     '''
     If the user is a member of many organizations then on login
     they should be redirected to the organization list page
     which shows all the organizations to which they belong.
     '''
     OrganizationUserFactory(user=self.user)
     OrganizationUserFactory(user=self.user)
     org_redirect_view = OrganizationRedirectView()
     org_redirect_view.request = self.login_request
     url = org_redirect_view.get_redirect_url()
     self.assertEquals(url, reverse('organization_list'))
Ejemplo n.º 3
0
 def test_check_access_perms_detects_organization_admins(self):
     org_user = OrganizationUserFactory(is_admin=True)
     org = org_user.organization
     user = org_user.user
     org_user_delete_view = CustomOrganizationUserDelete()
     org_user_delete_view.kwargs = {'organization_pk': org.pk}
     self.assertIsNone(org_user_delete_view._check_access_perms(user))
Ejemplo n.º 4
0
 def test_get_initial_returns_is_editor_status_and_nothing_else(self):
     custom_org_user_update_view = CustomOrganizationUserUpdate()
     # This will provide an organization and user, but no permissions will
     # be assigned so is_editor will be False
     custom_org_user_update_view.object = OrganizationUserFactory.build()
     expected_initial = {'is_editor': False}
     self.assertDictEqual(custom_org_user_update_view.get_initial(),
                          expected_initial)
Ejemplo n.º 5
0
 def test_get_initial_returns_is_editor_status_and_nothing_else(self):
     custom_org_user_update_view = CustomOrganizationUserUpdate()
     # This will provide an organization and user, but no permissions will
     # be assigned so is_editor will be False
     custom_org_user_update_view.object = OrganizationUserFactory.build()
     expected_initial = {'is_editor': False}
     self.assertDictEqual(custom_org_user_update_view.get_initial(),
                          expected_initial)
Ejemplo n.º 6
0
    def test_active_users_of_org_added_to_watchers_of_new_decision(self):
        """
        See no reason to have this in a view test, this behavior is almost
        entirely tested already in the model tests in tests/decisions_test.py
        Suggest, moving this test to there.
        """
        org = OrganizationFactory()
        active_org_user1 = OrganizationUserFactory(organization=org)
        active_org_user2 = OrganizationUserFactory(organization=org)
        inactive_org_user = OrganizationUserFactory(
            user=UserFactory(is_active=False), organization=org)
        active_other_org_user = OrganizationUserFactory()

        decision = DecisionFactory(organization=org)
        watching_user_ids = decision.watchers.values_list('user_id', flat=True)
        self.assertIn(active_org_user1.user.id, watching_user_ids)
        self.assertIn(active_org_user2.user.id, watching_user_ids)
        self.assertEqual(len(watching_user_ids), 2)
Ejemplo n.º 7
0
 def test_check_access_perms_doesnt_detect_normal_users(self):
     org_user = OrganizationUserFactory()
     org = org_user.organization
     user = org_user.user
     org_user_delete_view = CustomOrganizationUserDelete()
     org_user_delete_view.kwargs = {'organization_pk': org.pk}
     self.assertIsInstance(
         org_user_delete_view._check_access_perms(user),
         HttpResponseForbidden)
Ejemplo n.º 8
0
 def setUp(self):
     user = UserFactory()
     self.decision = DecisionFactory(author=user, description="Eat Cheese")
     watcher = UserFactory(email="*****@*****.**")
     organization = self.decision.organization
     self.settings = NotificationSettingsFactory(
         user=watcher,
         organization=organization,
         notification_level=FEEDBACK_ADDED_NOTIFICATIONS)
     OrganizationUserFactory(user=watcher, organization=organization)
Ejemplo n.º 9
0
 def test_organisation_user_leave_view_redirects_to_organization_list(self):
     org_user = OrganizationUserFactory()
     user = org_user.user
     request = RequestFactory()
     request.user = user
     org_user_leave_view = CustomOrganizationUserLeave()
     org_user_leave_view.get_object = lambda: org_user
     response = org_user_leave_view.delete(request)
     self.assertEqual(302, response.status_code)
     self.assertEqual(reverse('organization_list'), response['Location'])
Ejemplo n.º 10
0
 def test_single_org_redirect_on_login_with_orgadd_next_query(self):
     org_user = OrganizationUserFactory()
     self.client.logout()
     org_user.user.set_password('test')
     org_user.user.save()
     response = self.client.post(reverse('auth_login')+'?next=/organizations/add/',
         {'username': org_user.user.username, 'password': '******'},
         follow = True)
     expected_url = reverse('organization_add') 
     self.assertRedirects(response, expected_url)
Ejemplo n.º 11
0
 def test_single_org_redirect_on_login_with_root_next_query(self):
     org_user = OrganizationUserFactory()
     self.client.logout()
     org_user.user.set_password('test')
     org_user.user.save()
     response = self.client.post(reverse('auth_login')+'?next=/',
         {'username': org_user.user.username, 'password': '******'},
         follow = True)
     expected_url = reverse('publicweb_item_list', 
         args=[org_user.organization.slug, Decision.DISCUSSION_STATUS]) 
     self.assertRedirects(response, expected_url)
Ejemplo n.º 12
0
 def test_delete_stops_users_watching_decisions_for_the_organization(self):
     org_user_delete_view = CustomOrganizationUserDelete()
     observed_item = ObservedItemFactory()
     org = observed_item.observed_object.organization
     user = observed_item.user
     org_user = OrganizationUserFactory(organization=org, user=user)
     decision = observed_item.observed_object
     org_user_delete_view.get_object = lambda: org_user
     request = RequestFactory()
     request.user = user
     org_user_delete_view.delete(request)
     self.assertSequenceEqual([], decision.watchers.all())
Ejemplo n.º 13
0
 def test_delete_deletes_the_unused_permissions(self):
     org_user_delete_view = CustomOrganizationUserDelete()
     org_user = OrganizationUserFactory()
     org = org_user.organization
     user = org_user.user
     assign_perm(GUARDIAN_PERMISSION, user, org)
     self.assertTrue(user.has_perm(GUARDIAN_PERMISSION, org))
     org_user_delete_view.get_object = lambda: org_user
     request = RequestFactory()
     request.user = user
     org_user_delete_view.delete(request)
     self.assertFalse(user.has_perm(GUARDIAN_PERMISSION, org))
Ejemplo n.º 14
0
 def test_redirect_for_one_organization(self):
     '''
     If the user is a member of only one organization then on login
     they should be redirected to the default Decision status list for 
     that one organization and not the organization list page.
     '''
     org_user = OrganizationUserFactory(user=self.user)
     org_redirect_view = OrganizationRedirectView()
     org_redirect_view.request = self.login_request
     url = org_redirect_view.get_redirect_url()
     expected_url = reverse('publicweb_item_list',
                            args=[org_user.organization.slug, 'discussion'])
     self.assertEqual(url, expected_url)
Ejemplo n.º 15
0
 def test_active_users_of_org_added_to_watchers_of_new_decision(self):
     """
     See no reason to have this in a view test, this behavior is almost
     entirely tested already in the model tests in tests/decisions_test.py
     Suggest, moving this test to there.
     """
     org_user_factory = OrganizationUserFactory()
     org = org_user_factory.organization
     user_in_org = org_user_factory.user
     UserFactory()  # Create one user not linked to the org for completeness
     user_inactive = UserFactory(is_active=False)
     # Link the inactive user with the existing org and confirm it worked
     OrganizationUserFactory(user=user_inactive, organization=org)
     user_status_list = [user.user.is_active
                         for user in org.organization_users.all()]
     assert user_status_list.count(True) == 1
     assert user_status_list.count(False) == 1
     # The Test
     decision = DecisionFactory(organization=org)
     self.assertEqual(decision.watchers.count(), 1,
                      "There should be one watcher.")
     self.assertEqual(decision.watchers.get().user, user_in_org,
                      "The watcher user should be the active user.")
Ejemplo n.º 16
0
 def test_delete_stops_users_watching_feedback_for_the_organization(self):
     org_user_delete_view = CustomOrganizationUserDelete()
     feedback = FeedbackFactory()
     observed_item = ObservedItemFactory(observed_object=feedback)
     org = observed_item.observed_object.decision.organization
     user = feedback.author
     org_user = OrganizationUserFactory(organization=org, user=user)
     org_user_delete_view.get_object = lambda: org_user
     request = RequestFactory()
     request.user = user
     org_user_delete_view.delete(request)
     # Two observed items were created for different users
     # Only the second one should remain after the delete request
     self.assertSequenceEqual([observed_item], feedback.watchers.all())
Ejemplo n.º 17
0
 def test_redirect_for_one_organization(self):
     '''
     If the user is a member of only one organization then on login
     they should be redirected to the proposal page for that one
     organization and not the organization list page.
     '''
     org_user_factory = OrganizationUserFactory(user=self.user)
     org_redirect_view = OrganizationRedirectView()
     org_redirect_view.request = self.login_request
     response = org_redirect_view.get_redirect_url()
     expected_url = reverse('publicweb_item_list',
                            args=[org_user_factory.organization.slug,
                                  'proposal'])
     self.assertEqual(response, expected_url)
Ejemplo n.º 18
0
    def test_organisation_user_delete_view_doesnt_let_user_delete_others(self):
        org_user_delete_view = CustomOrganizationUserDelete()
        org_user = OrganizationUserFactory()
        org = org_user.organization
        user_1 = org_user.user

        user_2 = UserFactory()
        assign_perm(GUARDIAN_PERMISSION, user_1, org)
        request = RequestFactory().post("/", {'submit': "Delete"})
        request.user = user_1
        org_user_delete_view.get_object = lambda: org_user

        response = org_user_delete_view.dispatch(
            request, organization_pk=unicode(org.pk), user_pk=unicode(user_2.pk))
        self.assertIsInstance(response, HttpResponseForbidden)
Ejemplo n.º 19
0
 def setUp(self):
     mail.outbox = []
     self.user = UserFactory(email="*****@*****.**")
     decision = DecisionFactory(author=self.user)
     feedbackAuthor = UserFactory(email="*****@*****.**")
     self.feedback = FeedbackFactory(decision=decision,
                                     description="Not so fast",
                                     author=feedbackAuthor,
                                     editor=feedbackAuthor)
     organization = decision.organization
     self.settings = NotificationSettingsFactory(
         user=self.user,
         organization=organization,
         notification_level=FEEDBACK_MAJOR_CHANGES)
     OrganizationUserFactory(user=self.user, organization=organization)
Ejemplo n.º 20
0
    def test_organisation_user_leave_view_lets_user_delete_themself(self):
        org_user = OrganizationUserFactory()
        org = org_user.organization
        user = org_user.user

        assign_perm(GUARDIAN_PERMISSION, user, org)
        request = RequestFactory().post("/", {'submit': "Leave"})
        request.user = user

        org_user_leave_view = CustomOrganizationUserLeave()
        org_user_leave_view.get_object = lambda: org_user

        response = org_user_leave_view.dispatch(request, organization_pk=org.pk)

        self.assertEqual(
            0, OrganizationUser.objects.filter(user=user, organization=org).count())
        self.assertEqual(reverse('organization_list'), response['Location'])
Ejemplo n.º 21
0
    def test_organisation_user_delete_view_is_accessible_to_admin(self):
        org_user_delete_view = CustomOrganizationUserDelete()
        org_user = OrganizationUserFactory(is_admin=True)
        org = org_user.organization
        user_1 = org_user.user

        user_2 = UserFactory()
        assign_perm(GUARDIAN_PERMISSION, user_1, org)
        request = RequestFactory().post("/", {'submit': "Delete"})
        request.user = user_1

        org_user_delete_view.get_object = lambda: org_user

        response = org_user_delete_view.dispatch(
            request, organization_pk=org.pk, user_pk=user_2.pk)

        self.assertEqual(
            reverse('organization_user_list', args=[org.pk]), response['Location'])
Ejemplo n.º 22
0
 def test_user_can_unwatch_a_decision(self):
     org_user = OrganizationUserFactory()
     org = org_user.organization
     user = org_user.user
     decision = DecisionFactory(organization=org)
     # Confirm decision has a single watcher
     self.assertEqual(decision.watchers.count(), 1)
     # Get the view ready
     request = RequestFactory()
     request.user = user
     decision_update_view = DecisionUpdate()
     decision_update_view.request = request
     decision_update_view.object = decision
     decision_update_view.get_object = lambda: decision
     decision_update_view.last_status = 'dummy'
     form = DecisionForm(instance=decision)
     form.cleaned_data = {'watch': False}
     # Run the form_valid method to stop observing
     decision_update_view.form_valid(form)
     self.assertEqual(decision.watchers.count(), 0)
Ejemplo n.º 23
0
 def test_get_role_returns_viewer_when_is_viewer(self):
     org_user = OrganizationUserFactory()
     self.assertEqual('viewer', org_user.get_role())
Ejemplo n.º 24
0
 def test_is_editor_returns_true_when_is_editor(self):
     org_user = OrganizationUserFactory()
     assign_perm(GUARDIAN_PERMISSION, org_user.user, org_user.organization)
     self.assertTrue(org_user.is_editor())
Ejemplo n.º 25
0
 def test_is_editor_returns_false_when_not_editor(self):
     org_user = OrganizationUserFactory()
     self.assertFalse(org_user.is_editor())
Ejemplo n.º 26
0
 def test_get_role_returns_editor_when_is_editor(self):
     org_user = OrganizationUserFactory()
     assign_perm(GUARDIAN_PERMISSION, org_user.user, org_user.organization)
     self.assertEqual('editor', org_user.get_role())
Ejemplo n.º 27
0
 def test_get_role_returns_admin_when_is_admin(self):
     org_user = OrganizationUserFactory(is_admin=True)
     self.assertEqual('admin', org_user.get_role())
Ejemplo n.º 28
0
 def test_is_editor_returns_false_when_not_editor(self):
     org_user = OrganizationUserFactory()
     self.assertFalse(org_user.is_editor())
Ejemplo n.º 29
0
 def test_is_editor_returns_true_when_is_editor(self):
     org_user = OrganizationUserFactory()
     assign_perm(GUARDIAN_PERMISSION, org_user.user, org_user.organization)
     self.assertTrue(org_user.is_editor())
Ejemplo n.º 30
0
 def test_get_role_returns_admin_when_is_admin(self):
     org_user = OrganizationUserFactory(is_admin=True)
     self.assertEqual('admin', org_user.get_role())
Ejemplo n.º 31
0
 def test_get_role_returns_editor_when_is_editor(self):
     org_user = OrganizationUserFactory()
     assign_perm(GUARDIAN_PERMISSION, org_user.user, org_user.organization)
     self.assertEqual('editor', org_user.get_role())
Ejemplo n.º 32
0
 def test_get_role_returns_viewer_when_is_viewer(self):
     org_user = OrganizationUserFactory()
     self.assertEqual('viewer', org_user.get_role())