Skip to content

Commit 503471e

Browse files
authored
v08 spec alignment - Workflow name no longer a required property (#81)
* v08 spec alignment - Workflow name no longer a required property Signed-off-by: spolti <filippespolti@gmail.com> * remove validate Signed-off-by: spolti <filippespolti@gmail.com> Signed-off-by: spolti <filippespolti@gmail.com>
1 parent 9384e9a commit 503471e

File tree

3 files changed

+29
-7
lines changed

3 files changed

+29
-7
lines changed

model/workflow.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ type BaseWorkflow struct {
5858
// Key Domain-specific workflow identifier
5959
Key string `json:"key,omitempty" validate:"omitempty,min=1"`
6060
// Workflow name
61-
Name string `json:"name" validate:"required"`
61+
Name string `json:"name,omitempty"`
6262
// Workflow description
6363
Description string `json:"description,omitempty"`
6464
// Workflow version

parser/parser_test.go

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ func TestBasicValidation(t *testing.T) {
3131
if !file.IsDir() {
3232
workflow, err := FromFile(filepath.Join(rootPath, file.Name()))
3333
if assert.NoError(t, err, "Test File %s", file.Name()) {
34-
assert.NotEmpty(t, workflow.Name, "Test File %s", file.Name())
3534
assert.NotEmpty(t, workflow.ID, "Test File %s", file.Name())
3635
assert.NotEmpty(t, workflow.States, "Test File %s", file.Name())
3736
}
@@ -54,18 +53,21 @@ func TestCustomValidators(t *testing.T) {
5453
func TestFromFile(t *testing.T) {
5554
files := map[string]func(*testing.T, *model.Workflow){
5655
"./testdata/workflows/greetings.sw.json": func(t *testing.T, w *model.Workflow) {
56+
assert.Equal(t, "Greeting Workflow", w.Name)
5757
assert.Equal(t, "greeting", w.ID)
5858
assert.IsType(t, &model.OperationState{}, w.States[0])
5959
assert.Equal(t, "greetingFunction", w.States[0].(*model.OperationState).Actions[0].FunctionRef.RefName)
6060
},
6161
"./testdata/workflows/greetings.sw.yaml": func(t *testing.T, w *model.Workflow) {
62+
assert.Equal(t, "Greeting Workflow", w.Name)
6263
assert.IsType(t, &model.OperationState{}, w.States[0])
6364
assert.Equal(t, "greeting", w.ID)
6465
assert.NotEmpty(t, w.States[0].(*model.OperationState).Actions)
6566
assert.NotNil(t, w.States[0].(*model.OperationState).Actions[0].FunctionRef)
6667
assert.Equal(t, "greetingFunction", w.States[0].(*model.OperationState).Actions[0].FunctionRef.RefName)
6768
},
68-
"./testdata/workflows/greetings-custom-function.sw.yaml": func(t *testing.T, w *model.Workflow) {
69+
"./testdata/workflows/greetings-v08-spec.sw.yaml": func(t *testing.T, w *model.Workflow) {
70+
assert.Empty(t, w.Name)
6971
assert.IsType(t, &model.OperationState{}, w.States[0])
7072
assert.Equal(t, "custom.greeting", w.ID)
7173
assert.NotEmpty(t, w.States[0].(*model.OperationState).Actions)
@@ -77,6 +79,7 @@ func TestFromFile(t *testing.T) {
7779
assert.Equal(t, "greetingCustomFunction", w.States[0].(*model.OperationState).Actions[0].Name)
7880
},
7981
"./testdata/workflows/eventbaseddataandswitch.sw.json": func(t *testing.T, w *model.Workflow) {
82+
assert.Equal(t, "Event Based Switch Transitions", w.Name)
8083
assert.Equal(t, "Start", w.States[0].GetName())
8184
assert.Equal(t, "CheckVisaStatus", w.States[1].GetName())
8285
assert.IsType(t, &model.DataBasedSwitchState{}, w.States[0])
@@ -87,6 +90,7 @@ func TestFromFile(t *testing.T) {
8790
assert.Equal(t, "${ .applicants | .age < 18 }", operationState.Actions[0].Condition)
8891
},
8992
"./testdata/workflows/eventbasedgreeting.sw.json": func(t *testing.T, w *model.Workflow) {
93+
assert.Equal(t, "Event Based Greeting Workflow", w.Name)
9094
assert.Equal(t, "GreetingEvent", w.Events[0].Name)
9195
assert.IsType(t, &model.EventState{}, w.States[0])
9296
eventState := w.States[0].(*model.EventState)
@@ -96,6 +100,7 @@ func TestFromFile(t *testing.T) {
96100
assert.Equal(t, true, eventState.Exclusive)
97101
},
98102
"./testdata/workflows/eventbasedgreetingexclusive.sw.json": func(t *testing.T, w *model.Workflow) {
103+
assert.Equal(t, "Event Based Greeting Workflow", w.Name)
99104
assert.Equal(t, "GreetingEvent", w.Events[0].Name)
100105
assert.Equal(t, "GreetingEvent2", w.Events[1].Name)
101106
assert.IsType(t, &model.EventState{}, w.States[0])
@@ -107,6 +112,7 @@ func TestFromFile(t *testing.T) {
107112
assert.Equal(t, true, eventState.Exclusive)
108113
},
109114
"./testdata/workflows/eventbasedgreetingnonexclusive.sw.json": func(t *testing.T, w *model.Workflow) {
115+
assert.Equal(t, "Event Based Greeting Workflow", w.Name)
110116
assert.Equal(t, "GreetingEvent", w.Events[0].Name)
111117
assert.Equal(t, "GreetingEvent2", w.Events[1].Name)
112118
assert.IsType(t, &model.EventState{}, w.States[0])
@@ -118,6 +124,7 @@ func TestFromFile(t *testing.T) {
118124
assert.Equal(t, false, eventState.Exclusive)
119125
},
120126
"./testdata/workflows/eventbasedgreeting.sw.p.json": func(t *testing.T, w *model.Workflow) {
127+
assert.Equal(t, "Event Based Greeting Workflow", w.Name)
121128
assert.Equal(t, "GreetingEvent", w.Events[0].Name)
122129
assert.IsType(t, &model.EventState{}, w.States[0])
123130
eventState := w.States[0].(*model.EventState)
@@ -126,6 +133,7 @@ func TestFromFile(t *testing.T) {
126133
assert.Equal(t, "GreetingEvent", eventState.OnEvents[0].EventRefs[0])
127134
},
128135
"./testdata/workflows/eventbasedswitch.sw.json": func(t *testing.T, w *model.Workflow) {
136+
assert.Equal(t, "Event Based Switch Transitions", w.Name)
129137
assert.IsType(t, &model.EventBasedSwitchState{}, w.States[0])
130138
eventState := w.States[0].(*model.EventBasedSwitchState)
131139
assert.NotNil(t, eventState)
@@ -134,6 +142,7 @@ func TestFromFile(t *testing.T) {
134142
assert.IsType(t, &model.TransitionEventCondition{}, eventState.EventConditions[0])
135143
},
136144
"./testdata/workflows/applicationrequest.json": func(t *testing.T, w *model.Workflow) {
145+
assert.Equal(t, "Applicant Request Decision Workflow", w.Name)
137146
assert.IsType(t, &model.DataBasedSwitchState{}, w.States[0])
138147
eventState := w.States[0].(*model.DataBasedSwitchState)
139148
assert.NotNil(t, eventState)
@@ -155,6 +164,7 @@ func TestFromFile(t *testing.T) {
155164
assert.Equal(t, "test_token", bearerProperties)
156165
},
157166
"./testdata/workflows/applicationrequest.multiauth.json": func(t *testing.T, w *model.Workflow) {
167+
assert.Equal(t, "Applicant Request Decision Workflow", w.Name)
158168
assert.IsType(t, &model.DataBasedSwitchState{}, w.States[0])
159169
eventState := w.States[0].(*model.DataBasedSwitchState)
160170
assert.NotNil(t, eventState)
@@ -179,9 +189,9 @@ func TestFromFile(t *testing.T) {
179189
basicProperties := w.Auth.Defs[1].Properties.(*model.BasicAuthProperties)
180190
assert.Equal(t, "test_user", basicProperties.Username)
181191
assert.Equal(t, "test_pwd", basicProperties.Password)
182-
183192
},
184193
"./testdata/workflows/applicationrequest.rp.json": func(t *testing.T, w *model.Workflow) {
194+
assert.Equal(t, "Applicant Request Decision Workflow", w.Name)
185195
assert.IsType(t, &model.DataBasedSwitchState{}, w.States[0])
186196
eventState := w.States[0].(*model.DataBasedSwitchState)
187197
assert.NotNil(t, eventState)
@@ -198,6 +208,7 @@ func TestFromFile(t *testing.T) {
198208
assert.Equal(t, "TimeoutRetryStrategy", w.Retries[0].Name)
199209
},
200210
"./testdata/workflows/checkinbox.sw.yaml": func(t *testing.T, w *model.Workflow) {
211+
assert.Equal(t, "Check Inbox Workflow", w.Name)
201212
assert.IsType(t, &model.OperationState{}, w.States[0])
202213
operationState := w.States[0].(*model.OperationState)
203214
assert.NotNil(t, operationState)
@@ -206,6 +217,7 @@ func TestFromFile(t *testing.T) {
206217
},
207218
// validates: https://github.com/serverlessworkflow/specification/pull/175/
208219
"./testdata/workflows/provisionorders.sw.json": func(t *testing.T, w *model.Workflow) {
220+
assert.Equal(t, "Provision Orders", w.Name)
209221
assert.IsType(t, &model.OperationState{}, w.States[0])
210222
operationState := w.States[0].(*model.OperationState)
211223
assert.NotNil(t, operationState)
@@ -217,12 +229,16 @@ func TestFromFile(t *testing.T) {
217229
assert.Equal(t, "MissingItem", operationState.OnErrors[1].Transition.NextState)
218230
assert.Equal(t, "Missing order quantity", operationState.OnErrors[2].ErrorRef)
219231
assert.Equal(t, "MissingQuantity", operationState.OnErrors[2].Transition.NextState)
220-
}, "./testdata/workflows/checkinbox.cron-test.sw.yaml": func(t *testing.T, w *model.Workflow) {
232+
},
233+
"./testdata/workflows/checkinbox.cron-test.sw.yaml": func(t *testing.T, w *model.Workflow) {
234+
assert.Equal(t, "Check Inbox Workflow", w.Name)
221235
assert.Equal(t, "0 0/15 * * * ?", w.Start.Schedule.Cron.Expression)
222236
assert.Equal(t, "checkInboxFunction", w.States[0].(*model.OperationState).Actions[0].FunctionRef.RefName)
223237
assert.Equal(t, "SendTextForHighPriority", w.States[0].GetTransition().NextState)
224238
assert.False(t, w.States[1].GetEnd().Terminate)
225-
}, "./testdata/workflows/applicationrequest-issue16.sw.yaml": func(t *testing.T, w *model.Workflow) {
239+
},
240+
"./testdata/workflows/applicationrequest-issue16.sw.yaml": func(t *testing.T, w *model.Workflow) {
241+
assert.Equal(t, "Applicant Request Decision Workflow", w.Name)
226242
assert.IsType(t, &model.DataBasedSwitchState{}, w.States[0])
227243
dataBaseSwitchState := w.States[0].(*model.DataBasedSwitchState)
228244
assert.NotNil(t, dataBaseSwitchState)
@@ -231,6 +247,7 @@ func TestFromFile(t *testing.T) {
231247
},
232248
// validates: https://github.com/serverlessworkflow/sdk-go/issues/36
233249
"./testdata/workflows/patientonboarding.sw.yaml": func(t *testing.T, w *model.Workflow) {
250+
assert.Equal(t, "Patient Onboarding Workflow", w.Name)
234251
assert.IsType(t, &model.EventState{}, w.States[0])
235252
eventState := w.States[0].(*model.EventState)
236253
assert.NotNil(t, eventState)
@@ -240,26 +257,32 @@ func TestFromFile(t *testing.T) {
240257
assert.Equal(t, float32(1.1), w.Retries[0].Multiplier.FloatVal)
241258
},
242259
"./testdata/workflows/greetings-secret.sw.yaml": func(t *testing.T, w *model.Workflow) {
260+
assert.Equal(t, "Greeting Workflow", w.Name)
243261
assert.Len(t, w.Secrets, 1)
244262
},
245263
"./testdata/workflows/greetings-secret-file.sw.yaml": func(t *testing.T, w *model.Workflow) {
264+
assert.Equal(t, "Greeting Workflow", w.Name)
246265
assert.Len(t, w.Secrets, 3)
247266
},
248267
"./testdata/workflows/greetings-constants-file.sw.yaml": func(t *testing.T, w *model.Workflow) {
268+
assert.Equal(t, "Greeting Workflow", w.Name)
249269
assert.NotEmpty(t, w.Constants)
250270
assert.NotEmpty(t, w.Constants.Data["Translations"])
251271
},
252272
"./testdata/workflows/roomreadings.timeouts.sw.json": func(t *testing.T, w *model.Workflow) {
273+
assert.Equal(t, "Room Temp and Humidity Workflow", w.Name)
253274
assert.NotNil(t, w.Timeouts)
254275
assert.Equal(t, "PT1H", w.Timeouts.WorkflowExecTimeout.Duration)
255276
assert.Equal(t, "GenerateReport", w.Timeouts.WorkflowExecTimeout.RunBefore)
256277
},
257278
"./testdata/workflows/roomreadings.timeouts.file.sw.json": func(t *testing.T, w *model.Workflow) {
279+
assert.Equal(t, "Room Temp and Humidity Workflow", w.Name)
258280
assert.NotNil(t, w.Timeouts)
259281
assert.Equal(t, "PT1H", w.Timeouts.WorkflowExecTimeout.Duration)
260282
assert.Equal(t, "GenerateReport", w.Timeouts.WorkflowExecTimeout.RunBefore)
261283
},
262284
"./testdata/workflows/purchaseorderworkflow.sw.json": func(t *testing.T, w *model.Workflow) {
285+
assert.Equal(t, "Purchase Order Workflow", w.Name)
263286
assert.NotNil(t, w.Timeouts)
264287
assert.Equal(t, "PT30D", w.Timeouts.WorkflowExecTimeout.Duration)
265288
assert.Equal(t, "CancelOrder", w.Timeouts.WorkflowExecTimeout.RunBefore)

parser/testdata/workflows/greetings-custom-function.sw.yaml renamed to parser/testdata/workflows/greetings-v08-spec.sw.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515
id: custom.greeting
1616
version: '1.0'
17-
name: Greeting Workflow
1817
description: Greet Someone
1918
specVersion: "0.8"
2019
start:

0 commit comments

Comments
 (0)