diff --git a/ckan/templates/package/snippets/resources_list.html b/ckan/templates/package/snippets/resources_list.html index 9eb739284e6..5fdd853a458 100644 --- a/ckan/templates/package/snippets/resources_list.html +++ b/ckan/templates/package/snippets/resources_list.html @@ -21,7 +21,7 @@

{{ _('Data and Resources') }}

{% endblock %} {% else %} - {% if h.check_access('resource_create', pkg) %} + {% if h.check_access('resource_create', {'package_id': pkg['id']}) %} {% trans url=h.url_for(controller='package', action='new_resource', id=pkg.name) %}

This dataset has no data, why not add some?

{% endtrans %} diff --git a/ckanext/example_idatasetform/templates/package/snippets/package_metadata_fields.html b/ckanext/example_idatasetform/templates/package/snippets/package_metadata_fields.html index 80614c3c590..34dc08a715b 100644 --- a/ckanext/example_idatasetform/templates/package/snippets/package_metadata_fields.html +++ b/ckanext/example_idatasetform/templates/package/snippets/package_metadata_fields.html @@ -1,9 +1,9 @@ {% ckan_extends %} -{# Remove 'free extras' from the package form, as we don't want to support - them on our example. #} -{% block custom_fields %} -{% endblock %} +{# You could remove 'free extras' from the package form like this, but we keep them for this example's tests. + {% block custom_fields %} + {% endblock %} +#} {% block package_metadata_fields %} diff --git a/ckanext/example_idatasetform/tests/test_controllers.py b/ckanext/example_idatasetform/tests/test_controllers.py new file mode 100644 index 00000000000..65e430a6b98 --- /dev/null +++ b/ckanext/example_idatasetform/tests/test_controllers.py @@ -0,0 +1,64 @@ +from nose.tools import assert_equal +from routes import url_for + +import ckan.plugins as plugins +import ckan.new_tests.helpers as helpers +import ckan.new_tests.factories as factories +import ckan.model as model + +submit_and_follow = helpers.submit_and_follow + + +def _get_package_edit_page(app, package_name): + user = factories.User() + env = {'REMOTE_USER': user['name'].encode('ascii')} + response = app.get( + url=url_for(controller='package', action='edit', id=package_name), + extra_environ=env, + ) + return env, response + + +class TestPackageController(helpers.FunctionalTestBase): + @classmethod + def setup_class(cls): + super(TestPackageController, cls).setup_class() + plugins.load('example_idatasetform') + + @classmethod + def teardown_class(cls): + plugins.unload('example_idatasetform') + super(TestPackageController, cls).teardown_class() + + 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['custom_text'] = 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['custom_text'], u'bar') + + 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')