Example #1
0
    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)
Example #2
0
    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
Example #3
0
    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)
Example #4
0
    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")
Example #5
0
    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")
Example #6
0
    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')
Example #7
0
    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')
Example #8
0
    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')
Example #9
0
    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")
Example #10
0
    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')
Example #11
0
    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")
Example #12
0
    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_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')
Example #14
0
    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"
Example #15
0
    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')
Example #16
0
    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
Example #17
0
    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, '/')
Example #18
0
    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
Example #19
0
    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
Example #20
0
    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')
Example #22
0
    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"
Example #23
0
    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'))
Example #24
0
    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 ******************')
Example #25
0
    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')
Example #26
0
    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"
Example #27
0
    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
Example #28
0
    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')
Example #29
0
    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 ******************')
Example #30
0
    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
Example #31
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)