Skip to content

Commit 59204a1

Browse files
authored
Merge pull request #244 from retran/test/enablers
Add test enablers: MockPageMutator, MockWorkflowMutator, registry completeness
2 parents 6eb9969 + 4d970a6 commit 59204a1

3 files changed

Lines changed: 301 additions & 0 deletions

File tree

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
3+
package mock
4+
5+
import (
6+
"github.com/mendixlabs/mxcli/mdl/backend"
7+
"github.com/mendixlabs/mxcli/model"
8+
"github.com/mendixlabs/mxcli/sdk/pages"
9+
)
10+
11+
var _ backend.PageMutator = (*MockPageMutator)(nil)
12+
13+
// MockPageMutator implements backend.PageMutator. Every interface method is
14+
// backed by a public function field. If the field is nil the method returns
15+
// zero values / nil error (never panics).
16+
type MockPageMutator struct {
17+
ContainerTypeFunc func() backend.ContainerKind
18+
SetWidgetPropertyFunc func(widgetRef string, prop string, value any) error
19+
SetWidgetDataSourceFunc func(widgetRef string, ds pages.DataSource) error
20+
SetColumnPropertyFunc func(gridRef string, columnRef string, prop string, value any) error
21+
InsertWidgetFunc func(widgetRef string, columnRef string, position backend.InsertPosition, widgets []pages.Widget) error
22+
DropWidgetFunc func(refs []backend.WidgetRef) error
23+
ReplaceWidgetFunc func(widgetRef string, columnRef string, widgets []pages.Widget) error
24+
FindWidgetFunc func(name string) bool
25+
AddVariableFunc func(name, dataType, defaultValue string) error
26+
DropVariableFunc func(name string) error
27+
SetLayoutFunc func(newLayout string, paramMappings map[string]string) error
28+
SetPluggablePropertyFunc func(widgetRef string, propKey string, op backend.PluggablePropertyOp, ctx backend.PluggablePropertyContext) error
29+
EnclosingEntityFunc func(widgetRef string) string
30+
WidgetScopeFunc func() map[string]model.ID
31+
ParamScopeFunc func() (map[string]model.ID, map[string]string)
32+
SaveFunc func() error
33+
}
34+
35+
func (m *MockPageMutator) ContainerType() backend.ContainerKind {
36+
if m.ContainerTypeFunc != nil {
37+
return m.ContainerTypeFunc()
38+
}
39+
return backend.ContainerPage
40+
}
41+
42+
func (m *MockPageMutator) SetWidgetProperty(widgetRef string, prop string, value any) error {
43+
if m.SetWidgetPropertyFunc != nil {
44+
return m.SetWidgetPropertyFunc(widgetRef, prop, value)
45+
}
46+
return nil
47+
}
48+
49+
func (m *MockPageMutator) SetWidgetDataSource(widgetRef string, ds pages.DataSource) error {
50+
if m.SetWidgetDataSourceFunc != nil {
51+
return m.SetWidgetDataSourceFunc(widgetRef, ds)
52+
}
53+
return nil
54+
}
55+
56+
func (m *MockPageMutator) SetColumnProperty(gridRef string, columnRef string, prop string, value any) error {
57+
if m.SetColumnPropertyFunc != nil {
58+
return m.SetColumnPropertyFunc(gridRef, columnRef, prop, value)
59+
}
60+
return nil
61+
}
62+
63+
func (m *MockPageMutator) InsertWidget(widgetRef string, columnRef string, position backend.InsertPosition, widgets []pages.Widget) error {
64+
if m.InsertWidgetFunc != nil {
65+
return m.InsertWidgetFunc(widgetRef, columnRef, position, widgets)
66+
}
67+
return nil
68+
}
69+
70+
func (m *MockPageMutator) DropWidget(refs []backend.WidgetRef) error {
71+
if m.DropWidgetFunc != nil {
72+
return m.DropWidgetFunc(refs)
73+
}
74+
return nil
75+
}
76+
77+
func (m *MockPageMutator) ReplaceWidget(widgetRef string, columnRef string, widgets []pages.Widget) error {
78+
if m.ReplaceWidgetFunc != nil {
79+
return m.ReplaceWidgetFunc(widgetRef, columnRef, widgets)
80+
}
81+
return nil
82+
}
83+
84+
func (m *MockPageMutator) FindWidget(name string) bool {
85+
if m.FindWidgetFunc != nil {
86+
return m.FindWidgetFunc(name)
87+
}
88+
return false
89+
}
90+
91+
func (m *MockPageMutator) AddVariable(name, dataType, defaultValue string) error {
92+
if m.AddVariableFunc != nil {
93+
return m.AddVariableFunc(name, dataType, defaultValue)
94+
}
95+
return nil
96+
}
97+
98+
func (m *MockPageMutator) DropVariable(name string) error {
99+
if m.DropVariableFunc != nil {
100+
return m.DropVariableFunc(name)
101+
}
102+
return nil
103+
}
104+
105+
func (m *MockPageMutator) SetLayout(newLayout string, paramMappings map[string]string) error {
106+
if m.SetLayoutFunc != nil {
107+
return m.SetLayoutFunc(newLayout, paramMappings)
108+
}
109+
return nil
110+
}
111+
112+
func (m *MockPageMutator) SetPluggableProperty(widgetRef string, propKey string, op backend.PluggablePropertyOp, ctx backend.PluggablePropertyContext) error {
113+
if m.SetPluggablePropertyFunc != nil {
114+
return m.SetPluggablePropertyFunc(widgetRef, propKey, op, ctx)
115+
}
116+
return nil
117+
}
118+
119+
func (m *MockPageMutator) EnclosingEntity(widgetRef string) string {
120+
if m.EnclosingEntityFunc != nil {
121+
return m.EnclosingEntityFunc(widgetRef)
122+
}
123+
return ""
124+
}
125+
126+
func (m *MockPageMutator) WidgetScope() map[string]model.ID {
127+
if m.WidgetScopeFunc != nil {
128+
return m.WidgetScopeFunc()
129+
}
130+
return nil
131+
}
132+
133+
func (m *MockPageMutator) ParamScope() (map[string]model.ID, map[string]string) {
134+
if m.ParamScopeFunc != nil {
135+
return m.ParamScopeFunc()
136+
}
137+
return nil, nil
138+
}
139+
140+
func (m *MockPageMutator) Save() error {
141+
if m.SaveFunc != nil {
142+
return m.SaveFunc()
143+
}
144+
return nil
145+
}
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
3+
package mock
4+
5+
import (
6+
"github.com/mendixlabs/mxcli/mdl/backend"
7+
"github.com/mendixlabs/mxcli/sdk/workflows"
8+
)
9+
10+
var _ backend.WorkflowMutator = (*MockWorkflowMutator)(nil)
11+
12+
// MockWorkflowMutator implements backend.WorkflowMutator. Every interface
13+
// method is backed by a public function field. If the field is nil the
14+
// method returns zero values / nil error (never panics).
15+
type MockWorkflowMutator struct {
16+
SetPropertyFunc func(prop string, value string) error
17+
SetPropertyWithEntityFunc func(prop string, value string, entity string) error
18+
SetActivityPropertyFunc func(activityRef string, atPos int, prop string, value string) error
19+
InsertAfterActivityFunc func(activityRef string, atPos int, activities []workflows.WorkflowActivity) error
20+
DropActivityFunc func(activityRef string, atPos int) error
21+
ReplaceActivityFunc func(activityRef string, atPos int, activities []workflows.WorkflowActivity) error
22+
InsertOutcomeFunc func(activityRef string, atPos int, outcomeName string, activities []workflows.WorkflowActivity) error
23+
DropOutcomeFunc func(activityRef string, atPos int, outcomeName string) error
24+
InsertPathFunc func(activityRef string, atPos int, pathCaption string, activities []workflows.WorkflowActivity) error
25+
DropPathFunc func(activityRef string, atPos int, pathCaption string) error
26+
InsertBranchFunc func(activityRef string, atPos int, condition string, activities []workflows.WorkflowActivity) error
27+
DropBranchFunc func(activityRef string, atPos int, branchName string) error
28+
InsertBoundaryEventFunc func(activityRef string, atPos int, eventType string, delay string, activities []workflows.WorkflowActivity) error
29+
DropBoundaryEventFunc func(activityRef string, atPos int) error
30+
SaveFunc func() error
31+
}
32+
33+
func (m *MockWorkflowMutator) SetProperty(prop string, value string) error {
34+
if m.SetPropertyFunc != nil {
35+
return m.SetPropertyFunc(prop, value)
36+
}
37+
return nil
38+
}
39+
40+
func (m *MockWorkflowMutator) SetPropertyWithEntity(prop string, value string, entity string) error {
41+
if m.SetPropertyWithEntityFunc != nil {
42+
return m.SetPropertyWithEntityFunc(prop, value, entity)
43+
}
44+
return nil
45+
}
46+
47+
func (m *MockWorkflowMutator) SetActivityProperty(activityRef string, atPos int, prop string, value string) error {
48+
if m.SetActivityPropertyFunc != nil {
49+
return m.SetActivityPropertyFunc(activityRef, atPos, prop, value)
50+
}
51+
return nil
52+
}
53+
54+
func (m *MockWorkflowMutator) InsertAfterActivity(activityRef string, atPos int, activities []workflows.WorkflowActivity) error {
55+
if m.InsertAfterActivityFunc != nil {
56+
return m.InsertAfterActivityFunc(activityRef, atPos, activities)
57+
}
58+
return nil
59+
}
60+
61+
func (m *MockWorkflowMutator) DropActivity(activityRef string, atPos int) error {
62+
if m.DropActivityFunc != nil {
63+
return m.DropActivityFunc(activityRef, atPos)
64+
}
65+
return nil
66+
}
67+
68+
func (m *MockWorkflowMutator) ReplaceActivity(activityRef string, atPos int, activities []workflows.WorkflowActivity) error {
69+
if m.ReplaceActivityFunc != nil {
70+
return m.ReplaceActivityFunc(activityRef, atPos, activities)
71+
}
72+
return nil
73+
}
74+
75+
func (m *MockWorkflowMutator) InsertOutcome(activityRef string, atPos int, outcomeName string, activities []workflows.WorkflowActivity) error {
76+
if m.InsertOutcomeFunc != nil {
77+
return m.InsertOutcomeFunc(activityRef, atPos, outcomeName, activities)
78+
}
79+
return nil
80+
}
81+
82+
func (m *MockWorkflowMutator) DropOutcome(activityRef string, atPos int, outcomeName string) error {
83+
if m.DropOutcomeFunc != nil {
84+
return m.DropOutcomeFunc(activityRef, atPos, outcomeName)
85+
}
86+
return nil
87+
}
88+
89+
func (m *MockWorkflowMutator) InsertPath(activityRef string, atPos int, pathCaption string, activities []workflows.WorkflowActivity) error {
90+
if m.InsertPathFunc != nil {
91+
return m.InsertPathFunc(activityRef, atPos, pathCaption, activities)
92+
}
93+
return nil
94+
}
95+
96+
func (m *MockWorkflowMutator) DropPath(activityRef string, atPos int, pathCaption string) error {
97+
if m.DropPathFunc != nil {
98+
return m.DropPathFunc(activityRef, atPos, pathCaption)
99+
}
100+
return nil
101+
}
102+
103+
func (m *MockWorkflowMutator) InsertBranch(activityRef string, atPos int, condition string, activities []workflows.WorkflowActivity) error {
104+
if m.InsertBranchFunc != nil {
105+
return m.InsertBranchFunc(activityRef, atPos, condition, activities)
106+
}
107+
return nil
108+
}
109+
110+
func (m *MockWorkflowMutator) DropBranch(activityRef string, atPos int, branchName string) error {
111+
if m.DropBranchFunc != nil {
112+
return m.DropBranchFunc(activityRef, atPos, branchName)
113+
}
114+
return nil
115+
}
116+
117+
func (m *MockWorkflowMutator) InsertBoundaryEvent(activityRef string, atPos int, eventType string, delay string, activities []workflows.WorkflowActivity) error {
118+
if m.InsertBoundaryEventFunc != nil {
119+
return m.InsertBoundaryEventFunc(activityRef, atPos, eventType, delay, activities)
120+
}
121+
return nil
122+
}
123+
124+
func (m *MockWorkflowMutator) DropBoundaryEvent(activityRef string, atPos int) error {
125+
if m.DropBoundaryEventFunc != nil {
126+
return m.DropBoundaryEventFunc(activityRef, atPos)
127+
}
128+
return nil
129+
}
130+
131+
func (m *MockWorkflowMutator) Save() error {
132+
if m.SaveFunc != nil {
133+
return m.SaveFunc()
134+
}
135+
return nil
136+
}

