示例#1
0
 def setup(self):
     self.user = factories.User()
     self.dataset = factories.Dataset()
示例#2
0
 def _before(self):
     self.follower = factories.User(name="follower")
     self.followee = self._create_dataset("followee")
     self.FOLLOWER_CLASS(self.follower["id"], self.followee["id"]).save()
     self._create_deleted_models()
示例#3
0
    def test_user_delete_by_unauthorized_user(self, app):
        user = factories.User()
        url = url_for("user.delete", id=user["id"])
        extra_environ = {"REMOTE_USER": "******"}

        app.post(url, status=403, extra_environ=extra_environ)
示例#4
0
    def test_user_update_with_short_password(self):
        user = factories.User()

        user['password'] = '******'  # This password is too short.
        assert_raises(logic.ValidationError, helpers.call_action,
                      'user_update', **user)
示例#5
0
def test_user_id_or_name_exists():
    user = factories.User(name="username")
    v = validators.user_id_or_name_exists(user["id"], _make_context())
    assert v == user["id"]
    v = validators.user_id_or_name_exists(user["name"], _make_context())
    assert v == user["name"]
示例#6
0
 def test_get_pending_requests_not_authorized(self):
     user = core_factories.User(name='user', id='user')
     context = {'model': model, 'user': '******'}
     with assert_raises(toolkit.NotAuthorized):
         requests = helpers.get_pending_requests(all_fields=True)
示例#7
0
 def test_get_linked_datasets_for_form_none(self):
     user = core_factories.User()
     context = {'model': model, 'user': user['name']}
     linked_datasets = get_linked_datasets_for_form(context=context,
                                                    user_id=user['id'])
     assert_equals(linked_datasets, [])
示例#8
0
    def test_approve_emails(self):
        model.repo.rebuild_db()
        dataset = factories.Dataset(author='test author')
        user = factories.User()
        env = {'REMOTE_USER': user['name'].encode('ascii')}
        # Should redirect back to dataset page
        response = self.app.get(url_for(
            controller='ckanext.ands.controller:DatasetDoiController',
            action='dataset_doi',
            id=dataset['name']),
                                extra_environ=env)
        for field in doi_request_fields:
            response.mustcontain(field)

        form = response.forms['dataset-doi']
        for field in form.fields:
            if field != 'save':
                form.set(field, 'test')

        with patch.object(ckanext.ands.controller,
                          'mail_recipient') as mock_mail:
            response = form.submit('submit', extra_environ=env)

        assert_equal(mock_mail.mock_calls, [
            call(
                'Dataportal support',
                config.get('ckanext.ands.support_emails'),
                'DataPortal Support: Request to publish dataset',
                u'A DOI has been requested\n\nDataset:  http://test.ckan.net/dataset/{}\n\n'
                u'Paper Title:  test\nConference Title: test\nAuthor List: test\nDOI Title: test\n'
                u'DOI Description: test\nOptional Message: test'.format(
                    dataset['name']))
        ])

        # Now approve it
        sysadmin = factories.Sysadmin()
        env = {'REMOTE_USER': sysadmin['name'].encode('ascii')}
        url = url_for(
            controller='ckanext.ands.controller:DatasetDoiController',
            action='dataset_doi_admin',
            id=dataset['name'])
        mock_response = Mock(content=json.dumps(
            dict(response=dict(responsecode='MT001', doi='testdoi'))))
        mock_post = Mock(return_value=mock_response)
        with patch.object(requests, 'post', new=mock_post):
            with patch.object(ckanext.ands.controller,
                              'mail_recipient') as mock_mail:
                response = self.app.post(url, {'xml': 'test'},
                                         extra_environ=env)

        assert_equal(mock_mail.mock_calls, [
            call(
                u'Mr. Test User', user['email'],
                'DataPortal DOI Request approved',
                u'A DOI you requested has been approved\n\nDataset:  http://test.ckan.net/dataset/{}'
                .format(dataset['id']))
        ])

        response = response.follow(extra_environ=env)
        # Shouldn't appear as already created
        response.mustcontain(no='Approve DOI')
        response.mustcontain(no='Request DOI')
        response.mustcontain('Cite this as')
示例#9
0
 def test_group_doesnt_exist(self, app):
     user = factories.User()
     env = {"REMOTE_USER": six.ensure_str(user["name"])}
     url = url_for("group.edit", id="doesnt_exist")
     app.get(url=url, extra_environ=env, status=404)
示例#10
0
 def test_user_factory(self):
     user1 = factories.User()
     user2 = factories.User()
     assert_not_equals(user1['id'], user2['id'])
示例#11
0
 def test_user_created(self):
     created = mock.Mock()
     with signals.user_created.connected_to(created):
         factories.User()
         assert created.call_count == 1
