Exemple #1
0
    def test_that_it_does_not_return_groups(self):
        """

        organization_list_for_user() should not return groups that the user is
        a member, editor or admin of.

        """
        user = factories.User()
        context = {'user': user['name']}
        group_1 = factories.Group()
        group_2 = factories.Group()
        group_3 = factories.Group()
        helpers.call_action('member_create', id=group_1['id'],
                            object=user['id'], object_type='user',
                            capacity='member')
        helpers.call_action('member_create', id=group_2['id'],
                            object=user['id'], object_type='user',
                            capacity='editor')
        helpers.call_action('member_create', id=group_3['id'],
                            object=user['id'], object_type='user',
                            capacity='admin')

        organizations = helpers.call_action('organization_list_for_user',
                                            context=context)

        assert organizations == []
Exemple #2
0
    def test_group_list_groups_returned(self):

        parent_group = factories.Group(tags=[{'name': 'river'}])
        child_group = factories.Group(groups=[{
            'name': parent_group['name']
        }],
                                      tags=[{
                                          'name': 'river'
                                      }])

        group_list = helpers.call_action('group_list',
                                         all_fields=True,
                                         include_groups=True)

        child_group_returned = group_list[0]
        if group_list[0]['name'] == child_group['name']:
            child_group_returned, parent_group_returned = group_list
        else:
            child_group_returned, parent_group_returned = group_list[::-1]
        expected_parent_group = dict(parent_group.items()[:])
        for field in ('users', 'tags', 'extras'):
            del expected_parent_group[field]
        expected_parent_group['capacity'] = u'public'
        expected_parent_group['packages'] = 0
        expected_parent_group['package_count'] = 0
        eq(child_group_returned['groups'], [expected_parent_group])
Exemple #3
0
    def test_group_list(self):

        group1 = factories.Group()
        group2 = factories.Group()

        group_list = helpers.call_action('group_list')

        assert (sorted(group_list) ==
                sorted([g['name'] for g in [group1, group2]]))
Exemple #4
0
    def test_group_list_in_presence_of_custom_group_types(self):
        '''Getting the group_list shouldn't return custom group types.'''
        group1 = factories.Group()
        group2 = factories.Group()
        factories.Group(type='custom')

        group_list = helpers.call_action('group_list')

        assert (sorted(group_list) ==
                sorted([g['name'] for g in [group1, group2]]))
    def test_group_list_dictize_sorted(self):
        factories.Group(name='aa')
        factories.Group(name='bb')
        group_list = [model.Group.get(u'bb'), model.Group.get(u'aa')]
        context = {'model': model, 'session': model.Session}

        group_dicts = model_dictize.group_list_dictize(group_list, context)

        # list is resorted by name
        assert_equal(group_dicts[0]['name'], 'aa')
        assert_equal(group_dicts[1]['name'], 'bb')
Exemple #6
0
    def test_group_list_sort_by_package_count(self):

        factories.Group(name='aa')
        factories.Group(name='bb')
        factories.Dataset(groups=[{'name': 'aa'}, {'name': 'bb'}])
        factories.Dataset(groups=[{'name': 'bb'}])

        group_list = helpers.call_action('group_list', sort='package_count')
        # default is descending order

        eq(group_list, ['bb', 'aa'])
    def test_group_dictize_group_with_parent_group(self):
        factories.Group(name='parent')
        factories.Group(name='child', groups=[{'name': 'parent'}])
        group_obj = model.Group.get('child')
        context = {'model': model, 'session': model.Session}

        group = model_dictize.group_dictize(group_obj, context)

        assert_equal(len(group['groups']), 1)
        assert_equal(group['groups'][0]['name'], 'parent')
        assert_equal(group['groups'][0]['packages'], 0)  # deprecated
        assert_equal(group['groups'][0]['package_count'], 0)
    def test_group_list_dictize_including_groups(self):
        factories.Group(name='parent')
        factories.Group(name='child', groups=[{'name': 'parent'}])
        group_list = [model.Group.get(u'parent'), model.Group.get(u'child')]
        context = {'model': model, 'session': model.Session}

        child_dict, parent_dict = model_dictize.group_list_dictize(
            group_list, context, include_groups=True)

        assert_equal(parent_dict['name'], 'parent')
        assert_equal(child_dict['name'], 'child')
        assert_equal(parent_dict['groups'], [])
        assert_equal(child_dict['groups'][0]['name'], 'parent')
Exemple #9
0
    def test_organization_list_in_presence_of_custom_group_types(self):
        '''
        Getting the organization_list only returns organization group
        types.
        '''
        org1 = factories.Organization()
        org2 = factories.Organization()
        factories.Group(type="custom")
        factories.Group(type="custom")

        org_list = helpers.call_action('organization_list')

        assert (sorted(org_list) == sorted([g['name'] for g in [org1, org2]]))
Exemple #10
0
    def test_group_list_in_presence_of_organizations(self):
        '''
        Getting the group_list should only return groups of type 'group' (not
        organizations).
        '''
        group1 = factories.Group()
        group2 = factories.Group()
        factories.Organization()
        factories.Organization()

        group_list = helpers.call_action('group_list')

        assert (sorted(group_list) ==
                sorted([g['name'] for g in [group1, group2]]))
