diff --git a/pycsw/ogc/api/records.py b/pycsw/ogc/api/records.py index 3ebf0050c..5bb23fbe1 100644 --- a/pycsw/ogc/api/records.py +++ b/pycsw/ogc/api/records.py @@ -286,6 +286,11 @@ def landing_page(self, headers_, args): 'type': 'application/json', 'title': 'Main collection', 'href': f"{self.config['server']['url']}/collections/metadata:main" + },{ + 'rel': 'http://www.opengis.net/def/rel/ogc/1.0/ogc-catalog', + 'type': 'application/json', + 'title': 'Record catalogue collection', + 'href': f"{self.config['server']['url']}/collections/metadata:main" } ] @@ -1031,6 +1036,12 @@ def get_collection_info(self, collection_name: str = 'metadata:main', 'title': 'Collection URL', 'href': f"{self.config['server']['url']}/collections/{collection_name}", 'hreflang': self.config['server']['language'] + }, { + 'rel': 'http://www.opengis.net/def/rel/ogc/1.0/ogc-catalog', + 'type': 'application/json', + 'title': 'Record catalog collection', + 'href': f"{self.config['server']['url']}/collections/{collection_name}", + 'hreflang': self.config['server']['language'] }, { 'rel': 'queryables', 'type': 'application/json', diff --git a/tests/functionaltests/suites/cite/data/cite.db b/tests/functionaltests/suites/cite/data/cite.db index abb962db5..65519c4fc 100644 Binary files a/tests/functionaltests/suites/cite/data/cite.db and b/tests/functionaltests/suites/cite/data/cite.db differ diff --git a/tests/functionaltests/suites/oarec/test_oarec_functional.py b/tests/functionaltests/suites/oarec/test_oarec_functional.py index 2d2343b17..dcb78e777 100644 --- a/tests/functionaltests/suites/oarec/test_oarec_functional.py +++ b/tests/functionaltests/suites/oarec/test_oarec_functional.py @@ -48,7 +48,7 @@ def test_landing_page(config): assert headers['Content-Type'] == 'application/json' assert status == 200 - assert len(content['links']) == 14 + assert len(content['links']) == 15 for link in content['links']: assert link['href'].startswith(api.config['server']['url']) @@ -89,7 +89,7 @@ def test_collections(config): assert len(content['collections']) == 1 content = json.loads(api.collections({}, {})[2])['collections'][0] - assert len(content['links']) == 3 + assert len(content['links']) == 4 assert content['id'] == 'metadata:main' assert content['title'] == 'pycsw Geospatial Catalogue' assert content['description'] == 'pycsw is an OARec and OGC CSW server implementation written in Python' # noqa diff --git a/tests/functionaltests/suites/oarec/test_oarec_virtual_collections_functional.py b/tests/functionaltests/suites/oarec/test_oarec_virtual_collections_functional.py index af902ad3e..c34a15eaa 100644 --- a/tests/functionaltests/suites/oarec/test_oarec_virtual_collections_functional.py +++ b/tests/functionaltests/suites/oarec/test_oarec_virtual_collections_functional.py @@ -1,3 +1,34 @@ +# ================================================================= +# +# Authors: Tom Kralidis +# Ricardo Garcia Silva +# +# Copyright (c) 2025 Tom Kralidis +# Copyright (c) 2023 Ricardo Garcia Silva +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation +# files (the "Software"), to deal in the Software without +# restriction, including without limitation the rights to use, +# copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following +# conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +# ================================================================= + import json from xml.etree import ElementTree as etree @@ -15,7 +46,7 @@ def test_landing_page(config_virtual_collections): assert headers['Content-Type'] == 'application/json' assert status == 200 - assert len(content['links']) == 14 + assert len(content['links']) == 15 for link in content['links']: assert link['href'].startswith(api.config['server']['url']) @@ -52,7 +83,7 @@ def test_collections(config_virtual_collections): assert len(content['collections']) == 2 content = json.loads(api.collections({}, {})[2])['collections'][0] - assert len(content['links']) == 3 + assert len(content['links']) == 4 assert content['id'] == 'metadata:main' assert content['title'] == 'pycsw Geospatial Catalogue' assert content['description'] == 'pycsw is an OARec and OGC CSW server implementation written in Python' # noqa