Ejemplo n.º 1
0
    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}
Ejemplo n.º 2
0
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)
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
    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()
Ejemplo n.º 7
0
    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()