Exemple #11
0
    def test_group_list_return_custom_group(self):
        '''
        Getting the group_list with a type defined should only return
        groups of that type.
        '''
        group1 = factories.Group(type='custom')
        group2 = factories.Group(type='custom')
        factories.Group()
        factories.Group()

        group_list = helpers.call_action('group_list', type='custom')

        assert (sorted(group_list) ==
                sorted([g['name'] for g in [group1, group2]]))
Exemple #12
0
 def test_atom_feed_page_zero_gives_error(self):
     group = factories.Group()
     offset = url_for(controller='feed', action='group',
                      id=group['name']) + '?page=0'
     app = self._get_test_app()
     res = app.get(offset, status=400)
     assert '"page" parameter must be a positive integer' in res, res
Exemple #13
0
    def test_group_show_no_packages_returned(self):

        user_name = helpers.call_action('get_site_user')['name']

        group = factories.Group()

        datasets = [
            {
                'name': 'dataset_1',
                'groups': [{
                    'name': group['name']
                }]
            },
            {
                'name': 'dataset_2',
                'groups': [{
                    'name': group['name']
                }]
            },
        ]

        for dataset in datasets:
            helpers.call_action('package_create',
                                context={'user': user_name},
                                **dataset)

        group_dict = helpers.call_action('group_show',
                                         id=group['id'],
                                         include_datasets=False)

        assert not 'packages' in group_dict
        assert group_dict['package_count'] == 2
Exemple #14
0
    def test_organization_show_error_for_group(self):

        group = factories.Group()

        nose.tools.assert_raises(
            logic.NotFound,
            helpers.call_action, 'organization_show', id=group['id'])
Exemple #15
0
    def test_group_show_packages_returned(self):

        user_name = helpers.call_action('get_site_user')['name']

        group = factories.Group(user=factories.User())

        datasets = [
            {
                'name': 'dataset_1',
                'groups': [{
                    'name': group['name']
                }]
            },
            {
                'name': 'dataset_2',
                'groups': [{
                    'name': group['name']
                }]
            },
        ]

        for dataset in datasets:
            helpers.call_action('package_create',
                                context={'user': user_name},
                                **dataset)

        group_dict = helpers.call_action('group_show', id=group['id'])

        assert len(group_dict['packages']) == 2
        assert group_dict['package_count'] == 2
Exemple #16
0
    def test_group_show_does_not_show_private_datasets(self):
        '''group_show() should never show private datasets.

        If a dataset is a private member of an organization and also happens to
        be a member of a group, group_show() should not return the dataset as
        part of the group dict, even if the user calling group_show() is a
        member or admin of the group or the organization or is a sysadmin.

        '''
        org_member = factories.User()
        org = factories.Organization(user=org_member)
        private_dataset = factories.Dataset(user=org_member,
                                            owner_org=org['name'],
                                            private=True)

        group = factories.Group()

        # Add the private dataset to the group.
        helpers.call_action('member_create',
                            id=group['id'],
                            object=private_dataset['id'],
                            object_type='package',
                            capacity='public')

        # Create a member user and an admin user of the group.
        group_member = factories.User()
        helpers.call_action('member_create',
                            id=group['id'],
                            object=group_member['id'],
                            object_type='user',
                            capacity='member')
        group_admin = factories.User()
        helpers.call_action('member_create',
                            id=group['id'],
                            object=group_admin['id'],
                            object_type='user',
                            capacity='admin')

        # Create a user who isn't a member of any group or organization.
        non_member = factories.User()

        sysadmin = factories.Sysadmin()

        # None of the users should see the dataset when they call group_show().
        for user in (org_member, group_member, group_admin, non_member,
                     sysadmin, None):

            if user is None:
                context = None  # No user logged-in.
            else:
                context = {'user': user['name']}

            group = helpers.call_action('group_show',
                                        id=group['id'],
                                        context=context)

            assert private_dataset['id'] not in [
                dataset['id'] for dataset in group['packages']
            ], ("group_show() should never show private datasets")
    def test_group_dictize_group_with_extra(self):
        factories.Group(extras=[{'key': 'k1', 'value': 'v1'}])
        group_obj = model.Session.query(model.Group).filter_by().first()
        context = {'model': model, 'session': model.Session}

        group = model_dictize.group_dictize(group_obj, context)

        assert_equal(group['extras'][0]['key'], 'k1')
    def test_group_list_dictize_sort_by_package_count(self):
        factories.Group(name='aa')
        factories.Group(name='bb')
        factories.Dataset(groups=[{'name': 'aa'}, {'name': 'bb'}])
        factories.Dataset(groups=[{'name': 'bb'}])
        group_list = [model.Group.get(u'bb'), model.Group.get(u'aa')]
        context = {'model': model, 'session': model.Session}

        group_dicts = model_dictize.group_list_dictize(
            group_list,
            context,
            sort_key=lambda x: x['package_count'],
            with_package_counts=True)

        # list is resorted by package counts
        assert_equal(group_dicts[0]['name'], 'aa')
        assert_equal(group_dicts[1]['name'], 'bb')
