def test_get_m2m_changes_no_change(user_a): assert get_m2m_changes(get_user_model().objects.none(), get_user_model().objects.none()) == ([], []) assert get_m2m_changes( get_user_model().objects.filter(pk=user_a.pk), get_user_model().objects.filter(pk=user_a.pk), ) == ([], [])
def test_get_m2m_added(user_a, user_b): assert get_m2m_changes( get_user_model().objects.none(), get_user_model().objects.filter(pk=user_b.pk)) == ([user_b], []) assert get_m2m_changes( get_user_model().objects.filter(pk=user_a.pk), get_user_model().objects.filter(pk__in=[user_a.pk, user_b.pk]), ) == ([user_b], [])
def test_get_m2m_removed(user_a, user_b): assert get_m2m_changes( get_user_model().objects.filter(pk=user_b.pk), get_user_model().objects.none(), ) == ([], [user_b]) assert get_m2m_changes( get_user_model().objects.filter(pk__in=[user_a.pk, user_b.pk]), get_user_model().objects.filter(pk=user_a.pk), ) == ([], [user_b])
def test_get_m2m_changes_no_change(user_a): assert get_m2m_changes( get_user_model().objects.none(), get_user_model().objects.none() ) == ([], []) assert get_m2m_changes( get_user_model().objects.filter(pk=user_a.pk), get_user_model().objects.filter(pk=user_a.pk), ) == ([], [])
def test_get_m2m_removed(user_a, user_b): assert (get_m2m_changes( get_user_model().objects.filter(pk=user_b.pk), get_user_model().objects.none(), ) == ([], [user_b])) assert (get_m2m_changes( get_user_model().objects.filter(pk__in=[user_a.pk, user_b.pk]), get_user_model().objects.filter(pk=user_a.pk), ) == ([], [user_b]))
def test_get_m2m_removed(user0, user1): assert get_m2m_changes( get_user_model().objects.filter(pk=user1.pk), get_user_model().objects.none(), ) == ([], [user1]) assert get_m2m_changes( get_user_model().objects.filter(pk__in=[user0.pk, user1.pk]), get_user_model().objects.filter(pk=user0.pk), ) == ([], [user1])
def test_get_m2m_mixed(user_a, user_b, user_c): assert get_m2m_changes( get_user_model().objects.filter(pk__in=[user_b.pk, user_c.pk]), get_user_model().objects.filter(pk__in=[user_a.pk, user_b.pk]), ) == ([user_a], [user_c]) assert get_m2m_changes( get_user_model().objects.filter(pk__in=[user_a.pk, user_b.pk]), get_user_model().objects.filter(pk__in=[user_c.pk]), ) == ([user_c], [user_a, user_b]) assert get_m2m_changes( get_user_model().objects.filter(pk__in=[user_b.pk]), get_user_model().objects.filter(pk__in=[user_c.pk, user_a.pk]), ) == ([user_a, user_c], [user_b])
def test_get_m2m_mixed(user_a, user_b, user_c): assert get_m2m_changes( get_user_model().objects.filter(pk__in=[user_b.pk, user_c.pk]), get_user_model().objects.filter(pk__in=[user_a.pk, user_b.pk]), ) == ([user_a], [user_c]) assert get_m2m_changes( get_user_model().objects.filter(pk__in=[user_a.pk, user_b.pk]), get_user_model().objects.filter(pk__in=[user_c.pk]), ) == ([user_c], [user_a, user_b]) assert get_m2m_changes( get_user_model().objects.filter(pk__in=[user_b.pk]), get_user_model().objects.filter(pk__in=[user_c.pk, user_a.pk]), ) == ([user_a, user_c], [user_b])
def test_get_m2m_mixed(user0, user1, userX): assert get_m2m_changes( get_user_model().objects.filter(pk__in=[user1.pk, userX.pk]), get_user_model().objects.filter(pk__in=[user0.pk, user1.pk]), ) == ([user0], [userX]) assert get_m2m_changes( get_user_model().objects.filter(pk__in=[user0.pk, user1.pk]), get_user_model().objects.filter(pk__in=[userX.pk]), ) == ([userX], [user0, user1]) assert get_m2m_changes( get_user_model().objects.filter(pk__in=[user1.pk]), get_user_model().objects.filter(pk__in=[userX.pk, user0.pk]), ) == ([user0, userX], [user1])
def save_model(self, request, obj, form, change): """ Save a user and log changes in its roles. """ add_groups, remove_groups = utils.get_m2m_changes( obj.groups, form.cleaned_data['groups']) super(UserAdmin, self).save_model(request, obj, form, change) log_user_groups(request.user, obj, (add_groups, remove_groups))
def save_model(self, request, obj, form, change): """ Save a user and log changes in its roles. """ super().save_model(request, obj, form, change) # Users can only be moved between groups upon editing, not creation if "groups" in form.cleaned_data: add_groups, remove_groups = utils.get_m2m_changes( obj.groups, form.cleaned_data["groups"]) log_user_groups(request.user, obj, (add_groups, remove_groups))
def assign_users_to_groups(self, group_name, users): """ Clear group membership and assign a set of users to a given group of users. """ group = getattr(self.instance, "{}_group".format(group_name)) add_users, remove_users = utils.get_m2m_changes(group.user_set.all(), users) group.user_set.clear() if users: group.user_set.add(*users) log_group_members(self.user, group, (add_users, remove_users))
def save_model(self, request, obj, form, change): """ Save a user and log changes in its roles. """ add_groups, remove_groups = utils.get_m2m_changes( obj.groups, form.cleaned_data['groups'] ) super(UserAdmin, self).save_model(request, obj, form, change) log_user_groups( request.user, obj, (add_groups, remove_groups) )