From 4468e32e1a0a4381f8b6fa5f9d5a6fb28a209907 Mon Sep 17 00:00:00 2001 From: Scott Brady Date: Wed, 25 Dec 2024 09:06:01 +0000 Subject: [PATCH 1/2] feat(bindings-zeebe-command): Add support for passing variables to throw-error operation. (#3639) Signed-off-by: Scott Brady --- bindings/zeebe/command/throw_error.go | 18 +++++++++--- bindings/zeebe/command/throw_error_test.go | 33 ++++++++++++++++++++++ 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/bindings/zeebe/command/throw_error.go b/bindings/zeebe/command/throw_error.go index 3b0f43e8f7..dbaf3c041a 100644 --- a/bindings/zeebe/command/throw_error.go +++ b/bindings/zeebe/command/throw_error.go @@ -19,15 +19,17 @@ import ( "errors" "fmt" + "github.com/camunda/zeebe/clients/go/v8/pkg/commands" "github.com/dapr/components-contrib/bindings" ) var ErrMissingErrorCode = errors.New("errorCode is a required attribute") type throwErrorPayload struct { - JobKey *int64 `json:"jobKey"` - ErrorCode string `json:"errorCode"` - ErrorMessage string `json:"errorMessage"` + JobKey *int64 `json:"jobKey"` + ErrorCode string `json:"errorCode"` + ErrorMessage string `json:"errorMessage"` + Variables interface{} `json:"variables"` } func (z *ZeebeCommand) throwError(ctx context.Context, req *bindings.InvokeRequest) (*bindings.InvokeResponse, error) { @@ -53,7 +55,15 @@ func (z *ZeebeCommand) throwError(ctx context.Context, req *bindings.InvokeReque cmd = cmd.ErrorMessage(payload.ErrorMessage) } - _, err = cmd.Send(ctx) + var cmdDispatch commands.DispatchThrowErrorCommand = cmd + if payload.Variables != nil { + cmdDispatch, err = cmd.VariablesFromObject(payload.Variables) + if err != nil { + return nil, err + } + } + + _, err = cmdDispatch.Send(ctx) if err != nil { return nil, fmt.Errorf("cannot throw error for job key %d: %w", payload.JobKey, err) } diff --git a/bindings/zeebe/command/throw_error_test.go b/bindings/zeebe/command/throw_error_test.go index 38df83b24f..42fee7b215 100644 --- a/bindings/zeebe/command/throw_error_test.go +++ b/bindings/zeebe/command/throw_error_test.go @@ -48,6 +48,7 @@ type mockThrowErrorCommandStep2 struct { type mockDispatchThrowErrorCommand struct { commands.DispatchThrowErrorCommand errorMessage string + variables interface{} } func (mc *mockThrowErrorClient) NewThrowErrorCommand() commands.ThrowErrorCommandStep1 { @@ -78,6 +79,12 @@ func (cmd3 *mockDispatchThrowErrorCommand) ErrorMessage(errorMessage string) com return cmd3 } +func (cmd3 *mockDispatchThrowErrorCommand) VariablesFromObject(variables interface{}) (commands.DispatchThrowErrorCommand, error) { + cmd3.variables = variables + + return cmd3, nil +} + func (cmd3 *mockDispatchThrowErrorCommand) Send(context.Context) (*pb.ThrowErrorResponse, error) { return &pb.ThrowErrorResponse{}, nil } @@ -129,4 +136,30 @@ func TestThrowError(t *testing.T) { assert.Equal(t, payload.ErrorCode, mc.cmd1.cmd2.errorCode) assert.Equal(t, payload.ErrorMessage, mc.cmd1.cmd2.cmd3.errorMessage) }) + + t.Run("throw an error with variables", func(t *testing.T) { + payload := throwErrorPayload{ + JobKey: new(int64), + ErrorCode: "a", + ErrorMessage: "b", + Variables: map[string]interface{}{ + "key": "value", + }, + } + data, err := json.Marshal(payload) + require.NoError(t, err) + + req := &bindings.InvokeRequest{Data: data, Operation: ThrowErrorOperation} + + var mc mockThrowErrorClient + + cmd := ZeebeCommand{logger: testLogger, client: &mc} + _, err = cmd.Invoke(context.TODO(), req) + require.NoError(t, err) + + assert.Equal(t, *payload.JobKey, mc.cmd1.jobKey) + assert.Equal(t, payload.ErrorCode, mc.cmd1.cmd2.errorCode) + assert.Equal(t, payload.ErrorMessage, mc.cmd1.cmd2.cmd3.errorMessage) + assert.Equal(t, payload.Variables, mc.cmd1.cmd2.cmd3.variables) + }) } From 75423ec35f3a8a61579a45bfec86c3e38cb390fc Mon Sep 17 00:00:00 2001 From: Scott Brady Date: Sat, 11 Jan 2025 07:23:10 +0000 Subject: [PATCH 2/2] style(bindings-zeebe-command): Address lint errors for PR. (#3639) Signed-off-by: Scott Brady --- bindings/zeebe/command/throw_error.go | 3 ++- bindings/zeebe/command/throw_error_test.go | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/bindings/zeebe/command/throw_error.go b/bindings/zeebe/command/throw_error.go index dbaf3c041a..d594ad94b6 100644 --- a/bindings/zeebe/command/throw_error.go +++ b/bindings/zeebe/command/throw_error.go @@ -20,6 +20,7 @@ import ( "fmt" "github.com/camunda/zeebe/clients/go/v8/pkg/commands" + "github.com/dapr/components-contrib/bindings" ) @@ -55,7 +56,7 @@ func (z *ZeebeCommand) throwError(ctx context.Context, req *bindings.InvokeReque cmd = cmd.ErrorMessage(payload.ErrorMessage) } - var cmdDispatch commands.DispatchThrowErrorCommand = cmd + var cmdDispatch = cmd if payload.Variables != nil { cmdDispatch, err = cmd.VariablesFromObject(payload.Variables) if err != nil { diff --git a/bindings/zeebe/command/throw_error_test.go b/bindings/zeebe/command/throw_error_test.go index 42fee7b215..dacf2cf722 100644 --- a/bindings/zeebe/command/throw_error_test.go +++ b/bindings/zeebe/command/throw_error_test.go @@ -48,7 +48,7 @@ type mockThrowErrorCommandStep2 struct { type mockDispatchThrowErrorCommand struct { commands.DispatchThrowErrorCommand errorMessage string - variables interface{} + variables interface{} } func (mc *mockThrowErrorClient) NewThrowErrorCommand() commands.ThrowErrorCommandStep1 {