示例#12
0
def token():
    user = factories.User()
    token = ApiToken(user[u"id"])
    Session.add(token)
    Session.commit()
    return token
 def test_authed_user_show(self):
     fred = factories.User(name="fred")
     fred["capacity"] = "editor"
     context = {"user": None, "model": model}
     assert helpers.call_auth("user_show", context=context, id=fred["id"])
 def test_auth_user_show(self):
     fred = factories.User(name="fred")
     fred["capacity"] = "editor"
     context = {"user": None, "model": model}
     with pytest.raises(logic.NotAuthorized):
         helpers.call_auth("user_show", context=context, id=fred["id"])
    def setup_class(cls):

        super(TestStatsPlugin, cls).setup_class()

        model.repo.rebuild_db()

        user = factories.User(name='bob')
        org_users = [{'name': user['name'], 'capacity': 'editor'}]
        org1 = factories.Organization(name='org1', users=org_users)
        group2 = factories.Group()
        tag1 = {'name': 'tag1'}
        tag2 = {'name': 'tag2'}
        factories.Dataset(name='test1',
                          owner_org=org1['id'],
                          tags=[tag1],
                          user=user)
        factories.Dataset(name='test2',
                          owner_org=org1['id'],
                          groups=[{
                              'name': group2['name']
                          }],
                          tags=[tag1],
                          user=user)
        factories.Dataset(name='test3',
                          owner_org=org1['id'],
                          groups=[{
                              'name': group2['name']
                          }],
                          tags=[tag1, tag2],
                          user=user,
                          private=True)
        factories.Dataset(name='test4', user=user)
        # hack revision timestamps to be this date
        week1 = datetime.datetime(2011, 1, 5)
        for rev in model.Session.query(model.Revision):
            rev.timestamp = week1 + datetime.timedelta(seconds=1)

        # week 2
        rev = model.repo.new_revision()
        rev.author = 'bob'
        rev.timestamp = datetime.datetime(2011, 1, 12)
        model.Package.by_name(u'test2').delete()
        model.repo.commit_and_remove()

        # week 3
        rev = model.repo.new_revision()
        rev.author = 'sandra'
        rev.timestamp = datetime.datetime(2011, 1, 19)
        model.Package.by_name(u'test3').title = 'Test 3'
        model.repo.commit_and_remove()
        rev = model.repo.new_revision()
        rev.author = 'sandra'
        rev.timestamp = datetime.datetime(2011, 1, 20)
        model.Package.by_name(u'test4').title = 'Test 4'
        model.repo.commit_and_remove()

        # week 4
        rev = model.repo.new_revision()
        rev.author = 'bob'
        rev.timestamp = datetime.datetime(2011, 1, 26)
        model.Package.by_name(u'test3').notes = 'Test 3 notes'
        model.repo.commit_and_remove()
示例#16
0
 def setup(self):
     super(TestOrganizationRead, self).setup()
     self.app = helpers._get_test_app()
     self.user = factories.User()
     self.user_env = {'REMOTE_USER': self.user['name'].encode('ascii')}
     self.organization = factories.Organization(user=self.user)
示例#17
0
 def test_get_linked_datasets_for_display_none(self):
     user = core_factories.User()
     context = {'model': model, 'user': user['name']}
     linked_datasets = get_linked_datasets_for_display('', context=context)
     assert_equals(linked_datasets, [])
示例#18
0
文件: test_user.py 项目: tino097/ckan
 def test_edit_user_as_wrong_user(self, app, user):
     user_one = factories.User(password="******")
     env = {"Authorization": user["token"]}
     app.get(url_for("user.edit", id=user_one["name"]), extra_environ=env, status=403)
示例#19
0
 def test_get_data_container(self):
     user = core_factories.User()
     context = {'model': model, 'user': user['name']}
     container = factories.DataContainer(title='container1')
     result = helpers.get_data_container(container['id'], context=context)
     assert_equals(result['title'], container['title'])
示例#20
0
文件: test_user.py 项目: tino097/ckan
    def test_user_delete_by_unauthorized_user(self, app, user):
        user_one = factories.User()
        url = url_for("user.delete", id=user_one["id"])
        env = {"Authorization": user["token"]}

        app.post(url, extra_environ=env, status=403)
 def test_request_data_container_not_allowed_root_parent(self):
     user = core_factories.User()
     context = _create_context(user)
     org_dict = _create_org_dict(user)
     assert_raises(toolkit.NotAuthorized, call_auth, 'organization_create',
                   context, **org_dict)
示例#22
0
 def test_group_doesnt_exist(self):
     app = self._get_test_app()
     user = factories.User()
     env = {'REMOTE_USER': user['name'].encode('ascii')}
     url = url_for('group.edit', id='doesnt_exist')
     app.get(url=url, extra_environ=env, status=404)
示例#23
0
    def test_user_update_with_null_password(self):
        user = factories.User()

        user['password'] = None
        assert_raises(logic.ValidationError, helpers.call_action,
                      'user_update', **user)
