Skip to content

Commit 53830b6

Browse files
authored
Merge pull request #84 from PDOK/wr/fix-toplayer
fix toplayer conversion
2 parents b328963 + cd063d2 commit 53830b6

File tree

2 files changed

+220
-6
lines changed

2 files changed

+220
-6
lines changed

api/v2beta1/wms_conversion.go

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -340,12 +340,17 @@ func (v2Service WMSService) MapLayersToV3() pdoknlv3.Layer {
340340

341341
// if a topLayer is defined in the v2 it be the only layer without a group
342342
// and there are other layers that have the topLayer as their group
343-
// so if there is exactly 1 layer without a group
344-
// and the name of that layer exist as a key in the map of Groups: layer in that group
345-
// then that layer must be the topLayer
343+
// and at least one of those layers is itself a group layer
346344
var topLayer *pdoknlv3.Layer
347-
if len(notGroupedLayers) == 1 {
348-
_, ok := groupedLayers[*notGroupedLayers[0].Name]
345+
if _, ok := groupedLayers[*notGroupedLayers[0].Name]; ok && len(notGroupedLayers) == 1 {
346+
subLayers := groupedLayers[*notGroupedLayers[0].Name]
347+
ok := false
348+
for _, layer := range subLayers {
349+
if _, ok = groupedLayers[*layer.Name]; ok {
350+
break
351+
}
352+
}
353+
349354
if ok {
350355
topLayer = &notGroupedLayers[0]
351356
}
@@ -413,7 +418,7 @@ func (v2Layer WMSLayer) MapToV3(v2Service WMSService) pdoknlv3.Layer {
413418
Keywords: v2Layer.Keywords,
414419
LabelNoClip: v2Layer.LabelNoClip,
415420
Styles: []pdoknlv3.Style{},
416-
Layers: []pdoknlv3.Layer{},
421+
Layers: nil,
417422
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
418423
MinScaleDenominator: nil,
419424
MaxScaleDenominator: nil,

api/v2beta1/wms_conversion_test.go

Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ package v2beta1
33
import (
44
"testing"
55

6+
"github.com/google/go-cmp/cmp"
7+
"k8s.io/utils/ptr"
8+
69
pdoknlv3 "github.com/pdok/mapserver-operator/api/v3"
710
"github.com/stretchr/testify/assert"
811
"sigs.k8s.io/yaml"
@@ -21,3 +24,209 @@ func TestV2ToV3(t *testing.T) {
2124
a := 0
2225
_ = a
2326
}
27+
28+
func TestWMSService_MapLayersToV3(t *testing.T) {
29+
tests := []struct {
30+
name string
31+
v2Service WMSService
32+
want pdoknlv3.Layer
33+
}{
34+
{
35+
name: "no toplayer, middle: 1 data layer",
36+
v2Service: WMSService{Layers: []WMSLayer{
37+
{Name: "layer"},
38+
}},
39+
want: pdoknlv3.Layer{
40+
Title: ptr.To(""),
41+
Abstract: ptr.To(""),
42+
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
43+
Visible: true,
44+
Layers: []pdoknlv3.Layer{{
45+
Name: ptr.To("layer"),
46+
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
47+
Visible: true,
48+
Styles: []pdoknlv3.Style{},
49+
}},
50+
},
51+
},
52+
{
53+
name: "no toplayer, middle: 1 group layer",
54+
v2Service: WMSService{Layers: []WMSLayer{
55+
{Name: "group-layer"},
56+
{Name: "sub-layer", Group: ptr.To("group-layer")},
57+
}},
58+
want: pdoknlv3.Layer{
59+
Title: ptr.To(""),
60+
Abstract: ptr.To(""),
61+
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
62+
Visible: true,
63+
Layers: []pdoknlv3.Layer{{
64+
Name: ptr.To("group-layer"),
65+
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
66+
Visible: true,
67+
Styles: []pdoknlv3.Style{},
68+
Layers: []pdoknlv3.Layer{
69+
{
70+
Name: ptr.To("sub-layer"),
71+
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
72+
Visible: true,
73+
Styles: []pdoknlv3.Style{},
74+
},
75+
},
76+
}},
77+
},
78+
},
79+
{
80+
name: "no toplayer, middle: 2 group layers",
81+
v2Service: WMSService{Layers: []WMSLayer{
82+
{Name: "group-layer-1"},
83+
{Name: "sub-layer-1", Group: ptr.To("group-layer-1")},
84+
{Name: "group-layer-2"},
85+
{Name: "sub-layer-2", Group: ptr.To("group-layer-2")},
86+
}},
87+
want: pdoknlv3.Layer{
88+
Title: ptr.To(""),
89+
Abstract: ptr.To(""),
90+
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
91+
Visible: true,
92+
Layers: []pdoknlv3.Layer{
93+
{
94+
Name: ptr.To("group-layer-1"),
95+
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
96+
Visible: true,
97+
Styles: []pdoknlv3.Style{},
98+
Layers: []pdoknlv3.Layer{
99+
{
100+
Name: ptr.To("sub-layer-1"),
101+
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
102+
Visible: true,
103+
Styles: []pdoknlv3.Style{},
104+
},
105+
},
106+
},
107+
{
108+
Name: ptr.To("group-layer-2"),
109+
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
110+
Visible: true,
111+
Styles: []pdoknlv3.Style{},
112+
Layers: []pdoknlv3.Layer{
113+
{
114+
Name: ptr.To("sub-layer-2"),
115+
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
116+
Visible: true,
117+
Styles: []pdoknlv3.Style{},
118+
},
119+
},
120+
},
121+
},
122+
},
123+
},
124+
{
125+
name: "no toplayer, middle: 1 group layer, 1 data layer",
126+
v2Service: WMSService{Layers: []WMSLayer{
127+
{Name: "group-layer"},
128+
{Name: "sub-layer", Group: ptr.To("group-layer")},
129+
{Name: "data-layer"},
130+
}},
131+
want: pdoknlv3.Layer{
132+
Title: ptr.To(""),
133+
Abstract: ptr.To(""),
134+
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
135+
Visible: true,
136+
Layers: []pdoknlv3.Layer{
137+
{
138+
Name: ptr.To("group-layer"),
139+
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
140+
Visible: true,
141+
Styles: []pdoknlv3.Style{},
142+
Layers: []pdoknlv3.Layer{
143+
{
144+
Name: ptr.To("sub-layer"),
145+
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
146+
Visible: true,
147+
Styles: []pdoknlv3.Style{},
148+
},
149+
},
150+
},
151+
{
152+
Name: ptr.To("data-layer"),
153+
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
154+
Visible: true,
155+
Styles: []pdoknlv3.Style{},
156+
},
157+
},
158+
},
159+
},
160+
{
161+
name: "toplayer, middle: 1 group layer",
162+
v2Service: WMSService{Layers: []WMSLayer{
163+
{Name: "group-layer", Group: ptr.To("top-layer")},
164+
{Name: "sub-layer", Group: ptr.To("group-layer")},
165+
{Name: "top-layer"},
166+
}},
167+
want: pdoknlv3.Layer{
168+
Name: ptr.To("top-layer"),
169+
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
170+
Visible: true,
171+
Styles: []pdoknlv3.Style{},
172+
Layers: []pdoknlv3.Layer{{
173+
Name: ptr.To("group-layer"),
174+
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
175+
Visible: true,
176+
Styles: []pdoknlv3.Style{},
177+
Layers: []pdoknlv3.Layer{
178+
{
179+
Name: ptr.To("sub-layer"),
180+
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
181+
Visible: true,
182+
Styles: []pdoknlv3.Style{},
183+
},
184+
},
185+
}},
186+
},
187+
},
188+
{
189+
name: "toplayer, middle: 1 group layer, 1 data layer",
190+
v2Service: WMSService{Layers: []WMSLayer{
191+
{Name: "group-layer", Group: ptr.To("top-layer")},
192+
{Name: "sub-layer", Group: ptr.To("group-layer")},
193+
{Name: "top-layer"},
194+
{Name: "data-layer", Group: ptr.To("top-layer")},
195+
}},
196+
want: pdoknlv3.Layer{
197+
Name: ptr.To("top-layer"),
198+
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
199+
Visible: true,
200+
Styles: []pdoknlv3.Style{},
201+
Layers: []pdoknlv3.Layer{
202+
{
203+
Name: ptr.To("group-layer"),
204+
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
205+
Visible: true,
206+
Styles: []pdoknlv3.Style{},
207+
Layers: []pdoknlv3.Layer{
208+
{
209+
Name: ptr.To("sub-layer"),
210+
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
211+
Visible: true,
212+
Styles: []pdoknlv3.Style{},
213+
},
214+
},
215+
},
216+
{
217+
Name: ptr.To("data-layer"),
218+
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
219+
Visible: true,
220+
Styles: []pdoknlv3.Style{},
221+
},
222+
},
223+
},
224+
},
225+
}
226+
for _, tt := range tests {
227+
t.Run(tt.name, func(t *testing.T) {
228+
diff := cmp.Diff(tt.want, tt.v2Service.MapLayersToV3())
229+
assert.Equal(t, diff == "", true, "%s", diff)
230+
})
231+
}
232+
}

0 commit comments

Comments
 (0)