Skip to content

Commit

Permalink
Fix missing variadic ellipsis, added test to validate
Browse files Browse the repository at this point in the history
  • Loading branch information
yuandrew committed Feb 7, 2025
1 parent 6e75f6d commit bf4694a
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 8 deletions.
6 changes: 4 additions & 2 deletions internal/workflow_testsuite.go
Original file line number Diff line number Diff line change
Expand Up @@ -1121,10 +1121,12 @@ func (e *TestWorkflowEnvironment) UpdateWorkflow(updateName, updateID string, uc
}

// UpdateWorkflowByID sends an update to a running workflow by its ID.
func (e *TestWorkflowEnvironment) UpdateWorkflowByID(workflowID, updateName, updateID string, uc UpdateCallbacks, args interface{}) error {
return e.impl.updateWorkflowByID(workflowID, updateName, updateID, uc, args)
func (e *TestWorkflowEnvironment) UpdateWorkflowByID(workflowID, updateName, updateID string, uc UpdateCallbacks, args ...interface{}) error {
return e.impl.updateWorkflowByID(workflowID, updateName, updateID, uc, args...)
}

// UpdateWorkflowNoRejection is a convenience function that handles a common test scenario of only validating
// that an update isn't rejected.
func (e *TestWorkflowEnvironment) UpdateWorkflowNoRejection(updateName string, updateID string, t mock.TestingT, args ...interface{}) {
uc := &TestUpdateCallback{
OnReject: func(err error) {
Expand Down
45 changes: 39 additions & 6 deletions internal/workflow_testsuite_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -399,10 +399,26 @@ func TestWorkflowUpdateOrderWithOneArg(t *testing.T) {
var suite WorkflowTestSuite
// Test UpdateWorkflowByID works with custom ID and additional arguments
env := suite.NewTestWorkflowEnvironment()
var callbacksRun int
env.RegisterDelayedCallback(func() {
env.UpdateWorkflowNoRejection("update", "id", t, "args")
env.UpdateWorkflowNoRejection("update", "no-rejection", t, "args")
callbacksRun++
}, 0)

env.RegisterDelayedCallback(func() {
uc := &TestUpdateCallback{
OnReject: func(err error) {
require.Fail(t, "update should not be rejected")
},
OnAccept: func() {},
OnComplete: func(interface{}, error) {},
}
err := env.UpdateWorkflowByID("my-workflow-id", "update", "by-id", uc, "args")
require.NoError(t, err)
callbacksRun++
}, 0)

env.SetStartWorkflowOptions(StartWorkflowOptions{ID: "my-workflow-id"})
env.ExecuteWorkflow(func(ctx Context) (int, error) {
var inflightUpdates int
var ranUpdates int
Expand All @@ -420,24 +436,41 @@ func TestWorkflowUpdateOrderWithOneArg(t *testing.T) {
if err != nil {
return 0, err
}
err = Await(ctx, func() bool { return inflightUpdates == 0 })
err = Await(ctx, func() bool { return inflightUpdates == 0 && callbacksRun == 2 })
return ranUpdates, err
})

require.NoError(t, env.GetWorkflowError())
var result int
require.NoError(t, env.GetWorkflowResult(&result))
require.Equal(t, 1, result)
require.Equal(t, 2, result)
}

func TestWorkflowUpdateOrderWithMultiArgs(t *testing.T) {
var suite WorkflowTestSuite
var callbacksRun int
// Test UpdateWorkflowByID works with custom ID and additional arguments
env := suite.NewTestWorkflowEnvironment()
env.RegisterDelayedCallback(func() {
env.UpdateWorkflowNoRejection("update", "id", t, "args1", "args2")
env.UpdateWorkflowNoRejection("update", "no-rejection", t, "args1", "args2")
callbacksRun++
}, 0)

env.RegisterDelayedCallback(func() {
uc := &TestUpdateCallback{
OnReject: func(err error) {
require.Fail(t, "update should not be rejected")
},
OnAccept: func() {},
OnComplete: func(interface{}, error) {},
}
err := env.UpdateWorkflowByID("my-workflow-id", "update", "by-id", uc, "args1", "args2")
require.NoError(t, err)
callbacksRun++
}, 0)

env.SetStartWorkflowOptions(StartWorkflowOptions{ID: "my-workflow-id"})

env.ExecuteWorkflow(func(ctx Context) (int, error) {
var inflightUpdates int
var ranUpdates int
Expand All @@ -456,14 +489,14 @@ func TestWorkflowUpdateOrderWithMultiArgs(t *testing.T) {
if err != nil {
return 0, err
}
err = Await(ctx, func() bool { return inflightUpdates == 0 })
err = Await(ctx, func() bool { return inflightUpdates == 0 && callbacksRun == 2 })
return ranUpdates, err
})

require.NoError(t, env.GetWorkflowError())
var result int
require.NoError(t, env.GetWorkflowResult(&result))
require.Equal(t, 1, result)
require.Equal(t, 2, result)
}

func TestWorkflowUpdateIdGeneration(t *testing.T) {
Expand Down

0 comments on commit bf4694a

Please sign in to comment.