Skip to content

Commit 2e8004a

Browse files
authored
Merge pull request #49 from PDOK/basim/unittest-atom-validation
Basim/unittest atom validation
2 parents 05edf54 + ee4a556 commit 2e8004a

20 files changed

+1216
-40
lines changed

api/v2beta1/atom_conversion_test.go

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,17 @@ func TestAtom_ConvertTo(t *testing.T) {
3434
if len(testAtomV3.ObjectMeta.Labels) != len(convertToAtom.ObjectMeta.Labels) {
3535
t.Errorf("ConvertTo() error = len(testAtomV3.ObjectMeta.Labels) ")
3636
}
37-
if testAtomV3.ObjectMeta.Labels["dataset-owner"] != convertToAtom.ObjectMeta.Labels["dataset-owner"] {
38-
t.Errorf("ConvertTo() error = %v, expected: %v, got: %v", "label dataset-owner: ", testAtomV3.ObjectMeta.Labels["dataset-owner"], convertToAtom.ObjectMeta.Labels["dataset-owner"])
37+
if testAtomV3.ObjectMeta.Labels["pdok.nl/owner-id"] != convertToAtom.ObjectMeta.Labels["pdok.nl/owner-id"] {
38+
t.Errorf("ConvertTo() error = %v, expected: %v, got: %v", "label pdok.nl/owner-id: ", testAtomV3.ObjectMeta.Labels["pdok.nl/owner-id"], convertToAtom.ObjectMeta.Labels["pdok.nl/owner-id"])
3939
}
40-
if testAtomV3.ObjectMeta.Labels["dataset"] != convertToAtom.ObjectMeta.Labels["dataset"] {
41-
t.Errorf("ConvertTo() error = %v, expected: %v, got: %v", "label dataset: ", testAtomV3.ObjectMeta.Labels["dataset"], convertToAtom.ObjectMeta.Labels["dataset"])
40+
if testAtomV3.ObjectMeta.Labels["pdok.nl/dataset-id"] != convertToAtom.ObjectMeta.Labels["pdok.nl/dataset-id"] {
41+
t.Errorf("ConvertTo() error = %v, expected: %v, got: %v", "label pdok.nl/dataset-id: ", testAtomV3.ObjectMeta.Labels["pdok.nl/dataset-id"], convertToAtom.ObjectMeta.Labels["pdok.nl/dataset-id"])
4242
}
43-
if testAtomV3.ObjectMeta.Labels["theme"] != convertToAtom.ObjectMeta.Labels["theme"] {
44-
t.Errorf("ConvertTo() error = %v, expected: %v, got: %v", "label theme: ", testAtomV3.ObjectMeta.Labels["theme"], convertToAtom.ObjectMeta.Labels["theme"])
43+
if testAtomV3.ObjectMeta.Labels["pdok.nl/tag"] != convertToAtom.ObjectMeta.Labels["pdok.nl/tag"] {
44+
t.Errorf("ConvertTo() error = %v, expected: %v, got: %v", "label pdok.nl/tag: ", testAtomV3.ObjectMeta.Labels["pdok.nl/tag"], convertToAtom.ObjectMeta.Labels["pdok.nl/tag"])
4545
}
46-
if testAtomV3.ObjectMeta.Labels["service-type"] != convertToAtom.ObjectMeta.Labels["service-type"] {
47-
t.Errorf("ConvertTo() error = %v, expected: %v, got: %v", "label service-type: ", testAtomV3.ObjectMeta.Labels["service-type"], convertToAtom.ObjectMeta.Labels["service-type"])
46+
if testAtomV3.ObjectMeta.Labels["pdok.nl/service-type"] != convertToAtom.ObjectMeta.Labels["pdok.nl/service-type"] {
47+
t.Errorf("ConvertTo() error = %v, expected: %v, got: %v", "label pdok.nl/service-type: ", testAtomV3.ObjectMeta.Labels["pdok.nl/service-type"], convertToAtom.ObjectMeta.Labels["pdok.nl/service-type"])
4848
}
4949
if atomic.LoadInt32(testAtomV3.Spec.Lifecycle.TTLInDays) != atomic.LoadInt32(convertToAtom.Spec.Lifecycle.TTLInDays) {
5050
t.Errorf("ConvertTo() error = %v, expected: %d, got: %d", "TTLInDays: ", atomic.LoadInt32(testAtomV3.Spec.Lifecycle.TTLInDays), atomic.LoadInt32(convertToAtom.Spec.Lifecycle.TTLInDays))
@@ -73,10 +73,10 @@ func getTestAtomV2() *Atom {
7373
ObjectMeta: metav1.ObjectMeta{
7474
Name: "test_me",
7575
Labels: map[string]string{
76-
"dataset-owner": "test_datasetowner",
77-
"dataset": "test_dataset",
78-
"theme": testTheme,
79-
"service-type": "test_servicetype",
76+
"pdok.nl/owner-id": "test_datasetowner",
77+
"pdok.nl/dataset-id": "test_dataset",
78+
"pdok.nl/tag": testTheme,
79+
"pdok.nl/service-type": "test_servicetype",
8080
},
8181
},
8282
Spec: AtomSpec{
@@ -162,10 +162,10 @@ func getFilledAtomv3() *pdoknlv3.Atom {
162162
ObjectMeta: metav1.ObjectMeta{
163163
Name: "test_me",
164164
Labels: map[string]string{
165-
"dataset-owner": "test_datasetowner",
166-
"dataset": "test_dataset",
167-
"theme": testTheme,
168-
"service-type": "test_servicetype",
165+
"pdok.nl/owner-id": "test_datasetowner",
166+
"pdok.nl/dataset-id": "test_dataset",
167+
"pdok.nl/tag": testTheme,
168+
"pdok.nl/service-type": "test_servicetype",
169169
},
170170
},
171171
Spec: pdoknlv3.AtomSpec{

api/v3/atom_validation_test.go

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package v3
2+
3+
import (
4+
"os"
5+
"testing"
6+
7+
"github.com/google/go-cmp/cmp"
8+
"k8s.io/apimachinery/pkg/util/validation/field"
9+
"sigs.k8s.io/yaml"
10+
)
11+
12+
func TestValidateAtomWithoutClusterChecks(t *testing.T) {
13+
14+
tests := []struct {
15+
name string
16+
expectedWarnings *[]string
17+
expectedErrors *field.ErrorList
18+
}{
19+
// Lijst van testcases
20+
{
21+
name: "1-no-error-no-warning",
22+
expectedWarnings: &[]string{},
23+
expectedErrors: &field.ErrorList{},
24+
},
25+
{
26+
name: "2-warning-atom-name",
27+
expectedWarnings: &[]string{"pdok.nl/v3, Kind=Atom/asis-readonly-prod-atom: metadata.name: should not contain atom"},
28+
expectedErrors: &field.ErrorList{},
29+
},
30+
{
31+
name: "3-error-dataset-metadata-id",
32+
expectedWarnings: &[]string{},
33+
expectedErrors: &field.ErrorList{&field.Error{
34+
Type: "FieldValueInvalid",
35+
Field: "spec.service.datasetFeeds[0].datasetMetadataLinks.metadataIdentifier",
36+
BadValue: "2751ba40-5100-4186-81be-b7fdee95b49c",
37+
Detail: "should not be the same as spec.service.serviceMetadataLinks.metadataIdentifier",
38+
}},
39+
},
40+
{
41+
name: "4-spatialDatasetIdentifierCode-missing-error",
42+
expectedWarnings: &[]string{},
43+
expectedErrors: &field.ErrorList{&field.Error{
44+
Type: "FieldValueRequired",
45+
Field: "spec.service.datasetFeeds[0].spatialDatasetIdentifierCode",
46+
BadValue: "",
47+
Detail: "when spec.service.datasetFeeds[0].datasetMetadataLinks exists",
48+
}},
49+
},
50+
{
51+
name: "5-spatialDatasetIdentifierNamespace-missing-error",
52+
expectedWarnings: &[]string{},
53+
expectedErrors: &field.ErrorList{&field.Error{
54+
Type: "FieldValueRequired",
55+
Field: "spec.service.datasetFeeds[0].spatialDatasetIdentifierNamespace",
56+
BadValue: "",
57+
Detail: "when spec.service.datasetFeeds[0].spatialDatasetIdentifierCode exists",
58+
}},
59+
},
60+
{
61+
name: "6-entry-content-missing-error",
62+
expectedWarnings: &[]string{},
63+
expectedErrors: &field.ErrorList{&field.Error{
64+
Type: "FieldValueRequired",
65+
Field: "spec.service.datasetFeeds[0].entries[0].content",
66+
BadValue: "",
67+
Detail: "when spec.service.datasetFeeds[0].entries[0].downloadlinks has 2 or more elements",
68+
}},
69+
},
70+
{
71+
name: "7-duplicate-entry-tech-name-error",
72+
expectedWarnings: &[]string{},
73+
expectedErrors: &field.ErrorList{&field.Error{
74+
Type: "FieldValueDuplicate",
75+
Field: "spec.service.datasetFeeds[0].entries[0].entries[1].technicalName",
76+
BadValue: "wetlands",
77+
Detail: "",
78+
}},
79+
},
80+
}
81+
for _, tt := range tests {
82+
actualWarnings := []string{}
83+
actualAllErrors := field.ErrorList{}
84+
input, err := os.ReadFile("test_data/input/" + tt.name + ".yaml")
85+
if err != nil {
86+
t.Errorf("os.ReadFile() error = %v ", err)
87+
}
88+
atom := &Atom{}
89+
if err := yaml.Unmarshal(input, atom); err != nil {
90+
t.Errorf("yaml.Unmarshal() error = %v", err)
91+
}
92+
93+
t.Run(tt.name, func(t *testing.T) {
94+
ValidateAtomWithoutClusterChecks(atom, &actualWarnings, &actualAllErrors)
95+
diffWarnings := cmp.Diff(tt.expectedWarnings, &actualWarnings)
96+
if diffWarnings != "" {
97+
t.Errorf("Testing validation has different warnings: \n%v\n%v\n%v", diffWarnings, tt.expectedWarnings, actualWarnings)
98+
}
99+
diffErrors := cmp.Diff(tt.expectedErrors, &actualAllErrors)
100+
if diffErrors != "" {
101+
t.Errorf("Testing validation has different errors: \n%v\n%v\n%v", diffErrors, tt.expectedErrors, actualAllErrors)
102+
}
103+
})
104+
}
105+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
apiVersion: pdok.nl/v3
2+
kind: Atom
3+
metadata:
4+
annotations:
5+
kangaroo.pdok.nl/lifecycle-phase: prod
6+
kangaroo.pdok.nl/service-bundle-ids: 65daed5f-e9e4-5791-a7c9-7e9effcca520
7+
kangaroo.pdok.nl/readonly: "true"
8+
labels:
9+
pdok.nl/dataset-id: wetlands
10+
pdok.nl/owner-id: rvo
11+
pdok.nl/service-type: atom
12+
name: asis-readonly-prod
13+
namespace: services
14+
spec:
15+
service:
16+
baseUrl: http://localhost:32788/rvo/wetlands/atom
17+
datasetFeeds:
18+
- author:
19+
20+
name: Ministerie van EL&I - GIS Competence Center
21+
datasetMetadataLinks:
22+
metadataIdentifier: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e
23+
templates:
24+
- csw
25+
- html
26+
entries:
27+
- content:
28+
Wetlands zijn de natte natuurgebieden in Nederland (44 gebieden).
29+
Het Wetland verdrag is op 2 februari 1971 te Ramsar in Iran ondertekend.
30+
Nederland was een van de zestien landen die het Verdrag toen ondertekende.
31+
downloadlinks:
32+
- data: public/rvo/wetlands/65daed5f-e9e4-5791-a7c9-7e9effcca520/3/wetlands.gpkg
33+
polygon:
34+
bbox:
35+
maxx: "7.5553527"
36+
maxy: "55.66948"
37+
minx: "2.354173"
38+
miny: "50.71447"
39+
srs:
40+
name: Amersfoort / RD New
41+
uri: https://www.opengis.net/def/crs/EPSG/0/28992
42+
technicalName: wetlands
43+
title: wetlands
44+
updated: "2025-02-28T09:04:17Z"
45+
spatialDatasetIdentifierCode: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e
46+
spatialDatasetIdentifierNamespace: http://www.pdok.nl
47+
subtitle: wetlands
48+
technicalName: wetlands
49+
title: wetlands
50+
lang: nl
51+
ownerInfoRef: pdok
52+
rights: https://creativecommons.org/publicdomain/zero/1.0/deed.nl
53+
serviceMetadataLinks:
54+
metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95b49c
55+
templates:
56+
- csw
57+
- opensearch
58+
- html
59+
subtitle: Download Service van wetlands
60+
title: Wetlands
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
apiVersion: pdok.nl/v3
2+
kind: Atom
3+
metadata:
4+
annotations:
5+
kangaroo.pdok.nl/lifecycle-phase: prod
6+
kangaroo.pdok.nl/service-bundle-ids: 65daed5f-e9e4-5791-a7c9-7e9effcca520
7+
kangaroo.pdok.nl/readonly: "true"
8+
labels:
9+
pdok.nl/dataset-id: wetlands
10+
pdok.nl/owner-id: rvo
11+
pdok.nl/service-type: atom
12+
name: asis-readonly-prod-atom
13+
namespace: services
14+
spec:
15+
service:
16+
baseUrl: http://localhost:32788/rvo/wetlands/atom
17+
datasetFeeds:
18+
- author:
19+
20+
name: Ministerie van EL&I - GIS Competence Center
21+
datasetMetadataLinks:
22+
metadataIdentifier: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e
23+
templates:
24+
- csw
25+
- html
26+
entries:
27+
- content:
28+
Wetlands zijn de natte natuurgebieden in Nederland (44 gebieden).
29+
Het Wetland verdrag is op 2 februari 1971 te Ramsar in Iran ondertekend.
30+
Nederland was een van de zestien landen die het Verdrag toen ondertekende.
31+
downloadlinks:
32+
- data: public/rvo/wetlands/65daed5f-e9e4-5791-a7c9-7e9effcca520/3/wetlands.gpkg
33+
polygon:
34+
bbox:
35+
maxx: "7.5553527"
36+
maxy: "55.66948"
37+
minx: "2.354173"
38+
miny: "50.71447"
39+
srs:
40+
name: Amersfoort / RD New
41+
uri: https://www.opengis.net/def/crs/EPSG/0/28992
42+
technicalName: wetlands
43+
title: wetlands
44+
updated: "2025-02-28T09:04:17Z"
45+
spatialDatasetIdentifierCode: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e
46+
spatialDatasetIdentifierNamespace: http://www.pdok.nl
47+
subtitle: wetlands
48+
technicalName: wetlands
49+
title: wetlands
50+
lang: nl
51+
ownerInfoRef: pdok
52+
rights: https://creativecommons.org/publicdomain/zero/1.0/deed.nl
53+
serviceMetadataLinks:
54+
metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95b49c
55+
templates:
56+
- csw
57+
- opensearch
58+
- html
59+
subtitle: Download Service van wetlands
60+
title: Wetlands
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
apiVersion: pdok.nl/v3
2+
kind: Atom
3+
metadata:
4+
annotations:
5+
kangaroo.pdok.nl/lifecycle-phase: prod
6+
kangaroo.pdok.nl/service-bundle-ids: 65daed5f-e9e4-5791-a7c9-7e9effcca520
7+
kangaroo.pdok.nl/readonly: "true"
8+
labels:
9+
pdok.nl/dataset-id: wetlands
10+
pdok.nl/owner-id: rvo
11+
pdok.nl/service-type: atom
12+
name: asis-readonly-prod
13+
namespace: services
14+
spec:
15+
service:
16+
baseUrl: http://localhost:32788/rvo/wetlands/atom
17+
datasetFeeds:
18+
- author:
19+
20+
name: Ministerie van EL&I - GIS Competence Center
21+
datasetMetadataLinks:
22+
metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95b49c
23+
templates:
24+
- csw
25+
- html
26+
entries:
27+
- content:
28+
Wetlands zijn de natte natuurgebieden in Nederland (44 gebieden).
29+
Het Wetland verdrag is op 2 februari 1971 te Ramsar in Iran ondertekend.
30+
Nederland was een van de zestien landen die het Verdrag toen ondertekende.
31+
downloadlinks:
32+
- data: public/rvo/wetlands/65daed5f-e9e4-5791-a7c9-7e9effcca520/3/wetlands.gpkg
33+
polygon:
34+
bbox:
35+
maxx: "7.5553527"
36+
maxy: "55.66948"
37+
minx: "2.354173"
38+
miny: "50.71447"
39+
srs:
40+
name: Amersfoort / RD New
41+
uri: https://www.opengis.net/def/crs/EPSG/0/28992
42+
technicalName: wetlands
43+
title: wetlands
44+
updated: "2025-02-28T09:04:17Z"
45+
spatialDatasetIdentifierCode: 07d73b60-dfd6-4c54-9c82-9fac70c6c48e
46+
spatialDatasetIdentifierNamespace: http://www.pdok.nl
47+
subtitle: wetlands
48+
technicalName: wetlands
49+
title: wetlands
50+
lang: nl
51+
ownerInfoRef: pdok
52+
rights: https://creativecommons.org/publicdomain/zero/1.0/deed.nl
53+
serviceMetadataLinks:
54+
metadataIdentifier: 2751ba40-5100-4186-81be-b7fdee95b49c
55+
templates:
56+
- csw
57+
- opensearch
58+
- html
59+
subtitle: Download Service van wetlands
60+
title: Wetlands

0 commit comments

Comments
 (0)