Skip to content

form pages for open info records#1663

Closed
wardi wants to merge 26 commits intomasterfrom
OPEN-4035-info-pages
Closed

form pages for open info records#1663
wardi wants to merge 26 commits intomasterfrom
OPEN-4035-info-pages

Conversation

@wardi
Copy link
Member

@wardi wardi commented Mar 15, 2026

Additional changes based on #4034 for open information form pages UI

wardi and others added 26 commits June 13, 2025 11:46
# Conflicts:
#	ckanext/canada/templates/package/snippets/resources.html
#	ckanext/canada/templates/scheming/package/snippets/package_form.html
### RESOLVED.
- Cont form pages.
- Cont scheming pages.
- Cont scheming pages.
- Make the manage button for datasets dropdown with page links for scheming pages.
- Pyright fixes.
- Additional layout changes for the sidebar stages/pages.
- Fix stages sidebar template call for pd types.
- Fix a11y issues in the webform pages.
@codecov
Copy link

codecov bot commented Mar 15, 2026

❌ 5 Tests Failed:

Tests completed Failed Passed Skipped
229 5 224 0
View the top 3 failed test(s) by shortest run time
ckanext/canada/tests/test_validators.py::TestNAVLSchema::test_raw_required
Stack Traces | 0.233s run time
self = <ckanext.canada.tests.test_validators.TestNAVLSchema object at 0x7ff6ec0089a0>

    def test_raw_required(self):
        raw_pkg = dict(self.complete_pkg)
        del raw_pkg['title_translated']
    
        with pytest.raises(ValidationError) as ve:
>           self.normal_action.package_create(**raw_pkg)
E           Failed: DID NOT RAISE <class 'ckan.logic.ValidationError'>

.../canada/tests/test_validators.py:215: Failed
ckanext/canada/tests/test_logic.py::TestResourcePositionLogic::test_delete_resource_assigns_positions
Stack Traces | 0.701s run time
self = <ckanext.canada.tests.test_logic.TestResourcePositionLogic object at 0x7f5ab73c1130>

    def test_delete_resource_assigns_positions(self):
        """
        Deleting a Resource from a package should reorder the other
        Resources properly, and set the deleted position to 0.
        """
        pkg = self.sysadmin_action.package_create(
            name='44cefde8-7cce-defc-1234-56789abcd34c',
            resources=[self.res_dict, self.res_dict, self.res_dict,
                       self.res_dict, self.res_dict, self.res_dict],
            **self.pkg_dict)
    
        assert len(pkg['resources']) == 6
        assert pkg['resources'][0]['position'] == 0
        assert pkg['resources'][1]['position'] == 1
        assert pkg['resources'][2]['position'] == 2
        assert pkg['resources'][3]['position'] == 3
        assert pkg['resources'][4]['position'] == 4
        assert pkg['resources'][5]['position'] == 5
    
        deleted_res_id = pkg['resources'][2]['id']
    
        self.sysadmin_action.resource_delete(
            id=deleted_res_id)
    
        pkg = self.sysadmin_action.package_show(id=pkg['id'])
    
        assert len(pkg['resources']) == 5
        assert pkg['resources'][0]['position'] == 0
        assert pkg['resources'][1]['position'] == 1
        assert pkg['resources'][2]['position'] == 2
        assert pkg['resources'][3]['position'] == 3
        assert pkg['resources'][4]['position'] == 4
        for r in pkg['resources']:
            assert r['id'] != deleted_res_id
    
        res = model.Resource.get(deleted_res_id)
    
        assert res.id == deleted_res_id
>       assert res.position == 0
E       assert None == 0
E        +  where None = <Resource id=24c21e00-b0ba-4fd0-ad7b-94f8dffc1bfd package_id=5a4ef426-6066-46a7-9df5-73077c78ec0b url=http://www.annakarenina.com/download/ format=TXT description=None hash= position=None name=None resource_type=dataset mimetype=None mimetype_inner=None size=42 created=1994-01-01 00:00:01 last_modified=1994-01-01 00:00:01 metadata_modified=1994-01-01 00:00:01 cache_url=None cache_last_updated=None url_type=None extras={'data_quality': '[]', 'language': '["zxx"]', 'name_translated': '{"en": "Full text.", "fr": "Full text."}'} state=deleted>.position

