def test_organization_filter_views(self, client, factory): org = OrganizationFactory() u = UserFactory() org.add_member(u) try: obj = factory(public=True) except TypeError: # TODO For challenges, hidden needs to be refactored to public obj = factory(hidden=False) obj.organizations.set([OrganizationFactory()]) def _get_org_detail(): return get_view_for_user( client=client, viewname="organizations:detail", reverse_kwargs={"slug": org.slug}, user=u, ) response = _get_org_detail() assert response.status_code == 200 assert {*response.context[-1]["object_list"]} == set() obj.organizations.add(org) response = _get_org_detail() assert response.status_code == 200 assert {*response.context[-1]["object_list"]} == {obj}
def test_related_permissions_assigned(client, reverse, factory, related_name, perm): org1, org2 = OrganizationFactory(), OrganizationFactory() obj1, obj2, obj3, obj4 = ( factory(), factory(), factory(), factory(), ) if reverse: for obj in [obj1, obj2, obj3, obj4]: obj.organizations.add(org1, org2) for obj in [obj3, obj4]: obj.organizations.remove(org1, org2) for obj in [obj1, obj2]: obj.organizations.remove(org2) else: getattr(org1, related_name).add(obj1, obj2, obj3, obj4) getattr(org1, related_name).remove(obj3, obj4) # We end up with org1 only being related to obj1 and obj2 expected_perms = { obj1: { org1.editors_group: {perm}, org1.members_group: {perm} }, obj2: { org1.editors_group: {perm}, org1.members_group: {perm} }, } for obj in [obj1, obj2, obj3, obj4]: for group in [ org1.editors_group, org1.members_group, org2.editors_group, org2.members_group, ]: assert get_groups_with_set_perms(obj).get( group) == expected_perms.get(obj, {}).get(group) # Test clearing if reverse: obj1.organizations.clear() obj2.organizations.clear() else: getattr(org1, related_name).clear() for obj in [obj1, obj2, obj3, obj4]: for group in [ org1.editors_group, org1.members_group, org2.editors_group, org2.members_group, ]: assert get_groups_with_set_perms(obj).get(group) is None
def test_organization_permissions(self): o: Organization = OrganizationFactory() assert get_groups_with_set_perms(o) == { o.editors_group: {"change_organization"} } assert not get_users_with_perms(o, with_group_users=False).exists()
def test_permission_required_views(self, client): o = OrganizationFactory() u = UserFactory() for view_name, kwargs, permission, obj, redirect in [ ( "update", { "slug": o.slug }, "change_organization", o, None, ), ( "editors-update", { "slug": o.slug }, "change_organization", o, None, ), ( "members-update", { "slug": o.slug }, "change_organization", o, None, ), ]: def _get_view(): return get_view_for_user( client=client, viewname=f"organizations:{view_name}", reverse_kwargs=kwargs, user=u, ) response = _get_view() if redirect is not None: assert response.status_code == 302 assert response.url == redirect else: assert response.status_code == 403 assign_perm(permission, u, obj) response = _get_view() assert response.status_code == 200 remove_perm(permission, u, obj)
def test_open_views(self, client): o = OrganizationFactory() for viewname, kwargs in (("list", {}), ("detail", {"slug": o.slug})): response = get_view_for_user( client=client, viewname=f"organizations:{viewname}", reverse_kwargs=kwargs, ) assert response.status_code == 200
def test_organization_display(self, client): u1 = UserFactory() u2 = UserFactory() org1 = OrganizationFactory() org2 = OrganizationFactory() org1.add_member(u1) assert org1.is_member(u1) assert not org2.is_member(u1) assert not org1.is_member(u2) assert not org2.is_member(u2) response = get_view_for_user( viewname="profile-detail", client=client, user=u1, reverse_kwargs={"username": u1.username}, ) assert len(response.context[-1]["organizations"]) == 1 assert org1.title in response.content.decode() assert org2.title not in response.content.decode() response = get_view_for_user( viewname="profile-detail", client=client, user=u2, reverse_kwargs={"username": u2.username}, ) assert len(response.context[-1]["organizations"]) == 0 assert "Organizations" not in response.content.decode() u1.user_profile.display_organizations = False u1.user_profile.save() response = get_view_for_user( viewname="profile-detail", client=client, user=u1, reverse_kwargs={"username": u1.username}, ) assert org1.title not in response.content.decode()
def test_organization_update(self, client): u1 = UserFactory() org1 = OrganizationFactory() org1.add_member(u1) response = get_view_for_user( viewname="profile-detail", client=client, user=u1, reverse_kwargs={"username": u1.username}, ) assert org1.title in response.content.decode() _ = get_view_for_user( viewname="profile-update", client=client, method=client.post, user=u1, reverse_kwargs={"username": u1.username}, data={ "first_name": "Firstname", "last_name": "Lastname", "institution": "Institution", "department": "Department", "country": "NL", "display_organizations": False, }, ) u1.user_profile.refresh_from_db() response = get_view_for_user( viewname="profile-detail", client=client, user=u1, reverse_kwargs={"username": u1.username}, ) assert org1.title not in response.content.decode()