def _get_group_edit_page(app, group_type, group_name=None):
    user = factories.User()
    if group_name is None:
        group = factories.Group(user=user, type=group_type)
        group_name = group['name']
    env = {'REMOTE_USER': user['name'].encode('ascii')}
    url = url_for('%s_edit' % group_type, id=group_name)
    response = app.get(url=url, extra_environ=env)
    return env, response, group_name
Exemple #20
0
    def test_group_list_extras_returned(self):

        group = factories.Group(extras=[{'key': 'key1', 'value': 'val1'}])

        group_list = helpers.call_action('group_list', all_fields=True,
                                         include_extras=True)

        eq(group_list[0]['extras'], group['extras'])
        eq(group_list[0]['extras'][0]['key'], 'key1')
Exemple #21
0
    def test_showing_group_in_showing_list_for_user_excludes_normal_groups(
            self, mockauth):
        '''
        The showings_list_admin action returns a showing group created by the
        user, but doesn't contains normal groups created by user.
        '''
        mockauth.return_value = True

        showing_admin = factories.User()

        factories.Group(user=showing_admin)
        showing_group = factories.Group(type='showing', user=showing_admin)

        showing_list = helpers.call_action('showings_list_admin',
                                           context={'user': showing_admin})
        assert len(showing_list) == 1
        assert showing_list[0]['name'] == showing_group['name']
        assert showing_list[0]['type'] == 'showing'
Exemple #22
0
    def test_group_show__deleted_group_is_visible_to_its_member(self):

        fred = factories.User(name='fred')
        org = factories.Group(users=[fred])
        context = {'model': model}
        context['user'] = '******'

        ret = helpers.call_auth('group_show', context=context, id=org['name'])
        assert ret
Exemple #23
0
    def test_group_show(self):

        group = factories.Group(user=factories.User())

        group_dict = helpers.call_action('group_show', id=group['id'])

        # FIXME: Should this be returned by group_create?
        group_dict.pop('num_followers', None)
        assert group_dict == group
Exemple #24
0
 def test_about(self):
     app = self._get_test_app()
     user = factories.User()
     group = factories.Group(user=user, type=custom_group_type)
     group_name = group['name']
     env = {'REMOTE_USER': user['name'].encode('ascii')}
     url = url_for('%s_about' % custom_group_type, id=group_name)
     response = app.get(url=url, extra_environ=env)
     response.mustcontain(group_name)
    def test_group_dictize_group_with_dataset(self):
        group_ = factories.Group()
        package = factories.Dataset(groups=[{'name': group_['name']}])
        group_obj = model.Session.query(model.Group).filter_by().first()
        context = {'model': model, 'session': model.Session}

        group = model_dictize.group_dictize(group_obj, context)

        assert_equal(group['packages'][0]['name'], package['name'])
        assert_equal(group['packages'][0]['groups'][0]['name'], group_['name'])
Exemple #26
0
    def test_group_show__deleted_group_is_hidden_to_public(self):
        group = factories.Group(state='deleted')
        context = {'model': model}
        context['user'] = ''

        assert_raises(logic.NotAuthorized,
                      helpers.call_auth,
                      'group_show',
                      context=context,
                      id=group['name'])
    def test_group_list_dictize_including_extras(self):
        factories.Group(extras=[{'key': 'k1', 'value': 'v1'}])
        group_list = model.Session.query(model.Group).filter_by().all()
        context = {'model': model, 'session': model.Session}

        group_dicts = model_dictize.group_list_dictize(group_list,
                                                       context,
                                                       include_extras=True)

        assert_equal(group_dicts[0]['extras'][0]['key'], 'k1')
    def test_group_list_dictize_without_package_count(self):
        group_ = factories.Group()
        factories.Dataset(groups=[{'name': group_['name']}])
        group_list = [model.Group.get(group_['name'])]
        context = {'model': model, 'session': model.Session}

        group_dicts = model_dictize.group_list_dictize(
            group_list, context, with_package_counts=False)

        assert 'packages' not in group_dicts[0]
Exemple #29
0
    def test_editors_and_admins_with_1_duplicate_admin(self):
        '''Test editors_and_admins() with one user who is admin of two groups.

        Should return a list with just the one user's ID.

        '''
        user = factories.User()
        factories.Organization(user=user)
        factories.Group(user=user)

        assert plugin.editors_and_admins() == [user['id']]
    def test_group_dictize(self):
        group = factories.Group(name='test_dictize')
        group_obj = model.Session.query(model.Group).filter_by().first()
        context = {'model': model, 'session': model.Session}

        group = model_dictize.group_dictize(group_obj, context)

        assert_equal(group['name'], 'test_dictize')
        assert_equal(group['packages'], [])
        assert_equal(group['extras'], [])
        assert_equal(group['tags'], [])
        assert_equal(group['groups'], [])