def test_showcase_new_redirects_to_manage_datasets(self, app): """Creating a new showcase redirects to the manage datasets form.""" if tk.check_ckan_version("2.9"): pytest.skip("submit_and_follow not supported") sysadmin = factories.Sysadmin() # need a dataset for the 'bulk_action.showcase_add' button to show factories.Dataset() env = {"REMOTE_USER": sysadmin["name"].encode("ascii")} response = app.get( url=url_for("showcase_new"), extra_environ=env, ) # create showcase form = response.forms["dataset-edit"] form["name"] = u"my-showcase" create_response = helpers.submit_and_follow(app, form, env, "save") # Unique to manage_datasets page assert "bulk_action.showcase_add" in create_response # Requested page is the manage_datasets url. assert (url_for("showcase_manage_datasets", id="my-showcase") == create_response.request.path)
def test_dataset_showcase_page_add_to_showcase_dropdown_submit(self, app): """ Submitting 'Add to showcase' form with selected showcase value creates a sc/pkg association. """ sysadmin = factories.Sysadmin() dataset = factories.Dataset(name="my-dataset") showcase_one = factories.Dataset(name="my-first-showcase", type="showcase") factories.Dataset(name="my-second-showcase", type="showcase") factories.Dataset(name="my-third-showcase", type="showcase") assert model.Session.query(ShowcasePackageAssociation).count() == 0 if tk.check_ckan_version("2.9"): pytest.skip("submit_and_follow not supported") env = {"REMOTE_USER": sysadmin["name"].encode("ascii")} response = app.get( url=url_for("showcase_dataset_showcase_list", id=dataset["id"]), extra_environ=env, ) form = response.forms["showcase-add"] form["showcase_added"] = showcase_one["id"] showcase_add_response = helpers.submit_and_follow(app, form, env) # returns to the correct page assert (showcase_add_response.request.path == "/dataset/showcases/my-dataset") # an association is created assert model.Session.query(ShowcasePackageAssociation).count() == 1
def test_resource_form_includes_custom_fields(self): app = self._get_test_app() env, response = _get_package_new_page_as_sysadmin(app) form = response.forms['dataset-edit'] form['name'] = 'resource-includes-custom' response = submit_and_follow(app, form, env, 'save') form = response.forms['resource-edit'] assert_true('camels_in_photo' in form.fields)
def test_owner_delete(self): response = self.app.get( url=url_for(controller="organization", action="delete", id=self.organization["id"]), status=200, extra_environ=self.user_env, ) form = response.forms["organization-confirm-delete-form"] response = submit_and_follow(self.app, form, name="delete", extra_environ=self.user_env) organization = helpers.call_action("organization_show", id=self.organization["id"]) assert_equal(organization["state"], "deleted")
def test_saved(self): response = self.app.get(url=self.organization_new_url, extra_environ=self.user_env) form = response.forms["organization-edit-form"] form["name"] = u"saved" response = submit_and_follow(self.app, form, name="save", extra_environ=self.user_env) group = helpers.call_action("organization_show", id="saved") assert_equal(group["title"], u"") assert_equal(group["type"], "organization") assert_equal(group["state"], "active")
def test_owner_delete(self): response = self.app.get( url=url_for('organization.delete', id=self.organization['id']), status=200, extra_environ=self.user_env) form = response.forms['organization-confirm-delete-form'] response = submit_and_follow( self.app, form, name='delete', extra_environ=self.user_env) organization = helpers.call_action( 'organization_show', id=self.organization['id']) assert_equal(organization['state'], 'deleted')
def test_saved(self): response = self.app.get(url=self.organization_new_url, extra_environ=self.user_env) form = response.forms['organization-edit-form'] form['name'] = u'saved' response = submit_and_follow(self.app, form, name='save', extra_environ=self.user_env) group = helpers.call_action('organization_show', id='saved') assert_equal(group['title'], u'') assert_equal(group['type'], 'organization') assert_equal(group['state'], 'active')
def test_sysadmin_delete(self): sysadmin = factories.Sysadmin() extra_environ = {"REMOTE_USER": sysadmin["name"].encode("ascii")} response = self.app.get( url=url_for(controller="organization", action="delete", id=self.organization["id"]), status=200, extra_environ=extra_environ, ) form = response.forms["organization-confirm-delete-form"] response = submit_and_follow(self.app, form, name="delete", extra_environ=self.user_env) organization = helpers.call_action("organization_show", id=self.organization["id"]) assert_equal(organization["state"], "deleted")
def test_sysadmin_delete(self): sysadmin = factories.Sysadmin() extra_environ = {'REMOTE_USER': sysadmin['name'].encode('ascii')} response = self.app.get( url=url_for('organization.delete', id=self.organization['id']), status=200, extra_environ=extra_environ) form = response.forms['organization-confirm-delete-form'] response = submit_and_follow( self.app, form, name='delete', extra_environ=self.user_env) organization = helpers.call_action( 'organization_show', id=self.organization['id']) assert_equal(organization['state'], 'deleted')
def test_all_fields_saved(self): app = helpers._get_test_app() response = app.get(url=self.organization_new_url, extra_environ=self.user_env) form = response.forms["organization-edit-form"] form["name"] = u"all-fields-saved" form["title"] = "Science" form["description"] = "Sciencey datasets" form["image_url"] = "http://example.com/image.png" response = submit_and_follow(self.app, form, name="save", extra_environ=self.user_env) group = helpers.call_action("organization_show", id="all-fields-saved") assert_equal(group["title"], u"Science") assert_equal(group["description"], "Sciencey datasets")
def test_edit_converted_extra_field(self): dataset = factories.Dataset(custom_text='foo') app = self._get_test_app() env, response = _get_package_edit_page(app, dataset['name']) form = response.forms['dataset-edit'] form['relation'] = u'test_external_id' response = submit_and_follow(app, form, env, 'save') # just check it has finished the edit, rather than being sent on to the # resource create/edit form. assert_equal(response.req.path, '/dataset/%s' % dataset['name']) pkg = model.Package.by_name(dataset['name']) assert_equal(pkg.extras['relation'], u'test_external_id')
def test_saved(self, app, user_env): response = app.get( url=url_for("organization.new"), extra_environ=user_env ) form = response.forms["organization-edit-form"] form["name"] = u"saved" response = submit_and_follow( app, form, name="save", extra_environ=user_env ) group = helpers.call_action("organization_show", id="saved") assert group["title"] == u"" assert group["type"] == "organization" assert group["state"] == "active"
def test_all_fields_saved(self): app = helpers._get_test_app() response = app.get(url=self.organization_new_url, extra_environ=self.user_env) form = response.forms['organization-edit-form'] form['name'] = u'all-fields-saved' form['title'] = 'Science' form['description'] = 'Sciencey datasets' form['image_url'] = 'http://example.com/image.png' response = submit_and_follow(self.app, form, name='save', extra_environ=self.user_env) group = helpers.call_action('organization_show', id='all-fields-saved') assert_equal(group['title'], u'Science') assert_equal(group['description'], 'Sciencey datasets')
def test_delete_organization_with_datasets(self): ''' Test deletion of organization that has datasets''' text = 'Organization cannot be deleted while it still has datasets' datasets = [ factories.Dataset(owner_org=self.organization['id']) for i in range(0, 5) ] response = self.app.get( url=url_for('organization.delete', id=self.organization['id']), status=200, extra_environ=self.user_env) form = response.forms['organization-confirm-delete-form'] response = submit_and_follow( self.app, form, name='delete', extra_environ=self.user_env) assert text in response.body
def test_basic(self, mail_recipient): dataset = Dataset() Subscription( dataset_id=dataset['id'], email='*****@*****.**', skip_verification=True, ) response = self._get_test_app().get('/subscribe/request_manage_code') form = response.forms["request-manage-code-form"] form["email"] = u"*****@*****.**" response = submit_and_follow(self._get_test_app(), form, {}, "save") mail_recipient.assert_called_once() assert_equal(response.request.path, '/')
def test_spatial_extra_base(self, app): user = factories.User() env = {"REMOTE_USER": user["name"].encode("ascii")} dataset = factories.Dataset(user=user) if tk.check_ckan_version(min_version="2.9"): offset = url_for("dataset.edit", id=dataset["id"]) else: offset = url_for(controller="package", action="edit", id=dataset["id"]) res = app.get(offset, extra_environ=env) if tk.check_ckan_version(min_version="2.9"): data = { "name": dataset['name'], "extras__0__key": u"spatial", "extras__0__value": self.geojson_examples["point"] } res = app.post(offset, environ_overrides=env, data=data) else: form = res.forms[1] form['extras__0__key'] = u'spatial' form['extras__0__value'] = self.geojson_examples['point'] res = helpers.submit_and_follow(app, form, env, 'save') assert "Error" not in res, res package_extent = ( Session.query(PackageExtent) .filter(PackageExtent.package_id == dataset["id"]) .first() ) geojson = json.loads(self.geojson_examples["point"]) assert package_extent.package_id == dataset["id"] from sqlalchemy import func assert ( Session.query(func.ST_X(package_extent.the_geom)).first()[0] == geojson["coordinates"][0] ) assert ( Session.query(func.ST_Y(package_extent.the_geom)).first()[0] == geojson["coordinates"][1] ) assert package_extent.the_geom.srid == self.db_srid
def test_owner_delete(self, app, initial_data): response = app.get( url=url_for( "organization.delete", id=initial_data["organization"]["id"] ), status=200, extra_environ=initial_data["user_env"], ) form = response.forms["organization-confirm-delete-form"] response = submit_and_follow( app, form, name="delete", extra_environ=initial_data["user_env"] ) organization = helpers.call_action( "organization_show", id=initial_data["organization"]["id"] ) assert organization["state"] == "deleted"
def test_edit_custom_extra_field(self): # i.e. an extra field that is not mentioned in the schema, filled in on # the form in the 'custom-fields' section dataset = factories.Dataset(extras=[{'key': 'testkey', 'value': 'foo'}]) app = self._get_test_app() env, response = _get_package_edit_page(app, dataset['name']) form = response.forms['dataset-edit'] form['extras__0__value'] = u'bar' response = submit_and_follow(app, form, env, 'save') # just check it has finished the edit, rather than being sent on to the # resource create/edit form. assert_equal(response.req.path, '/dataset/%s' % dataset['name']) pkg = model.Package.by_name(dataset['name']) assert_equal(pkg.extras['testkey'], u'bar')
def test_all_fields_saved(self, app, user_env): response = app.get( url=url_for("organization.new"), extra_environ=user_env ) form = response.forms["organization-edit-form"] form["name"] = u"all-fields-saved" form["title"] = "Science" form["description"] = "Sciencey datasets" form["image_url"] = "http://example.com/image.png" response = submit_and_follow( app, form, name="save", extra_environ=user_env ) group = helpers.call_action("organization_show", id="all-fields-saved") assert group["title"] == u"Science" assert group["description"] == "Sciencey datasets"
def test_form_submit(self): Subscription( email='*****@*****.**', frequency='WEEKLY', skip_verification=True, ) code = email_auth.create_code('*****@*****.**') response = self._get_test_app().get('/subscribe/manage', params={'code': code}, status=200) form = response.forms["frequency-form"] form["frequency"] = u"IMMEDIATE" response = submit_and_follow(self._get_test_app(), form, {}, "save") assert_in('<option value="IMMEDIATE" selected>', response.body.decode('utf8'))
def test_devel(self): pp = PrettyPrinter(indent=2) app = self._get_test_app() #1 create a package logger.debug( '*************************************************************') #url = url_for(controller='package', action='new') env, response = _get_package_new_page_as_sysadmin(app) form = response.forms['dataset-edit'] assert_true('humps' in form.fields, msg='!!!!!!!!!!! humps not in form !!!!!!!!!!!') with open("/home/vagrant/response.html", "w") as f: f.write(resp._body) logger.debug('*************************** dataset-edit fields:') logger.debug(pp.pformat(form.__dict__)) form['title'] = 'DS1' form['name'] = 'ds1' form['notes'] = 'test' form['date_created'] = '01/01/2001' form['date_modified'] = '01/01/2001' resp = helpers.submit_and_follow(self.app, form, env, 'save') #pkg = model.Package.by_name('ds1') #logger.debug(pp.pformat(pkg)) #2 clone # This doesn't work - form expects opendata package #resp = app.get(url='/dataset/ds1', extra_environ=env) #resp = app.get(url=url_for('clone', id='ds1'), extra_environ=env) #assert_true('id-clone-ds-form' in resp, msg='Response did not contain clone form') logger.debug('********************* RESPONSE:') logger.debug(str(resp)) logger.debug( '*************************************************************') assert_true( False, msg= '***************** THIS ACTUALLY COMPLETED :O ******************')
def test_owner_delete(self): app = helpers._get_test_app() with app.flask_app.test_request_context(): url = url_for(controller='organization', action='delete', id=self.organization['id']) response = app.get(url, status=200, extra_environ=self.user_env) form = response.forms['organization-confirm-delete-form'] response = submit_and_follow(app, form, name='delete', extra_environ=self.user_env) organization = helpers.call_action('organization_show', id=self.organization['id']) assert_equal(organization['state'], 'deleted')
def test_sysadmin_delete(self, app, initial_data): sysadmin = factories.Sysadmin() extra_environ = {"REMOTE_USER": sysadmin["name"].encode("ascii")} response = app.get( url=url_for( "organization.delete", id=initial_data["organization"]["id"] ), status=200, extra_environ=extra_environ, ) form = response.forms["organization-confirm-delete-form"] response = submit_and_follow( app, form, name="delete", extra_environ=initial_data["user_env"] ) organization = helpers.call_action( "organization_show", id=initial_data["organization"]["id"] ) assert organization["state"] == "deleted"
def test_delete_organization_with_datasets(self, app, initial_data): """ Test deletion of organization that has datasets""" text = "Organization cannot be deleted while it still has datasets" datasets = [ factories.Dataset(owner_org=initial_data["organization"]["id"]) for i in range(0, 5) ] response = app.get( url=url_for( "organization.delete", id=initial_data["organization"]["id"] ), status=200, extra_environ=initial_data["user_env"], ) form = response.forms["organization-confirm-delete-form"] response = submit_and_follow( app, form, name="delete", extra_environ=initial_data["user_env"] ) assert text in response.body
def test_sysadmin_delete(self): app = helpers._get_test_app() sysadmin = factories.Sysadmin() extra_environ = {'REMOTE_USER': sysadmin['name'].encode('ascii')} with app.flask_app.test_request_context(): url = url_for(controller='organization', action='delete', id=self.organization['id']) response = app.get(url=url, status=200, extra_environ=extra_environ) form = response.forms['organization-confirm-delete-form'] response = submit_and_follow(app, form, name='delete', extra_environ=self.user_env) organization = helpers.call_action('organization_show', id=self.organization['id']) assert_equal(organization['state'], 'deleted')
def test_devel(self): pp = PrettyPrinter(indent=2) app = self._get_test_app() #1 create a package logger.debug('*************************************************************') #url = url_for(controller='package', action='new') env, response = _get_package_new_page_as_sysadmin(app) form = response.forms['dataset-edit'] assert_true('humps' in form.fields, msg='!!!!!!!!!!! humps not in form !!!!!!!!!!!') with open("/home/vagrant/response.html", "w") as f: f.write(resp._body) logger.debug('*************************** dataset-edit fields:') logger.debug(pp.pformat(form.__dict__)) form['title'] = 'DS1' form['name'] = 'ds1' form['notes'] = 'test' form['date_created'] = '01/01/2001' form['date_modified'] = '01/01/2001' resp = helpers.submit_and_follow(self.app, form, env, 'save') #pkg = model.Package.by_name('ds1') #logger.debug(pp.pformat(pkg)) #2 clone # This doesn't work - form expects opendata package #resp = app.get(url='/dataset/ds1', extra_environ=env) #resp = app.get(url=url_for('clone', id='ds1'), extra_environ=env) #assert_true('id-clone-ds-form' in resp, msg='Response did not contain clone form') logger.debug('********************* RESPONSE:') logger.debug(str(resp)) logger.debug('*************************************************************') assert_true(False, msg='***************** THIS ACTUALLY COMPLETED :O ******************')
def test_dataset_showcase_page_remove_showcase_button_submit(self, app): """ Submitting 'Remove' form with selected showcase value deletes a sc/pkg association. """ sysadmin = factories.Sysadmin() dataset = factories.Dataset(name="my-dataset") showcase_one = factories.Dataset(name="my-first-showcase", type="showcase") context = {"user": sysadmin["name"]} helpers.call_action( "ckanext_showcase_package_association_create", context=context, package_id=dataset["id"], showcase_id=showcase_one["id"], ) assert model.Session.query(ShowcasePackageAssociation).count() == 1 if tk.check_ckan_version("2.9"): pytest.skip("submit_and_follow not supported") env = {"REMOTE_USER": sysadmin["name"].encode("ascii")} response = app.get( url=url_for("showcase_dataset_showcase_list", id=dataset["id"]), extra_environ=env, ) # Submit the remove form. form = response.forms[1] assert form["remove_showcase_id"].value == showcase_one["id"] showcase_remove_response = helpers.submit_and_follow(app, form, env) # returns to the correct page assert (showcase_remove_response.request.path == "/dataset/showcases/my-dataset") # the association is deleted assert model.Session.query(ShowcasePackageAssociation).count() == 0
def test_showcase_edit_redirects_to_showcase_details(self, app): """Editing a showcase redirects to the showcase details page.""" if tk.check_ckan_version("2.9"): pytest.skip("submit_and_follow not supported") sysadmin = factories.Sysadmin() factories.Dataset(name="my-showcase", type="showcase") env = {"REMOTE_USER": sysadmin["name"].encode("ascii")} response = app.get( url=url_for("showcase_edit", id="my-showcase"), extra_environ=env, ) # edit showcase form = response.forms["dataset-edit"] form["name"] = u"my-changed-showcase" edit_response = helpers.submit_and_follow(app, form, env, "save") # Requested page is the showcase read url. assert (url_for( "showcase_read", id="my-changed-showcase") == edit_response.request.path)