mdl/executor/registry_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,9 +172,11 @@ func allKnownStatements() []ast.Statement {
172172
&ast.AlterUserRoleStmt{},
173173
&ast.AlterWorkflowStmt{},
174174
&ast.ConnectStmt{},
175+
&ast.CreateAgentStmt{},
175176
&ast.CreateAssociationStmt{},
176177
&ast.CreateBusinessEventServiceStmt{},
177178
&ast.CreateConfigurationStmt{},
179+
&ast.CreateConsumedMCPServiceStmt{},
178180
&ast.CreateConstantStmt{},
179181
&ast.CreateDatabaseConnectionStmt{},
180182
&ast.CreateDataTransformerStmt{},
@@ -188,7 +190,9 @@ func allKnownStatements() []ast.Statement {
188190
&ast.CreateImportMappingStmt{},
189191
&ast.CreateJavaActionStmt{},
190192
&ast.CreateJsonStructureStmt{},
193+
&ast.CreateKnowledgeBaseStmt{},
191194
&ast.CreateMicroflowStmt{},
195+
&ast.CreateModelStmt{},
192196
&ast.CreateModuleRoleStmt{},
193197
&ast.CreateModuleStmt{},
194198
&ast.CreateODataClientStmt{},
@@ -206,9 +210,11 @@ func allKnownStatements() []ast.Statement {
206210
&ast.DescribeStmt{},
207211
&ast.DescribeStylingStmt{},
208212
&ast.DisconnectStmt{},
213+
&ast.DropAgentStmt{},
209214
&ast.DropAssociationStmt{},
210215
&ast.DropBusinessEventServiceStmt{},
211216
&ast.DropConfigurationStmt{},
217+
&ast.DropConsumedMCPServiceStmt{},
212218
&ast.DropConstantStmt{},
213219
&ast.DropDataTransformerStmt{},
214220
&ast.DropDemoUserStmt{},
@@ -220,7 +226,9 @@ func allKnownStatements() []ast.Statement {
220226
&ast.DropImportMappingStmt{},
221227
&ast.DropJavaActionStmt{},
222228
&ast.DropJsonStructureStmt{},
229+
&ast.DropKnowledgeBaseStmt{},
223230
&ast.DropMicroflowStmt{},
231+
&ast.DropModelStmt{},
224232
&ast.DropModuleRoleStmt{},
225233
&ast.DropModuleStmt{},
226234
&ast.DropODataClientStmt{},
@@ -286,3 +294,15 @@ func TestNewRegistry_Completeness(t *testing.T) {
286294
t.Fatalf("registry is incomplete: %v", err)
287295
}
288296
}
297+
298+
// TestNewRegistry_HandlerCountSnapshot verifies that the number of registered
299+
// handlers matches allKnownStatements(). Keep allKnownStatements() in sync with
300+
// known statement types and handler registrations.
301+
func TestNewRegistry_HandlerCountSnapshot(t *testing.T) {
302+
r := NewRegistry()
303+
known := allKnownStatements()
304+
305+
if got := r.HandlerCount(); got != len(known) {
306+
t.Errorf("handler count mismatch: registry has %d, allKnownStatements has %d — update allKnownStatements or register missing handlers", got, len(known))
307+
}
308+
}

0 commit comments

Comments
 (0)