components-contrib/bindings/zeebe/command/fail_job_test.go

121 lines
2.9 KiB
Go

// ------------------------------------------------------------
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
// ------------------------------------------------------------
package command
import (
"context"
"encoding/json"
"testing"
"github.com/camunda-cloud/zeebe/clients/go/pkg/commands"
"github.com/camunda-cloud/zeebe/clients/go/pkg/pb"
"github.com/camunda-cloud/zeebe/clients/go/pkg/zbc"
"github.com/stretchr/testify/assert"
"github.com/dapr/components-contrib/bindings"
"github.com/dapr/kit/logger"
)
type mockFailJobClient struct {
zbc.Client
cmd1 *mockFailJobCommandStep1
}
type mockFailJobCommandStep1 struct {
commands.FailJobCommandStep1
cmd2 *mockFailJobCommandStep2
jobKey int64
}
type mockFailJobCommandStep2 struct {
commands.FailJobCommandStep2
cmd3 *mockFailJobCommandStep3
retries int32
}
type mockFailJobCommandStep3 struct {
commands.FailJobCommandStep3
errorMessage string
}
func (mc *mockFailJobClient) NewFailJobCommand() commands.FailJobCommandStep1 {
mc.cmd1 = &mockFailJobCommandStep1{
cmd2: &mockFailJobCommandStep2{
cmd3: &mockFailJobCommandStep3{},
},
}
return mc.cmd1
}
func (cmd1 *mockFailJobCommandStep1) JobKey(jobKey int64) commands.FailJobCommandStep2 {
cmd1.jobKey = jobKey
return cmd1.cmd2
}
func (cmd2 *mockFailJobCommandStep2) Retries(retries int32) commands.FailJobCommandStep3 {
cmd2.retries = retries
return cmd2.cmd3
}
func (cmd3 *mockFailJobCommandStep3) ErrorMessage(errorMessage string) commands.FailJobCommandStep3 {
cmd3.errorMessage = errorMessage
return cmd3
}
func (cmd3 *mockFailJobCommandStep3) Send(context.Context) (*pb.FailJobResponse, error) {
return &pb.FailJobResponse{}, nil
}
func TestFailJob(t *testing.T) {
testLogger := logger.NewLogger("test")
t.Run("jobKey is mandatory", func(t *testing.T) {
cmd := ZeebeCommand{logger: testLogger}
req := &bindings.InvokeRequest{Operation: FailJobOperation}
_, err := cmd.Invoke(req)
assert.Error(t, err, ErrMissingJobKey)
})
t.Run("retries is mandatory", func(t *testing.T) {
payload := failJobPayload{
JobKey: new(int64),
}
data, err := json.Marshal(payload)
assert.NoError(t, err)
cmd := ZeebeCommand{logger: testLogger}
req := &bindings.InvokeRequest{Data: data, Operation: FailJobOperation}
_, err = cmd.Invoke(req)
assert.Error(t, err, ErrMissingRetries)
})
t.Run("fail a job", func(t *testing.T) {
payload := failJobPayload{
JobKey: new(int64),
Retries: new(int32),
ErrorMessage: "a",
}
data, err := json.Marshal(payload)
assert.NoError(t, err)
req := &bindings.InvokeRequest{Data: data, Operation: FailJobOperation}
var mc mockFailJobClient
cmd := ZeebeCommand{logger: testLogger, client: &mc}
_, err = cmd.Invoke(req)
assert.NoError(t, err)
assert.Equal(t, *payload.JobKey, mc.cmd1.jobKey)
assert.Equal(t, *payload.Retries, mc.cmd1.cmd2.retries)
assert.Equal(t, payload.ErrorMessage, mc.cmd1.cmd2.cmd3.errorMessage)
})
}