Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 11 additions & 6 deletions api/v2beta1/wms_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -340,12 +340,17 @@ func (v2Service WMSService) MapLayersToV3() pdoknlv3.Layer {

// if a topLayer is defined in the v2 it be the only layer without a group
// and there are other layers that have the topLayer as their group
// so if there is exactly 1 layer without a group
// and the name of that layer exist as a key in the map of Groups: layer in that group
// then that layer must be the topLayer
// and at least one of those layers is itself a group layer
var topLayer *pdoknlv3.Layer
if len(notGroupedLayers) == 1 {
_, ok := groupedLayers[*notGroupedLayers[0].Name]
if _, ok := groupedLayers[*notGroupedLayers[0].Name]; ok && len(notGroupedLayers) == 1 {
subLayers := groupedLayers[*notGroupedLayers[0].Name]
ok := false
for _, layer := range subLayers {
if _, ok = groupedLayers[*layer.Name]; ok {
break
}
}

if ok {
topLayer = &notGroupedLayers[0]
}
Expand Down Expand Up @@ -413,7 +418,7 @@ func (v2Layer WMSLayer) MapToV3(v2Service WMSService) pdoknlv3.Layer {
Keywords: v2Layer.Keywords,
LabelNoClip: v2Layer.LabelNoClip,
Styles: []pdoknlv3.Style{},
Layers: []pdoknlv3.Layer{},
Layers: nil,
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
MinScaleDenominator: nil,
MaxScaleDenominator: nil,
Expand Down
209 changes: 209 additions & 0 deletions api/v2beta1/wms_conversion_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ package v2beta1
import (
"testing"

"github.com/google/go-cmp/cmp"
"k8s.io/utils/ptr"

pdoknlv3 "github.com/pdok/mapserver-operator/api/v3"
"github.com/stretchr/testify/assert"
"sigs.k8s.io/yaml"
Expand All @@ -21,3 +24,209 @@ func TestV2ToV3(t *testing.T) {
a := 0
_ = a
}

func TestWMSService_MapLayersToV3(t *testing.T) {
tests := []struct {
name string
v2Service WMSService
want pdoknlv3.Layer
}{
{
name: "no toplayer, middle: 1 data layer",
v2Service: WMSService{Layers: []WMSLayer{
{Name: "layer"},
}},
want: pdoknlv3.Layer{
Title: ptr.To(""),
Abstract: ptr.To(""),
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
Visible: true,
Layers: []pdoknlv3.Layer{{
Name: ptr.To("layer"),
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
Visible: true,
Styles: []pdoknlv3.Style{},
}},
},
},
{
name: "no toplayer, middle: 1 group layer",
v2Service: WMSService{Layers: []WMSLayer{
{Name: "group-layer"},
{Name: "sub-layer", Group: ptr.To("group-layer")},
}},
want: pdoknlv3.Layer{
Title: ptr.To(""),
Abstract: ptr.To(""),
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
Visible: true,
Layers: []pdoknlv3.Layer{{
Name: ptr.To("group-layer"),
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
Visible: true,
Styles: []pdoknlv3.Style{},
Layers: []pdoknlv3.Layer{
{
Name: ptr.To("sub-layer"),
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
Visible: true,
Styles: []pdoknlv3.Style{},
},
},
}},
},
},
{
name: "no toplayer, middle: 2 group layers",
v2Service: WMSService{Layers: []WMSLayer{
{Name: "group-layer-1"},
{Name: "sub-layer-1", Group: ptr.To("group-layer-1")},
{Name: "group-layer-2"},
{Name: "sub-layer-2", Group: ptr.To("group-layer-2")},
}},
want: pdoknlv3.Layer{
Title: ptr.To(""),
Abstract: ptr.To(""),
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
Visible: true,
Layers: []pdoknlv3.Layer{
{
Name: ptr.To("group-layer-1"),
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
Visible: true,
Styles: []pdoknlv3.Style{},
Layers: []pdoknlv3.Layer{
{
Name: ptr.To("sub-layer-1"),
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
Visible: true,
Styles: []pdoknlv3.Style{},
},
},
},
{
Name: ptr.To("group-layer-2"),
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
Visible: true,
Styles: []pdoknlv3.Style{},
Layers: []pdoknlv3.Layer{
{
Name: ptr.To("sub-layer-2"),
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
Visible: true,
Styles: []pdoknlv3.Style{},
},
},
},
},
},
},
{
name: "no toplayer, middle: 1 group layer, 1 data layer",
v2Service: WMSService{Layers: []WMSLayer{
{Name: "group-layer"},
{Name: "sub-layer", Group: ptr.To("group-layer")},
{Name: "data-layer"},
}},
want: pdoknlv3.Layer{
Title: ptr.To(""),
Abstract: ptr.To(""),
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
Visible: true,
Layers: []pdoknlv3.Layer{
{
Name: ptr.To("group-layer"),
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
Visible: true,
Styles: []pdoknlv3.Style{},
Layers: []pdoknlv3.Layer{
{
Name: ptr.To("sub-layer"),
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
Visible: true,
Styles: []pdoknlv3.Style{},
},
},
},
{
Name: ptr.To("data-layer"),
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
Visible: true,
Styles: []pdoknlv3.Style{},
},
},
},
},
{
name: "toplayer, middle: 1 group layer",
v2Service: WMSService{Layers: []WMSLayer{
{Name: "group-layer", Group: ptr.To("top-layer")},
{Name: "sub-layer", Group: ptr.To("group-layer")},
{Name: "top-layer"},
}},
want: pdoknlv3.Layer{
Name: ptr.To("top-layer"),
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
Visible: true,
Styles: []pdoknlv3.Style{},
Layers: []pdoknlv3.Layer{{
Name: ptr.To("group-layer"),
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
Visible: true,
Styles: []pdoknlv3.Style{},
Layers: []pdoknlv3.Layer{
{
Name: ptr.To("sub-layer"),
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
Visible: true,
Styles: []pdoknlv3.Style{},
},
},
}},
},
},
{
name: "toplayer, middle: 1 group layer, 1 data layer",
v2Service: WMSService{Layers: []WMSLayer{
{Name: "group-layer", Group: ptr.To("top-layer")},
{Name: "sub-layer", Group: ptr.To("group-layer")},
{Name: "top-layer"},
{Name: "data-layer", Group: ptr.To("top-layer")},
}},
want: pdoknlv3.Layer{
Name: ptr.To("top-layer"),
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
Visible: true,
Styles: []pdoknlv3.Style{},
Layers: []pdoknlv3.Layer{
{
Name: ptr.To("group-layer"),
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
Visible: true,
Styles: []pdoknlv3.Style{},
Layers: []pdoknlv3.Layer{
{
Name: ptr.To("sub-layer"),
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
Visible: true,
Styles: []pdoknlv3.Style{},
},
},
},
{
Name: ptr.To("data-layer"),
BoundingBoxes: []pdoknlv3.WMSBoundingBox{},
Visible: true,
Styles: []pdoknlv3.Style{},
},
},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
diff := cmp.Diff(tt.want, tt.v2Service.MapLayersToV3())
assert.Equal(t, diff == "", true, "%s", diff)
})
}
}
Loading