.../canada/tests/test_logic.py:472: AssertionError
ckanext/canada/tests/test_webforms.py::TestPackageWebForms::test_new_dataset_required_fields
Stack Traces | 9.32s run time
self = <ckanext.canada.tests.test_webforms.TestPackageWebForms object at 0x7ff6ec014e80>
app = <ckan.tests.helpers.CKANTestApp object at 0x7ff6eca1b520>

    @mock.patch.object(h, 'flash_success', flashes.mock_flash)
    @mock.patch.object(h, 'get_flashed_messages', flashes.mock_get_flashed_messages)
    @mock.patch.object(h, 'is_registry_domain', mock_is_registry_domain)
    def test_new_dataset_required_fields(self, app):
        dataset_id = 'f3e4adb9-6e32-4cb4-bf68-1eab9d1288f5'
    
        offset = h.url_for('dataset.new')
        response = app.get(offset, extra_environ=self.extra_environ_tester,
                           environ_overrides=self.environ_overrides_tester)
    
        assert 'Create Dataset' in response.body
        assert 'Before you can create a dataset you need to create an organization' not in response.body
    
        response = app.post(offset,
                            data=self._filled_dataset_form(dataset_id),
                            extra_environ=self.extra_environ_tester,
                            environ_overrides=self.environ_overrides_tester,
                            follow_redirects=False)
    
        offset = _get_relative_offset_from_response(response)
        response = app.get(offset, extra_environ=self.extra_environ_tester,
                           environ_overrides=self.environ_overrides_tester)
    
