Skip to content

Commit 19fca22

Browse files
committed
move register option to internal package
1 parent b16ec2c commit 19fca22

17 files changed

+102
-94
lines changed

internal/activity/executor_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func TestExecutor_ExecuteActivity(t *testing.T) {
4444
name: "mismatched argument count",
4545
setup: func(t *testing.T, r *workflow.Registry) *history.ActivityScheduledAttributes {
4646
a := func(context.Context, int, int) error { return nil }
47-
require.NoError(t, r.RegisterActivity(a, nil))
47+
require.NoError(t, r.RegisterActivity(a))
4848

4949
return &history.ActivityScheduledAttributes{
5050
Name: fn.FuncName(a),
@@ -62,7 +62,7 @@ func TestExecutor_ExecuteActivity(t *testing.T) {
6262
a := func(context.Context, int) error {
6363
return errors.New("some error")
6464
}
65-
require.NoError(t, r.RegisterActivity(a, nil))
65+
require.NoError(t, r.RegisterActivity(a))
6666

6767
inputs, _ := args.ArgsToInputs(converter.DefaultConverter, 42)
6868

@@ -85,7 +85,7 @@ func TestExecutor_ExecuteActivity(t *testing.T) {
8585
a := func(context.Context, int) error {
8686
panic("activity panic")
8787
}
88-
require.NoError(t, r.RegisterActivity(a, nil))
88+
require.NoError(t, r.RegisterActivity(a))
8989

9090
inputs, _ := args.ArgsToInputs(converter.DefaultConverter, 42)
9191

internal/workflow/cache/cache_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ func Test_Cache_StoreAndGet(t *testing.T) {
2424
c := NewWorkflowExecutorLRUCache(metrics.NewNoopMetricsClient(), 1, time.Second*10)
2525

2626
r := wf.NewRegistry()
27-
r.RegisterWorkflow(workflowWithActivity, nil)
27+
r.RegisterWorkflow(workflowWithActivity)
2828

2929
i := core.NewWorkflowInstance("instanceID", "executionID")
3030
e, err := wf.NewExecutor(
@@ -66,7 +66,7 @@ func Test_Cache_Evict(t *testing.T) {
6666

6767
i := core.NewWorkflowInstance("instanceID", "executionID")
6868
r := wf.NewRegistry()
69-
r.RegisterWorkflow(workflowWithActivity, nil)
69+
r.RegisterWorkflow(workflowWithActivity)
7070
e, err := wf.NewExecutor(
7171
slog.Default(), trace.NewNoopTracerProvider().Tracer(backend.TracerName), r,
7272
converter.DefaultConverter, []contextpropagation.ContextPropagator{}, &testHistoryProvider{}, i,

internal/workflow/executor_test.go

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func Test_Executor(t *testing.T) {
6060
return nil
6161
}
6262

63-
r.RegisterWorkflow(wf, nil)
63+
r.RegisterWorkflow(wf)
6464

6565
task := startWorkflowTask(i.InstanceID, wf)
6666

@@ -86,8 +86,8 @@ func Test_Executor(t *testing.T) {
8686
return nil
8787
}
8888

89-
r.RegisterWorkflow(workflowWithActivity, nil)
90-
r.RegisterActivity(activity1, nil)
89+
r.RegisterWorkflow(workflowWithActivity)
90+
r.RegisterActivity(activity1)
9191

9292
task := &task.Workflow{
9393
ID: "taskID",
@@ -132,8 +132,8 @@ func Test_Executor(t *testing.T) {
132132
return nil
133133
}
134134

135-
r.RegisterWorkflow(workflowWithActivity, nil)
136-
r.RegisterActivity(activity1, nil)
135+
r.RegisterWorkflow(workflowWithActivity)
136+
r.RegisterActivity(activity1)
137137

138138
inputs, _ := converter.DefaultConverter.To(42)
139139
result, _ := converter.DefaultConverter.To(42)
@@ -197,8 +197,8 @@ func Test_Executor(t *testing.T) {
197197
return nil
198198
}
199199

200-
r.RegisterWorkflow(workflowWithActivity, nil)
201-
r.RegisterActivity(activity1, nil)
200+
r.RegisterWorkflow(workflowWithActivity)
201+
r.RegisterActivity(activity1)
202202

203203
inputs, _ := converter.DefaultConverter.To(42)
204204
result, _ := converter.DefaultConverter.To(42)
@@ -292,8 +292,8 @@ func Test_Executor(t *testing.T) {
292292
return nil
293293
}
294294

295-
r.RegisterWorkflow(workflowWithSelector, nil)
296-
r.RegisterActivity(activity1, nil)
295+
r.RegisterWorkflow(workflowWithSelector)
296+
r.RegisterActivity(activity1)
297297

298298
task := &task.Workflow{
299299
ID: "taskID",
@@ -339,7 +339,7 @@ func Test_Executor(t *testing.T) {
339339
return nil
340340
}
341341

342-
r.RegisterWorkflow(workflowWithTimer, nil)
342+
r.RegisterWorkflow(workflowWithTimer)
343343

344344
task := &task.Workflow{
345345
ID: "taskID",
@@ -385,8 +385,8 @@ func Test_Executor(t *testing.T) {
385385
return nil
386386
}
387387

388-
r.RegisterWorkflow(workflowWithTimer, nil)
389-
r.RegisterActivity(activity1, nil)
388+
r.RegisterWorkflow(workflowWithTimer)
389+
r.RegisterActivity(activity1)
390390

391391
task := startWorkflowTask(i.InstanceID, workflowWithTimer)
392392

@@ -418,7 +418,7 @@ func Test_Executor(t *testing.T) {
418418
return nil
419419
}
420420

421-
r.RegisterWorkflow(workflowWithSignal, nil)
421+
r.RegisterWorkflow(workflowWithSignal)
422422

423423
s, err := converter.DefaultConverter.To("")
424424
require.NoError(t, err)
@@ -462,7 +462,7 @@ func Test_Executor(t *testing.T) {
462462
panic("wf error")
463463
}
464464

465-
r.RegisterWorkflow(workflowPanic, nil)
465+
r.RegisterWorkflow(workflowPanic)
466466

467467
task1 := &task.Workflow{
468468
ID: "taskid",
@@ -504,8 +504,8 @@ func Test_Executor(t *testing.T) {
504504
return err
505505
}
506506

507-
r.RegisterWorkflow(workflow, nil)
508-
r.RegisterWorkflow(subworkflow, nil)
507+
r.RegisterWorkflow(workflow)
508+
r.RegisterWorkflow(subworkflow)
509509

510510
task := startWorkflowTask("instanceID", workflow)
511511

@@ -540,8 +540,8 @@ func Test_Executor(t *testing.T) {
540540
return nil
541541
}
542542

543-
r.RegisterWorkflow(workflow, nil)
544-
r.RegisterWorkflow(subworkflow, nil)
543+
r.RegisterWorkflow(workflow)
544+
r.RegisterWorkflow(subworkflow)
545545

546546
task := startWorkflowTask("instanceID", workflow)
547547
result, err := e.ExecuteTask(context.Background(), task)

internal/workflow/registry.go

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,9 @@ type RegisterConfig struct {
6363
Name string
6464
}
6565

66-
func (r *Registry) RegisterWorkflow(workflow Workflow, config *RegisterConfig) error {
67-
if config == nil {
68-
config = &RegisterConfig{}
69-
}
70-
name := config.Name
66+
func (r *Registry) RegisterWorkflow(workflow Workflow, opts ...RegisterOption) error {
67+
cfg := registerOptions(opts).applyRegisterOptions(RegisterConfig{})
68+
name := cfg.Name
7169
if name == "" {
7270
name = fn.FuncName(workflow)
7371
}
@@ -110,10 +108,8 @@ func (r *Registry) RegisterWorkflow(workflow Workflow, config *RegisterConfig) e
110108
return nil
111109
}
112110

113-
func (r *Registry) RegisterActivity(activity interface{}, config *RegisterConfig) error {
114-
if config == nil {
115-
config = &RegisterConfig{}
116-
}
111+
func (r *Registry) RegisterActivity(activity interface{}, opts ...RegisterOption) error {
112+
cfg := registerOptions(opts).applyRegisterOptions(RegisterConfig{})
117113

118114
t := reflect.TypeOf(activity)
119115

@@ -123,7 +119,7 @@ func (r *Registry) RegisterActivity(activity interface{}, config *RegisterConfig
123119
}
124120

125121
// Activity as function
126-
name := config.Name
122+
name := cfg.Name
127123
if name == "" {
128124
name = fn.FuncName(activity)
129125
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package workflow
2+
3+
type RegisterOption interface {
4+
applyRegisterOption(RegisterConfig) RegisterConfig
5+
}
6+
7+
type registerOptions []RegisterOption
8+
9+
func (opts registerOptions) applyRegisterOptions(cfg RegisterConfig) RegisterConfig {
10+
for _, opt := range opts {
11+
cfg = opt.applyRegisterOption(cfg)
12+
}
13+
return cfg
14+
}
15+
16+
type registerOptionFunc func(RegisterConfig) RegisterConfig
17+
18+
func (f registerOptionFunc) applyRegisterOption(cfg RegisterConfig) RegisterConfig {
19+
return f(cfg)
20+
}
21+
22+
func WithName(name string) RegisterOption {
23+
return registerOptionFunc(func(cfg RegisterConfig) RegisterConfig {
24+
cfg.Name = name
25+
return cfg
26+
})
27+
}

internal/workflow/registry_test.go

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,7 @@ func TestRegistry_RegisterWorkflow(t *testing.T) {
8484
t.Run(tt.name, func(t *testing.T) {
8585
r := NewRegistry()
8686

87-
cfg := RegisterConfig{Name: tt.args.name}
88-
err := r.RegisterWorkflow(tt.args.workflow, &cfg)
87+
err := r.RegisterWorkflow(tt.args.workflow, WithName(tt.args.name))
8988

9089
if (err != nil) != tt.wantErr {
9190
t.Errorf("Registry.RegisterWorkflow() error = %v, wantErr %v", err, tt.wantErr)
@@ -107,16 +106,16 @@ func Test_RegisterWorkflow_Conflict(t *testing.T) {
107106

108107
var wantErr *ErrWorkflowAlreadyRegistered
109108

110-
err := r.RegisterWorkflow(reg_workflow1, nil)
109+
err := r.RegisterWorkflow(reg_workflow1)
111110
require.NoError(t, err)
112111

113-
err = r.RegisterWorkflow(reg_workflow1, nil)
112+
err = r.RegisterWorkflow(reg_workflow1)
114113
require.ErrorAs(t, err, &wantErr)
115114

116-
err = r.RegisterWorkflow(reg_workflow1, &RegisterConfig{Name: "CustomName"})
115+
err = r.RegisterWorkflow(reg_workflow1, WithName("CustomName"))
117116
require.NoError(t, err)
118117

119-
err = r.RegisterWorkflow(reg_workflow1, &RegisterConfig{Name: "CustomName"})
118+
err = r.RegisterWorkflow(reg_workflow1, WithName("CustomName"))
120119
require.ErrorAs(t, err, &wantErr)
121120
}
122121

@@ -128,7 +127,7 @@ func Test_ActivityRegistration(t *testing.T) {
128127
r := NewRegistry()
129128
require.NotNil(t, r)
130129

131-
err := r.RegisterActivity(reg_activity, nil)
130+
err := r.RegisterActivity(reg_activity)
132131
require.NoError(t, err)
133132

134133
x, err := r.GetActivity("github.com/cschleiden/go-workflows/internal/workflow.reg_activity")
@@ -141,7 +140,7 @@ func Test_ActivityRegistration(t *testing.T) {
141140
err = fn(context.Background())
142141
require.NoError(t, err)
143142

144-
err = r.RegisterActivity(reg_activity, &RegisterConfig{Name: "CustomName"})
143+
err = r.RegisterActivity(reg_activity, WithName("CustomName"))
145144
require.NoError(t, err)
146145

147146
x, err = r.GetActivity("CustomName")
@@ -155,7 +154,7 @@ func Test_ActivityRegistration_Invalid(t *testing.T) {
155154
r := NewRegistry()
156155
require.NotNil(t, r)
157156

158-
err := r.RegisterActivity(reg_activity_invalid, nil)
157+
err := r.RegisterActivity(reg_activity_invalid)
159158
require.Error(t, err)
160159
}
161160

@@ -178,7 +177,7 @@ func Test_ActivityRegistrationOnStruct(t *testing.T) {
178177
a := &reg_activities{
179178
SomeValue: "test",
180179
}
181-
err := r.RegisterActivity(a, nil)
180+
err := r.RegisterActivity(a)
182181
require.NoError(t, err)
183182

184183
b := &reg_activities{}
@@ -205,16 +204,16 @@ func Test_RegisterActivity_Conflict(t *testing.T) {
205204

206205
var wantErr *ErrActivityAlreadyRegistered
207206

208-
err := r.RegisterActivity(reg_activity, nil)
207+
err := r.RegisterActivity(reg_activity)
209208
require.NoError(t, err)
210209

211-
err = r.RegisterActivity(reg_activity, nil)
210+
err = r.RegisterActivity(reg_activity)
212211
require.ErrorAs(t, err, &wantErr)
213212

214-
err = r.RegisterActivity(reg_activity, &RegisterConfig{Name: "CustomName"})
213+
err = r.RegisterActivity(reg_activity, WithName("CustomName"))
215214
require.NoError(t, err)
216215

217-
err = r.RegisterActivity(reg_activity, &RegisterConfig{Name: "CustomName"})
216+
err = r.RegisterActivity(reg_activity, WithName("CustomName"))
218217
require.ErrorAs(t, err, &wantErr)
219218
}
220219

@@ -232,6 +231,6 @@ func Test_ActivityRegistrationOnStruct_Invalid(t *testing.T) {
232231
a := &reg_invalid_activities{
233232
SomeValue: "test",
234233
}
235-
err := r.RegisterActivity(a, nil)
234+
err := r.RegisterActivity(a)
236235
require.Error(t, err)
237236
}

samples/retries/retries_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
func Test_Workflow(t *testing.T) {
1414
tester := tester.NewWorkflowTester[any](Workflow1)
1515

16-
tester.Registry().RegisterWorkflow(WorkflowWithFailures, nil)
16+
tester.Registry().RegisterWorkflow(WorkflowWithFailures)
1717

1818
tester.OnActivity(Activity1, mock.Anything, mock.Anything).Return(42, nil).Once()
1919

samples/subworkflow/subworkflow_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
func Test_Workflow(t *testing.T) {
1414
tester := tester.NewWorkflowTester[any](ParentWorkflow)
1515

16-
tester.Registry().RegisterWorkflow(SubWorkflow, nil)
16+
tester.Registry().RegisterWorkflow(SubWorkflow)
1717

1818
tester.OnActivity(Activity1, mock.Anything, mock.Anything, mock.Anything).Return(47, nil)
1919
tester.OnActivity(Activity2, mock.Anything, mock.Anything, mock.Anything).Return(12, nil)

tester/tester.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -220,10 +220,10 @@ func NewWorkflowTester[TResult any](wf interface{}, opts ...WorkflowTesterOption
220220

221221
// Register internal activities
222222
signalActivities := &signals.Activities{Signaler: &signaler[TResult]{wt}}
223-
registry.RegisterActivity(signalActivities, nil)
223+
registry.RegisterActivity(signalActivities)
224224

225225
// Always register the workflow under test
226-
if err := wt.registry.RegisterWorkflow(wf, nil); err != nil {
226+
if err := wt.registry.RegisterWorkflow(wf); err != nil {
227227
panic(fmt.Sprintf("could not register workflow under test: %v", err))
228228
}
229229

@@ -252,15 +252,15 @@ func (wt *workflowTester[TResult]) ListenSubWorkflow(listener func(*core.Workflo
252252

253253
func (wt *workflowTester[TResult]) OnActivityByName(name string, activity workflow.Activity, args ...interface{}) *mock.Call {
254254
// Register activity so that we can correctly identify its arguments later
255-
wt.registry.RegisterActivity(activity, &workflow.RegisterConfig{Name: name})
255+
wt.registry.RegisterActivity(activity, workflow.WithName(name))
256256

257257
wt.mockedActivities[name] = true
258258
return wt.ma.On(name, args...)
259259
}
260260

261261
func (wt *workflowTester[TResult]) OnActivity(activity workflow.Activity, args ...interface{}) *mock.Call {
262262
// Register activity so that we can correctly identify its arguments later
263-
wt.registry.RegisterActivity(activity, nil)
263+
wt.registry.RegisterActivity(activity)
264264

265265
name := fn.FuncName(activity)
266266
wt.mockedActivities[name] = true
@@ -269,15 +269,15 @@ func (wt *workflowTester[TResult]) OnActivity(activity workflow.Activity, args .
269269

270270
func (wt *workflowTester[TResult]) OnSubWorkflowByName(name string, wf workflow.Workflow, args ...interface{}) *mock.Call {
271271
// Register workflow so that we can correctly identify its arguments later
272-
wt.registry.RegisterWorkflow(wf, &workflow.RegisterConfig{Name: name})
272+
wt.registry.RegisterWorkflow(wf, workflow.WithName(name))
273273

274274
wt.mockedWorkflows[name] = true
275275
return wt.mw.On(name, args...)
276276
}
277277

278278
func (wt *workflowTester[TResult]) OnSubWorkflow(workflow workflow.Workflow, args ...interface{}) *mock.Call {
279279
// Register workflow so that we can correctly identify its arguments later
280-
wt.registry.RegisterWorkflow(workflow, nil)
280+
wt.registry.RegisterWorkflow(workflow)
281281

282282
name := fn.FuncName(workflow)
283283
wt.mockedWorkflows[name] = true

0 commit comments

Comments
 (0)