diff --git a/tests/common/factories/group.py b/tests/common/factories/group.py index 70489dd17d5..4d72a744955 100644 --- a/tests/common/factories/group.py +++ b/tests/common/factories/group.py @@ -20,7 +20,7 @@ class Meta: joinable_by = JoinableBy.authority readable_by = ReadableBy.members writeable_by = WriteableBy.members - members = factory.LazyAttribute(lambda obj: [obj.creator]) + members = factory.LazyFunction(list) authority_provided_id = Faker("hexify", text="^" * 30) enforce_scope = True @@ -33,6 +33,17 @@ def scopes( # pylint: disable=method-hidden,unused-argument self.scopes = scopes or [] + @factory.post_generation + def add_creator_as_member( # pylint:disable=no-self-argument + obj, _create, _extracted, **_kwargs + ): + if ( + obj.creator + and obj.creator + not in obj.members # pylint:disable=unsupported-membership-test + ): + obj.members.insert(0, obj.creator) # pylint:disable=no-member + class OpenGroup(Group): name = factory.Sequence(lambda n: f"Open Group {n}") @@ -42,6 +53,14 @@ class OpenGroup(Group): writeable_by = WriteableBy.authority members = [] + @factory.post_generation + def add_creator_as_member( # pylint:disable=no-self-argument + _obj, _create, _extracted, **_kwargs + ): + # Open groups don't have members, so don't add group.creator to + # group.members for open groups. + pass + class RestrictedGroup(Group): name = factory.Sequence(lambda n: f"Restricted Group {n}") diff --git a/tests/unit/h/services/group_list_test.py b/tests/unit/h/services/group_list_test.py index f7414c47002..5e01201ce09 100644 --- a/tests/unit/h/services/group_list_test.py +++ b/tests/unit/h/services/group_list_test.py @@ -63,9 +63,12 @@ def test_it_does_not_return_private_groups_if_user_is_not_member( # the creator of the group. That means that this private group is still associated # with this user in some form—but we want to make sure it does not appear # in these results. - private_group = factories.Group( - creator=user, authority=user.authority, members=[] - ) + private_group = factories.Group(creator=user, authority=user.authority) + # Remove `private_group.creator` from `private_group.members`. + # The creator is still attached to `private_group` as `private_group.creator`. + private_group.members = [ + user for user in private_group.members if user is not private_group.creator + ] groups = svc.associated_groups(user) diff --git a/tests/unit/h/views/activity_test.py b/tests/unit/h/views/activity_test.py index 33caaae07c9..759875b0bd8 100644 --- a/tests/unit/h/views/activity_test.py +++ b/tests/unit/h/views/activity_test.py @@ -1208,8 +1208,7 @@ def group(factories): @pytest.fixture def no_creator_group(factories): - group = factories.Group() - group.creator = None + group = factories.Group(creator=None) group.members.extend([factories.User(), factories.User()]) return group @@ -1236,8 +1235,7 @@ def restricted_group(factories): @pytest.fixture def no_creator_open_group(factories): - open_group = factories.OpenGroup() - open_group.creator = None + open_group = factories.OpenGroup(creator=None) return open_group