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])
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()
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])
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()
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
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 %}")
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 %}")
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(), [])
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(), [])
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")