Skip to content

Commit 3bf623e

Browse files
committed
Remove interface and improve comments
1 parent 0b2d07f commit 3bf623e

File tree

2 files changed

+35
-48
lines changed

2 files changed

+35
-48
lines changed

tester/signaler.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package tester
2+
3+
import (
4+
"context"
5+
6+
"github.com/cschleiden/go-workflows/core"
7+
"github.com/cschleiden/go-workflows/internal/signals"
8+
)
9+
10+
type signaler[T any] struct {
11+
wt *workflowTester[T]
12+
}
13+
14+
func (s *signaler[T]) SignalWorkflow(ctx context.Context, instanceID string, name string, arg interface{}) error {
15+
return s.wt.SignalWorkflowInstance(core.NewWorkflowInstance(instanceID, ""), name, arg)
16+
}
17+
18+
var _ signals.Signaler = (*signaler[any])(nil)

tester/tester.go

Lines changed: 17 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -75,40 +75,6 @@ type testWorkflow struct {
7575
pendingEvents []*history.Event
7676
}
7777

78-
type WorkflowTester[TResult any] interface {
79-
// Now returns the current time of the simulated clock in the tester
80-
Now() time.Time
81-
82-
Execute(ctx context.Context, args ...interface{})
83-
84-
Registry() *registry.Registry
85-
86-
OnActivity(activity workflow.Activity, args ...interface{}) *mock.Call
87-
88-
OnActivityByName(name string, activity workflow.Activity, args ...interface{}) *mock.Call
89-
90-
OnSubWorkflow(workflow workflow.Workflow, args ...interface{}) *mock.Call
91-
92-
OnSubWorkflowByName(name string, workflow workflow.Workflow, args ...interface{}) *mock.Call
93-
94-
SignalWorkflow(signalName string, value interface{})
95-
96-
SignalWorkflowInstance(wfi *core.WorkflowInstance, signalName string, value interface{}) error
97-
98-
WorkflowFinished() bool
99-
100-
WorkflowResult() (TResult, error)
101-
102-
// AssertExpectations asserts any assertions set up for mock activities and sub-workflow
103-
AssertExpectations(t *testing.T)
104-
105-
// ScheduleCallback schedules the given callback after the given delay in workflow time (not wall clock).
106-
ScheduleCallback(delay time.Duration, callback func())
107-
108-
// ListenSubWorkflow registers a handler to be called when a sub-workflow is started.
109-
ListenSubWorkflow(listener func(instance *core.WorkflowInstance, name string))
110-
}
111-
11278
type workflowTester[TResult any] struct {
11379
options *options
11480

@@ -162,8 +128,6 @@ type workflowTester[TResult any] struct {
162128
propagators []workflow.ContextPropagator
163129
}
164130

165-
var _ WorkflowTester[any] = (*workflowTester[any])(nil)
166-
167131
func NewWorkflowTester[TResult any](workflow workflow.Workflow, opts ...WorkflowTesterOption) *workflowTester[TResult] {
168132
if err := args.ReturnTypeMatch[TResult](workflow); err != nil {
169133
panic(fmt.Sprintf("workflow return type does not match: %s", err))
@@ -231,14 +195,17 @@ func NewWorkflowTester[TResult any](workflow workflow.Workflow, opts ...Workflow
231195
return wt
232196
}
233197

198+
// Now returns the current time in the workflow tester's clock
234199
func (wt *workflowTester[TResult]) Now() time.Time {
235200
return wt.clock.Now()
236201
}
237202

203+
// Registry returns the registry used by the workflow tester.
238204
func (wt *workflowTester[TResult]) Registry() *registry.Registry {
239205
return wt.registry
240206
}
241207

208+
// ScheduleCallback schedules a callback to be called after the given delay.
242209
func (wt *workflowTester[TResult]) ScheduleCallback(delay time.Duration, callback func()) {
243210
wt.timers = append(wt.timers, &testTimer{
244211
At: wt.clock.Now().Add(delay),
@@ -247,10 +214,13 @@ func (wt *workflowTester[TResult]) ScheduleCallback(delay time.Duration, callbac
247214
})
248215
}
249216

217+
// ListenSubWorkflow registers a listener that is called whenever a sub-workflow is started. It receives
218+
// the workflow instance and the name of the sub-workflow.
250219
func (wt *workflowTester[TResult]) ListenSubWorkflow(listener func(*core.WorkflowInstance, string)) {
251220
wt.subWorkflowListener = listener
252221
}
253222

223+
// OnActivityByName registers a mock activity with the given name.
254224
func (wt *workflowTester[TResult]) OnActivityByName(name string, activity workflow.Activity, args ...any) *mock.Call {
255225
// Register activity so that we can correctly identify its arguments later
256226
wt.registry.RegisterActivity(activity, registry.WithName(name))
@@ -259,6 +229,7 @@ func (wt *workflowTester[TResult]) OnActivityByName(name string, activity workfl
259229
return wt.ma.On(name, args...)
260230
}
261231

232+
// OnActivity registers a mock activity.
262233
func (wt *workflowTester[TResult]) OnActivity(activity workflow.Activity, args ...any) *mock.Call {
263234
// Register activity so that we can correctly identify its arguments later
264235
wt.registry.RegisterActivity(activity)
@@ -268,6 +239,7 @@ func (wt *workflowTester[TResult]) OnActivity(activity workflow.Activity, args .
268239
return wt.ma.On(name, args...)
269240
}
270241

242+
// OnSubWorkflowByName registers a mock sub-workflow with the given name.
271243
func (wt *workflowTester[TResult]) OnSubWorkflowByName(name string, workflow workflow.Workflow, args ...any) *mock.Call {
272244
// Register workflow so that we can correctly identify its arguments later
273245
wt.registry.RegisterWorkflow(workflow, registry.WithName(name))
@@ -276,6 +248,7 @@ func (wt *workflowTester[TResult]) OnSubWorkflowByName(name string, workflow wor
276248
return wt.mw.On(name, args...)
277249
}
278250

251+
// OnSubWorkflow registers a mock sub-workflow.
279252
func (wt *workflowTester[TResult]) OnSubWorkflow(workflow workflow.Workflow, args ...any) *mock.Call {
280253
// Register workflow so that we can correctly identify its arguments later
281254
wt.registry.RegisterWorkflow(workflow)
@@ -285,6 +258,7 @@ func (wt *workflowTester[TResult]) OnSubWorkflow(workflow workflow.Workflow, arg
285258
return wt.mw.On(name, args...)
286259
}
287260

261+
// Execute executes the workflow under test with the given arguments.
288262
func (wt *workflowTester[TResult]) Execute(ctx context.Context, args ...any) {
289263
for _, propagator := range wt.propagators {
290264
if err := propagator.Inject(ctx, wt.wfm); err != nil {
@@ -508,11 +482,13 @@ func (wt *workflowTester[TResult]) sendEvent(wfi *core.WorkflowInstance, event *
508482
w.pendingEvents = append(w.pendingEvents, event)
509483
}
510484

511-
func (wt *workflowTester[TResult]) SignalWorkflow(name string, value interface{}) {
485+
// SignalWorkflow sends a signal to the workflow under test.
486+
func (wt *workflowTester[TResult]) SignalWorkflow(name string, value any) {
512487
wt.SignalWorkflowInstance(wt.wfi, name, value)
513488
}
514489

515-
func (wt *workflowTester[TResult]) SignalWorkflowInstance(wfi *core.WorkflowInstance, name string, value interface{}) error {
490+
// SignalWorkflowInstance sends a signal to the given workflow instance.
491+
func (wt *workflowTester[TResult]) SignalWorkflowInstance(wfi *core.WorkflowInstance, name string, value any) error {
516492
if wt.getWorkflow(wfi) == nil {
517493
return backend.ErrInstanceNotFound
518494
}
@@ -541,10 +517,12 @@ func (wt *workflowTester[TResult]) SignalWorkflowInstance(wfi *core.WorkflowInst
541517
return nil
542518
}
543519

520+
// WorkflowFinished returns true if the workflow under test has finished.
544521
func (wt *workflowTester[TResult]) WorkflowFinished() bool {
545522
return wt.workflowFinished
546523
}
547524

525+
// WorkflowResult returns the result of the workflow under test.
548526
func (wt *workflowTester[TResult]) WorkflowResult() (TResult, error) {
549527
var r TResult
550528
if wt.workflowResult != nil {
@@ -557,6 +535,7 @@ func (wt *workflowTester[TResult]) WorkflowResult() (TResult, error) {
557535
return r, err
558536
}
559537

538+
// AssertExpectations asserts that all expected activities were executed.
560539
func (wt *workflowTester[TResult]) AssertExpectations(t *testing.T) {
561540
wt.ma.AssertExpectations(t)
562541
}
@@ -829,13 +808,3 @@ func getNextWorkflowTask(wfi *core.WorkflowInstance, history []*history.Event, n
829808
NewEvents: newEvents,
830809
}
831810
}
832-
833-
type signaler[T any] struct {
834-
wt *workflowTester[T]
835-
}
836-
837-
func (s *signaler[T]) SignalWorkflow(ctx context.Context, instanceID string, name string, arg interface{}) error {
838-
return s.wt.SignalWorkflowInstance(core.NewWorkflowInstance(instanceID, ""), name, arg)
839-
}
840-
841-
var _ signals.Signaler = (*signaler[any])(nil)

0 commit comments

Comments
 (0)