示例#24
0
 def setup(self):
     super(TestGroupDelete, self).setup()
     self.app = helpers._get_test_app()
     self.user = factories.User()
     self.user_env = {'REMOTE_USER': self.user['name'].encode('ascii')}
     self.group = factories.Group(user=self.user)
示例#25
0
 def _before(self):
     self.follower = factories.User(name="follower")
     self.followee = self._create_group("followee")
     self.FOLLOWER_CLASS(self.follower["id"], self.followee["id"]).save()
     self._create_deleted_models()
     model.repo.commit_and_remove()
示例#26
0
    def test_search_sql_enforces_private(self):
        user1 = factories.User()
        user2 = factories.User()
        user3 = factories.User()
        ctx1 = {u'user': user1['name'], u'ignore_auth': False}
        ctx2 = {u'user': user2['name'], u'ignore_auth': False}
        ctx3 = {u'user': user3['name'], u'ignore_auth': False}

        org1 = factories.Organization(
            user=user1,
            users=[{u'name': user3['name'], u'capacity': u'member'}])
        org2 = factories.Organization(
            user=user2,
            users=[{u'name': user3['name'], u'capacity': u'member'}])
        ds1 = factories.Dataset(owner_org=org1['id'], private=True)
        ds2 = factories.Dataset(owner_org=org2['id'], private=True)
        r1 = helpers.call_action(
            u'datastore_create',
            resource={u'package_id': ds1['id']},
            fields=[{u'id': u'spam', u'type': u'text'}])
        r2 = helpers.call_action(
            u'datastore_create',
            resource={u'package_id': ds2['id']},
            fields=[{u'id': u'ham', u'type': u'text'}])

        sql1 = 'SELECT spam FROM "{0}"'.format(r1['resource_id'])
        sql2 = 'SELECT ham FROM "{0}"'.format(r2['resource_id'])
        sql3 = 'SELECT spam, ham FROM "{0}", "{1}"'.format(
            r1['resource_id'], r2['resource_id'])

        assert_raises(
            p.toolkit.NotAuthorized,
            helpers.call_action,
            'datastore_search_sql',
            context=ctx2,
            sql=sql1)
        assert_raises(
            p.toolkit.NotAuthorized,
            helpers.call_action,
            'datastore_search_sql',
            context=ctx1,
            sql=sql2)
        assert_raises(
            p.toolkit.NotAuthorized,
            helpers.call_action,
            'datastore_search_sql',
            context=ctx1,
            sql=sql3)
        assert_raises(
            p.toolkit.NotAuthorized,
            helpers.call_action,
            'datastore_search_sql',
            context=ctx2,
            sql=sql3)
        helpers.call_action(
            'datastore_search_sql',
            context=ctx1,
            sql=sql1)
        helpers.call_action(
            'datastore_search_sql',
            context=ctx2,
            sql=sql2)
        helpers.call_action(
            'datastore_search_sql',
            context=ctx3,
            sql=sql3)
示例#27
0
def _get_user_edit_page(app):
    user = factories.User()
    env = {"REMOTE_USER": six.ensure_str(user["name"])}
    response = app.get(url=url_for("user.edit"), extra_environ=env)
    return env, response, user
示例#28
0
 def setup(self):
     super(TestOrganizationNew, self).setup()
     self.app = helpers._get_test_app()
     self.user = factories.User()
     self.user_env = {'REMOTE_USER': self.user['name'].encode('ascii')}
     self.organization_new_url = url_for('organization.new')
示例#29
0
 def test_perform_reset_user_password_link_key_incorrect(self, app):
     user = factories.User()
     url = url_for("user.perform_reset", id=user["id"], key="randomness")
     app.get(url, status=403)
示例#30
0
    def test_token_revoke(self):
        user = factories.User()
        token = helpers.call_action(
            u"api_token_create",
            context={
                u"model": model,
                u"user": user[u"name"]
            },
            user=user[u"name"],
            name="token-name",
        )["token"]
        token2 = helpers.call_action(
            u"api_token_create",
            context={
                u"model": model,
                u"user": user[u"name"]
            },
            user=user[u"name"],
            name="token-name-2",
        )["token"]

        tokens = helpers.call_action(
            u"api_token_list",
            context={
                u"model": model,
                u"user": user[u"name"]
            },
            user=user[u"name"],
        )
        assert len(tokens) == 2

        helpers.call_action(
            u"api_token_revoke",
            context={
                u"model": model,
                u"user": user[u"name"]
            },
            token=token,
        )

        tokens = helpers.call_action(
            u"api_token_list",
            context={
                u"model": model,
                u"user": user[u"name"]
            },
            user=user[u"name"],
        )
        assert len(tokens) == 1

        helpers.call_action(
            u"api_token_revoke",
            context={
                u"model": model,
                u"user": user[u"name"]
            },
            jti=api_token.decode(token2)[u"jti"],
        )

        tokens = helpers.call_action(
            u"api_token_list",
            context={
                u"model": model,
                u"user": user[u"name"]
            },
            user=user[u"name"],
        )
        assert len(tokens) == 0