예제 #1
0
 def test_rejecting_sends_email(self):
     # when curator rejects someone, they are sent an email
     curator = UserFactory()
     self.group.curators.add(curator.userprofile)
     user = UserFactory()
     self.group.add_member(user.userprofile, GroupMembership.PENDING)
     # no email when someone makes request
     eq_(0, len(mail.outbox))
     # Using French for curator page to make sure that doesn't affect the language
     # that is used to email the member.
     url = reverse(
         'groups:remove_member',
         args=[self.group.url, user.userprofile.pk],
         prefix='/fr/',
     )
     with patch('mozillians.groups.models.email_membership_change',
                autospec=True) as mock_email:
         with self.login(curator) as client:
             response = client.post(url, follow=False)
     eq_(302, response.status_code)
     # email sent for curated group
     ok_(mock_email.delay.called)
     group_pk, user_pk, old_status, new_status = mock_email.delay.call_args[
         0]
     eq_(self.group.pk, group_pk)
     eq_(user.pk, user_pk)
     eq_(GroupMembership.PENDING, old_status)
     ok_(new_status is None)
예제 #2
0
    def test_remove_from_nda_group(self, unsubscribe_mock):
        """Test to remove a member from a closed group."""
        self.group.accepting_new_members = Group.CLOSED
        self.group.url = 'nda'
        self.group.name = 'nda'
        self.group.save()
        curator = UserFactory()
        user = UserFactory()
        self.group.add_member(user.userprofile)
        self.group.curators.add(curator.userprofile)
        url = reverse(
            'groups:remove_member',
            args=[
                self.group.url, user.userprofile.pk, GroupMembership.PENDING
            ],
            prefix='/fr/',
        )
        with patch('mozillians.groups.models.email_membership_change',
                   autospec=True) as mock_email:
            with self.login(curator) as client:
                response = client.post(url, follow=False)
        eq_(302, response.status_code)
        membership = GroupMembership.objects.get(group=self.group,
                                                 userprofile=user.userprofile)
        group_pk, user_pk, old_status, new_status = mock_email.delay.call_args[
            0]

        ok_(mock_email.delay.called)
        eq_(membership.status, GroupMembership.PENDING)
        eq_(self.group.pk, group_pk)
        eq_(user.pk, user_pk)
        eq_(old_status, GroupMembership.MEMBER)
        eq_(new_status, GroupMembership.PENDING)
        ok_(unsubscribe_mock.delay.called)
예제 #3
0
    def test_remove_member_send_mail(self):
        # when curator remove someone, sent mail to member
        curator = UserFactory()
        self.group.curators.add(curator.userprofile)
        user = UserFactory()
        self.group.add_member(user.userprofile)
        url = reverse(
            'groups:remove_member',
            args=[self.group.url, user.userprofile.pk],
            prefix='/fr/',
        )
        with patch('mozillians.groups.models.email_membership_change',
                   autospec=True) as mock_email:
            with self.login(curator) as client:
                response = client.post(url, follow=False)
        eq_(302, response.status_code)
        # email sent for curated group
        group_pk, user_pk, old_status, new_status = mock_email.delay.call_args[
            0]

        ok_(mock_email.delay.called)
        eq_(self.group.pk, group_pk)
        eq_(user.pk, user_pk)
        eq_(old_status, GroupMembership.MEMBER)
        eq_(new_status, None)
예제 #4
0
    def test_member_counts(self):
        # The Group admin computes how many vouched members there are
        # and how many overall

        # IMPORTANT: This test is expected to fail on Postgres, and
        # probably other databases where the Boolean type is not just
        # an alias for a small integer. Mozillians is currently
        # deployed on a database where this works. If we ever try
        # deploying it on another database where it doesn't work, this
        # test will alert us quickly that we'll need to take another
        # approach to this feature.

        # Create group with 1 vouched member and 1 unvouched member
        group = GroupFactory()
        user = UserFactory(userprofile={'is_vouched': False})
        group.members.add(user.userprofile)
        user2 = UserFactory(userprofile={'is_vouched': True})
        group.members.add(user2.userprofile)

        admin = GroupAdmin(model=Group, admin_site=site)
        mock_request = Mock(spec=HttpRequest)
        qset = admin.queryset(mock_request)

        g = qset.get(name=group.name)
        eq_(2, g.member_count)
        eq_(1, g.vouched_member_count)
예제 #5
0
 def setUp(self):
     self.group = GroupFactory()
     self.member = UserFactory(userprofile={'is_vouched': True})
     self.group.add_member(self.member.userprofile)
     self.url = reverse('groups:remove_member', prefix='/en-US/',
                        kwargs={'group_pk': self.group.pk,
                                'user_pk': self.member.userprofile.pk})
예제 #6
0
 def test_as_manager_from_unleavable_group(self):
     # manager can remove people even from unleavable groups
     user = UserFactory(manager=True)
     with self.login(user) as client:
         response = client.post(self.url, follow=False)
     eq_(302, response.status_code)
     ok_(not self.group.has_member(self.member.userprofile))
