Example #1
0
    def test_manage_community_groups(self):
        """Test handling of operations required when saving a Community
        object"""
        user1 = User.objects.create(username='******', password='******')
        systers_user = SystersUser.objects.get(user=user1)
        community = Community.objects.create(name="Foo",
                                             slug="foo",
                                             order=1,
                                             admin=systers_user)
        groups_count = Group.objects.count()
        self.assertEqual(groups_count, 4)
        community_admin_group = Group.objects.get(
            name=COMMUNITY_ADMIN.format("Foo"))
        self.assertEqual(user1.groups.get(), community_admin_group)

        self.assertSequenceEqual(community.members.all(), [systers_user])

        user2 = User.objects.create(username='******', password='******')
        systers_user2 = SystersUser.objects.get(user=user2)
        community.name = "Bar"
        community.admin = systers_user2
        community.save()
        removed_groups_count = Group.objects.filter(
            name__startswith="Foo").count()
        self.assertEqual(removed_groups_count, 0)
        new_groups_count = Group.objects.filter(name__startswith="Bar").count()
        self.assertEqual(new_groups_count, 4)
        community_admin_group = Group.objects.get(
            name=COMMUNITY_ADMIN.format("Bar"))
        self.assertEqual(user2.groups.get(), community_admin_group)
        self.assertNotEqual(list(user1.groups.all()), [community_admin_group])
        self.assertCountEqual(Community.objects.get().members.all(),
                              [systers_user, systers_user2])
Example #2
0
def manage_community_groups(sender, instance, created, **kwargs):
    """Manage user groups and user permissions for a particular Community"""
    name = instance.name
    if created:
        groups = create_groups(name, groups_templates)
        assign_permissions(
            instance, groups, groups_templates, group_permissions)
        community_admin_group = next(
            g for g in groups if g.name == COMMUNITY_ADMIN.format(name))
        instance.admin.join_group(community_admin_group)
        instance.add_member(instance.admin)
        instance.save()
    else:
        if name != instance.original_name and instance.original_name:
            rename_groups(instance.original_name, instance.name)
        if instance.admin != instance.original_admin and \
           instance.original_admin is not None:
            community_admin_group = \
                get_object_or_404(Group, name=COMMUNITY_ADMIN.format(name))
            instance.original_admin.leave_group(
                community_admin_group)
            instance.admin.join_group(community_admin_group)
            if instance.admin not in instance.members.all():
                instance.add_member(instance.admin)
                instance.save()
Example #3
0
    def test_manage_community_groups(self):
        """Test handling of operations required when saving a Community
        object"""
        user1 = User.objects.create(username='******', password='******')
        systers_user = SystersUser.objects.get()
        community = Community.objects.create(name="Foo", slug="foo", order=1,
                                             community_admin=systers_user)
        groups_count = Group.objects.count()
        self.assertEqual(groups_count, 4)
        community_admin_group = Group.objects.get(
            name=COMMUNITY_ADMIN.format("Foo"))
        self.assertEqual(user1.groups.get(), community_admin_group)

        self.assertSequenceEqual(community.members.all(), [systers_user])

        user2 = User.objects.create(username='******', password='******')
        systers_user2 = SystersUser.objects.get(user=user2)
        community.name = "Bar"
        community.community_admin = systers_user2
        community.save()
        removed_groups_count = Group.objects.filter(
            name__startswith="Foo").count()
        self.assertEqual(removed_groups_count, 0)
        new_groups_count = Group.objects.filter(name__startswith="Bar").count()
        self.assertEqual(new_groups_count, 4)
        community_admin_group = Group.objects.get(
            name=COMMUNITY_ADMIN.format("Bar"))
        self.assertEqual(user2.groups.get(), community_admin_group)
        self.assertNotEqual(list(user1.groups.all()), [community_admin_group])
        self.assertSequenceEqual(Community.objects.get().members.all(),
                                 [systers_user, systers_user2])
Example #4
0
def manage_community_groups(sender, instance, created, **kwargs):
    """Manage user groups and user permissions for a particular Community"""
    name = instance.name
    if created:
        groups = create_groups(name)
        assign_permissions(instance, groups)
        community_admin_group = next(g for g in groups
                                     if g.name == COMMUNITY_ADMIN.format(name))
        instance.admin.join_group(community_admin_group)
        instance.add_member(instance.admin)
        instance.save()
    else:
        if name != instance.original_name and instance.original_name:
            rename_groups(instance.original_name, instance.name)
        if instance.admin != instance.original_admin and \
           instance.original_admin is not None:
            community_admin_group = \
                get_object_or_404(Group, name=COMMUNITY_ADMIN.format(name))
            instance.original_admin.leave_group(community_admin_group)
            instance.admin.join_group(community_admin_group)
            if instance.admin not in instance.members.all():
                instance.add_member(instance.admin)
                instance.save()
Example #5
0
    def set_new_admin(self, new_admin):
        """Transfer the admin role from the old to the new admin

        :param new_admin: SystersUser object new admin of the community
        :return: OK if setting was successful, NOT_MEMBER if settings was
                 unsuccessful, since the new admin is not a member of the
                 community
        """
        if not new_admin.is_member(self):
            return NOT_MEMBER
        name = COMMUNITY_ADMIN.format(self.name)
        admin_group = Group.objects.get(name=name)
        self.admin.leave_group(admin_group)
        new_admin.join_group(admin_group)
        self.admin = new_admin
        self.save()
        return OK
