class TestOSFGroupsView(AdminTestCase):
    def setUp(self):
        super(TestOSFGroupsView, self).setUp()
        self.user = UserFactory()
        self.user_two = UserFactory()
        self.project = ProjectFactory()
        self.group = OSFGroupFactory(name='test', creator=self.user)
        self.group.make_member(self.user_two)
        self.group.add_group_to_node(self.project)
        self.group.save()
        self.request = RequestFactory().post('/fake_path')

    def test_get_object(self):
        view = OSFGroupsView()
        view = setup_log_view(view, self.request, id=self.group._id)

        group = view.get_object()

        nt.assert_equal(self.group.name, group['name'])
        nt.assert_equal(self.user.fullname, group['creator']['name'])
        nt.assert_equal(len(group['members']), 1)
        nt.assert_equal(group['members'][0]['name'], self.user_two.fullname)
        nt.assert_equal(group['members'][0]['id'], self.user_two._id)
        nt.assert_equal(len(group['managers']), 1)
        nt.assert_equal(group['managers'][0]['name'], self.user.fullname)
        nt.assert_equal(group['managers'][0]['id'], self.user._id)
        nt.assert_equal([serialize_node_for_groups(self.project, self.group)],
                        group['nodes'])
        nt.assert_equal(group['nodes'][0]['title'], self.project.title)
        nt.assert_equal(group['nodes'][0]['permission'], WRITE)
    def test_more_than_one_projects_in_common(self, app, user_one, user_two):
        group = OSFGroupFactory(creator=user_one)
        group.make_member(user_two)

        project1 = ProjectFactory(creator=user_one)
        project1.add_contributor(contributor=user_two,
                                 permissions=CREATOR_PERMISSIONS,
                                 auth=Auth(user=user_one))
        project1.save()
        project2 = ProjectFactory(creator=user_one)
        project2.add_contributor(contributor=user_two,
                                 permissions=CREATOR_PERMISSIONS,
                                 auth=Auth(user=user_one))
        project2.save()

        project3 = ProjectFactory()
        project4 = ProjectFactory()
        project3.add_osf_group(group)
        project4.add_osf_group(group)
        project4.is_deleted = True
        project3.save()
        project4.save()

        RegistrationFactory(project=project1, creator=user_one, is_public=True)

        url = '/{}users/?show_projects_in_common=true'.format(API_BASE)
        res = app.get(url, auth=user_two.auth)
        user_json = res.json['data']
        for user in user_json:
            if user['id'] == user_two._id:
                meta = user['relationships']['nodes']['links']['related'][
                    'meta']
                assert 'projects_in_common' in meta
                assert meta['projects_in_common'] == 4
Example #3
0
    def test_node_contributor_detail_serializes_contributor_perms(
            self, app, user, make_resource_url, project_public):
        user_two = AuthUserFactory()
        project_public.add_contributor(user_two, permissions.WRITE)
        project_public.save()

        osf_group = OSFGroupFactory(creator=user)
        osf_group.make_member(user_two)
        project_public.add_osf_group(osf_group, permissions.ADMIN)

        url = make_resource_url(project_public._id, user_two._id)
        res = app.get(url, auth=user.auth)
        # Even though user_two has admin perms through group membership,
        # contributor endpoints return contributor permissions
        assert res.json['data']['attributes'][
            'permission'] == permissions.WRITE
        assert project_public.has_permission(user_two,
                                             permissions.ADMIN) is True
    def test_node_contributor_detail_serializes_contributor_perms(
            self, app, user):
        project = ProjectFactory(creator=user, is_public=True)
        user_two = AuthUserFactory()
        project.add_contributor(user_two, permissions.WRITE)
        project.save()

        osf_group = OSFGroupFactory(creator=user)
        osf_group.make_member(user_two)
        project.add_osf_group(osf_group, permissions.ADMIN)

        url = '/{}nodes/{}/contributors/{}/'.format(API_BASE, project._id,
                                                    user_two._id)
        res = app.get(url, auth=user.auth)
        # Even though user_two has admin perms through group membership,
        # contributor endpoints return contributor permissions
        assert res.json['data']['attributes'][
            'permission'] == permissions.WRITE
        assert project.has_permission(user_two, permissions.ADMIN) is True
