diff --git a/api/v3/atom_validation.go b/api/v3/atom_validation.go index 4b1009a..43150b8 100644 --- a/api/v3/atom_validation.go +++ b/api/v3/atom_validation.go @@ -87,6 +87,33 @@ func ValidateOwnerInfo(c client.Client, atom *Atom, allErrs *field.ErrorList) { if ownerInfo.Spec.Atom == nil { *allErrs = append(*allErrs, field.Required(fieldPath, "spec.Atom missing in "+ownerInfo.Name)) + } else { + validateMetadataTemplates(atom, ownerInfo, allErrs) + } +} + +func validateMetadataTemplates(atom *Atom, ownerInfo *smoothoperatorv1.OwnerInfo, allErrs *field.ErrorList) { + var metadataTemplates []string + if atom.Spec.Service.ServiceMetadataLinks != nil { + metadataTemplates = atom.Spec.Service.ServiceMetadataLinks.Templates + } + for _, feed := range atom.Spec.Service.DatasetFeeds { + if feed.DatasetMetadataLinks != nil { + metadataTemplates = append(metadataTemplates, feed.DatasetMetadataLinks.Templates...) + } + } + + if len(metadataTemplates) > 0 { + fieldPath := field.NewPath("spec").Child("service").Child("ownerInfoRef") + if slices.Contains(metadataTemplates, "csw") && (ownerInfo.Spec.MetadataUrls == nil || ownerInfo.Spec.MetadataUrls.CSW == nil) { + *allErrs = append(*allErrs, field.Required(fieldPath, "spec.metadataUrls.csw missing in "+ownerInfo.Name)) + } + if slices.Contains(metadataTemplates, "html") && (ownerInfo.Spec.MetadataUrls == nil || ownerInfo.Spec.MetadataUrls.HTML == nil) { + *allErrs = append(*allErrs, field.Required(fieldPath, "spec.metadataUrls.html missing in "+ownerInfo.Name)) + } + if slices.Contains(metadataTemplates, "opensearch") && (ownerInfo.Spec.MetadataUrls == nil || ownerInfo.Spec.MetadataUrls.OpenSearch == nil) { + *allErrs = append(*allErrs, field.Required(fieldPath, "spec.metadataUrls.opensearch missing in "+ownerInfo.Name)) + } } } diff --git a/api/v3/atom_validation_test.go b/api/v3/atom_validation_test.go deleted file mode 100644 index daa38d2..0000000 --- a/api/v3/atom_validation_test.go +++ /dev/null @@ -1,105 +0,0 @@ -package v3 - -import ( - "os" - "testing" - - "github.com/google/go-cmp/cmp" - "k8s.io/apimachinery/pkg/util/validation/field" - "sigs.k8s.io/yaml" -) - -func TestValidateAtom(t *testing.T) { - - tests := []struct { - name string - expectedWarnings *[]string - expectedErrors *field.ErrorList - }{ - // Lijst van testcases - { - name: "1-no-error-no-warning", - expectedWarnings: &[]string{}, - expectedErrors: &field.ErrorList{}, - }, - { - name: "2-warning-atom-name", - expectedWarnings: &[]string{"pdok.nl/v3, Kind=Atom/asis-readonly-prod-atom: metadata.name: should not contain atom"}, - expectedErrors: &field.ErrorList{}, - }, - { - name: "3-error-dataset-metadata-id", - expectedWarnings: &[]string{}, - expectedErrors: &field.ErrorList{&field.Error{ - Type: "FieldValueInvalid", - Field: "spec.service.datasetFeeds[0].datasetMetadataLinks.metadataIdentifier", - BadValue: "2751ba40-5100-4186-81be-b7fdee95b49c", - Detail: "should not be the same as spec.service.serviceMetadataLinks.metadataIdentifier", - }}, - }, - { - name: "4-spatialDatasetIdentifierCode-missing-error", - expectedWarnings: &[]string{}, - expectedErrors: &field.ErrorList{&field.Error{ - Type: "FieldValueRequired", - Field: "spec.service.datasetFeeds[0].spatialDatasetIdentifierCode", - BadValue: "", - Detail: "when spec.service.datasetFeeds[0].datasetMetadataLinks exists", - }}, - }, - { - name: "5-spatialDatasetIdentifierNamespace-missing-error", - expectedWarnings: &[]string{}, - expectedErrors: &field.ErrorList{&field.Error{ - Type: "FieldValueRequired", - Field: "spec.service.datasetFeeds[0].spatialDatasetIdentifierNamespace", - BadValue: "", - Detail: "when spec.service.datasetFeeds[0].spatialDatasetIdentifierCode exists", - }}, - }, - { - name: "6-entry-content-missing-error", - expectedWarnings: &[]string{}, - expectedErrors: &field.ErrorList{&field.Error{ - Type: "FieldValueRequired", - Field: "spec.service.datasetFeeds[0].entries[0].content", - BadValue: "", - Detail: "when spec.service.datasetFeeds[0].entries[0].downloadlinks has 2 or more elements", - }}, - }, - { - name: "7-duplicate-entry-tech-name-error", - expectedWarnings: &[]string{}, - expectedErrors: &field.ErrorList{&field.Error{ - Type: "FieldValueDuplicate", - Field: "spec.service.datasetFeeds[0].entries[0].entries[1].technicalName", - BadValue: "wetlands", - Detail: "", - }}, - }, - } - for _, tt := range tests { - actualWarnings := []string{} - actualAllErrors := field.ErrorList{} - input, err := os.ReadFile("test_data/input/" + tt.name + ".yaml") - if err != nil { - t.Errorf("os.ReadFile() error = %v ", err) - } - atom := &Atom{} - if err := yaml.Unmarshal(input, atom); err != nil { - t.Errorf("yaml.Unmarshal() error = %v", err) - } - - t.Run(tt.name, func(t *testing.T) { - ValidateAtom(atom, &actualWarnings, &actualAllErrors) - diffWarnings := cmp.Diff(tt.expectedWarnings, &actualWarnings) - if diffWarnings != "" { - t.Errorf("Testing validation has different warnings: \n%v\n%v\n%v", diffWarnings, tt.expectedWarnings, actualWarnings) - } - diffErrors := cmp.Diff(tt.expectedErrors, &actualAllErrors) - if diffErrors != "" { - t.Errorf("Testing validation has different errors: \n%v\n%v\n%v", diffErrors, tt.expectedErrors, actualAllErrors) - } - }) - } -} diff --git a/api/v3/test_data/input/1-no-error-no-warning.yaml b/api/v3/test_data/input/1-no-error-no-warning.yaml deleted file mode 100644 index ec653c4..0000000 --- a/api/v3/test_data/input/1-no-error-no-warning.yaml +++ /dev/null @@ -1,60 +0,0 @@ -apiVersion: pdok.nl/v3 -kind: Atom -metadata: - annotations: - kangaroo.pdok.nl/lifecycle-phase: prod - kangaroo.pdok.nl/service-bundle-ids: 65daed5f-e9e4-5791-a7c9-7e9effcca520 - kangaroo.pdok.nl/readonly: "true" - labels: - pdok.nl/dataset-id: wetlands - pdok.nl/owner-id: rvo - pdok.nl/service-type: atom - name: asis-readonly-prod - namespace: services -spec: - service: - baseUrl: http://localhost:32788/rvo/wetlands/atom - datasetFeeds: - - author: - email: geodatabeheer.giscc@minlnv.nl - name: Ministerie van EL&I - GIS Competence Center - datasetMetadataLinks: - metadataIdentifier: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - templates: - - csw - - html - entries: - - content: - Wetlands zijn de natte natuurgebieden in Nederland (44 gebieden). - Het Wetland verdrag is op 2 februari 1971 te Ramsar in Iran ondertekend. - Nederland was een van de zestien landen die het Verdrag toen ondertekende. - downloadlinks: - - data: public/rvo/wetlands/65daed5f-e9e4-5791-a7c9-7e9effcca520/3/wetlands.gpkg - polygon: - bbox: - maxx: "7.5553527" - maxy: "55.66948" - minx: "2.354173" - miny: "50.71447" - srs: - name: Amersfoort / RD New - uri: https://www.opengis.net/def/crs/EPSG/0/28992 - technicalName: wetlands - title: wetlands - updated: "2025-02-28T09:04:17Z" - spatialDatasetIdentifierCode: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - spatialDatasetIdentifierNamespace: http://www.pdok.nl - subtitle: wetlands - technicalName: wetlands - title: wetlands - lang: nl - ownerInfoRef: pdok - rights: https://creativecommons.org/publicdomain/zero/1.0/deed.nl - serviceMetadataLinks: - metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95b49c - templates: - - csw - - opensearch - - html - subtitle: Download Service van wetlands - title: Wetlands diff --git a/api/v3/test_data/input/2-warning-atom-name.yaml b/api/v3/test_data/input/2-warning-atom-name.yaml deleted file mode 100644 index a60e3a7..0000000 --- a/api/v3/test_data/input/2-warning-atom-name.yaml +++ /dev/null @@ -1,60 +0,0 @@ -apiVersion: pdok.nl/v3 -kind: Atom -metadata: - annotations: - kangaroo.pdok.nl/lifecycle-phase: prod - kangaroo.pdok.nl/service-bundle-ids: 65daed5f-e9e4-5791-a7c9-7e9effcca520 - kangaroo.pdok.nl/readonly: "true" - labels: - pdok.nl/dataset-id: wetlands - pdok.nl/owner-id: rvo - pdok.nl/service-type: atom - name: asis-readonly-prod-atom - namespace: services -spec: - service: - baseUrl: http://localhost:32788/rvo/wetlands/atom - datasetFeeds: - - author: - email: geodatabeheer.giscc@minlnv.nl - name: Ministerie van EL&I - GIS Competence Center - datasetMetadataLinks: - metadataIdentifier: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - templates: - - csw - - html - entries: - - content: - Wetlands zijn de natte natuurgebieden in Nederland (44 gebieden). - Het Wetland verdrag is op 2 februari 1971 te Ramsar in Iran ondertekend. - Nederland was een van de zestien landen die het Verdrag toen ondertekende. - downloadlinks: - - data: public/rvo/wetlands/65daed5f-e9e4-5791-a7c9-7e9effcca520/3/wetlands.gpkg - polygon: - bbox: - maxx: "7.5553527" - maxy: "55.66948" - minx: "2.354173" - miny: "50.71447" - srs: - name: Amersfoort / RD New - uri: https://www.opengis.net/def/crs/EPSG/0/28992 - technicalName: wetlands - title: wetlands - updated: "2025-02-28T09:04:17Z" - spatialDatasetIdentifierCode: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - spatialDatasetIdentifierNamespace: http://www.pdok.nl - subtitle: wetlands - technicalName: wetlands - title: wetlands - lang: nl - ownerInfoRef: pdok - rights: https://creativecommons.org/publicdomain/zero/1.0/deed.nl - serviceMetadataLinks: - metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95b49c - templates: - - csw - - opensearch - - html - subtitle: Download Service van wetlands - title: Wetlands diff --git a/api/v3/test_data/input/3-error-dataset-metadata-id.yaml b/api/v3/test_data/input/3-error-dataset-metadata-id.yaml deleted file mode 100644 index 4a3ccd0..0000000 --- a/api/v3/test_data/input/3-error-dataset-metadata-id.yaml +++ /dev/null @@ -1,60 +0,0 @@ -apiVersion: pdok.nl/v3 -kind: Atom -metadata: - annotations: - kangaroo.pdok.nl/lifecycle-phase: prod - kangaroo.pdok.nl/service-bundle-ids: 65daed5f-e9e4-5791-a7c9-7e9effcca520 - kangaroo.pdok.nl/readonly: "true" - labels: - pdok.nl/dataset-id: wetlands - pdok.nl/owner-id: rvo - pdok.nl/service-type: atom - name: asis-readonly-prod - namespace: services -spec: - service: - baseUrl: http://localhost:32788/rvo/wetlands/atom - datasetFeeds: - - author: - email: geodatabeheer.giscc@minlnv.nl - name: Ministerie van EL&I - GIS Competence Center - datasetMetadataLinks: - metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95b49c - templates: - - csw - - html - entries: - - content: - Wetlands zijn de natte natuurgebieden in Nederland (44 gebieden). - Het Wetland verdrag is op 2 februari 1971 te Ramsar in Iran ondertekend. - Nederland was een van de zestien landen die het Verdrag toen ondertekende. - downloadlinks: - - data: public/rvo/wetlands/65daed5f-e9e4-5791-a7c9-7e9effcca520/3/wetlands.gpkg - polygon: - bbox: - maxx: "7.5553527" - maxy: "55.66948" - minx: "2.354173" - miny: "50.71447" - srs: - name: Amersfoort / RD New - uri: https://www.opengis.net/def/crs/EPSG/0/28992 - technicalName: wetlands - title: wetlands - updated: "2025-02-28T09:04:17Z" - spatialDatasetIdentifierCode: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - spatialDatasetIdentifierNamespace: http://www.pdok.nl - subtitle: wetlands - technicalName: wetlands - title: wetlands - lang: nl - ownerInfoRef: pdok - rights: https://creativecommons.org/publicdomain/zero/1.0/deed.nl - serviceMetadataLinks: - metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95b49c - templates: - - csw - - opensearch - - html - subtitle: Download Service van wetlands - title: Wetlands diff --git a/api/v3/test_data/input/4-spatialDatasetIdentifierCode-missing-error.yaml b/api/v3/test_data/input/4-spatialDatasetIdentifierCode-missing-error.yaml deleted file mode 100644 index c74ea15..0000000 --- a/api/v3/test_data/input/4-spatialDatasetIdentifierCode-missing-error.yaml +++ /dev/null @@ -1,60 +0,0 @@ -apiVersion: pdok.nl/v3 -kind: Atom -metadata: - annotations: - kangaroo.pdok.nl/lifecycle-phase: prod - kangaroo.pdok.nl/service-bundle-ids: 65daed5f-e9e4-5791-a7c9-7e9effcca520 - kangaroo.pdok.nl/readonly: "true" - labels: - pdok.nl/dataset-id: wetlands - pdok.nl/owner-id: rvo - pdok.nl/service-type: atom - name: asis-readonly-prod - namespace: services -spec: - service: - baseUrl: http://localhost:32788/rvo/wetlands/atom - datasetFeeds: - - author: - email: geodatabeheer.giscc@minlnv.nl - name: Ministerie van EL&I - GIS Competence Center - datasetMetadataLinks: - metadataIdentifier: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - templates: - - csw - - html - entries: - - content: - Wetlands zijn de natte natuurgebieden in Nederland (44 gebieden). - Het Wetland verdrag is op 2 februari 1971 te Ramsar in Iran ondertekend. - Nederland was een van de zestien landen die het Verdrag toen ondertekende. - downloadlinks: - - data: public/rvo/wetlands/65daed5f-e9e4-5791-a7c9-7e9effcca520/3/wetlands.gpkg - polygon: - bbox: - maxx: "7.5553527" - maxy: "55.66948" - minx: "2.354173" - miny: "50.71447" - srs: - name: Amersfoort / RD New - uri: https://www.opengis.net/def/crs/EPSG/0/28992 - technicalName: wetlands - title: wetlands - updated: "2025-02-28T09:04:17Z" -# spatialDatasetIdentifierCode: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - spatialDatasetIdentifierNamespace: http://www.pdok.nl - subtitle: wetlands - technicalName: wetlands - title: wetlands - lang: nl - ownerInfoRef: pdok - rights: https://creativecommons.org/publicdomain/zero/1.0/deed.nl - serviceMetadataLinks: - metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95b49c - templates: - - csw - - opensearch - - html - subtitle: Download Service van wetlands - title: Wetlands diff --git a/api/v3/test_data/input/5-spatialDatasetIdentifierNamespace-missing-error.yaml b/api/v3/test_data/input/5-spatialDatasetIdentifierNamespace-missing-error.yaml deleted file mode 100644 index a611399..0000000 --- a/api/v3/test_data/input/5-spatialDatasetIdentifierNamespace-missing-error.yaml +++ /dev/null @@ -1,60 +0,0 @@ -apiVersion: pdok.nl/v3 -kind: Atom -metadata: - annotations: - kangaroo.pdok.nl/lifecycle-phase: prod - kangaroo.pdok.nl/service-bundle-ids: 65daed5f-e9e4-5791-a7c9-7e9effcca520 - kangaroo.pdok.nl/readonly: "true" - labels: - pdok.nl/dataset-id: wetlands - pdok.nl/owner-id: rvo - pdok.nl/service-type: atom - name: asis-readonly-prod - namespace: services -spec: - service: - baseUrl: http://localhost:32788/rvo/wetlands/atom - datasetFeeds: - - author: - email: geodatabeheer.giscc@minlnv.nl - name: Ministerie van EL&I - GIS Competence Center - datasetMetadataLinks: - metadataIdentifier: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - templates: - - csw - - html - entries: - - content: - Wetlands zijn de natte natuurgebieden in Nederland (44 gebieden). - Het Wetland verdrag is op 2 februari 1971 te Ramsar in Iran ondertekend. - Nederland was een van de zestien landen die het Verdrag toen ondertekende. - downloadlinks: - - data: public/rvo/wetlands/65daed5f-e9e4-5791-a7c9-7e9effcca520/3/wetlands.gpkg - polygon: - bbox: - maxx: "7.5553527" - maxy: "55.66948" - minx: "2.354173" - miny: "50.71447" - srs: - name: Amersfoort / RD New - uri: https://www.opengis.net/def/crs/EPSG/0/28992 - technicalName: wetlands - title: wetlands - updated: "2025-02-28T09:04:17Z" - spatialDatasetIdentifierCode: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e -# spatialDatasetIdentifierNamespace: http://www.pdok.nl - subtitle: wetlands - technicalName: wetlands - title: wetlands - lang: nl - ownerInfoRef: pdok - rights: https://creativecommons.org/publicdomain/zero/1.0/deed.nl - serviceMetadataLinks: - metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95b49c - templates: - - csw - - opensearch - - html - subtitle: Download Service van wetlands - title: Wetlands diff --git a/api/v3/test_data/input/6-entry-content-missing-error.yaml b/api/v3/test_data/input/6-entry-content-missing-error.yaml deleted file mode 100644 index d84e7cd..0000000 --- a/api/v3/test_data/input/6-entry-content-missing-error.yaml +++ /dev/null @@ -1,61 +0,0 @@ -apiVersion: pdok.nl/v3 -kind: Atom -metadata: - annotations: - kangaroo.pdok.nl/lifecycle-phase: prod - kangaroo.pdok.nl/service-bundle-ids: 65daed5f-e9e4-5791-a7c9-7e9effcca520 - kangaroo.pdok.nl/readonly: "true" - labels: - pdok.nl/dataset-id: wetlands - pdok.nl/owner-id: rvo - pdok.nl/service-type: atom - name: asis-readonly-prod - namespace: services -spec: - service: - baseUrl: http://localhost:32788/rvo/wetlands/atom - datasetFeeds: - - author: - email: geodatabeheer.giscc@minlnv.nl - name: Ministerie van EL&I - GIS Competence Center - datasetMetadataLinks: - metadataIdentifier: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - templates: - - csw - - html - entries: - - downloadlinks: - - data: public/rvo/wetlands/65daed5f-e9e4-5791-a7c9-7e9effcca520/3/wetlands.gpkg - - data: public/rvo/wetlands/65daed5f-e9e4-5791-a7c9-7e9effcca520/3/wetlands-test.gpkg -# content: -# Wetlands zijn de natte natuurgebieden in Nederland (44 gebieden). -# Het Wetland verdrag is op 2 februari 1971 te Ramsar in Iran ondertekend. -# Nederland was een van de zestien landen die het Verdrag toen ondertekende. - polygon: - bbox: - maxx: "7.5553527" - maxy: "55.66948" - minx: "2.354173" - miny: "50.71447" - srs: - name: Amersfoort / RD New - uri: https://www.opengis.net/def/crs/EPSG/0/28992 - technicalName: wetlands - title: wetlands - updated: "2025-02-28T09:04:17Z" - spatialDatasetIdentifierCode: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - spatialDatasetIdentifierNamespace: http://www.pdok.nl - subtitle: wetlands - technicalName: wetlands - title: wetlands - lang: nl - ownerInfoRef: pdok - rights: https://creativecommons.org/publicdomain/zero/1.0/deed.nl - serviceMetadataLinks: - metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95b49c - templates: - - csw - - opensearch - - html - subtitle: Download Service van wetlands - title: Wetlands diff --git a/api/v3/test_data/input/7-duplicate-entry-tech-name-error.yaml b/api/v3/test_data/input/7-duplicate-entry-tech-name-error.yaml deleted file mode 100644 index a929463..0000000 --- a/api/v3/test_data/input/7-duplicate-entry-tech-name-error.yaml +++ /dev/null @@ -1,76 +0,0 @@ -apiVersion: pdok.nl/v3 -kind: Atom -metadata: - annotations: - kangaroo.pdok.nl/lifecycle-phase: prod - kangaroo.pdok.nl/service-bundle-ids: 65daed5f-e9e4-5791-a7c9-7e9effcca520 - kangaroo.pdok.nl/readonly: "true" - labels: - pdok.nl/dataset-id: wetlands - pdok.nl/owner-id: rvo - pdok.nl/service-type: atom - name: asis-readonly-prod - namespace: services -spec: - service: - title: Wetlands - subtitle: Download Service van wetlands - baseUrl: http://localhost:32788/rvo/wetlands/atom - lang: nl - ownerInfoRef: pdok - rights: https://creativecommons.org/publicdomain/zero/1.0/deed.nl - serviceMetadataLinks: - metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95b49c - templates: - - csw - - opensearch - - html - datasetFeeds: - - technicalName: wetlands - spatialDatasetIdentifierCode: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - spatialDatasetIdentifierNamespace: http://www.pdok.nl - subtitle: wetlands - title: wetlands - author: - email: geodatabeheer.giscc@minlnv.nl - name: Ministerie van EL&I - GIS Competence Center - datasetMetadataLinks: - metadataIdentifier: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - templates: - - csw - - html - entries: - - content: - Wetlands zijn de natte natuurgebieden in Nederland (44 gebieden). - Het Wetland verdrag is op 2 februari 1971 te Ramsar in Iran ondertekend. - Nederland was een van de zestien landen die het Verdrag toen ondertekende. - downloadlinks: - - data: public/rvo/wetlands/65daed5f-e9e4-5791-a7c9-7e9effcca520/3/wetlands.gpkg - polygon: - bbox: - maxx: "7.5553527" - maxy: "55.66948" - minx: "2.354173" - miny: "50.71447" - srs: - name: Amersfoort / RD New - uri: https://www.opengis.net/def/crs/EPSG/0/28992 - technicalName: wetlands - title: wetlands - updated: "2025-02-28T09:04:17Z" - - content: - testing duplication entry technicale name - downloadlinks: - - data: public/rvo/wetlands/65daed5f-e9e4-5791-a7c9-7e9effcca520/3/wetlands-22.gpkg - polygon: - bbox: - maxx: "7.5553527" - maxy: "55.66948" - minx: "2.354173" - miny: "50.71447" - srs: - name: Amersfoort / RD New - uri: https://www.opengis.net/def/crs/EPSG/0/28992 - technicalName: wetlands - title: wetlands duplicated entity - updated: "2025-02-28T09:04:17Z" \ No newline at end of file diff --git a/internal/webhook/v3/atom_webhook_test.go b/internal/webhook/v3/atom_webhook_test.go index f34108e..9816564 100644 --- a/internal/webhook/v3/atom_webhook_test.go +++ b/internal/webhook/v3/atom_webhook_test.go @@ -25,9 +25,18 @@ SOFTWARE. package v3 import ( - "errors" + "context" + "fmt" "os" + v1 "github.com/pdok/smooth-operator/api/v1" + "github.com/pdok/smooth-operator/model" + apierrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/validation/field" + "sigs.k8s.io/controller-runtime/pkg/webhook/admission" + . "github.com/onsi/ginkgo/v2" //nolint:revive // ginkgo bdd . "github.com/onsi/gomega" //nolint:revive // ginkgo bdd "sigs.k8s.io/yaml" @@ -37,9 +46,11 @@ import ( var _ = Describe("Atom Webhook", func() { var ( - obj *pdoknlv3.Atom - oldObj *pdoknlv3.Atom - validator AtomCustomValidator + obj *pdoknlv3.Atom + oldObj *pdoknlv3.Atom + validator AtomCustomValidator + labelsPath *field.Path + servicePath *field.Path ) BeforeEach(func() { @@ -53,6 +64,8 @@ var _ = Describe("Atom Webhook", func() { Expect(obj).NotTo(BeNil(), "Expected obj to be initialized") // TODO (user): Add any setup logic common to all tests + labelsPath = field.NewPath("metadata").Child("labels") + servicePath = field.NewPath("spec").Child("service") }) AfterEach(func() { @@ -61,124 +74,442 @@ var _ = Describe("Atom Webhook", func() { Context("When creating or updating Atom under Validating Webhook", func() { It("Should create atom without errors or warnings", func() { - testCreate(validator, "valid/minimal.yaml", nil) + testCreate(validator, "minimal.yaml", nil, nil) + }) + + It("Should create atom but warn about the name containing 'atom'", func() { + testCreate( + validator, + "minimal.yaml", + func(atom *pdoknlv3.Atom) { + atom.Name += "-atom" + }, + func(_ *pdoknlv3.Atom) (field.ErrorList, admission.Warnings) { + return nil, admission.Warnings{ + "pdok.nl/v3, Kind=Atom/minimal-atom: metadata.name: should not contain atom", + } + }, + ) }) It("Should deny creation if no labels are available", func() { - testCreate(validator, "invalid/no-labels.yaml", errors.New("Atom.pdok.nl \"asis-readonly-prod\" is invalid: metadata.labels: Required value: can't be empty")) + testCreate( + validator, + "minimal.yaml", + func(atom *pdoknlv3.Atom) { + atom.Labels = nil + }, + func(_ *pdoknlv3.Atom) (field.ErrorList, admission.Warnings) { + return field.ErrorList{ + field.Required(labelsPath, "can't be empty"), + }, nil + }, + ) + }) + + It("Should deny creation if a datasetfeed metadataID is the same as the service metadataID", func() { + testCreate( + validator, + "minimal.yaml", + func(atom *pdoknlv3.Atom) { + atom.Spec.Service.DatasetFeeds[0].DatasetMetadataLinks.MetadataIdentifier = atom.Spec.Service.ServiceMetadataLinks.MetadataIdentifier + }, + func(atom *pdoknlv3.Atom) (field.ErrorList, admission.Warnings) { + return field.ErrorList{ + field.Invalid( + servicePath.Child("datasetFeeds[0].datasetMetadataLinks.metadataIdentifier"), + atom.Spec.Service.DatasetFeeds[0].DatasetMetadataLinks.MetadataIdentifier, + "should not be the same as spec.service.serviceMetadataLinks.metadataIdentifier", + ), + }, nil + }, + ) + }) + + It("Should deny creation if a datasetfeed spatialdatasetID is missing but metadatalinks is set", func() { + testCreate( + validator, + "minimal.yaml", + func(atom *pdoknlv3.Atom) { + atom.Spec.Service.DatasetFeeds[0].SpatialDatasetIdentifierCode = nil + }, + func(_ *pdoknlv3.Atom) (field.ErrorList, admission.Warnings) { + return field.ErrorList{ + field.Required( + servicePath.Child("datasetFeeds[0].spatialDatasetIdentifierCode"), + "when spec.service.datasetFeeds[0].datasetMetadataLinks exists", + ), + }, nil + }, + ) + }) + + It("Should deny creation if a datasetfeed spatialdatasetID is set but spatialdatasetnamespace is not", func() { + testCreate( + validator, + "minimal.yaml", + func(atom *pdoknlv3.Atom) { + atom.Spec.Service.DatasetFeeds[0].SpatialDatasetIdentifierNamespace = nil + }, + func(_ *pdoknlv3.Atom) (field.ErrorList, admission.Warnings) { + return field.ErrorList{ + field.Required( + servicePath.Child("datasetFeeds[0].spatialDatasetIdentifierNamespace"), + "when spec.service.datasetFeeds[0].spatialDatasetIdentifierCode exists", + ), + }, nil + }, + ) + }) + + It("Should deny creation if a datasetfeed entry has multiple downloadlinks but no content", func() { + testCreate( + validator, + "minimal.yaml", + func(atom *pdoknlv3.Atom) { + atom.Spec.Service.DatasetFeeds[0].Entries[0].DownloadLinks = append( + atom.Spec.Service.DatasetFeeds[0].Entries[0].DownloadLinks, + atom.Spec.Service.DatasetFeeds[0].Entries[0].DownloadLinks..., + ) + atom.Spec.Service.DatasetFeeds[0].Entries[0].Content = nil + }, + func(_ *pdoknlv3.Atom) (field.ErrorList, admission.Warnings) { + return field.ErrorList{ + field.Required( + servicePath.Child("datasetFeeds[0].entries[0].content"), + "when spec.service.datasetFeeds[0].entries[0].downloadlinks has 2 or more elements", + ), + }, nil + }, + ) + }) + + It("Should deny creation if datasetfeeds have duplicate technical names", func() { + testCreate( + validator, + "minimal.yaml", + func(atom *pdoknlv3.Atom) { + atom.Spec.Service.DatasetFeeds = append( + atom.Spec.Service.DatasetFeeds, + atom.Spec.Service.DatasetFeeds..., + ) + }, + func(atom *pdoknlv3.Atom) (field.ErrorList, admission.Warnings) { + return field.ErrorList{ + field.Duplicate( + servicePath.Child("datasetFeeds[1].technicalName"), + atom.Spec.Service.DatasetFeeds[1].TechnicalName, + ), + }, nil + }, + ) + }) + + It("Should deny creation if a datasetfeed entries have duplicate technical names", func() { + testCreate( + validator, + "minimal.yaml", + func(atom *pdoknlv3.Atom) { + atom.Spec.Service.DatasetFeeds[0].Entries = append( + atom.Spec.Service.DatasetFeeds[0].Entries, + atom.Spec.Service.DatasetFeeds[0].Entries..., + ) + }, + func(atom *pdoknlv3.Atom) (field.ErrorList, admission.Warnings) { + return field.ErrorList{ + field.Duplicate( + servicePath.Child("datasetFeeds[0].entries[0].entries[1].technicalName"), + atom.Spec.Service.DatasetFeeds[0].Entries[0].TechnicalName, + ), + }, nil + }, + ) }) It("Should create atom with ingressRouteUrls that contains the service baseUrl", func() { - testCreate(validator, "valid/ingress-route-urls.yaml", nil) + testCreate(validator, "minimal.yaml", func(atom *pdoknlv3.Atom) { + atom.Spec.IngressRouteURLs = model.IngressRouteURLs{ + {URL: atom.Spec.Service.BaseURL}, + } + }, nil) }) It("Should deny creation if ingressRouteUrls is set but does not contain the service baseUrl", func() { testCreate( validator, - "invalid/ingress-route-urls-missing-baseurl.yaml", - errors.New("Atom.pdok.nl \"ingress-route-urls\" is invalid: spec.ingressRouteUrls: Invalid value: \"[{http://test.com/path}]\": must contain baseURL: http://localhost:32788/rvo/wetlands/atom"), + "ingress-route-urls.yaml", + func(atom *pdoknlv3.Atom) { + Expect(atom.Spec.IngressRouteURLs[0].URL.String()).To(Equal(atom.Spec.Service.BaseURL.String())) + atom.Spec.IngressRouteURLs = atom.Spec.IngressRouteURLs[1:] + }, + func(atom *pdoknlv3.Atom) (field.ErrorList, admission.Warnings) { + return field.ErrorList{ + field.Invalid(field.NewPath("spec").Child("ingressRouteUrls"), fmt.Sprint(atom.Spec.IngressRouteURLs), "must contain baseURL: "+atom.Spec.Service.BaseURL.String()), + }, nil + }, + ) + }) + + It("Should deny creation if spec.service.ownerReference is not found", func() { + testCreate( + validator, + "minimal.yaml", + func(atom *pdoknlv3.Atom) { + atom.Spec.Service.OwnerInfoRef = "random" + }, + func(atom *pdoknlv3.Atom) (field.ErrorList, admission.Warnings) { + return field.ErrorList{ + field.NotFound(servicePath.Child("ownerInfoRef"), atom.Spec.Service.OwnerInfoRef), + }, nil + }, + ) + }) + + It("Should deny creation if spec.service.ownerReference does not contain Atom info", func() { + // Create the OwnerInfo + ownerRef := "owner-missing-atom" + o := v1.OwnerInfo{ + ObjectMeta: metav1.ObjectMeta{ + Name: ownerRef, + Namespace: "services", + }, + } + + err := validator.Client.Create(context.TODO(), &o) + Expect(err).To(Not(HaveOccurred())) + + testCreate( + validator, + "minimal.yaml", + func(atom *pdoknlv3.Atom) { + atom.Spec.Service.OwnerInfoRef = ownerRef + }, + func(_ *pdoknlv3.Atom) (field.ErrorList, admission.Warnings) { + return field.ErrorList{ + field.Required(servicePath.Child("ownerInfoRef"), "spec.Atom missing in "+ownerRef), + }, nil + }, + ) + }) + + It("Should deny creation if spec.service.ownerReference does not contain Atom info", func() { + // Create the OwnerInfo + ownerRef := "atom-owner-missing-templates" + o := v1.OwnerInfo{ + ObjectMeta: metav1.ObjectMeta{ + Name: ownerRef, + Namespace: "services", + }, + Spec: v1.OwnerInfoSpec{ + Atom: &v1.Atom{ + Author: model.Author{ + Name: "atom", + Email: "atom@example.com", + }, + }, + MetadataUrls: nil, + }, + } + + err := validator.Client.Create(context.TODO(), &o) + Expect(err).To(Not(HaveOccurred())) + + testCreate( + validator, + "minimal.yaml", + func(atom *pdoknlv3.Atom) { + atom.Spec.Service.OwnerInfoRef = ownerRef + }, + func(_ *pdoknlv3.Atom) (field.ErrorList, admission.Warnings) { + return field.ErrorList{ + field.Required(servicePath.Child("ownerInfoRef"), "spec.metadataUrls.csw missing in "+ownerRef), + field.Required(servicePath.Child("ownerInfoRef"), "spec.metadataUrls.html missing in "+ownerRef), + field.Required(servicePath.Child("ownerInfoRef"), "spec.metadataUrls.opensearch missing in "+ownerRef), + }, nil + }, ) }) It("Should create and update atom without errors or warnings", func() { - testUpdate(validator, "valid/minimal.yaml", "valid/minimal-service-title-changed.yaml", nil) + testUpdate( + validator, + "minimal.yaml", + func(atom *pdoknlv3.Atom) { + atom.Spec.Service.Title = "New service title" + }, + nil, + ) }) It("Should deny update atom with error label names cannot be added or deleted", func() { testUpdate( validator, - "valid/minimal.yaml", - "invalid/minimal-immutable-labels-key-change.yaml", - errors.New("Atom.pdok.nl \"asis-readonly-prod\" is invalid: [metadata.labels.pdok.nl/dataset-id: Required value: labels cannot be removed, metadata.labels.pdok.nl/dataset-idsssssssss: Forbidden: new labels cannot be added]"), + "minimal.yaml", + func(atom *pdoknlv3.Atom) { + labels := atom.GetLabels() + labels["pdok.nl/dataset-idsssssssss"] = labels["pdok.nl/dataset-ids"] + delete(labels, "pdok.nl/dataset-ids") + atom.Labels = labels + }, + func(_, _ *pdoknlv3.Atom) field.ErrorList { + return field.ErrorList{ + field.Forbidden(labelsPath.Child("pdok.nl/dataset-idsssssssss"), "new labels cannot be added"), + } + }, ) }) It("Should deny update atom with error label names are immutable", func() { testUpdate( validator, - "valid/minimal.yaml", - "invalid/minimal-immutable-labels-value-change.yaml", - errors.New("Atom.pdok.nl \"asis-readonly-prod\" is invalid: metadata.labels.pdok.nl/dataset-id: Invalid value: \"wetlands-changed\": immutable: should be: wetlands"), + "minimal.yaml", + func(atom *pdoknlv3.Atom) { + labels := atom.GetLabels() + labels["pdok.nl/dataset-id"] = "dataset-changed" + atom.Labels = labels + }, + func(old, _ *pdoknlv3.Atom) field.ErrorList { + return field.ErrorList{ + field.Invalid(labelsPath.Child("pdok.nl/dataset-id"), "dataset-changed", "immutable: should be: "+old.Labels["pdok.nl/dataset-id"]), + } + }, ) }) It("Should deny update atom with error URL are immutable", func() { testUpdate( validator, - "valid/minimal.yaml", - "invalid/minimal-immutable-url.yaml", errors.New("Atom.pdok.nl \"asis-readonly-prod\" is invalid: spec.service.baseUrl: Forbidden: is immutable"), + "minimal.yaml", + func(atom *pdoknlv3.Atom) { + // net/url.URL doesn't deepcopy... + oldURL := atom.Spec.Service.BaseURL.String() + newURL, _ := model.ParseURL(oldURL) + newURL.Path += "/extra" + atom.Spec.Service.BaseURL = model.URL{URL: newURL} + }, + func(_, _ *pdoknlv3.Atom) field.ErrorList { + return field.ErrorList{ + field.Forbidden(servicePath.Child("baseUrl"), "is immutable"), + } + }, ) }) It("Should deny update atom as ingressRouteURLs cannot be removed", func() { testUpdate( validator, - "valid/ingress-route-urls.yaml", - "invalid/ingress-route-urls-removed-url.yaml", - errors.New("Atom.pdok.nl \"ingress-route-urls\" is invalid: spec.ingressRouteUrls: Invalid value: \"[{http://localhost:32788/rvo/wetlands/atom}]\": urls cannot be removed, missing: {http://localhost:32788/other/path}"), + "ingress-route-urls.yaml", + func(atom *pdoknlv3.Atom) { + atom.Spec.IngressRouteURLs = atom.Spec.IngressRouteURLs[:len(atom.Spec.IngressRouteURLs)-1] + }, + func(_, newAtom *pdoknlv3.Atom) field.ErrorList { + return field.ErrorList{ + field.Invalid(field.NewPath("spec").Child("ingressRouteUrls"), fmt.Sprint(newAtom.Spec.IngressRouteURLs), "urls cannot be removed, missing: {http://localhost:32788/other/path}"), + } + }, ) }) It("Should deny update atom when the service baseUrl is changed and the old value is not added to the ingressRouteUrls", func() { testUpdate( validator, - "valid/minimal.yaml", - "invalid/minimal-service-url-changed-ingress-route-urls-missing-old.yaml", - errors.New("Atom.pdok.nl \"asis-readonly-prod\" is invalid: spec.ingressRouteUrls: Invalid value: \"[{http://localhost:32788/new/path}]\": must contain baseURL: http://localhost:32788/rvo/wetlands/atom"), + "minimal.yaml", + func(atom *pdoknlv3.Atom) { + newURL, _ := model.ParseURL("http://localhost:32788/new/path") + + atom.Spec.IngressRouteURLs = model.IngressRouteURLs{{URL: model.URL{URL: newURL}}} + atom.Spec.Service.BaseURL = model.URL{URL: newURL} + }, + func(_, newAtom *pdoknlv3.Atom) field.ErrorList { + return field.ErrorList{ + field.Invalid(field.NewPath("spec").Child("ingressRouteUrls"), fmt.Sprint(newAtom.Spec.IngressRouteURLs), "must contain baseURL: http://localhost:32788/owner/dataset/atom"), + } + }, ) }) It("Should deny update atom when the service baseUrl is changed and the new value is not added to the ingressRouteUrls", func() { testUpdate( validator, - "valid/minimal.yaml", - "invalid/minimal-service-url-changed-ingress-route-urls-missing-new.yaml", - errors.New("Atom.pdok.nl \"asis-readonly-prod\" is invalid: spec.ingressRouteUrls: Invalid value: \"[{http://localhost:32788/rvo/wetlands/atom}]\": must contain baseURL: http://localhost:32788/new/path"), + "minimal.yaml", + func(atom *pdoknlv3.Atom) { + oldURL := atom.Spec.Service.BaseURL + newURL, _ := model.ParseURL("http://localhost:32788/new/path") + + atom.Spec.IngressRouteURLs = model.IngressRouteURLs{{URL: oldURL}} + atom.Spec.Service.BaseURL = model.URL{URL: newURL} + }, + func(_, newAtom *pdoknlv3.Atom) field.ErrorList { + return field.ErrorList{ + field.Invalid(field.NewPath("spec").Child("ingressRouteUrls"), fmt.Sprint(newAtom.Spec.IngressRouteURLs), "must contain baseURL: http://localhost:32788/new/path"), + } + }, ) }) It("Should create and update atom with changed service url if ingressRouteUrls is filled correctly", func() { - testUpdate(validator, "valid/minimal.yaml", "valid/minimal-service-url-changed.yaml", nil) + testUpdate( + validator, + "minimal.yaml", + func(atom *pdoknlv3.Atom) { + oldURL := atom.Spec.Service.BaseURL + newURL, _ := model.ParseURL("http://localhost:32788/new/path") + + atom.Spec.IngressRouteURLs = model.IngressRouteURLs{{URL: oldURL}, {URL: model.URL{URL: newURL}}} + atom.Spec.Service.BaseURL = model.URL{URL: newURL} + }, + nil, + ) }) }) }) -func testUpdate(validator AtomCustomValidator, createFile, updateFile string, expectedError error) { - atomOld := testCreate(validator, createFile, nil) +func testUpdate(validator AtomCustomValidator, createFile string, updateFn func(atom *pdoknlv3.Atom), errFn func(atomOld, atomNew *pdoknlv3.Atom) field.ErrorList) { + atomOld := testCreate(validator, createFile, nil, nil) By("Simulating an (in)valid update scenario") - input, err := os.ReadFile("test_data/updates/" + updateFile) - Expect(err).NotTo(HaveOccurred()) - atomNew := &pdoknlv3.Atom{} - err = yaml.Unmarshal(input, atomNew) - Expect(err).NotTo(HaveOccurred()) - Expect(atomOld.GetName()).To(Equal(atomNew.GetName())) - warnings, errorsUpdate := validator.ValidateUpdate(ctx, atomOld, atomNew) + atomNew := atomOld.DeepCopy() + updateFn(atomNew) + + warnings, err := validator.ValidateUpdate(ctx, atomOld, atomNew) Expect(len(warnings)).To(Equal(0)) - if expectedError == nil { - Expect(errorsUpdate).To(Not(HaveOccurred())) + if errFn == nil { + Expect(err).To(Not(HaveOccurred())) } else { - Expect(errorsUpdate).To(HaveOccurred()) - Expect(expectedError.Error()).To(Equal(errorsUpdate.Error())) + Expect(err).To(HaveOccurred()) + Expect( + apierrors.NewInvalid(schema.GroupKind{Group: "pdok.nl", Kind: "Atom"}, atomNew.Name, errFn(atomOld, atomNew)).Error(), + ).To(Equal(err.Error())) } } -func testCreate(validator AtomCustomValidator, createFile string, expectedError error) *pdoknlv3.Atom { +func testCreate(validator AtomCustomValidator, baseFile string, mutateFn func(atom *pdoknlv3.Atom), errWarnFn func(atom *pdoknlv3.Atom) (field.ErrorList, admission.Warnings)) *pdoknlv3.Atom { By("simulating a (in)valid creation scenario") - input, err := os.ReadFile("test_data/creates/" + createFile) + input, err := os.ReadFile("test_data/" + baseFile) Expect(err).NotTo(HaveOccurred()) atom := &pdoknlv3.Atom{} err = yaml.Unmarshal(input, atom) Expect(err).NotTo(HaveOccurred()) - warnings, err := validator.ValidateCreate(ctx, atom) - Expect(len(warnings)).To(Equal(0)) - if expectedError == nil { + if mutateFn != nil { + mutateFn(atom) + } + + warnings, err := validator.ValidateCreate(ctx, atom) + if errWarnFn == nil { + Expect(len(warnings)).To(Equal(0)) Expect(err).To(Not(HaveOccurred())) } else { - Expect(expectedError.Error()).To(Equal(err.Error())) + expectedErrs, expectedWarns := errWarnFn(atom) + if expectedErrs != nil { + Expect(err).To(HaveOccurred()) + Expect( + apierrors.NewInvalid(schema.GroupKind{Group: "pdok.nl", Kind: "Atom"}, atom.Name, expectedErrs).Error(), + ).To(Equal(err.Error())) + } + Expect(warnings).To(Equal(expectedWarns)) } return atom diff --git a/internal/webhook/v3/test_data/README.md b/internal/webhook/v3/test_data/README.md deleted file mode 100644 index 187fa94..0000000 --- a/internal/webhook/v3/test_data/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# Directory setup - -This directory contains test data to the the Atom validation webhook. - -Files inside the `updates` subdirectory correspond to files in the `creates/valid` subdirectory. - -For example: - -- updates/invalid/**ingress-route-urls**-removed-url.yaml represents an update of the creates/valid/**ingress-route-urls**.yaml. -- updates/valid/**minimal**-service-url-changed.yaml represents an update of the creates/valid/**minimal**.yaml. \ No newline at end of file diff --git a/internal/webhook/v3/test_data/creates/invalid/ingress-route-urls-missing-baseurl.yaml b/internal/webhook/v3/test_data/creates/invalid/ingress-route-urls-missing-baseurl.yaml deleted file mode 100644 index 08f1d41..0000000 --- a/internal/webhook/v3/test_data/creates/invalid/ingress-route-urls-missing-baseurl.yaml +++ /dev/null @@ -1,62 +0,0 @@ -apiVersion: pdok.nl/v3 -kind: Atom -metadata: - annotations: - kangaroo.pdok.nl/lifecycle-phase: prod - kangaroo.pdok.nl/service-bundle-ids: 65daed5f-e9e4-5791-a7c9-7e9effcca520 - kangaroo.pdok.nl/readonly: "true" - labels: - pdok.nl/dataset-id: wetlands - pdok.nl/owner-id: rvo - pdok.nl/service-type: atom - name: ingress-route-urls - namespace: services -spec: - ingressRouteUrls: - - url: http://test.com/path - service: - baseUrl: http://localhost:32788/rvo/wetlands/atom - datasetFeeds: - - author: - email: geodatabeheer.giscc@minlnv.nl - name: Ministerie van EL&I - GIS Competence Center - datasetMetadataLinks: - metadataIdentifier: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - templates: - - csw - - html - entries: - - content: - Wetlands zijn de natte natuurgebieden in Nederland (44 gebieden). - Het Wetland verdrag is op 2 februari 1971 te Ramsar in Iran ondertekend. - Nederland was een van de zestien landen die het Verdrag toen ondertekende. - downloadlinks: - - data: public/rvo/wetlands/65daed5f-e9e4-5791-a7c9-7e9effcca520/3/wetlands.gpkg - polygon: - bbox: - maxx: "7.5553527" - maxy: "55.66948" - minx: "2.354173" - miny: "50.71447" - srs: - name: Amersfoort / RD New - uri: https://www.opengis.net/def/crs/EPSG/0/28992 - technicalName: wetlands - title: wetlands - updated: "2025-02-28T09:04:17Z" - spatialDatasetIdentifierCode: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - spatialDatasetIdentifierNamespace: http://www.pdok.nl - subtitle: wetlands - technicalName: wetlands - title: wetlands - lang: nl - ownerInfoRef: pdok - rights: https://creativecommons.org/publicdomain/zero/1.0/deed.nl - serviceMetadataLinks: - metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95b49c - templates: - - csw - - opensearch - - html - subtitle: Download Service van wetlands - title: Wetlands diff --git a/internal/webhook/v3/test_data/creates/valid/minimal.yaml b/internal/webhook/v3/test_data/creates/valid/minimal.yaml deleted file mode 100644 index ec653c4..0000000 --- a/internal/webhook/v3/test_data/creates/valid/minimal.yaml +++ /dev/null @@ -1,60 +0,0 @@ -apiVersion: pdok.nl/v3 -kind: Atom -metadata: - annotations: - kangaroo.pdok.nl/lifecycle-phase: prod - kangaroo.pdok.nl/service-bundle-ids: 65daed5f-e9e4-5791-a7c9-7e9effcca520 - kangaroo.pdok.nl/readonly: "true" - labels: - pdok.nl/dataset-id: wetlands - pdok.nl/owner-id: rvo - pdok.nl/service-type: atom - name: asis-readonly-prod - namespace: services -spec: - service: - baseUrl: http://localhost:32788/rvo/wetlands/atom - datasetFeeds: - - author: - email: geodatabeheer.giscc@minlnv.nl - name: Ministerie van EL&I - GIS Competence Center - datasetMetadataLinks: - metadataIdentifier: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - templates: - - csw - - html - entries: - - content: - Wetlands zijn de natte natuurgebieden in Nederland (44 gebieden). - Het Wetland verdrag is op 2 februari 1971 te Ramsar in Iran ondertekend. - Nederland was een van de zestien landen die het Verdrag toen ondertekende. - downloadlinks: - - data: public/rvo/wetlands/65daed5f-e9e4-5791-a7c9-7e9effcca520/3/wetlands.gpkg - polygon: - bbox: - maxx: "7.5553527" - maxy: "55.66948" - minx: "2.354173" - miny: "50.71447" - srs: - name: Amersfoort / RD New - uri: https://www.opengis.net/def/crs/EPSG/0/28992 - technicalName: wetlands - title: wetlands - updated: "2025-02-28T09:04:17Z" - spatialDatasetIdentifierCode: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - spatialDatasetIdentifierNamespace: http://www.pdok.nl - subtitle: wetlands - technicalName: wetlands - title: wetlands - lang: nl - ownerInfoRef: pdok - rights: https://creativecommons.org/publicdomain/zero/1.0/deed.nl - serviceMetadataLinks: - metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95b49c - templates: - - csw - - opensearch - - html - subtitle: Download Service van wetlands - title: Wetlands diff --git a/internal/webhook/v3/test_data/creates/valid/ingress-route-urls.yaml b/internal/webhook/v3/test_data/ingress-route-urls.yaml similarity index 52% rename from internal/webhook/v3/test_data/creates/valid/ingress-route-urls.yaml rename to internal/webhook/v3/test_data/ingress-route-urls.yaml index e19eba3..18c5ee1 100644 --- a/internal/webhook/v3/test_data/creates/valid/ingress-route-urls.yaml +++ b/internal/webhook/v3/test_data/ingress-route-urls.yaml @@ -3,36 +3,33 @@ kind: Atom metadata: annotations: kangaroo.pdok.nl/lifecycle-phase: prod - kangaroo.pdok.nl/service-bundle-ids: 65daed5f-e9e4-5791-a7c9-7e9effcca520 kangaroo.pdok.nl/readonly: "true" labels: - pdok.nl/dataset-id: wetlands - pdok.nl/owner-id: rvo + pdok.nl/dataset-id: dataset-with-multiple-urls + pdok.nl/owner-id: owner pdok.nl/service-type: atom name: ingress-route-urls namespace: services spec: ingressRouteUrls: - - url: http://localhost:32788/rvo/wetlands/atom + - url: http://localhost:32788/owner/dataset/atom - url: http://localhost:32788/other/path service: - baseUrl: http://localhost:32788/rvo/wetlands/atom + baseUrl: http://localhost:32788/owner/dataset/atom datasetFeeds: - author: - email: geodatabeheer.giscc@minlnv.nl - name: Ministerie van EL&I - GIS Competence Center + email: author@email.com + name: Author datasetMetadataLinks: - metadataIdentifier: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e + metadataIdentifier: 07d73b60-dfd6-4c54-9c82-9fac70c6caf6 templates: - csw - html entries: - content: - Wetlands zijn de natte natuurgebieden in Nederland (44 gebieden). - Het Wetland verdrag is op 2 februari 1971 te Ramsar in Iran ondertekend. - Nederland was een van de zestien landen die het Verdrag toen ondertekende. + Deze dataset bevat data over allerlei willekeurige dingen downloadlinks: - - data: public/rvo/wetlands/65daed5f-e9e4-5791-a7c9-7e9effcca520/3/wetlands.gpkg + - data: public/owner/dataset/65daed5f-e9e4-5791-a7c9-7e9effcca585/3/dataset.gpkg polygon: bbox: maxx: "7.5553527" @@ -42,22 +39,22 @@ spec: srs: name: Amersfoort / RD New uri: https://www.opengis.net/def/crs/EPSG/0/28992 - technicalName: wetlands - title: wetlands + technicalName: dataset + title: dataset updated: "2025-02-28T09:04:17Z" - spatialDatasetIdentifierCode: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e + spatialDatasetIdentifierCode: 07d73b60-dfd6-4c54-9c82-9fac70c6caf6 spatialDatasetIdentifierNamespace: http://www.pdok.nl - subtitle: wetlands - technicalName: wetlands - title: wetlands + subtitle: dataset + technicalName: dataset + title: dataset lang: nl ownerInfoRef: pdok rights: https://creativecommons.org/publicdomain/zero/1.0/deed.nl serviceMetadataLinks: - metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95b49c + metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95baf6 templates: - csw - opensearch - html - subtitle: Download Service van wetlands - title: Wetlands + subtitle: Download Service van dataset + title: Dataset diff --git a/internal/webhook/v3/test_data/creates/invalid/no-labels.yaml b/internal/webhook/v3/test_data/minimal.yaml similarity index 51% rename from internal/webhook/v3/test_data/creates/invalid/no-labels.yaml rename to internal/webhook/v3/test_data/minimal.yaml index 3917b5b..162a487 100644 --- a/internal/webhook/v3/test_data/creates/invalid/no-labels.yaml +++ b/internal/webhook/v3/test_data/minimal.yaml @@ -3,29 +3,30 @@ kind: Atom metadata: annotations: kangaroo.pdok.nl/lifecycle-phase: prod - kangaroo.pdok.nl/service-bundle-ids: 65daed5f-e9e4-5791-a7c9-7e9effcca520 kangaroo.pdok.nl/readonly: "true" - name: asis-readonly-prod + labels: + pdok.nl/dataset-id: dataset + pdok.nl/owner-id: owner + pdok.nl/service-type: atom + name: minimal namespace: services spec: service: - baseUrl: http://localhost:32788/rvo/wetlands/atom + baseUrl: http://localhost:32788/owner/dataset/atom datasetFeeds: - author: - email: geodatabeheer.giscc@minlnv.nl - name: Ministerie van EL&I - GIS Competence Center + email: author@email.com + name: Author datasetMetadataLinks: - metadataIdentifier: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e + metadataIdentifier: 07d73b60-dfd6-4c54-9c82-9fac70c6caf6 templates: - csw - html entries: - content: - Wetlands zijn de natte natuurgebieden in Nederland (44 gebieden). - Het Wetland verdrag is op 2 februari 1971 te Ramsar in Iran ondertekend. - Nederland was een van de zestien landen die het Verdrag toen ondertekende. + Deze dataset bevat data over allerlei willekeurige dingen downloadlinks: - - data: public/rvo/wetlands/65daed5f-e9e4-5791-a7c9-7e9effcca520/3/wetlands.gpkg + - data: public/owner/dataset/65daed5f-e9e4-5791-a7c9-7e9effcca585/3/dataset.gpkg polygon: bbox: maxx: "7.5553527" @@ -35,22 +36,22 @@ spec: srs: name: Amersfoort / RD New uri: https://www.opengis.net/def/crs/EPSG/0/28992 - technicalName: wetlands - title: wetlands + technicalName: dataset + title: dataset updated: "2025-02-28T09:04:17Z" - spatialDatasetIdentifierCode: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e + spatialDatasetIdentifierCode: 07d73b60-dfd6-4c54-9c82-9fac70c6caf6 spatialDatasetIdentifierNamespace: http://www.pdok.nl - subtitle: wetlands - technicalName: wetlands - title: wetlands + subtitle: dataset + technicalName: dataset + title: dataset lang: nl ownerInfoRef: pdok rights: https://creativecommons.org/publicdomain/zero/1.0/deed.nl serviceMetadataLinks: - metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95b49c + metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95baf6 templates: - csw - opensearch - html - subtitle: Download Service van wetlands - title: Wetlands + subtitle: Download Service van dataset + title: Dataset diff --git a/internal/webhook/v3/test_data/updates/invalid/ingress-route-urls-removed-url.yaml b/internal/webhook/v3/test_data/updates/invalid/ingress-route-urls-removed-url.yaml deleted file mode 100644 index cedba17..0000000 --- a/internal/webhook/v3/test_data/updates/invalid/ingress-route-urls-removed-url.yaml +++ /dev/null @@ -1,62 +0,0 @@ -apiVersion: pdok.nl/v3 -kind: Atom -metadata: - annotations: - kangaroo.pdok.nl/lifecycle-phase: prod - kangaroo.pdok.nl/service-bundle-ids: 65daed5f-e9e4-5791-a7c9-7e9effcca520 - kangaroo.pdok.nl/readonly: "true" - labels: - pdok.nl/dataset-id: wetlands - pdok.nl/owner-id: rvo - pdok.nl/service-type: atom - name: ingress-route-urls - namespace: services -spec: - ingressRouteUrls: - - url: http://localhost:32788/rvo/wetlands/atom - service: - baseUrl: http://localhost:32788/rvo/wetlands/atom - datasetFeeds: - - author: - email: geodatabeheer.giscc@minlnv.nl - name: Ministerie van EL&I - GIS Competence Center - datasetMetadataLinks: - metadataIdentifier: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - templates: - - csw - - html - entries: - - content: - Wetlands zijn de natte natuurgebieden in Nederland (44 gebieden). - Het Wetland verdrag is op 2 februari 1971 te Ramsar in Iran ondertekend. - Nederland was een van de zestien landen die het Verdrag toen ondertekende. - downloadlinks: - - data: public/rvo/wetlands/65daed5f-e9e4-5791-a7c9-7e9effcca520/3/wetlands.gpkg - polygon: - bbox: - maxx: "7.5553527" - maxy: "55.66948" - minx: "2.354173" - miny: "50.71447" - srs: - name: Amersfoort / RD New - uri: https://www.opengis.net/def/crs/EPSG/0/28992 - technicalName: wetlands - title: wetlands - updated: "2025-02-28T09:04:17Z" - spatialDatasetIdentifierCode: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - spatialDatasetIdentifierNamespace: http://www.pdok.nl - subtitle: wetlands - technicalName: wetlands - title: wetlands - lang: nl - ownerInfoRef: pdok - rights: https://creativecommons.org/publicdomain/zero/1.0/deed.nl - serviceMetadataLinks: - metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95b49c - templates: - - csw - - opensearch - - html - subtitle: Download Service van wetlands - title: Wetlands diff --git a/internal/webhook/v3/test_data/updates/invalid/minimal-immutable-labels-key-change.yaml b/internal/webhook/v3/test_data/updates/invalid/minimal-immutable-labels-key-change.yaml deleted file mode 100644 index 69acaa5..0000000 --- a/internal/webhook/v3/test_data/updates/invalid/minimal-immutable-labels-key-change.yaml +++ /dev/null @@ -1,60 +0,0 @@ -apiVersion: pdok.nl/v3 -kind: Atom -metadata: - annotations: - kangaroo.pdok.nl/lifecycle-phase: prod - kangaroo.pdok.nl/service-bundle-ids: 65daed5f-e9e4-5791-a7c9-7e9effcca520 - kangaroo.pdok.nl/readonly: "true" - labels: - pdok.nl/dataset-idsssssssss: wetlands - pdok.nl/owner-id: rvo - pdok.nl/service-type: atom - name: asis-readonly-prod - namespace: services -spec: - service: - baseUrl: http://localhost:32788/rvo/wetlands/atom - datasetFeeds: - - author: - email: geodatabeheer.giscc@minlnv.nl - name: Ministerie van EL&I - GIS Competence Center - datasetMetadataLinks: - metadataIdentifier: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - templates: - - csw - - html - entries: - - content: - Wetlands zijn de natte natuurgebieden in Nederland (44 gebieden). - Het Wetland verdrag is op 2 februari 1971 te Ramsar in Iran ondertekend. - Nederland was een van de zestien landen die het Verdrag toen ondertekende. - downloadlinks: - - data: public/rvo/wetlands/65daed5f-e9e4-5791-a7c9-7e9effcca520/3/wetlands.gpkg - polygon: - bbox: - maxx: "7.5553527" - maxy: "55.66948" - minx: "2.354173" - miny: "50.71447" - srs: - name: Amersfoort / RD New - uri: https://www.opengis.net/def/crs/EPSG/0/28992 - technicalName: wetlands - title: wetlands - updated: "2025-02-28T09:04:17Z" - spatialDatasetIdentifierCode: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - spatialDatasetIdentifierNamespace: http://www.pdok.nl - subtitle: wetlands - technicalName: wetlands - title: wetlands - lang: nl - ownerInfoRef: pdok - rights: https://creativecommons.org/publicdomain/zero/1.0/deed.nl - serviceMetadataLinks: - metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95b49c - templates: - - csw - - opensearch - - html - subtitle: Download Service van wetlands new title - title: Wetlands new title diff --git a/internal/webhook/v3/test_data/updates/invalid/minimal-immutable-labels-value-change.yaml b/internal/webhook/v3/test_data/updates/invalid/minimal-immutable-labels-value-change.yaml deleted file mode 100644 index 4636c95..0000000 --- a/internal/webhook/v3/test_data/updates/invalid/minimal-immutable-labels-value-change.yaml +++ /dev/null @@ -1,60 +0,0 @@ -apiVersion: pdok.nl/v3 -kind: Atom -metadata: - annotations: - kangaroo.pdok.nl/lifecycle-phase: prod - kangaroo.pdok.nl/service-bundle-ids: 65daed5f-e9e4-5791-a7c9-7e9effcca520 - kangaroo.pdok.nl/readonly: "true" - labels: - pdok.nl/dataset-id: wetlands-changed - pdok.nl/owner-id: rvo - pdok.nl/service-type: atom - name: asis-readonly-prod - namespace: services -spec: - service: - baseUrl: http://localhost:32788/rvo/wetlands/atom - datasetFeeds: - - author: - email: geodatabeheer.giscc@minlnv.nl - name: Ministerie van EL&I - GIS Competence Center - datasetMetadataLinks: - metadataIdentifier: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - templates: - - csw - - html - entries: - - content: - Wetlands zijn de natte natuurgebieden in Nederland (44 gebieden). - Het Wetland verdrag is op 2 februari 1971 te Ramsar in Iran ondertekend. - Nederland was een van de zestien landen die het Verdrag toen ondertekende. - downloadlinks: - - data: public/rvo/wetlands/65daed5f-e9e4-5791-a7c9-7e9effcca520/3/wetlands.gpkg - polygon: - bbox: - maxx: "7.5553527" - maxy: "55.66948" - minx: "2.354173" - miny: "50.71447" - srs: - name: Amersfoort / RD New - uri: https://www.opengis.net/def/crs/EPSG/0/28992 - technicalName: wetlands - title: wetlands - updated: "2025-02-28T09:04:17Z" - spatialDatasetIdentifierCode: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - spatialDatasetIdentifierNamespace: http://www.pdok.nl - subtitle: wetlands - technicalName: wetlands - title: wetlands - lang: nl - ownerInfoRef: pdok - rights: https://creativecommons.org/publicdomain/zero/1.0/deed.nl - serviceMetadataLinks: - metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95b49c - templates: - - csw - - opensearch - - html - subtitle: Download Service van wetlands new title - title: Wetlands new title diff --git a/internal/webhook/v3/test_data/updates/invalid/minimal-immutable-url.yaml b/internal/webhook/v3/test_data/updates/invalid/minimal-immutable-url.yaml deleted file mode 100644 index 90fbfec..0000000 --- a/internal/webhook/v3/test_data/updates/invalid/minimal-immutable-url.yaml +++ /dev/null @@ -1,60 +0,0 @@ -apiVersion: pdok.nl/v3 -kind: Atom -metadata: - annotations: - kangaroo.pdok.nl/lifecycle-phase: prod - kangaroo.pdok.nl/service-bundle-ids: 65daed5f-e9e4-5791-a7c9-7e9effcca520 - kangaroo.pdok.nl/readonly: "true" - labels: - pdok.nl/dataset-id: wetlands - pdok.nl/owner-id: rvo - pdok.nl/service-type: atom - name: asis-readonly-prod - namespace: services -spec: - service: - baseUrl: http://localhost:32788/rvo44444/wetlands/atom - datasetFeeds: - - author: - email: geodatabeheer.giscc@minlnv.nl - name: Ministerie van EL&I - GIS Competence Center - datasetMetadataLinks: - metadataIdentifier: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - templates: - - csw - - html - entries: - - content: - Wetlands zijn de natte natuurgebieden in Nederland (44 gebieden). - Het Wetland verdrag is op 2 februari 1971 te Ramsar in Iran ondertekend. - Nederland was een van de zestien landen die het Verdrag toen ondertekende. - downloadlinks: - - data: public/rvo/wetlands/65daed5f-e9e4-5791-a7c9-7e9effcca520/3/wetlands.gpkg - polygon: - bbox: - maxx: "7.5553527" - maxy: "55.66948" - minx: "2.354173" - miny: "50.71447" - srs: - name: Amersfoort / RD New - uri: https://www.opengis.net/def/crs/EPSG/0/28992 - technicalName: wetlands - title: wetlands - updated: "2025-02-28T09:04:17Z" - spatialDatasetIdentifierCode: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - spatialDatasetIdentifierNamespace: http://www.pdok.nl - subtitle: wetlands - technicalName: wetlands - title: wetlands - lang: nl - ownerInfoRef: pdok - rights: https://creativecommons.org/publicdomain/zero/1.0/deed.nl - serviceMetadataLinks: - metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95b49c - templates: - - csw - - opensearch - - html - subtitle: Download Service van wetlands - title: Wetlands diff --git a/internal/webhook/v3/test_data/updates/invalid/minimal-service-url-changed-ingress-route-urls-missing-new.yaml b/internal/webhook/v3/test_data/updates/invalid/minimal-service-url-changed-ingress-route-urls-missing-new.yaml deleted file mode 100644 index 1afc8f3..0000000 --- a/internal/webhook/v3/test_data/updates/invalid/minimal-service-url-changed-ingress-route-urls-missing-new.yaml +++ /dev/null @@ -1,63 +0,0 @@ -apiVersion: pdok.nl/v3 -kind: Atom -metadata: - annotations: - kangaroo.pdok.nl/lifecycle-phase: prod - kangaroo.pdok.nl/service-bundle-ids: 65daed5f-e9e4-5791-a7c9-7e9effcca520 - kangaroo.pdok.nl/readonly: "true" - labels: - pdok.nl/dataset-id: wetlands - pdok.nl/owner-id: rvo - pdok.nl/service-type: atom - name: asis-readonly-prod - namespace: services -spec: - ingressRouteUrls: - # Note that the new service baseUrl is missing here - - url: http://localhost:32788/rvo/wetlands/atom - service: - baseUrl: http://localhost:32788/new/path - datasetFeeds: - - author: - email: geodatabeheer.giscc@minlnv.nl - name: Ministerie van EL&I - GIS Competence Center - datasetMetadataLinks: - metadataIdentifier: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - templates: - - csw - - html - entries: - - content: - Wetlands zijn de natte natuurgebieden in Nederland (44 gebieden). - Het Wetland verdrag is op 2 februari 1971 te Ramsar in Iran ondertekend. - Nederland was een van de zestien landen die het Verdrag toen ondertekende. - downloadlinks: - - data: public/rvo/wetlands/65daed5f-e9e4-5791-a7c9-7e9effcca520/3/wetlands.gpkg - polygon: - bbox: - maxx: "7.5553527" - maxy: "55.66948" - minx: "2.354173" - miny: "50.71447" - srs: - name: Amersfoort / RD New - uri: https://www.opengis.net/def/crs/EPSG/0/28992 - technicalName: wetlands - title: wetlands - updated: "2025-02-28T09:04:17Z" - spatialDatasetIdentifierCode: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - spatialDatasetIdentifierNamespace: http://www.pdok.nl - subtitle: wetlands - technicalName: wetlands - title: wetlands - lang: nl - ownerInfoRef: pdok - rights: https://creativecommons.org/publicdomain/zero/1.0/deed.nl - serviceMetadataLinks: - metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95b49c - templates: - - csw - - opensearch - - html - subtitle: Download Service van wetlands - title: Wetlands diff --git a/internal/webhook/v3/test_data/updates/invalid/minimal-service-url-changed-ingress-route-urls-missing-old.yaml b/internal/webhook/v3/test_data/updates/invalid/minimal-service-url-changed-ingress-route-urls-missing-old.yaml deleted file mode 100644 index 32e687a..0000000 --- a/internal/webhook/v3/test_data/updates/invalid/minimal-service-url-changed-ingress-route-urls-missing-old.yaml +++ /dev/null @@ -1,63 +0,0 @@ -apiVersion: pdok.nl/v3 -kind: Atom -metadata: - annotations: - kangaroo.pdok.nl/lifecycle-phase: prod - kangaroo.pdok.nl/service-bundle-ids: 65daed5f-e9e4-5791-a7c9-7e9effcca520 - kangaroo.pdok.nl/readonly: "true" - labels: - pdok.nl/dataset-id: wetlands - pdok.nl/owner-id: rvo - pdok.nl/service-type: atom - name: asis-readonly-prod - namespace: services -spec: - ingressRouteUrls: - # Note that the old service baseUrl is missing here - - url: http://localhost:32788/new/path - service: - baseUrl: http://localhost:32788/new/path - datasetFeeds: - - author: - email: geodatabeheer.giscc@minlnv.nl - name: Ministerie van EL&I - GIS Competence Center - datasetMetadataLinks: - metadataIdentifier: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - templates: - - csw - - html - entries: - - content: - Wetlands zijn de natte natuurgebieden in Nederland (44 gebieden). - Het Wetland verdrag is op 2 februari 1971 te Ramsar in Iran ondertekend. - Nederland was een van de zestien landen die het Verdrag toen ondertekende. - downloadlinks: - - data: public/rvo/wetlands/65daed5f-e9e4-5791-a7c9-7e9effcca520/3/wetlands.gpkg - polygon: - bbox: - maxx: "7.5553527" - maxy: "55.66948" - minx: "2.354173" - miny: "50.71447" - srs: - name: Amersfoort / RD New - uri: https://www.opengis.net/def/crs/EPSG/0/28992 - technicalName: wetlands - title: wetlands - updated: "2025-02-28T09:04:17Z" - spatialDatasetIdentifierCode: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - spatialDatasetIdentifierNamespace: http://www.pdok.nl - subtitle: wetlands - technicalName: wetlands - title: wetlands - lang: nl - ownerInfoRef: pdok - rights: https://creativecommons.org/publicdomain/zero/1.0/deed.nl - serviceMetadataLinks: - metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95b49c - templates: - - csw - - opensearch - - html - subtitle: Download Service van wetlands - title: Wetlands diff --git a/internal/webhook/v3/test_data/updates/valid/minimal-service-title-changed.yaml b/internal/webhook/v3/test_data/updates/valid/minimal-service-title-changed.yaml deleted file mode 100644 index 9b62891..0000000 --- a/internal/webhook/v3/test_data/updates/valid/minimal-service-title-changed.yaml +++ /dev/null @@ -1,60 +0,0 @@ -apiVersion: pdok.nl/v3 -kind: Atom -metadata: - annotations: - kangaroo.pdok.nl/lifecycle-phase: prod - kangaroo.pdok.nl/service-bundle-ids: 65daed5f-e9e4-5791-a7c9-7e9effcca520 - kangaroo.pdok.nl/readonly: "true" - labels: - pdok.nl/dataset-id: wetlands - pdok.nl/owner-id: rvo - pdok.nl/service-type: atom - name: asis-readonly-prod - namespace: services -spec: - service: - baseUrl: http://localhost:32788/rvo/wetlands/atom - datasetFeeds: - - author: - email: geodatabeheer.giscc@minlnv.nl - name: Ministerie van EL&I - GIS Competence Center - datasetMetadataLinks: - metadataIdentifier: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - templates: - - csw - - html - entries: - - content: - Wetlands zijn de natte natuurgebieden in Nederland (44 gebieden). - Het Wetland verdrag is op 2 februari 1971 te Ramsar in Iran ondertekend. - Nederland was een van de zestien landen die het Verdrag toen ondertekende. - downloadlinks: - - data: public/rvo/wetlands/65daed5f-e9e4-5791-a7c9-7e9effcca520/3/wetlands.gpkg - polygon: - bbox: - maxx: "7.5553527" - maxy: "55.66948" - minx: "2.354173" - miny: "50.71447" - srs: - name: Amersfoort / RD New - uri: https://www.opengis.net/def/crs/EPSG/0/28992 - technicalName: wetlands - title: wetlands - updated: "2025-02-28T09:04:17Z" - spatialDatasetIdentifierCode: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - spatialDatasetIdentifierNamespace: http://www.pdok.nl - subtitle: wetlands - technicalName: wetlands - title: wetlands - lang: nl - ownerInfoRef: pdok - rights: https://creativecommons.org/publicdomain/zero/1.0/deed.nl - serviceMetadataLinks: - metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95b49c - templates: - - csw - - opensearch - - html - subtitle: Download Service van wetlands new title - title: Wetlands new title diff --git a/internal/webhook/v3/test_data/updates/valid/minimal-service-url-changed.yaml b/internal/webhook/v3/test_data/updates/valid/minimal-service-url-changed.yaml deleted file mode 100644 index 7293ec4..0000000 --- a/internal/webhook/v3/test_data/updates/valid/minimal-service-url-changed.yaml +++ /dev/null @@ -1,63 +0,0 @@ -apiVersion: pdok.nl/v3 -kind: Atom -metadata: - annotations: - kangaroo.pdok.nl/lifecycle-phase: prod - kangaroo.pdok.nl/service-bundle-ids: 65daed5f-e9e4-5791-a7c9-7e9effcca520 - kangaroo.pdok.nl/readonly: "true" - labels: - pdok.nl/dataset-id: wetlands - pdok.nl/owner-id: rvo - pdok.nl/service-type: atom - name: asis-readonly-prod - namespace: services -spec: - ingressRouteUrls: - - url: http://localhost:32788/rvo/wetlands/atom # <-- old service url - - url: http://localhost:32788/new/path - service: - baseUrl: http://localhost:32788/new/path - datasetFeeds: - - author: - email: geodatabeheer.giscc@minlnv.nl - name: Ministerie van EL&I - GIS Competence Center - datasetMetadataLinks: - metadataIdentifier: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - templates: - - csw - - html - entries: - - content: - Wetlands zijn de natte natuurgebieden in Nederland (44 gebieden). - Het Wetland verdrag is op 2 februari 1971 te Ramsar in Iran ondertekend. - Nederland was een van de zestien landen die het Verdrag toen ondertekende. - downloadlinks: - - data: public/rvo/wetlands/65daed5f-e9e4-5791-a7c9-7e9effcca520/3/wetlands.gpkg - polygon: - bbox: - maxx: "7.5553527" - maxy: "55.66948" - minx: "2.354173" - miny: "50.71447" - srs: - name: Amersfoort / RD New - uri: https://www.opengis.net/def/crs/EPSG/0/28992 - technicalName: wetlands - title: wetlands - updated: "2025-02-28T09:04:17Z" - spatialDatasetIdentifierCode: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e - spatialDatasetIdentifierNamespace: http://www.pdok.nl - subtitle: wetlands - technicalName: wetlands - title: wetlands - lang: nl - ownerInfoRef: pdok - rights: https://creativecommons.org/publicdomain/zero/1.0/deed.nl - serviceMetadataLinks: - metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95b49c - templates: - - csw - - opensearch - - html - subtitle: Download Service van wetlands - title: Wetlands