Example #6
0
    def set_new_admin(self, new_admin):
        """Transfer the admin role from the old to the new admin

        :param new_admin: SystersUser object new admin of the community
        :return: OK if setting was successful, NOT_MEMBER if settings was
                 unsuccessful, since the new admin is not a member of the
                 community
        """
        if not new_admin.is_member(self):
            return NOT_MEMBER
        name = COMMUNITY_ADMIN.format(self.name)
        admin_group = Group.objects.get(name=name)
        self.admin.leave_group(admin_group)
        new_admin.join_group(admin_group)
        self.admin = new_admin
        self.save()
        return OK
Example #7
0
    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user')
        community = kwargs.pop('community')
        super(PermissionGroupsForm, self).__init__(*args, **kwargs)

        # get all community groups and remove community admin group
        # from the list of choices
        self.groups = list(get_groups(community.name))
        admin_group = Group.objects.get(
            name=COMMUNITY_ADMIN.format(community.name))
        self.groups.remove(admin_group)
        choices = [(group.pk, group.name) for group in self.groups]
        self.fields['groups'] = forms.\
            MultipleChoiceField(choices=choices, label="", required=False,
                                widget=forms.CheckboxSelectMultiple)
        self.member_groups = self.user.get_member_groups(self.groups)
        self.fields['groups'].initial = [group.pk for group in
                                         self.member_groups]

        self.helper = SubmitCancelFormHelper(
            self, cancel_href="{% url 'community_users' community.slug %}")
Example #8
0
    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user')
        community = kwargs.pop('community')
        super(PermissionGroupsForm, self).__init__(*args, **kwargs)

        # get all community groups and remove community admin group
        # from the list of choices
        self.groups = list(get_groups(community.name))
        admin_group = Group.objects.get(
            name=COMMUNITY_ADMIN.format(community.name))
        self.groups.remove(admin_group)
        choices = [(group.pk, group.name) for group in self.groups]
        self.fields['groups'] = forms. \
            MultipleChoiceField(choices=choices, label="", required=False,
                                widget=forms.CheckboxSelectMultiple)
        self.member_groups = self.user.get_member_groups(self.groups)
        self.fields['groups'].initial = [
            group.pk for group in self.member_groups
        ]

        self.helper = SubmitCancelFormHelper(
            self, cancel_href="{% url 'community_users' community.slug %}")
Example #9
0
    def test_set_new_admin(self):
        """Test setting a new admin to a community"""
        post_save.connect(manage_community_groups, sender=Community,
                          dispatch_uid="manage_groups")
        post_delete.connect(remove_community_groups, sender=Community,
                            dispatch_uid="remove_groups")
        community = Community.objects.create(name="Bar", slug="bar",
                                             order=2, location=self.location,
                                             admin=self.systers_user)
        user = User.objects.create(username='******', password='******')
        bar_systers_user = SystersUser.objects.get(user=user)
        status = community.set_new_admin(bar_systers_user)
        self.assertEqual(status, "not_member")

        community.add_member(bar_systers_user)
        community.save()
        status = community.set_new_admin(bar_systers_user)
        self.assertEqual(status, "ok")
        self.assertEqual(community.admin, bar_systers_user)
        admin_group = Group.objects.get(name=COMMUNITY_ADMIN.format("Bar"))
        self.assertSequenceEqual(bar_systers_user.user.groups.all(),
                                 [admin_group])
        self.assertSequenceEqual(self.systers_user.user.groups.all(), [])
Example #10
0
    def test_set_new_admin(self):
        """Test setting a new admin to a community"""
        post_save.connect(manage_community_groups, sender=Community,
                          dispatch_uid="manage_groups")
        post_delete.connect(remove_community_groups, sender=Community,
                            dispatch_uid="remove_groups")
        community = Community.objects.create(name="Bar", slug="bar",
                                             order=2,
                                             admin=self.systers_user)
        user = User.objects.create(username='******', password='******')
        bar_systers_user = SystersUser.objects.get(user=user)
        status = community.set_new_admin(bar_systers_user)
        self.assertEqual(status, "not_member")

        community.add_member(bar_systers_user)
        community.save()
        status = community.set_new_admin(bar_systers_user)
        self.assertEqual(status, "ok")
        self.assertEqual(community.admin, bar_systers_user)
        admin_group = Group.objects.get(name=COMMUNITY_ADMIN.format("Bar"))
        self.assertSequenceEqual(bar_systers_user.user.groups.all(),
                                 [admin_group])
        self.assertSequenceEqual(self.systers_user.user.groups.all(), [])
Example #11
0
 def test_community_admin_constant(self):
     """Test COMMUNITY_ADMIN constant value"""
     community_admin = COMMUNITY_ADMIN.format(self.foo)
     self.assertEqual(community_admin, "Foo: Community Admin")
Example #12
0
 def test_community_admin_constant(self):
     """Test COMMUNITY_ADMIN constant value"""
     community_admin = COMMUNITY_ADMIN.format(self.foo)
     self.assertEqual(community_admin, "Foo: Community Admin")