Example #5
0
def osf_group(manager, member):
    group = OSFGroupFactory(name='Platform Team', creator=manager)
    group.make_member(member)
    return group
Example #6
0
def osf_group(manager, member, old_name):
    group = OSFGroupFactory(name=old_name, creator=manager)
    group.make_member(member)
    return group
Example #7
0
def group(group_manager, group_member, group_member_and_contributor):
    group = OSFGroupFactory(creator=group_manager)
    group.make_member(group_member)
    group.make_member(group_member_and_contributor)
    return group
    def test_delete_group(self, app, public_detail_url, public_project,
                          osf_group, member, manager, non_contrib,
                          write_contrib):
        with override_flag(OSF_GROUPS, active=True):
            public_project.add_contributor(manager,
                                           permissions=permissions.ADMIN)
            payload = {
                'data': [{
                    'type':
                    'node-groups',
                    'id':
                    '{}-{}'.format(public_project._id, osf_group._id)
                }]
            }
            # group has not been added to the node
            res = app.delete_json_api(public_detail_url,
                                      payload,
                                      auth=public_project.creator.auth,
                                      expect_errors=True)
            assert res.status_code == 404

            public_project.add_osf_group(osf_group, permissions.WRITE)

            # test member with write permission cannot remove group
            res = app.delete_json_api(public_detail_url,
                                      payload,
                                      auth=member.auth,
                                      expect_errors=True)
            assert res.status_code == 403

            # not logged in user cannot remove group
            res = app.delete_json_api(public_detail_url,
                                      payload,
                                      expect_errors=True)
            assert res.status_code == 401

            # non contributor cannot remove group
            res = app.delete_json_api(public_detail_url,
                                      payload,
                                      auth=non_contrib.auth,
                                      expect_errors=True)
            assert res.status_code == 403

            # write contributor cannot remove group
            res = app.delete_json_api(public_detail_url,
                                      payload,
                                      auth=write_contrib.auth,
                                      expect_errors=True)
            assert res.status_code == 403

            # test manager on group can remove group
            res = app.delete_json_api(public_detail_url,
                                      payload,
                                      auth=manager.auth)
            assert res.status_code == 204
            assert osf_group not in public_project.osf_groups

            # test member with admin permissions can remove group
            public_project.add_osf_group(osf_group, permissions.ADMIN)
            res = app.delete_json_api(public_detail_url,
                                      payload,
                                      auth=member.auth)
            assert res.status_code == 204
            assert osf_group not in public_project.osf_groups

            second_group = OSFGroupFactory(creator=non_contrib)
            second_group.make_member(member)
            public_project.add_osf_group(second_group, permissions.WRITE)

            # test member with write cannot remove group
            second_payload = {
                'data': [{
                    'type':
                    'node-groups',
                    'id':
                    '{}-{}'.format(public_project._id, second_group._id)
                }]
            }
            second_url = '/{}nodes/{}/groups/{}/'.format(
                API_BASE, public_project._id, second_group._id)
            res = app.delete_json_api(second_url,
                                      second_payload,
                                      auth=member.auth,
                                      expect_errors=True)
            assert res.status_code == 403

            # test manager can remove the group (even though they are not an admin contributor)
            res = app.delete_json_api(second_url,
                                      second_payload,
                                      auth=non_contrib.auth,
                                      expect_errors=True)
            assert res.status_code == 204
            assert second_group not in public_project.osf_groups
def osf_group(member, manager):
    group = OSFGroupFactory(creator=manager, name='Platform Team')
    group.make_member(member, auth=Auth(manager))
    return group