>       assert 'Add data to the dataset' in response.body
E       assert 'Add data to the dataset' in '\n  <!DOCTYPE html><!--[if lt IE 9]>\n  <html class="no-js lt-ie9" lang="en" dir="ltr"><![endif]--> <!--[if gt IE 8]><!-->\n  <html class="no-js" lang="en" dir="ltr"> <!--<![endif]-->\n  <head>\n    \n  <meta charset="utf-8" />\n      <meta name="csrf_field_name" content="_csrf_token" />\n      <meta name="_csrf_token" content="IjZhNDRjOTdhNWRlZTRlMTlkMTg1YTVkYWEwYjM4OWE1ODk3ZjQxMDgi.abbWfw.SYT85my8ob3M_2S-_ocgwbOXKnk" />\n\n      <meta name="generator" content="ckan 2.10.8" />\n      <meta name="viewport" content="width=device-width, initial-scale=1.0">\n  \n    <meta property="og:title" content="\n    Edit Draft Open Data Record:&nbsp;english title\n  \n - CKAN">\n  \n  \n    \n  \n\n    <title>\n    Edit Draft Open Data Record:&nbsp;english title\n  \n - CKAN</title>\n\n    \n    \n  <link rel="shortcut icon" href="https://www.canada..../wet-boew/assets/favicon.ico" />\n    \n  \n    \n    \n    \n  \n  \n  \n\n  \n  \n      \n      \n      \n    \n  \n\n  \n\n\n    \n      \n      <link rel="stylesheet" href="TEST_TEMPLATE_HEAD_END.css" type="text/css">\n    \n\n    \n    \n  \n    \n    \n  \n  <script src="https://www.canada.ca/etc/desig...  $(document).ready(function(){\n            if (navigator.appName == \'Microsoft Internet Explorer\' ||\n            !!(navigator.userAgent.match(/Trident/) || navigator.userAgent.match(/rv:11/)) ||\n            (typeof $.browser !== "undefined" && $.browser.msie == 1))\n            {\n              let ieWarning = document.getElementById("ie_warning");\n              if( ieWarning.length > 0 ){\n                $(ieWarning).show();\n              }\n            }\n          });\n        });\n      </script>\n    \n  \n\n  <script nonce="Q9Um5ndR8jrKyefiLIo4fH">\n    window.addEventListener(\'load\', function(){\n      $(document).ready(function(){\n        let select2Fields = $(\'[data-field-select2="True"]\');\n        if( select2Fields.length > 0 ){\n          $(select2Fields).each(function(_index, _select2Field){\n            $(_select2Field).select2();\n          });\n        }\n      });\n    });\n  </script>\n\n  \n\n      <div role="region"><strong>TEST TEMPLATE_FOOTER_END TEST</strong></div>\n\n    \n    \n    \n    <script src="....../webassets/ckanext-scheming/079217e5_scheming_subfields.js" type="text/javascript" nonce="Q9Um5ndR8jrKyefiLIo4fH"></script>\n  </body>\n</html>'
E        +  where '\n  <!DOCTYPE html><!--[if lt IE 9]>\n  <html class="no-js lt-ie9" lang="en" dir="ltr"><![endif]--> <!--[if gt IE 8]><!-->\n  <html class="no-js" lang="en" dir="ltr"> <!--<![endif]-->\n  <head>\n    \n  <meta charset="utf-8" />\n      <meta name="csrf_field_name" content="_csrf_token" />\n      <meta name="_csrf_token" content="IjZhNDRjOTdhNWRlZTRlMTlkMTg1YTVkYWEwYjM4OWE1ODk3ZjQxMDgi.abbWfw.SYT85my8ob3M_2S-_ocgwbOXKnk" />\n\n      <meta name="generator" content="ckan 2.10.8" />\n      <meta name="viewport" content="width=device-width, initial-scale=1.0">\n  \n    <meta property="og:title" content="\n    Edit Draft Open Data Record:&nbsp;english title\n  \n - CKAN">\n  \n  \n    \n  \n\n    <title>\n    Edit Draft Open Data Record:&nbsp;english title\n  \n - CKAN</title>\n\n    \n    \n  <link rel="shortcut icon" href="https://www.canada..../wet-boew/assets/favicon.ico" />\n    \n  \n    \n    \n    \n  \n  \n  \n\n  \n  \n      \n      \n      \n    \n  \n\n  \n\n\n    \n      \n      <link rel="stylesheet" href="TEST_TEMPLATE_HEAD_END.css" type="text/css">\n    \n\n    \n    \n  \n    \n    \n  \n  <script src="https://www.canada.ca/etc/desig...  $(document).ready(function(){\n            if (navigator.appName == \'Microsoft Internet Explorer\' ||\n            !!(navigator.userAgent.match(/Trident/) || navigator.userAgent.match(/rv:11/)) ||\n            (typeof $.browser !== "undefined" && $.browser.msie == 1))\n            {\n              let ieWarning = document.getElementById("ie_warning");\n              if( ieWarning.length > 0 ){\n                $(ieWarning).show();\n              }\n            }\n          });\n        });\n      </script>\n    \n  \n\n  <script nonce="Q9Um5ndR8jrKyefiLIo4fH">\n    window.addEventListener(\'load\', function(){\n      $(document).ready(function(){\n        let select2Fields = $(\'[data-field-select2="True"]\');\n        if( select2Fields.length > 0 ){\n          $(select2Fields).each(function(_index, _select2Field){\n            $(_select2Field).select2();\n          });\n        }\n      });\n    });\n  </script>\n\n  \n\n      <div role="region"><strong>TEST TEMPLATE_FOOTER_END TEST</strong></div>\n\n    \n    \n    \n    <script src="....../webassets/ckanext-scheming/079217e5_scheming_subfields.js" type="text/javascript" nonce="Q9Um5ndR8jrKyefiLIo4fH"></script>\n  </body>\n</html>' = <WrapperTestResponse 32765 bytes [200 OK]>.body

