Skip to content

Commit b3f4ea0

Browse files
committed
test: expand mock tests for datatransformer, dbconnection, imagecollections, jsonstructures, mappings, mermaid, navigation
1 parent 1925071 commit b3f4ea0

8 files changed

Lines changed: 444 additions & 0 deletions

mdl/executor/cmd_datatransformer_mock_test.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,52 @@ func TestListDataTransformers_Mock(t *testing.T) {
3535
assertContainsStr(t, out, "ETL.TransformOrders")
3636
}
3737

38+
func TestListDataTransformers_FilterByModule(t *testing.T) {
39+
mod1 := mkModule("ETL")
40+
mod2 := mkModule("Other")
41+
dt1 := &model.DataTransformer{
42+
BaseElement: model.BaseElement{ID: nextID("dt")},
43+
ContainerID: mod1.ID,
44+
Name: "TransformOrders",
45+
SourceType: "Entity",
46+
}
47+
dt2 := &model.DataTransformer{
48+
BaseElement: model.BaseElement{ID: nextID("dt")},
49+
ContainerID: mod2.ID,
50+
Name: "TransformCustomers",
51+
SourceType: "Entity",
52+
}
53+
54+
h := mkHierarchy(mod1, mod2)
55+
withContainer(h, dt1.ContainerID, mod1.ID)
56+
withContainer(h, dt2.ContainerID, mod2.ID)
57+
58+
mb := &mock.MockBackend{
59+
IsConnectedFunc: func() bool { return true },
60+
ListDataTransformersFunc: func() ([]*model.DataTransformer, error) { return []*model.DataTransformer{dt1, dt2}, nil },
61+
}
62+
63+
ctx, buf := newMockCtx(t, withBackend(mb), withHierarchy(h))
64+
assertNoError(t, listDataTransformers(ctx, "ETL"))
65+
66+
out := buf.String()
67+
assertContainsStr(t, out, "ETL.TransformOrders")
68+
assertNotContainsStr(t, out, "Other.TransformCustomers")
69+
}
70+
71+
func TestDescribeDataTransformer_NotFound(t *testing.T) {
72+
mod := mkModule("ETL")
73+
h := mkHierarchy(mod)
74+
75+
mb := &mock.MockBackend{
76+
IsConnectedFunc: func() bool { return true },
77+
ListDataTransformersFunc: func() ([]*model.DataTransformer, error) { return nil, nil },
78+
}
79+
80+
ctx, _ := newMockCtx(t, withBackend(mb), withHierarchy(h))
81+
assertError(t, describeDataTransformer(ctx, ast.QualifiedName{Module: "ETL", Name: "NoSuch"}))
82+
}
83+
3884
func TestDescribeDataTransformer_Mock(t *testing.T) {
3985
mod := mkModule("ETL")
4086
dt := &model.DataTransformer{

mdl/executor/cmd_dbconnection_mock_test.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,52 @@ func TestShowDatabaseConnections_Mock(t *testing.T) {
3535
assertContainsStr(t, out, "DataMod.MyDB")
3636
}
3737

38+
func TestShowDatabaseConnections_FilterByModule(t *testing.T) {
39+
mod1 := mkModule("DataMod")
40+
mod2 := mkModule("Other")
41+
conn1 := &model.DatabaseConnection{
42+
BaseElement: model.BaseElement{ID: nextID("dbc")},
43+
ContainerID: mod1.ID,
44+
Name: "MyDB",
45+
DatabaseType: "PostgreSQL",
46+
}
47+
conn2 := &model.DatabaseConnection{
48+
BaseElement: model.BaseElement{ID: nextID("dbc")},
49+
ContainerID: mod2.ID,
50+
Name: "OtherDB",
51+
DatabaseType: "MySQL",
52+
}
53+
54+
h := mkHierarchy(mod1, mod2)
55+
withContainer(h, conn1.ContainerID, mod1.ID)
56+
withContainer(h, conn2.ContainerID, mod2.ID)
57+
58+
mb := &mock.MockBackend{
59+
IsConnectedFunc: func() bool { return true },
60+
ListDatabaseConnectionsFunc: func() ([]*model.DatabaseConnection, error) { return []*model.DatabaseConnection{conn1, conn2}, nil },
61+
}
62+
63+
ctx, buf := newMockCtx(t, withBackend(mb), withHierarchy(h))
64+
assertNoError(t, listDatabaseConnections(ctx, "DataMod"))
65+
66+
out := buf.String()
67+
assertContainsStr(t, out, "DataMod.MyDB")
68+
assertNotContainsStr(t, out, "Other.OtherDB")
69+
}
70+
71+
func TestDescribeDatabaseConnection_NotFound(t *testing.T) {
72+
mod := mkModule("DataMod")
73+
h := mkHierarchy(mod)
74+
75+
mb := &mock.MockBackend{
76+
IsConnectedFunc: func() bool { return true },
77+
ListDatabaseConnectionsFunc: func() ([]*model.DatabaseConnection, error) { return nil, nil },
78+
}
79+
80+
ctx, _ := newMockCtx(t, withBackend(mb), withHierarchy(h))
81+
assertError(t, describeDatabaseConnection(ctx, ast.QualifiedName{Module: "DataMod", Name: "NoSuch"}))
82+
}
83+
3884
func TestDescribeDatabaseConnection_Mock(t *testing.T) {
3985
mod := mkModule("DataMod")
4086
conn := &model.DatabaseConnection{

mdl/executor/cmd_export_mappings_mock_test.go

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
package executor
44

55
import (
6+
"fmt"
67
"testing"
78

9+
"github.com/mendixlabs/mxcli/mdl/ast"
810
"github.com/mendixlabs/mxcli/mdl/backend/mock"
911
"github.com/mendixlabs/mxcli/model"
1012
)
@@ -32,3 +34,69 @@ func TestShowExportMappings_Mock(t *testing.T) {
3234
assertContainsStr(t, out, "Export Mapping")
3335
assertContainsStr(t, out, "Integration.ExportOrders")
3436
}
37+
38+
func TestShowExportMappings_FilterByModule(t *testing.T) {
39+
mod1 := mkModule("Integration")
40+
mod2 := mkModule("Other")
41+
em1 := &model.ExportMapping{
42+
BaseElement: model.BaseElement{ID: nextID("em")},
43+
ContainerID: mod1.ID,
44+
Name: "ExportOrders",
45+
}
46+
em2 := &model.ExportMapping{
47+
BaseElement: model.BaseElement{ID: nextID("em")},
48+
ContainerID: mod2.ID,
49+
Name: "ExportOther",
50+
}
51+
52+
h := mkHierarchy(mod1, mod2)
53+
withContainer(h, em1.ContainerID, mod1.ID)
54+
withContainer(h, em2.ContainerID, mod2.ID)
55+
56+
mb := &mock.MockBackend{
57+
IsConnectedFunc: func() bool { return true },
58+
ListExportMappingsFunc: func() ([]*model.ExportMapping, error) { return []*model.ExportMapping{em1, em2}, nil },
59+
}
60+
61+
ctx, buf := newMockCtx(t, withBackend(mb), withHierarchy(h))
62+
assertNoError(t, listExportMappings(ctx, "Integration"))
63+
64+
out := buf.String()
65+
assertContainsStr(t, out, "Integration.ExportOrders")
66+
assertNotContainsStr(t, out, "Other.ExportOther")
67+
}
68+
69+
func TestDescribeExportMapping_Mock(t *testing.T) {
70+
mod := mkModule("Integration")
71+
em := &model.ExportMapping{
72+
BaseElement: model.BaseElement{ID: nextID("em")},
73+
ContainerID: mod.ID,
74+
Name: "ExportOrders",
75+
}
76+
77+
h := mkHierarchy(mod)
78+
withContainer(h, em.ContainerID, mod.ID)
79+
80+
mb := &mock.MockBackend{
81+
IsConnectedFunc: func() bool { return true },
82+
GetExportMappingByQualifiedNameFunc: func(moduleName, name string) (*model.ExportMapping, error) {
83+
return em, nil
84+
},
85+
}
86+
87+
ctx, buf := newMockCtx(t, withBackend(mb), withHierarchy(h))
88+
assertNoError(t, describeExportMapping(ctx, ast.QualifiedName{Module: "Integration", Name: "ExportOrders"}))
89+
assertContainsStr(t, buf.String(), "create export mapping")
90+
}
91+
92+
func TestDescribeExportMapping_NotFound(t *testing.T) {
93+
mb := &mock.MockBackend{
94+
IsConnectedFunc: func() bool { return true },
95+
GetExportMappingByQualifiedNameFunc: func(moduleName, name string) (*model.ExportMapping, error) {
96+
return nil, fmt.Errorf("export mapping not found: %s.%s", moduleName, name)
97+
},
98+
}
99+
100+
ctx, _ := newMockCtx(t, withBackend(mb))
101+
assertError(t, describeExportMapping(ctx, ast.QualifiedName{Module: "Integration", Name: "NoSuch"}))
102+
}

mdl/executor/cmd_imagecollections_mock_test.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,52 @@ func TestShowImageCollections_Mock(t *testing.T) {
3636
assertContainsStr(t, out, "Icons.AppIcons")
3737
}
3838

39+
func TestShowImageCollections_FilterByModule(t *testing.T) {
40+
mod1 := mkModule("Icons")
41+
mod2 := mkModule("Other")
42+
ic1 := &types.ImageCollection{
43+
BaseElement: model.BaseElement{ID: nextID("ic")},
44+
ContainerID: mod1.ID,
45+
Name: "AppIcons",
46+
ExportLevel: "Hidden",
47+
}
48+
ic2 := &types.ImageCollection{
49+
BaseElement: model.BaseElement{ID: nextID("ic")},
50+
ContainerID: mod2.ID,
51+
Name: "OtherIcons",
52+
ExportLevel: "Hidden",
53+
}
54+
55+
h := mkHierarchy(mod1, mod2)
56+
withContainer(h, ic1.ContainerID, mod1.ID)
57+
withContainer(h, ic2.ContainerID, mod2.ID)
58+
59+
mb := &mock.MockBackend{
60+
IsConnectedFunc: func() bool { return true },
61+
ListImageCollectionsFunc: func() ([]*types.ImageCollection, error) { return []*types.ImageCollection{ic1, ic2}, nil },
62+
}
63+
64+
ctx, buf := newMockCtx(t, withBackend(mb), withHierarchy(h))
65+
assertNoError(t, listImageCollections(ctx, "Icons"))
66+
67+
out := buf.String()
68+
assertContainsStr(t, out, "Icons.AppIcons")
69+
assertNotContainsStr(t, out, "Other.OtherIcons")
70+
}
71+
72+
func TestDescribeImageCollection_NotFound(t *testing.T) {
73+
mod := mkModule("Icons")
74+
h := mkHierarchy(mod)
75+
76+
mb := &mock.MockBackend{
77+
IsConnectedFunc: func() bool { return true },
78+
ListImageCollectionsFunc: func() ([]*types.ImageCollection, error) { return nil, nil },
79+
}
80+
81+
ctx, _ := newMockCtx(t, withBackend(mb), withHierarchy(h))
82+
assertError(t, describeImageCollection(ctx, ast.QualifiedName{Module: "Icons", Name: "NoSuch"}))
83+
}
84+
3985
func TestDescribeImageCollection_Mock(t *testing.T) {
4086
mod := mkModule("Icons")
4187
ic := &types.ImageCollection{

mdl/executor/cmd_import_mappings_mock_test.go

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
package executor
44

55
import (
6+
"fmt"
67
"testing"
78

9+
"github.com/mendixlabs/mxcli/mdl/ast"
810
"github.com/mendixlabs/mxcli/mdl/backend/mock"
911
"github.com/mendixlabs/mxcli/model"
1012
)
@@ -32,3 +34,69 @@ func TestShowImportMappings_Mock(t *testing.T) {
3234
assertContainsStr(t, out, "Import Mapping")
3335
assertContainsStr(t, out, "Integration.ImportOrders")
3436
}
37+
38+
func TestShowImportMappings_FilterByModule(t *testing.T) {
39+
mod1 := mkModule("Integration")
40+
mod2 := mkModule("Other")
41+
im1 := &model.ImportMapping{
42+
BaseElement: model.BaseElement{ID: nextID("im")},
43+
ContainerID: mod1.ID,
44+
Name: "ImportOrders",
45+
}
46+
im2 := &model.ImportMapping{
47+
BaseElement: model.BaseElement{ID: nextID("im")},
48+
ContainerID: mod2.ID,
49+
Name: "ImportOther",
50+
}
51+
52+
h := mkHierarchy(mod1, mod2)
53+
withContainer(h, im1.ContainerID, mod1.ID)
54+
withContainer(h, im2.ContainerID, mod2.ID)
55+
56+
mb := &mock.MockBackend{
57+
IsConnectedFunc: func() bool { return true },
58+
ListImportMappingsFunc: func() ([]*model.ImportMapping, error) { return []*model.ImportMapping{im1, im2}, nil },
59+
}
60+
61+
ctx, buf := newMockCtx(t, withBackend(mb), withHierarchy(h))
62+
assertNoError(t, listImportMappings(ctx, "Integration"))
63+
64+
out := buf.String()
65+
assertContainsStr(t, out, "Integration.ImportOrders")
66+
assertNotContainsStr(t, out, "Other.ImportOther")
67+
}
68+
69+
func TestDescribeImportMapping_Mock(t *testing.T) {
70+
mod := mkModule("Integration")
71+
im := &model.ImportMapping{
72+
BaseElement: model.BaseElement{ID: nextID("im")},
73+
ContainerID: mod.ID,
74+
Name: "ImportOrders",
75+
}
76+
77+
h := mkHierarchy(mod)
78+
withContainer(h, im.ContainerID, mod.ID)
79+
80+
mb := &mock.MockBackend{
81+
IsConnectedFunc: func() bool { return true },
82+
GetImportMappingByQualifiedNameFunc: func(moduleName, name string) (*model.ImportMapping, error) {
83+
return im, nil
84+
},
85+
}
86+
87+
ctx, buf := newMockCtx(t, withBackend(mb), withHierarchy(h))
88+
assertNoError(t, describeImportMapping(ctx, ast.QualifiedName{Module: "Integration", Name: "ImportOrders"}))
89+
assertContainsStr(t, buf.String(), "create import mapping")
90+
}
91+
92+
func TestDescribeImportMapping_NotFound(t *testing.T) {
93+
mb := &mock.MockBackend{
94+
IsConnectedFunc: func() bool { return true },
95+
GetImportMappingByQualifiedNameFunc: func(moduleName, name string) (*model.ImportMapping, error) {
96+
return nil, fmt.Errorf("import mapping not found: %s.%s", moduleName, name)
97+
},
98+
}
99+
100+
ctx, _ := newMockCtx(t, withBackend(mb))
101+
assertError(t, describeImportMapping(ctx, ast.QualifiedName{Module: "Integration", Name: "NoSuch"}))
102+
}

mdl/executor/cmd_jsonstructures_mock_test.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package executor
55
import (
66
"testing"
77

8+
"github.com/mendixlabs/mxcli/mdl/ast"
89
"github.com/mendixlabs/mxcli/mdl/backend/mock"
910
"github.com/mendixlabs/mxcli/mdl/types"
1011
"github.com/mendixlabs/mxcli/model"
@@ -33,3 +34,68 @@ func TestShowJsonStructures_Mock(t *testing.T) {
3334
assertContainsStr(t, out, "json Structure")
3435
assertContainsStr(t, out, "OrderMgmt.OrderSchema")
3536
}
37+
38+
func TestShowJsonStructures_FilterByModule(t *testing.T) {
39+
mod1 := mkModule("OrderMgmt")
40+
mod2 := mkModule("Other")
41+
js1 := &types.JsonStructure{
42+
BaseElement: model.BaseElement{ID: nextID("js")},
43+
ContainerID: mod1.ID,
44+
Name: "OrderSchema",
45+
}
46+
js2 := &types.JsonStructure{
47+
BaseElement: model.BaseElement{ID: nextID("js")},
48+
ContainerID: mod2.ID,
49+
Name: "OtherSchema",
50+
}
51+
52+
h := mkHierarchy(mod1, mod2)
53+
withContainer(h, js1.ContainerID, mod1.ID)
54+
withContainer(h, js2.ContainerID, mod2.ID)
55+
56+
mb := &mock.MockBackend{
57+
IsConnectedFunc: func() bool { return true },
58+
ListJsonStructuresFunc: func() ([]*types.JsonStructure, error) { return []*types.JsonStructure{js1, js2}, nil },
59+
}
60+
61+
ctx, buf := newMockCtx(t, withBackend(mb), withHierarchy(h))
62+
assertNoError(t, listJsonStructures(ctx, "OrderMgmt"))
63+
64+
out := buf.String()
65+
assertContainsStr(t, out, "OrderMgmt.OrderSchema")
66+
assertNotContainsStr(t, out, "Other.OtherSchema")
67+
}
68+
69+
func TestDescribeJsonStructure_Mock(t *testing.T) {
70+
mod := mkModule("OrderMgmt")
71+
js := &types.JsonStructure{
72+
BaseElement: model.BaseElement{ID: nextID("js")},
73+
ContainerID: mod.ID,
74+
Name: "OrderSchema",
75+
}
76+
77+
h := mkHierarchy(mod)
78+
withContainer(h, js.ContainerID, mod.ID)
79+
80+
mb := &mock.MockBackend{
81+
IsConnectedFunc: func() bool { return true },
82+
ListJsonStructuresFunc: func() ([]*types.JsonStructure, error) { return []*types.JsonStructure{js}, nil },
83+
}
84+
85+
ctx, buf := newMockCtx(t, withBackend(mb), withHierarchy(h))
86+
assertNoError(t, describeJsonStructure(ctx, ast.QualifiedName{Module: "OrderMgmt", Name: "OrderSchema"}))
87+
assertContainsStr(t, buf.String(), "create or replace json structure")
88+
}
89+
90+
func TestDescribeJsonStructure_NotFound(t *testing.T) {
91+
mod := mkModule("OrderMgmt")
92+
h := mkHierarchy(mod)
93+
94+
mb := &mock.MockBackend{
95+
IsConnectedFunc: func() bool { return true },
96+
ListJsonStructuresFunc: func() ([]*types.JsonStructure, error) { return nil, nil },
97+
}
98+
99+
ctx, _ := newMockCtx(t, withBackend(mb), withHierarchy(h))
100+
assertError(t, describeJsonStructure(ctx, ast.QualifiedName{Module: "OrderMgmt", Name: "NoSuch"}))
101+
}

0 commit comments

Comments
 (0)