예제 #7
0
 def test_as_manager(self):
     # manager can remove another from a group they're not curator of
     user = UserFactory(manager=True)
     with self.login(user) as client:
         response = client.post(self.url, follow=False)
     eq_(302, response.status_code)
     ok_(not self.group.has_member(self.member.userprofile))
예제 #8
0
 def setUp(self):
     self.group = GroupFactory()
     self.member = UserFactory()
     self.group.add_member(self.member.userprofile)
     self.url = reverse('groups:remove_member', prefix='/en-US/',
                        kwargs={'url': self.group.url,
                                'user_pk': self.member.userprofile.pk})
예제 #9
0
 def test_as_superuser(self):
     # superuser can remove another from a group they're not curator of
     user = UserFactory(is_superuser=True, userprofile={'is_vouched': True})
     with self.login(user) as client:
         response = client.post(self.url, follow=False)
     eq_(302, response.status_code)
     ok_(not self.group.has_member(self.member))
예제 #10
0
 def test_as_superuser_from_unleavable_group(self):
     # superuser can remove people even from unleavable groups
     user = UserFactory(is_superuser=True, userprofile={'is_vouched': True})
     with self.login(user) as client:
         response = client.post(self.url, follow=False)
     eq_(302, response.status_code)
     ok_(not self.group.has_member(self.member))
예제 #11
0
 def test_as_curator(self):
     # curator can remove another
     curator = UserFactory()
     self.group.curators.add(curator.userprofile)
     with self.login(curator) as client:
         response = client.post(self.url, follow=False)
     eq_(302, response.status_code)
     ok_(not self.group.has_member(self.member.userprofile))
예제 #12
0
 def test_as_manager_removing_curator(self):
     # but even manager cannot remove a curator
     user = UserFactory(manager=True)
     self.group.curators.add(self.member.userprofile)
     with self.login(user) as client:
         response = client.post(self.url, follow=False)
     eq_(302, response.status_code)
     ok_(self.group.has_member(self.member.userprofile))
예제 #13
0
 def test_as_curator_twice(self):
     # removing a second time doesn't blow up
     curator = UserFactory(userprofile={'is_vouched': True})
     self.group.curator = curator.userprofile
     self.group.save()
     with self.login(curator) as client:
         client.post(self.url, follow=False)
         client.post(self.url, follow=False)
예제 #14
0
 def test_as_superuser_removing_curator(self):
     # but even superuser cannot remove a curator
     user = UserFactory(is_superuser=True, userprofile={'is_vouched': True})
     self.group.curator = self.member.userprofile
     self.group.save()
     with self.login(user) as client:
         response = client.post(self.url, follow=False)
     eq_(302, response.status_code)
     ok_(self.group.has_member(self.member))
예제 #15
0
 def test_as_curator(self):
     # curator can remove another
     curator = UserFactory(userprofile={'is_vouched': True})
     self.group.curator = curator.userprofile
     self.group.save()
     with self.login(curator) as client:
         response = client.post(self.url, follow=False)
     eq_(302, response.status_code)
     ok_(not self.group.has_member(self.member))
예제 #16
0
 def test_as_curator_from_unleavable(self):
     # curator can remove another even from an unleavable group
     self.group.members_can_leave = False
     self.group.save()
     curator = UserFactory()
     self.group.curators.add(curator.userprofile)
     with self.login(curator) as client:
         response = client.post(self.url, follow=False)
     eq_(302, response.status_code)
     ok_(not self.group.has_member(self.member.userprofile))
예제 #17
0
 def test_remove_member_send_mail(self):
     # when curator remove someone, sent mail to member
     curator = UserFactory()
     self.group.curator = curator.userprofile
     self.group.save()
     user = UserFactory()
     self.group.add_member(user.userprofile)
     url = reverse(
         'groups:remove_member',
         args=[self.group.url, user.userprofile.pk],
         prefix='/fr/',
     )
     with patch('mozillians.groups.models.member_removed_email',
                autospec=True) as mock_email:
         with self.login(curator) as client:
             response = client.post(url, follow=False)
     eq_(302, response.status_code)
     # email sent for curated group
     ok_(mock_email.delay.called)
     group_pk, user_pk = mock_email.delay.call_args[0]
     eq_(self.group.pk, group_pk)
     eq_(user.pk, user_pk)
예제 #18
0
 def test_as_simple_user_removing_another(self):
     # user cannot remove anyone else
     user = UserFactory(userprofile={'is_vouched': True})
     with self.login(user) as client:
         response = client.post(self.url, follow=False)
     eq_(404, response.status_code)
 def test_vouched_access_scope(self):
     request = self.factory.get('/')
     request.user = UserFactory(vouched=True)
     eq_(UserAccessLevel.get_privacy(request), 'vouched')
 def test_private_access_scope_superuser(self):
     request = self.factory.get('/')
     request.user = UserFactory(is_superuser=True)
     user = request.user
     eq_(UserAccessLevel.get_privacy(request, user), 'private')
 def test_authenticated_access_scope(self):
     request = self.factory.get('/')
     request.user = UserFactory(vouched=False)
     eq_(UserAccessLevel.get_privacy(request), 'authenticated')