@@ -2,6 +2,7 @@ package operations
22
33import (
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+
254303func Test_ExecuteOperation_WithPreviousRun_UsesMostRecentSuccessfulReport (t * testing.T ) {
255304 t .Parallel ()
256305
0 commit comments