Skip to content

Commit 9664409

Browse files
test(operations): added more test for WithIdempotencyKey (#1018)
Added test cases when idempotency key is used , it should be included in the report JIRA: https://smartcontract-it.atlassian.net/browse/CLD-2579
1 parent 3deec56 commit 9664409

1 file changed

Lines changed: 49 additions & 0 deletions

File tree

operations/execute_test.go

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package operations
22

33
import (
44
"context"
5+
"encoding/json"
56
"errors"
67
"fmt"
78
"math"
@@ -251,6 +252,54 @@ func Test_ExecuteOperation_WithPreviousRun(t *testing.T) {
251252
assert.Equal(t, 2, handlerWithErrorCalledTimes)
252253
}
253254

255+
func Test_ExecuteOperation_ReportJSON_IdempotencyKey(t *testing.T) {
256+
t.Parallel()
257+
258+
handler := func(b Bundle, deps any, input int) (int, error) {
259+
return input + 1, nil
260+
}
261+
op := NewOperation("plus1", semver.MustParse("1.0.0"), "test operation", handler)
262+
263+
t.Run("includes idempotencyKey when set", func(t *testing.T) {
264+
t.Parallel()
265+
266+
const idempotencyKey = "chain-42161"
267+
bundle := NewBundle(t.Context, logger.Test(t), NewMemoryReporter())
268+
269+
res, err := ExecuteOperation(bundle, op, nil, 1, WithIdempotencyKey[int, any](idempotencyKey))
270+
require.NoError(t, err)
271+
272+
stored, err := bundle.reporter.GetReport(res.ID)
273+
require.NoError(t, err)
274+
assert.Equal(t, idempotencyKey, stored.IdempotencyKey)
275+
276+
raw, err := json.Marshal(stored)
277+
require.NoError(t, err)
278+
279+
var payload map[string]json.RawMessage
280+
require.NoError(t, json.Unmarshal(raw, &payload))
281+
require.Contains(t, payload, "idempotencyKey")
282+
assert.JSONEq(t, `"`+idempotencyKey+`"`, string(payload["idempotencyKey"]))
283+
})
284+
285+
t.Run("omits idempotencyKey when unset", func(t *testing.T) {
286+
t.Parallel()
287+
288+
bundle := NewBundle(t.Context, logger.Test(t), NewMemoryReporter())
289+
290+
res, err := ExecuteOperation(bundle, op, nil, 1)
291+
require.NoError(t, err)
292+
293+
stored, err := bundle.reporter.GetReport(res.ID)
294+
require.NoError(t, err)
295+
assert.Empty(t, stored.IdempotencyKey)
296+
297+
raw, err := json.Marshal(stored)
298+
require.NoError(t, err)
299+
assert.NotContains(t, string(raw), "idempotencyKey")
300+
})
301+
}
302+
254303
func Test_ExecuteOperation_WithPreviousRun_UsesMostRecentSuccessfulReport(t *testing.T) {
255304
t.Parallel()
256305

0 commit comments

Comments
 (0)