.../canada/tests/test_webforms.py:80: AssertionError
ckanext/canada/tests/test_webforms.py::TestPackageWebForms::test_new_dataset_missing_fields
Stack Traces | 10.6s run time
self = <ckanext.canada.tests.test_webforms.TestPackageWebForms object at 0x7f19239657f0>
app = <ckan.tests.helpers.CKANTestApp object at 0x7f1924371580>

    @mock.patch.object(h, 'is_registry_domain', mock_is_registry_domain)
    def test_new_dataset_missing_fields(self, app):
        dataset_id = 'f3e4adb9-6e32-4cb4-bf68-1eab9d1288f4'
    
        offset = h.url_for('dataset.new')
        response = app.get(offset, extra_environ=self.extra_environ_tester,
                           environ_overrides=self.environ_overrides_tester)
    
        assert 'Create Dataset' in response.body
        assert 'Before you can create a dataset you need to create an organization' not in response.body
    
        incomplete_dataset_form = {
            'id': dataset_id,
            'save': '',
            '_ckan_phase': '1',
        }
        response = app.post(offset,
                            data=incomplete_dataset_form,
                            extra_environ=self.extra_environ_tester,
                            environ_overrides=self.environ_overrides_tester,
                            follow_redirects=True)
    
>       assert 'Errors in form' in response.body
E       assert 'Errors in form' in '<!DOCTYPE html><!--[if lt IE 9]>\n  <html class="no-js lt-ie9" lang="en" dir="ltr"><![endif]--> <!--[if gt IE 8]><!-->\n  <html class="no-js" lang="en" dir="ltr"> <!--<![endif]-->\n  <head>\n    \n  <meta charset="utf-8" />\n      <meta name="csrf_field_name" content="_csrf_token" />\n      <meta name="_csrf_token" content="ImFjYTEzN2M0Y2VjMGQ3OGYwNDg0YjhmMzQyMjE3OTMzNGJjNDNjY2Qi.abbWxA.ckPc7ajZ2xp_V8Yj4GlZkSqPey4" />\n\n      <meta name="generator" content="ckan 2.10.8" />\n      <meta name="viewport" content="width=device-width, initial-scale=1.0">\n  \n    <meta property="og:title" content="Error 404 - CKAN">\n  \n  \n    \n  \n\n    <title>Error 404 - CKAN</title>\n\n    \n    \n  <link rel="shortcut icon" href="https://www.canada..../wet-boew/assets/favicon.ico" />\n    \n  \n    \n    \n    \n  \n  \n  \n\n  \n  \n      \n      \n      \n    \n  \n\n  \n\n\n    \n      \n      <link rel="stylesheet" href="TEST_TEMPLATE_HEAD_END.css" type="text/css">\n    \n\n    \n    \n  \n    \n    \n  \n  <script src="https://www.canada..../cdts/compiled/soyutils.js" integrity="sha384-hfwnpowMIP7hDqCMoNULlqSq7k2nu8R...W6nU3fnWByblXhBnBk\');\n    newWetFooterString += _style.outerHTML;\n  });\n  const wetFooterObjLinks = wetFooterDOC.querySelectorAll(\'link\');\n  wetFooterObjLinks.forEach(function(_link){\n    _link.setAttribute(\'nonce\', \'vxCWW6nU3fnWByblXhBnBk\');\n    newWetFooterString += _link.outerHTML;\n  });\n  document.write(newWetFooterString);\n  \n</script>\n  \n  \n    \n      \n    \n  \n  \n  \n  \n    \n  \n  \n    \n\n  \n\n  \n      <script nonce="vxCWW6nU3fnWByblXhBnBk">\n        window.addEventListener(\'load\', function(){\n          $(document).ready(function(){\n            if (navigator.appName == \'Microsoft Internet Explorer\' ||\n            !!(navigator.userAgent.match(/Trident/) || navigator.userAgent.match(/rv:11/)) ||\n            (typeof $.browser !== "undefined" && $.browser.msie == 1))\n            {\n              let ieWarning = document.getElementById("ie_warning");\n              if( ieWarning.length > 0 ){\n                $(ieWarning).show();\n              }\n            }\n          });\n        });\n      </script>\n    \n  \n\n      <div role="region"><strong>TEST TEMPLATE_FOOTER_END TEST</strong></div>\n\n    \n    \n    \n    \n  </body>\n</html>'
E        +  where '<!DOCTYPE html><!--[if lt IE 9]>\n  <html class="no-js lt-ie9" lang="en" dir="ltr"><![endif]--> <!--[if gt IE 8]><!-->\n  <html class="no-js" lang="en" dir="ltr"> <!--<![endif]-->\n  <head>\n    \n  <meta charset="utf-8" />\n      <meta name="csrf_field_name" content="_csrf_token" />\n      <meta name="_csrf_token" content="ImFjYTEzN2M0Y2VjMGQ3OGYwNDg0YjhmMzQyMjE3OTMzNGJjNDNjY2Qi.abbWxA.ckPc7ajZ2xp_V8Yj4GlZkSqPey4" />\n\n      <meta name="generator" content="ckan 2.10.8" />\n      <meta name="viewport" content="width=device-width, initial-scale=1.0">\n  \n    <meta property="og:title" content="Error 404 - CKAN">\n  \n  \n    \n  \n\n    <title>Error 404 - CKAN</title>\n\n    \n    \n  <link rel="shortcut icon" href="https://www.canada..../wet-boew/assets/favicon.ico" />\n    \n  \n    \n    \n    \n  \n  \n  \n\n  \n  \n      \n      \n      \n    \n  \n\n  \n\n\n    \n      \n      <link rel="stylesheet" href="TEST_TEMPLATE_HEAD_END.css" type="text/css">\n    \n\n    \n    \n  \n    \n    \n  \n  <script src="https://www.canada..../cdts/compiled/soyutils.js" integrity="sha384-hfwnpowMIP7hDqCMoNULlqSq7k2nu8R...W6nU3fnWByblXhBnBk\');\n    newWetFooterString += _style.outerHTML;\n  });\n  const wetFooterObjLinks = wetFooterDOC.querySelectorAll(\'link\');\n  wetFooterObjLinks.forEach(function(_link){\n    _link.setAttribute(\'nonce\', \'vxCWW6nU3fnWByblXhBnBk\');\n    newWetFooterString += _link.outerHTML;\n  });\n  document.write(newWetFooterString);\n  \n</script>\n  \n  \n    \n      \n    \n  \n  \n  \n  \n    \n  \n  \n    \n\n  \n\n  \n      <script nonce="vxCWW6nU3fnWByblXhBnBk">\n        window.addEventListener(\'load\', function(){\n          $(document).ready(function(){\n            if (navigator.appName == \'Microsoft Internet Explorer\' ||\n            !!(navigator.userAgent.match(/Trident/) || navigator.userAgent.match(/rv:11/)) ||\n            (typeof $.browser !== "undefined" && $.browser.msie == 1))\n            {\n              let ieWarning = document.getElementById("ie_warning");\n              if( ieWarning.length > 0 ){\n                $(ieWarning).show();\n              }\n            }\n          });\n        });\n      </script>\n    \n  \n\n      <div role="region"><strong>TEST TEMPLATE_FOOTER_END TEST</strong></div>\n\n    \n    \n    \n    \n  </body>\n</html>' = <WrapperTestResponse 8977 bytes [404 NOT FOUND]>.body

.../canada/tests/test_webforms.py:116: AssertionError
View the full list of 1 ❄️ flaky test(s)
ckanext/canada/tests/test_validators.py::TestNAVLSchema::test_basic_package

Flake rate in main: 8.96% (Passed 61 times, Failed 6 times)

Stack Traces | 0.309s run time
self = <ckanext.canada.tests.test_validators.TestNAVLSchema object at 0x7f20309f5cd0>

    def test_basic_package(self):
        with pytest.raises(ValidationError) as ve:
>           self.normal_action.package_create(
                name='12345678-9abc-def0-1234-56789abcdef0',
                **self.incomplete_pkg)
E           Failed: DID NOT RAISE <class 'ckan.logic.ValidationError'>

.../canada/tests/test_validators.py:123: Failed

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@JVickery-TBS
Copy link
Contributor

just merged into #1582 and will do all together. thanks!

@JVickery-TBS JVickery-TBS deleted the OPEN-4035-info-pages branch March 18, 2026 14:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants