Skip to content

Commit a6cdcd7

Browse files
Add UpdateWorkflowByID to TestWorkflowEnvironment (#1264)
Add UpdateWorkflowByID to TestWorkflowEnvironment
1 parent 83199af commit a6cdcd7

File tree

3 files changed

+57
-2
lines changed

3 files changed

+57
-2
lines changed

internal/internal_workflow_testsuite.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2382,6 +2382,22 @@ func (env *testWorkflowEnvironmentImpl) updateWorkflow(name string, id string, u
23822382
env.updateHandler(name, id, data, nil, uc)
23832383
}
23842384

2385+
func (env *testWorkflowEnvironmentImpl) updateWorkflowByID(workflowID, name, id string, uc UpdateCallbacks, args ...interface{}) error {
2386+
if workflowHandle, ok := env.runningWorkflows[workflowID]; ok {
2387+
if workflowHandle.handled {
2388+
return serviceerror.NewNotFound(fmt.Sprintf("Workflow %v already completed", workflowID))
2389+
}
2390+
data, err := encodeArgs(env.GetDataConverter(), args)
2391+
if err != nil {
2392+
panic(err)
2393+
}
2394+
env.updateHandler(name, id, data, nil, uc)
2395+
return nil
2396+
}
2397+
2398+
return serviceerror.NewNotFound(fmt.Sprintf("Workflow %v not exists", workflowID))
2399+
}
2400+
23852401
func (env *testWorkflowEnvironmentImpl) queryWorkflowByID(workflowID, queryType string, args ...interface{}) (converter.EncodedValue, error) {
23862402
if workflowHandle, ok := env.runningWorkflows[workflowID]; ok {
23872403
data, err := encodeArgs(workflowHandle.env.GetDataConverter(), args)

internal/workflow_testsuite.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -853,8 +853,13 @@ func (e *TestWorkflowEnvironment) QueryWorkflow(queryType string, args ...interf
853853
}
854854

855855
// UpdateWorkflow sends an update to the currently running workflow.
856-
func (e *TestWorkflowEnvironment) UpdateWorkflow(name string, id string, uc UpdateCallbacks, args ...interface{}) {
857-
e.impl.updateWorkflow(name, id, uc, args...)
856+
func (e *TestWorkflowEnvironment) UpdateWorkflow(updateName, updateID string, uc UpdateCallbacks, args ...interface{}) {
857+
e.impl.updateWorkflow(updateName, updateID, uc, args...)
858+
}
859+
860+
// UpdateWorkflowByID sends an update to a running workflow by its ID.
861+
func (e *TestWorkflowEnvironment) UpdateWorkflowByID(workflowID, updateName, updateID string, uc UpdateCallbacks, args interface{}) error {
862+
return e.impl.updateWorkflowByID(workflowID, updateName, updateID, uc, args)
858863
}
859864

860865
// QueryWorkflowByID queries a child workflow by its ID and returns the result synchronously

internal/workflow_testsuite_test.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,40 @@ func TestWorkflowIDSignalWorkflowByID(t *testing.T) {
249249
require.Equal(t, "id is: my-workflow-id", str)
250250
}
251251

252+
func TestWorkflowIDUpdateWorkflowByID(t *testing.T) {
253+
var suite WorkflowTestSuite
254+
// Test UpdateWorkflowByID works with custom ID
255+
env := suite.NewTestWorkflowEnvironment()
256+
env.RegisterDelayedCallback(func() {
257+
err := env.UpdateWorkflowByID("my-workflow-id", "update", "id", &updateCallback{
258+
reject: func(err error) {
259+
require.Fail(t, "update should not be rejected")
260+
},
261+
accept: func() {},
262+
complete: func(interface{}, error) {},
263+
}, "input")
264+
require.NoError(t, err)
265+
}, time.Second)
266+
267+
env.SetStartWorkflowOptions(StartWorkflowOptions{ID: "my-workflow-id"})
268+
env.ExecuteWorkflow(func(ctx Context) (string, error) {
269+
var result string
270+
err := SetUpdateHandler(ctx, "update", func(ctx Context, input string) error {
271+
result = input
272+
return nil
273+
}, UpdateHandlerOptions{})
274+
if err != nil {
275+
return "", err
276+
}
277+
err = Await(ctx, func() bool { return result != "" })
278+
return result, err
279+
})
280+
require.NoError(t, env.GetWorkflowError())
281+
var str string
282+
require.NoError(t, env.GetWorkflowResult(&str))
283+
require.Equal(t, "input", str)
284+
}
285+
252286
func TestWorkflowStartTimeInsideTestWorkflow(t *testing.T) {
253287
var suite WorkflowTestSuite
254288
env := suite.NewTestWorkflowEnvironment()

0 commit comments

Comments
 (0)