@timidan/rite 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3473 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "generatedAt": "2026-09-26T06:40:57.035Z",
4
+ "status": "PASS",
5
+ "runtime": {
6
+ "node": "v22.23.1",
7
+ "platform": "linux"
8
+ },
9
+ "scope": {
10
+ "entryPaths": [
11
+ "customerRefund",
12
+ "supportRefund"
13
+ ],
14
+ "domainFile": "src/refunds.js",
15
+ "testFile": "test/refunds.test.js",
16
+ "casesFile": "src/cases.js",
17
+ "checksFile": "src/checks.js",
18
+ "effectsFile": "src/instrument/effect-schema.js"
19
+ },
20
+ "hashes": {
21
+ "policy": "e2c7cfa32a4714db5c2f9ab2ce03512a36f7eb7c52f72a4f8e1e2a54ab5eae2a",
22
+ "cases": "9226f092eb3cbb90a02d6ce07e3ea00ad99a514558b0c1dc8b90a477d07efbfa",
23
+ "checks": "1a077980a13f2357805c82744c4e4df5b6438f16e481bf77fb4381f5cfc90ac2",
24
+ "effects": "28af75508166f8e5112d51d59c827584036eee3ed4d1cb86338e00cf598bb6da",
25
+ "test": "67b7e17632ffac4580b6248f2c0b2fb97d78dbb0623f0be5d9f08c855e77c123"
26
+ },
27
+ "phases": [
28
+ {
29
+ "id": "baseline",
30
+ "label": "Baseline (support ownership omission)",
31
+ "command": "node --test test/refunds.test.js",
32
+ "exitCode": 1,
33
+ "signal": null,
34
+ "sourceHash": "1c830a50d5a28db9ec48fc6fd58c64c945187a6a3ce463f5f55a2ce0cdca2e18",
35
+ "resultStatus": "FAIL",
36
+ "expectationMet": true,
37
+ "witnesses": [
38
+ "wrong-owner:support"
39
+ ],
40
+ "results": [
41
+ {
42
+ "id": "valid-owner:customer",
43
+ "entry": "customer",
44
+ "label": "Valid owner",
45
+ "status": "PASS",
46
+ "calls": [
47
+ {
48
+ "expected": {
49
+ "ok": true,
50
+ "code": "REFUNDED",
51
+ "sinkCalls": 1,
52
+ "event": {
53
+ "orderId": "order-paid",
54
+ "actorId": "actor-owner",
55
+ "amountCents": 4900,
56
+ "currency": "USD"
57
+ },
58
+ "orderAfterRefunded": true
59
+ },
60
+ "observed": {
61
+ "result": {
62
+ "ok": true,
63
+ "code": "REFUNDED",
64
+ "refundId": "refund-1"
65
+ },
66
+ "sinkCalls": 1,
67
+ "events": [
68
+ {
69
+ "refundId": "refund-1",
70
+ "orderId": "order-paid",
71
+ "actorId": "actor-owner",
72
+ "amountCents": 4900,
73
+ "currency": "USD"
74
+ }
75
+ ],
76
+ "orderAfter": {
77
+ "id": "order-paid",
78
+ "ownerId": "actor-owner",
79
+ "paymentStatus": "paid",
80
+ "amountCents": 4900,
81
+ "currency": "USD",
82
+ "refunded": true
83
+ },
84
+ "snapshotBefore": {
85
+ "orders": [
86
+ {
87
+ "id": "order-paid",
88
+ "ownerId": "actor-owner",
89
+ "paymentStatus": "paid",
90
+ "amountCents": 4900,
91
+ "currency": "USD",
92
+ "refunded": false
93
+ }
94
+ ],
95
+ "events": []
96
+ },
97
+ "snapshotAfter": {
98
+ "orders": [
99
+ {
100
+ "id": "order-paid",
101
+ "ownerId": "actor-owner",
102
+ "paymentStatus": "paid",
103
+ "amountCents": 4900,
104
+ "currency": "USD",
105
+ "refunded": true
106
+ }
107
+ ],
108
+ "events": [
109
+ {
110
+ "refundId": "refund-1",
111
+ "orderId": "order-paid",
112
+ "actorId": "actor-owner",
113
+ "amountCents": 4900,
114
+ "currency": "USD"
115
+ }
116
+ ]
117
+ }
118
+ }
119
+ }
120
+ ],
121
+ "failures": [],
122
+ "error": null
123
+ },
124
+ {
125
+ "id": "valid-owner:support",
126
+ "entry": "support",
127
+ "label": "Valid owner",
128
+ "status": "PASS",
129
+ "calls": [
130
+ {
131
+ "expected": {
132
+ "ok": true,
133
+ "code": "REFUNDED",
134
+ "sinkCalls": 1,
135
+ "event": {
136
+ "orderId": "order-paid",
137
+ "actorId": "actor-owner",
138
+ "amountCents": 4900,
139
+ "currency": "USD"
140
+ },
141
+ "orderAfterRefunded": true
142
+ },
143
+ "observed": {
144
+ "result": {
145
+ "ok": true,
146
+ "code": "REFUNDED",
147
+ "refundId": "refund-1"
148
+ },
149
+ "sinkCalls": 1,
150
+ "events": [
151
+ {
152
+ "refundId": "refund-1",
153
+ "orderId": "order-paid",
154
+ "actorId": "actor-owner",
155
+ "amountCents": 4900,
156
+ "currency": "USD"
157
+ }
158
+ ],
159
+ "orderAfter": {
160
+ "id": "order-paid",
161
+ "ownerId": "actor-owner",
162
+ "paymentStatus": "paid",
163
+ "amountCents": 4900,
164
+ "currency": "USD",
165
+ "refunded": true
166
+ },
167
+ "snapshotBefore": {
168
+ "orders": [
169
+ {
170
+ "id": "order-paid",
171
+ "ownerId": "actor-owner",
172
+ "paymentStatus": "paid",
173
+ "amountCents": 4900,
174
+ "currency": "USD",
175
+ "refunded": false
176
+ }
177
+ ],
178
+ "events": []
179
+ },
180
+ "snapshotAfter": {
181
+ "orders": [
182
+ {
183
+ "id": "order-paid",
184
+ "ownerId": "actor-owner",
185
+ "paymentStatus": "paid",
186
+ "amountCents": 4900,
187
+ "currency": "USD",
188
+ "refunded": true
189
+ }
190
+ ],
191
+ "events": [
192
+ {
193
+ "refundId": "refund-1",
194
+ "orderId": "order-paid",
195
+ "actorId": "actor-owner",
196
+ "amountCents": 4900,
197
+ "currency": "USD"
198
+ }
199
+ ]
200
+ }
201
+ }
202
+ }
203
+ ],
204
+ "failures": [],
205
+ "error": null
206
+ },
207
+ {
208
+ "id": "wrong-owner:customer",
209
+ "entry": "customer",
210
+ "label": "Wrong owner",
211
+ "status": "PASS",
212
+ "calls": [
213
+ {
214
+ "expected": {
215
+ "ok": false,
216
+ "code": "NOT_OWNER",
217
+ "sinkCalls": 0,
218
+ "orderAfterRefunded": false
219
+ },
220
+ "observed": {
221
+ "result": {
222
+ "ok": false,
223
+ "code": "NOT_OWNER"
224
+ },
225
+ "sinkCalls": 0,
226
+ "events": [],
227
+ "orderAfter": {
228
+ "id": "order-paid",
229
+ "ownerId": "actor-owner",
230
+ "paymentStatus": "paid",
231
+ "amountCents": 4900,
232
+ "currency": "USD",
233
+ "refunded": false
234
+ },
235
+ "snapshotBefore": {
236
+ "orders": [
237
+ {
238
+ "id": "order-paid",
239
+ "ownerId": "actor-owner",
240
+ "paymentStatus": "paid",
241
+ "amountCents": 4900,
242
+ "currency": "USD",
243
+ "refunded": false
244
+ }
245
+ ],
246
+ "events": []
247
+ },
248
+ "snapshotAfter": {
249
+ "orders": [
250
+ {
251
+ "id": "order-paid",
252
+ "ownerId": "actor-owner",
253
+ "paymentStatus": "paid",
254
+ "amountCents": 4900,
255
+ "currency": "USD",
256
+ "refunded": false
257
+ }
258
+ ],
259
+ "events": []
260
+ }
261
+ }
262
+ }
263
+ ],
264
+ "failures": [],
265
+ "error": null
266
+ },
267
+ {
268
+ "id": "wrong-owner:support",
269
+ "entry": "support",
270
+ "label": "Wrong owner",
271
+ "status": "FAIL",
272
+ "calls": [
273
+ {
274
+ "expected": {
275
+ "ok": false,
276
+ "code": "NOT_OWNER",
277
+ "sinkCalls": 0,
278
+ "orderAfterRefunded": false
279
+ },
280
+ "observed": {
281
+ "result": {
282
+ "ok": true,
283
+ "code": "REFUNDED",
284
+ "refundId": "refund-1"
285
+ },
286
+ "sinkCalls": 1,
287
+ "events": [
288
+ {
289
+ "refundId": "refund-1",
290
+ "orderId": "order-paid",
291
+ "actorId": "actor-other",
292
+ "amountCents": 4900,
293
+ "currency": "USD"
294
+ }
295
+ ],
296
+ "orderAfter": {
297
+ "id": "order-paid",
298
+ "ownerId": "actor-owner",
299
+ "paymentStatus": "paid",
300
+ "amountCents": 4900,
301
+ "currency": "USD",
302
+ "refunded": true
303
+ },
304
+ "snapshotBefore": {
305
+ "orders": [
306
+ {
307
+ "id": "order-paid",
308
+ "ownerId": "actor-owner",
309
+ "paymentStatus": "paid",
310
+ "amountCents": 4900,
311
+ "currency": "USD",
312
+ "refunded": false
313
+ }
314
+ ],
315
+ "events": []
316
+ },
317
+ "snapshotAfter": {
318
+ "orders": [
319
+ {
320
+ "id": "order-paid",
321
+ "ownerId": "actor-owner",
322
+ "paymentStatus": "paid",
323
+ "amountCents": 4900,
324
+ "currency": "USD",
325
+ "refunded": true
326
+ }
327
+ ],
328
+ "events": [
329
+ {
330
+ "refundId": "refund-1",
331
+ "orderId": "order-paid",
332
+ "actorId": "actor-other",
333
+ "amountCents": 4900,
334
+ "currency": "USD"
335
+ }
336
+ ]
337
+ }
338
+ }
339
+ }
340
+ ],
341
+ "failures": [
342
+ "wrong-owner:support call 1: expected ok=false; observed ok=true",
343
+ "wrong-owner:support call 1: expected code=NOT_OWNER; observed code=REFUNDED",
344
+ "wrong-owner:support call 1: expected 0 new sink event(s); observed 1 for order order-paid by actor-other",
345
+ "wrong-owner:support call 1: expected order.refunded=false; observed true",
346
+ "wrong-owner:support call 1: state mutated on denial — Order order-paid.refunded mutated: false → true"
347
+ ],
348
+ "error": null
349
+ },
350
+ {
351
+ "id": "unpaid-order:customer",
352
+ "entry": "customer",
353
+ "label": "Unpaid order",
354
+ "status": "PASS",
355
+ "calls": [
356
+ {
357
+ "expected": {
358
+ "ok": false,
359
+ "code": "NOT_PAID",
360
+ "sinkCalls": 0,
361
+ "orderAfterRefunded": false
362
+ },
363
+ "observed": {
364
+ "result": {
365
+ "ok": false,
366
+ "code": "NOT_PAID"
367
+ },
368
+ "sinkCalls": 0,
369
+ "events": [],
370
+ "orderAfter": {
371
+ "id": "order-unpaid",
372
+ "ownerId": "actor-owner",
373
+ "paymentStatus": "unpaid",
374
+ "amountCents": 2200,
375
+ "currency": "USD",
376
+ "refunded": false
377
+ },
378
+ "snapshotBefore": {
379
+ "orders": [
380
+ {
381
+ "id": "order-unpaid",
382
+ "ownerId": "actor-owner",
383
+ "paymentStatus": "unpaid",
384
+ "amountCents": 2200,
385
+ "currency": "USD",
386
+ "refunded": false
387
+ }
388
+ ],
389
+ "events": []
390
+ },
391
+ "snapshotAfter": {
392
+ "orders": [
393
+ {
394
+ "id": "order-unpaid",
395
+ "ownerId": "actor-owner",
396
+ "paymentStatus": "unpaid",
397
+ "amountCents": 2200,
398
+ "currency": "USD",
399
+ "refunded": false
400
+ }
401
+ ],
402
+ "events": []
403
+ }
404
+ }
405
+ }
406
+ ],
407
+ "failures": [],
408
+ "error": null
409
+ },
410
+ {
411
+ "id": "unpaid-order:support",
412
+ "entry": "support",
413
+ "label": "Unpaid order",
414
+ "status": "PASS",
415
+ "calls": [
416
+ {
417
+ "expected": {
418
+ "ok": false,
419
+ "code": "NOT_PAID",
420
+ "sinkCalls": 0,
421
+ "orderAfterRefunded": false
422
+ },
423
+ "observed": {
424
+ "result": {
425
+ "ok": false,
426
+ "code": "NOT_PAID"
427
+ },
428
+ "sinkCalls": 0,
429
+ "events": [],
430
+ "orderAfter": {
431
+ "id": "order-unpaid",
432
+ "ownerId": "actor-owner",
433
+ "paymentStatus": "unpaid",
434
+ "amountCents": 2200,
435
+ "currency": "USD",
436
+ "refunded": false
437
+ },
438
+ "snapshotBefore": {
439
+ "orders": [
440
+ {
441
+ "id": "order-unpaid",
442
+ "ownerId": "actor-owner",
443
+ "paymentStatus": "unpaid",
444
+ "amountCents": 2200,
445
+ "currency": "USD",
446
+ "refunded": false
447
+ }
448
+ ],
449
+ "events": []
450
+ },
451
+ "snapshotAfter": {
452
+ "orders": [
453
+ {
454
+ "id": "order-unpaid",
455
+ "ownerId": "actor-owner",
456
+ "paymentStatus": "unpaid",
457
+ "amountCents": 2200,
458
+ "currency": "USD",
459
+ "refunded": false
460
+ }
461
+ ],
462
+ "events": []
463
+ }
464
+ }
465
+ }
466
+ ],
467
+ "failures": [],
468
+ "error": null
469
+ },
470
+ {
471
+ "id": "already-refunded:customer",
472
+ "entry": "customer",
473
+ "label": "Already refunded",
474
+ "status": "PASS",
475
+ "calls": [
476
+ {
477
+ "expected": {
478
+ "ok": false,
479
+ "code": "ALREADY_REFUNDED",
480
+ "sinkCalls": 0,
481
+ "orderAfterRefunded": true
482
+ },
483
+ "observed": {
484
+ "result": {
485
+ "ok": false,
486
+ "code": "ALREADY_REFUNDED"
487
+ },
488
+ "sinkCalls": 0,
489
+ "events": [],
490
+ "orderAfter": {
491
+ "id": "order-refunded",
492
+ "ownerId": "actor-owner",
493
+ "paymentStatus": "paid",
494
+ "amountCents": 3300,
495
+ "currency": "USD",
496
+ "refunded": true
497
+ },
498
+ "snapshotBefore": {
499
+ "orders": [
500
+ {
501
+ "id": "order-refunded",
502
+ "ownerId": "actor-owner",
503
+ "paymentStatus": "paid",
504
+ "amountCents": 3300,
505
+ "currency": "USD",
506
+ "refunded": true
507
+ }
508
+ ],
509
+ "events": []
510
+ },
511
+ "snapshotAfter": {
512
+ "orders": [
513
+ {
514
+ "id": "order-refunded",
515
+ "ownerId": "actor-owner",
516
+ "paymentStatus": "paid",
517
+ "amountCents": 3300,
518
+ "currency": "USD",
519
+ "refunded": true
520
+ }
521
+ ],
522
+ "events": []
523
+ }
524
+ }
525
+ }
526
+ ],
527
+ "failures": [],
528
+ "error": null
529
+ },
530
+ {
531
+ "id": "already-refunded:support",
532
+ "entry": "support",
533
+ "label": "Already refunded",
534
+ "status": "PASS",
535
+ "calls": [
536
+ {
537
+ "expected": {
538
+ "ok": false,
539
+ "code": "ALREADY_REFUNDED",
540
+ "sinkCalls": 0,
541
+ "orderAfterRefunded": true
542
+ },
543
+ "observed": {
544
+ "result": {
545
+ "ok": false,
546
+ "code": "ALREADY_REFUNDED"
547
+ },
548
+ "sinkCalls": 0,
549
+ "events": [],
550
+ "orderAfter": {
551
+ "id": "order-refunded",
552
+ "ownerId": "actor-owner",
553
+ "paymentStatus": "paid",
554
+ "amountCents": 3300,
555
+ "currency": "USD",
556
+ "refunded": true
557
+ },
558
+ "snapshotBefore": {
559
+ "orders": [
560
+ {
561
+ "id": "order-refunded",
562
+ "ownerId": "actor-owner",
563
+ "paymentStatus": "paid",
564
+ "amountCents": 3300,
565
+ "currency": "USD",
566
+ "refunded": true
567
+ }
568
+ ],
569
+ "events": []
570
+ },
571
+ "snapshotAfter": {
572
+ "orders": [
573
+ {
574
+ "id": "order-refunded",
575
+ "ownerId": "actor-owner",
576
+ "paymentStatus": "paid",
577
+ "amountCents": 3300,
578
+ "currency": "USD",
579
+ "refunded": true
580
+ }
581
+ ],
582
+ "events": []
583
+ }
584
+ }
585
+ }
586
+ ],
587
+ "failures": [],
588
+ "error": null
589
+ },
590
+ {
591
+ "id": "repeat-request:customer",
592
+ "entry": "customer",
593
+ "label": "Repeat request",
594
+ "status": "PASS",
595
+ "calls": [
596
+ {
597
+ "expected": {
598
+ "ok": true,
599
+ "code": "REFUNDED",
600
+ "sinkCalls": 1,
601
+ "event": {
602
+ "orderId": "order-paid",
603
+ "actorId": "actor-owner",
604
+ "amountCents": 4900,
605
+ "currency": "USD"
606
+ },
607
+ "orderAfterRefunded": true
608
+ },
609
+ "observed": {
610
+ "result": {
611
+ "ok": true,
612
+ "code": "REFUNDED",
613
+ "refundId": "refund-1"
614
+ },
615
+ "sinkCalls": 1,
616
+ "events": [
617
+ {
618
+ "refundId": "refund-1",
619
+ "orderId": "order-paid",
620
+ "actorId": "actor-owner",
621
+ "amountCents": 4900,
622
+ "currency": "USD"
623
+ }
624
+ ],
625
+ "orderAfter": {
626
+ "id": "order-paid",
627
+ "ownerId": "actor-owner",
628
+ "paymentStatus": "paid",
629
+ "amountCents": 4900,
630
+ "currency": "USD",
631
+ "refunded": true
632
+ },
633
+ "snapshotBefore": {
634
+ "orders": [
635
+ {
636
+ "id": "order-paid",
637
+ "ownerId": "actor-owner",
638
+ "paymentStatus": "paid",
639
+ "amountCents": 4900,
640
+ "currency": "USD",
641
+ "refunded": false
642
+ }
643
+ ],
644
+ "events": []
645
+ },
646
+ "snapshotAfter": {
647
+ "orders": [
648
+ {
649
+ "id": "order-paid",
650
+ "ownerId": "actor-owner",
651
+ "paymentStatus": "paid",
652
+ "amountCents": 4900,
653
+ "currency": "USD",
654
+ "refunded": true
655
+ }
656
+ ],
657
+ "events": [
658
+ {
659
+ "refundId": "refund-1",
660
+ "orderId": "order-paid",
661
+ "actorId": "actor-owner",
662
+ "amountCents": 4900,
663
+ "currency": "USD"
664
+ }
665
+ ]
666
+ }
667
+ }
668
+ },
669
+ {
670
+ "expected": {
671
+ "ok": false,
672
+ "code": "ALREADY_REFUNDED",
673
+ "sinkCalls": 0,
674
+ "orderAfterRefunded": true
675
+ },
676
+ "observed": {
677
+ "result": {
678
+ "ok": false,
679
+ "code": "ALREADY_REFUNDED"
680
+ },
681
+ "sinkCalls": 0,
682
+ "events": [],
683
+ "orderAfter": {
684
+ "id": "order-paid",
685
+ "ownerId": "actor-owner",
686
+ "paymentStatus": "paid",
687
+ "amountCents": 4900,
688
+ "currency": "USD",
689
+ "refunded": true
690
+ },
691
+ "snapshotBefore": {
692
+ "orders": [
693
+ {
694
+ "id": "order-paid",
695
+ "ownerId": "actor-owner",
696
+ "paymentStatus": "paid",
697
+ "amountCents": 4900,
698
+ "currency": "USD",
699
+ "refunded": true
700
+ }
701
+ ],
702
+ "events": [
703
+ {
704
+ "refundId": "refund-1",
705
+ "orderId": "order-paid",
706
+ "actorId": "actor-owner",
707
+ "amountCents": 4900,
708
+ "currency": "USD"
709
+ }
710
+ ]
711
+ },
712
+ "snapshotAfter": {
713
+ "orders": [
714
+ {
715
+ "id": "order-paid",
716
+ "ownerId": "actor-owner",
717
+ "paymentStatus": "paid",
718
+ "amountCents": 4900,
719
+ "currency": "USD",
720
+ "refunded": true
721
+ }
722
+ ],
723
+ "events": [
724
+ {
725
+ "refundId": "refund-1",
726
+ "orderId": "order-paid",
727
+ "actorId": "actor-owner",
728
+ "amountCents": 4900,
729
+ "currency": "USD"
730
+ }
731
+ ]
732
+ }
733
+ }
734
+ }
735
+ ],
736
+ "failures": [],
737
+ "error": null
738
+ },
739
+ {
740
+ "id": "repeat-request:support",
741
+ "entry": "support",
742
+ "label": "Repeat request",
743
+ "status": "PASS",
744
+ "calls": [
745
+ {
746
+ "expected": {
747
+ "ok": true,
748
+ "code": "REFUNDED",
749
+ "sinkCalls": 1,
750
+ "event": {
751
+ "orderId": "order-paid",
752
+ "actorId": "actor-owner",
753
+ "amountCents": 4900,
754
+ "currency": "USD"
755
+ },
756
+ "orderAfterRefunded": true
757
+ },
758
+ "observed": {
759
+ "result": {
760
+ "ok": true,
761
+ "code": "REFUNDED",
762
+ "refundId": "refund-1"
763
+ },
764
+ "sinkCalls": 1,
765
+ "events": [
766
+ {
767
+ "refundId": "refund-1",
768
+ "orderId": "order-paid",
769
+ "actorId": "actor-owner",
770
+ "amountCents": 4900,
771
+ "currency": "USD"
772
+ }
773
+ ],
774
+ "orderAfter": {
775
+ "id": "order-paid",
776
+ "ownerId": "actor-owner",
777
+ "paymentStatus": "paid",
778
+ "amountCents": 4900,
779
+ "currency": "USD",
780
+ "refunded": true
781
+ },
782
+ "snapshotBefore": {
783
+ "orders": [
784
+ {
785
+ "id": "order-paid",
786
+ "ownerId": "actor-owner",
787
+ "paymentStatus": "paid",
788
+ "amountCents": 4900,
789
+ "currency": "USD",
790
+ "refunded": false
791
+ }
792
+ ],
793
+ "events": []
794
+ },
795
+ "snapshotAfter": {
796
+ "orders": [
797
+ {
798
+ "id": "order-paid",
799
+ "ownerId": "actor-owner",
800
+ "paymentStatus": "paid",
801
+ "amountCents": 4900,
802
+ "currency": "USD",
803
+ "refunded": true
804
+ }
805
+ ],
806
+ "events": [
807
+ {
808
+ "refundId": "refund-1",
809
+ "orderId": "order-paid",
810
+ "actorId": "actor-owner",
811
+ "amountCents": 4900,
812
+ "currency": "USD"
813
+ }
814
+ ]
815
+ }
816
+ }
817
+ },
818
+ {
819
+ "expected": {
820
+ "ok": false,
821
+ "code": "ALREADY_REFUNDED",
822
+ "sinkCalls": 0,
823
+ "orderAfterRefunded": true
824
+ },
825
+ "observed": {
826
+ "result": {
827
+ "ok": false,
828
+ "code": "ALREADY_REFUNDED"
829
+ },
830
+ "sinkCalls": 0,
831
+ "events": [],
832
+ "orderAfter": {
833
+ "id": "order-paid",
834
+ "ownerId": "actor-owner",
835
+ "paymentStatus": "paid",
836
+ "amountCents": 4900,
837
+ "currency": "USD",
838
+ "refunded": true
839
+ },
840
+ "snapshotBefore": {
841
+ "orders": [
842
+ {
843
+ "id": "order-paid",
844
+ "ownerId": "actor-owner",
845
+ "paymentStatus": "paid",
846
+ "amountCents": 4900,
847
+ "currency": "USD",
848
+ "refunded": true
849
+ }
850
+ ],
851
+ "events": [
852
+ {
853
+ "refundId": "refund-1",
854
+ "orderId": "order-paid",
855
+ "actorId": "actor-owner",
856
+ "amountCents": 4900,
857
+ "currency": "USD"
858
+ }
859
+ ]
860
+ },
861
+ "snapshotAfter": {
862
+ "orders": [
863
+ {
864
+ "id": "order-paid",
865
+ "ownerId": "actor-owner",
866
+ "paymentStatus": "paid",
867
+ "amountCents": 4900,
868
+ "currency": "USD",
869
+ "refunded": true
870
+ }
871
+ ],
872
+ "events": [
873
+ {
874
+ "refundId": "refund-1",
875
+ "orderId": "order-paid",
876
+ "actorId": "actor-owner",
877
+ "amountCents": 4900,
878
+ "currency": "USD"
879
+ }
880
+ ]
881
+ }
882
+ }
883
+ }
884
+ ],
885
+ "failures": [],
886
+ "error": null
887
+ }
888
+ ]
889
+ },
890
+ {
891
+ "id": "fixed",
892
+ "label": "Fixed (shared authorization enforced)",
893
+ "command": "node --test test/refunds.test.js",
894
+ "exitCode": 0,
895
+ "signal": null,
896
+ "sourceHash": "7c8a25d3e8914de539be1189183386324b7bb1e25106808273076e2261136195",
897
+ "resultStatus": "PASS",
898
+ "expectationMet": true,
899
+ "witnesses": [
900
+ "valid-owner:customer",
901
+ "valid-owner:support",
902
+ "wrong-owner:customer",
903
+ "wrong-owner:support",
904
+ "unpaid-order:customer",
905
+ "unpaid-order:support",
906
+ "already-refunded:customer",
907
+ "already-refunded:support",
908
+ "repeat-request:customer",
909
+ "repeat-request:support"
910
+ ],
911
+ "results": [
912
+ {
913
+ "id": "valid-owner:customer",
914
+ "entry": "customer",
915
+ "label": "Valid owner",
916
+ "status": "PASS",
917
+ "calls": [
918
+ {
919
+ "expected": {
920
+ "ok": true,
921
+ "code": "REFUNDED",
922
+ "sinkCalls": 1,
923
+ "event": {
924
+ "orderId": "order-paid",
925
+ "actorId": "actor-owner",
926
+ "amountCents": 4900,
927
+ "currency": "USD"
928
+ },
929
+ "orderAfterRefunded": true
930
+ },
931
+ "observed": {
932
+ "result": {
933
+ "ok": true,
934
+ "code": "REFUNDED",
935
+ "refundId": "refund-1"
936
+ },
937
+ "sinkCalls": 1,
938
+ "events": [
939
+ {
940
+ "refundId": "refund-1",
941
+ "orderId": "order-paid",
942
+ "actorId": "actor-owner",
943
+ "amountCents": 4900,
944
+ "currency": "USD"
945
+ }
946
+ ],
947
+ "orderAfter": {
948
+ "id": "order-paid",
949
+ "ownerId": "actor-owner",
950
+ "paymentStatus": "paid",
951
+ "amountCents": 4900,
952
+ "currency": "USD",
953
+ "refunded": true
954
+ },
955
+ "snapshotBefore": {
956
+ "orders": [
957
+ {
958
+ "id": "order-paid",
959
+ "ownerId": "actor-owner",
960
+ "paymentStatus": "paid",
961
+ "amountCents": 4900,
962
+ "currency": "USD",
963
+ "refunded": false
964
+ }
965
+ ],
966
+ "events": []
967
+ },
968
+ "snapshotAfter": {
969
+ "orders": [
970
+ {
971
+ "id": "order-paid",
972
+ "ownerId": "actor-owner",
973
+ "paymentStatus": "paid",
974
+ "amountCents": 4900,
975
+ "currency": "USD",
976
+ "refunded": true
977
+ }
978
+ ],
979
+ "events": [
980
+ {
981
+ "refundId": "refund-1",
982
+ "orderId": "order-paid",
983
+ "actorId": "actor-owner",
984
+ "amountCents": 4900,
985
+ "currency": "USD"
986
+ }
987
+ ]
988
+ }
989
+ }
990
+ }
991
+ ],
992
+ "failures": [],
993
+ "error": null
994
+ },
995
+ {
996
+ "id": "valid-owner:support",
997
+ "entry": "support",
998
+ "label": "Valid owner",
999
+ "status": "PASS",
1000
+ "calls": [
1001
+ {
1002
+ "expected": {
1003
+ "ok": true,
1004
+ "code": "REFUNDED",
1005
+ "sinkCalls": 1,
1006
+ "event": {
1007
+ "orderId": "order-paid",
1008
+ "actorId": "actor-owner",
1009
+ "amountCents": 4900,
1010
+ "currency": "USD"
1011
+ },
1012
+ "orderAfterRefunded": true
1013
+ },
1014
+ "observed": {
1015
+ "result": {
1016
+ "ok": true,
1017
+ "code": "REFUNDED",
1018
+ "refundId": "refund-1"
1019
+ },
1020
+ "sinkCalls": 1,
1021
+ "events": [
1022
+ {
1023
+ "refundId": "refund-1",
1024
+ "orderId": "order-paid",
1025
+ "actorId": "actor-owner",
1026
+ "amountCents": 4900,
1027
+ "currency": "USD"
1028
+ }
1029
+ ],
1030
+ "orderAfter": {
1031
+ "id": "order-paid",
1032
+ "ownerId": "actor-owner",
1033
+ "paymentStatus": "paid",
1034
+ "amountCents": 4900,
1035
+ "currency": "USD",
1036
+ "refunded": true
1037
+ },
1038
+ "snapshotBefore": {
1039
+ "orders": [
1040
+ {
1041
+ "id": "order-paid",
1042
+ "ownerId": "actor-owner",
1043
+ "paymentStatus": "paid",
1044
+ "amountCents": 4900,
1045
+ "currency": "USD",
1046
+ "refunded": false
1047
+ }
1048
+ ],
1049
+ "events": []
1050
+ },
1051
+ "snapshotAfter": {
1052
+ "orders": [
1053
+ {
1054
+ "id": "order-paid",
1055
+ "ownerId": "actor-owner",
1056
+ "paymentStatus": "paid",
1057
+ "amountCents": 4900,
1058
+ "currency": "USD",
1059
+ "refunded": true
1060
+ }
1061
+ ],
1062
+ "events": [
1063
+ {
1064
+ "refundId": "refund-1",
1065
+ "orderId": "order-paid",
1066
+ "actorId": "actor-owner",
1067
+ "amountCents": 4900,
1068
+ "currency": "USD"
1069
+ }
1070
+ ]
1071
+ }
1072
+ }
1073
+ }
1074
+ ],
1075
+ "failures": [],
1076
+ "error": null
1077
+ },
1078
+ {
1079
+ "id": "wrong-owner:customer",
1080
+ "entry": "customer",
1081
+ "label": "Wrong owner",
1082
+ "status": "PASS",
1083
+ "calls": [
1084
+ {
1085
+ "expected": {
1086
+ "ok": false,
1087
+ "code": "NOT_OWNER",
1088
+ "sinkCalls": 0,
1089
+ "orderAfterRefunded": false
1090
+ },
1091
+ "observed": {
1092
+ "result": {
1093
+ "ok": false,
1094
+ "code": "NOT_OWNER"
1095
+ },
1096
+ "sinkCalls": 0,
1097
+ "events": [],
1098
+ "orderAfter": {
1099
+ "id": "order-paid",
1100
+ "ownerId": "actor-owner",
1101
+ "paymentStatus": "paid",
1102
+ "amountCents": 4900,
1103
+ "currency": "USD",
1104
+ "refunded": false
1105
+ },
1106
+ "snapshotBefore": {
1107
+ "orders": [
1108
+ {
1109
+ "id": "order-paid",
1110
+ "ownerId": "actor-owner",
1111
+ "paymentStatus": "paid",
1112
+ "amountCents": 4900,
1113
+ "currency": "USD",
1114
+ "refunded": false
1115
+ }
1116
+ ],
1117
+ "events": []
1118
+ },
1119
+ "snapshotAfter": {
1120
+ "orders": [
1121
+ {
1122
+ "id": "order-paid",
1123
+ "ownerId": "actor-owner",
1124
+ "paymentStatus": "paid",
1125
+ "amountCents": 4900,
1126
+ "currency": "USD",
1127
+ "refunded": false
1128
+ }
1129
+ ],
1130
+ "events": []
1131
+ }
1132
+ }
1133
+ }
1134
+ ],
1135
+ "failures": [],
1136
+ "error": null
1137
+ },
1138
+ {
1139
+ "id": "wrong-owner:support",
1140
+ "entry": "support",
1141
+ "label": "Wrong owner",
1142
+ "status": "PASS",
1143
+ "calls": [
1144
+ {
1145
+ "expected": {
1146
+ "ok": false,
1147
+ "code": "NOT_OWNER",
1148
+ "sinkCalls": 0,
1149
+ "orderAfterRefunded": false
1150
+ },
1151
+ "observed": {
1152
+ "result": {
1153
+ "ok": false,
1154
+ "code": "NOT_OWNER"
1155
+ },
1156
+ "sinkCalls": 0,
1157
+ "events": [],
1158
+ "orderAfter": {
1159
+ "id": "order-paid",
1160
+ "ownerId": "actor-owner",
1161
+ "paymentStatus": "paid",
1162
+ "amountCents": 4900,
1163
+ "currency": "USD",
1164
+ "refunded": false
1165
+ },
1166
+ "snapshotBefore": {
1167
+ "orders": [
1168
+ {
1169
+ "id": "order-paid",
1170
+ "ownerId": "actor-owner",
1171
+ "paymentStatus": "paid",
1172
+ "amountCents": 4900,
1173
+ "currency": "USD",
1174
+ "refunded": false
1175
+ }
1176
+ ],
1177
+ "events": []
1178
+ },
1179
+ "snapshotAfter": {
1180
+ "orders": [
1181
+ {
1182
+ "id": "order-paid",
1183
+ "ownerId": "actor-owner",
1184
+ "paymentStatus": "paid",
1185
+ "amountCents": 4900,
1186
+ "currency": "USD",
1187
+ "refunded": false
1188
+ }
1189
+ ],
1190
+ "events": []
1191
+ }
1192
+ }
1193
+ }
1194
+ ],
1195
+ "failures": [],
1196
+ "error": null
1197
+ },
1198
+ {
1199
+ "id": "unpaid-order:customer",
1200
+ "entry": "customer",
1201
+ "label": "Unpaid order",
1202
+ "status": "PASS",
1203
+ "calls": [
1204
+ {
1205
+ "expected": {
1206
+ "ok": false,
1207
+ "code": "NOT_PAID",
1208
+ "sinkCalls": 0,
1209
+ "orderAfterRefunded": false
1210
+ },
1211
+ "observed": {
1212
+ "result": {
1213
+ "ok": false,
1214
+ "code": "NOT_PAID"
1215
+ },
1216
+ "sinkCalls": 0,
1217
+ "events": [],
1218
+ "orderAfter": {
1219
+ "id": "order-unpaid",
1220
+ "ownerId": "actor-owner",
1221
+ "paymentStatus": "unpaid",
1222
+ "amountCents": 2200,
1223
+ "currency": "USD",
1224
+ "refunded": false
1225
+ },
1226
+ "snapshotBefore": {
1227
+ "orders": [
1228
+ {
1229
+ "id": "order-unpaid",
1230
+ "ownerId": "actor-owner",
1231
+ "paymentStatus": "unpaid",
1232
+ "amountCents": 2200,
1233
+ "currency": "USD",
1234
+ "refunded": false
1235
+ }
1236
+ ],
1237
+ "events": []
1238
+ },
1239
+ "snapshotAfter": {
1240
+ "orders": [
1241
+ {
1242
+ "id": "order-unpaid",
1243
+ "ownerId": "actor-owner",
1244
+ "paymentStatus": "unpaid",
1245
+ "amountCents": 2200,
1246
+ "currency": "USD",
1247
+ "refunded": false
1248
+ }
1249
+ ],
1250
+ "events": []
1251
+ }
1252
+ }
1253
+ }
1254
+ ],
1255
+ "failures": [],
1256
+ "error": null
1257
+ },
1258
+ {
1259
+ "id": "unpaid-order:support",
1260
+ "entry": "support",
1261
+ "label": "Unpaid order",
1262
+ "status": "PASS",
1263
+ "calls": [
1264
+ {
1265
+ "expected": {
1266
+ "ok": false,
1267
+ "code": "NOT_PAID",
1268
+ "sinkCalls": 0,
1269
+ "orderAfterRefunded": false
1270
+ },
1271
+ "observed": {
1272
+ "result": {
1273
+ "ok": false,
1274
+ "code": "NOT_PAID"
1275
+ },
1276
+ "sinkCalls": 0,
1277
+ "events": [],
1278
+ "orderAfter": {
1279
+ "id": "order-unpaid",
1280
+ "ownerId": "actor-owner",
1281
+ "paymentStatus": "unpaid",
1282
+ "amountCents": 2200,
1283
+ "currency": "USD",
1284
+ "refunded": false
1285
+ },
1286
+ "snapshotBefore": {
1287
+ "orders": [
1288
+ {
1289
+ "id": "order-unpaid",
1290
+ "ownerId": "actor-owner",
1291
+ "paymentStatus": "unpaid",
1292
+ "amountCents": 2200,
1293
+ "currency": "USD",
1294
+ "refunded": false
1295
+ }
1296
+ ],
1297
+ "events": []
1298
+ },
1299
+ "snapshotAfter": {
1300
+ "orders": [
1301
+ {
1302
+ "id": "order-unpaid",
1303
+ "ownerId": "actor-owner",
1304
+ "paymentStatus": "unpaid",
1305
+ "amountCents": 2200,
1306
+ "currency": "USD",
1307
+ "refunded": false
1308
+ }
1309
+ ],
1310
+ "events": []
1311
+ }
1312
+ }
1313
+ }
1314
+ ],
1315
+ "failures": [],
1316
+ "error": null
1317
+ },
1318
+ {
1319
+ "id": "already-refunded:customer",
1320
+ "entry": "customer",
1321
+ "label": "Already refunded",
1322
+ "status": "PASS",
1323
+ "calls": [
1324
+ {
1325
+ "expected": {
1326
+ "ok": false,
1327
+ "code": "ALREADY_REFUNDED",
1328
+ "sinkCalls": 0,
1329
+ "orderAfterRefunded": true
1330
+ },
1331
+ "observed": {
1332
+ "result": {
1333
+ "ok": false,
1334
+ "code": "ALREADY_REFUNDED"
1335
+ },
1336
+ "sinkCalls": 0,
1337
+ "events": [],
1338
+ "orderAfter": {
1339
+ "id": "order-refunded",
1340
+ "ownerId": "actor-owner",
1341
+ "paymentStatus": "paid",
1342
+ "amountCents": 3300,
1343
+ "currency": "USD",
1344
+ "refunded": true
1345
+ },
1346
+ "snapshotBefore": {
1347
+ "orders": [
1348
+ {
1349
+ "id": "order-refunded",
1350
+ "ownerId": "actor-owner",
1351
+ "paymentStatus": "paid",
1352
+ "amountCents": 3300,
1353
+ "currency": "USD",
1354
+ "refunded": true
1355
+ }
1356
+ ],
1357
+ "events": []
1358
+ },
1359
+ "snapshotAfter": {
1360
+ "orders": [
1361
+ {
1362
+ "id": "order-refunded",
1363
+ "ownerId": "actor-owner",
1364
+ "paymentStatus": "paid",
1365
+ "amountCents": 3300,
1366
+ "currency": "USD",
1367
+ "refunded": true
1368
+ }
1369
+ ],
1370
+ "events": []
1371
+ }
1372
+ }
1373
+ }
1374
+ ],
1375
+ "failures": [],
1376
+ "error": null
1377
+ },
1378
+ {
1379
+ "id": "already-refunded:support",
1380
+ "entry": "support",
1381
+ "label": "Already refunded",
1382
+ "status": "PASS",
1383
+ "calls": [
1384
+ {
1385
+ "expected": {
1386
+ "ok": false,
1387
+ "code": "ALREADY_REFUNDED",
1388
+ "sinkCalls": 0,
1389
+ "orderAfterRefunded": true
1390
+ },
1391
+ "observed": {
1392
+ "result": {
1393
+ "ok": false,
1394
+ "code": "ALREADY_REFUNDED"
1395
+ },
1396
+ "sinkCalls": 0,
1397
+ "events": [],
1398
+ "orderAfter": {
1399
+ "id": "order-refunded",
1400
+ "ownerId": "actor-owner",
1401
+ "paymentStatus": "paid",
1402
+ "amountCents": 3300,
1403
+ "currency": "USD",
1404
+ "refunded": true
1405
+ },
1406
+ "snapshotBefore": {
1407
+ "orders": [
1408
+ {
1409
+ "id": "order-refunded",
1410
+ "ownerId": "actor-owner",
1411
+ "paymentStatus": "paid",
1412
+ "amountCents": 3300,
1413
+ "currency": "USD",
1414
+ "refunded": true
1415
+ }
1416
+ ],
1417
+ "events": []
1418
+ },
1419
+ "snapshotAfter": {
1420
+ "orders": [
1421
+ {
1422
+ "id": "order-refunded",
1423
+ "ownerId": "actor-owner",
1424
+ "paymentStatus": "paid",
1425
+ "amountCents": 3300,
1426
+ "currency": "USD",
1427
+ "refunded": true
1428
+ }
1429
+ ],
1430
+ "events": []
1431
+ }
1432
+ }
1433
+ }
1434
+ ],
1435
+ "failures": [],
1436
+ "error": null
1437
+ },
1438
+ {
1439
+ "id": "repeat-request:customer",
1440
+ "entry": "customer",
1441
+ "label": "Repeat request",
1442
+ "status": "PASS",
1443
+ "calls": [
1444
+ {
1445
+ "expected": {
1446
+ "ok": true,
1447
+ "code": "REFUNDED",
1448
+ "sinkCalls": 1,
1449
+ "event": {
1450
+ "orderId": "order-paid",
1451
+ "actorId": "actor-owner",
1452
+ "amountCents": 4900,
1453
+ "currency": "USD"
1454
+ },
1455
+ "orderAfterRefunded": true
1456
+ },
1457
+ "observed": {
1458
+ "result": {
1459
+ "ok": true,
1460
+ "code": "REFUNDED",
1461
+ "refundId": "refund-1"
1462
+ },
1463
+ "sinkCalls": 1,
1464
+ "events": [
1465
+ {
1466
+ "refundId": "refund-1",
1467
+ "orderId": "order-paid",
1468
+ "actorId": "actor-owner",
1469
+ "amountCents": 4900,
1470
+ "currency": "USD"
1471
+ }
1472
+ ],
1473
+ "orderAfter": {
1474
+ "id": "order-paid",
1475
+ "ownerId": "actor-owner",
1476
+ "paymentStatus": "paid",
1477
+ "amountCents": 4900,
1478
+ "currency": "USD",
1479
+ "refunded": true
1480
+ },
1481
+ "snapshotBefore": {
1482
+ "orders": [
1483
+ {
1484
+ "id": "order-paid",
1485
+ "ownerId": "actor-owner",
1486
+ "paymentStatus": "paid",
1487
+ "amountCents": 4900,
1488
+ "currency": "USD",
1489
+ "refunded": false
1490
+ }
1491
+ ],
1492
+ "events": []
1493
+ },
1494
+ "snapshotAfter": {
1495
+ "orders": [
1496
+ {
1497
+ "id": "order-paid",
1498
+ "ownerId": "actor-owner",
1499
+ "paymentStatus": "paid",
1500
+ "amountCents": 4900,
1501
+ "currency": "USD",
1502
+ "refunded": true
1503
+ }
1504
+ ],
1505
+ "events": [
1506
+ {
1507
+ "refundId": "refund-1",
1508
+ "orderId": "order-paid",
1509
+ "actorId": "actor-owner",
1510
+ "amountCents": 4900,
1511
+ "currency": "USD"
1512
+ }
1513
+ ]
1514
+ }
1515
+ }
1516
+ },
1517
+ {
1518
+ "expected": {
1519
+ "ok": false,
1520
+ "code": "ALREADY_REFUNDED",
1521
+ "sinkCalls": 0,
1522
+ "orderAfterRefunded": true
1523
+ },
1524
+ "observed": {
1525
+ "result": {
1526
+ "ok": false,
1527
+ "code": "ALREADY_REFUNDED"
1528
+ },
1529
+ "sinkCalls": 0,
1530
+ "events": [],
1531
+ "orderAfter": {
1532
+ "id": "order-paid",
1533
+ "ownerId": "actor-owner",
1534
+ "paymentStatus": "paid",
1535
+ "amountCents": 4900,
1536
+ "currency": "USD",
1537
+ "refunded": true
1538
+ },
1539
+ "snapshotBefore": {
1540
+ "orders": [
1541
+ {
1542
+ "id": "order-paid",
1543
+ "ownerId": "actor-owner",
1544
+ "paymentStatus": "paid",
1545
+ "amountCents": 4900,
1546
+ "currency": "USD",
1547
+ "refunded": true
1548
+ }
1549
+ ],
1550
+ "events": [
1551
+ {
1552
+ "refundId": "refund-1",
1553
+ "orderId": "order-paid",
1554
+ "actorId": "actor-owner",
1555
+ "amountCents": 4900,
1556
+ "currency": "USD"
1557
+ }
1558
+ ]
1559
+ },
1560
+ "snapshotAfter": {
1561
+ "orders": [
1562
+ {
1563
+ "id": "order-paid",
1564
+ "ownerId": "actor-owner",
1565
+ "paymentStatus": "paid",
1566
+ "amountCents": 4900,
1567
+ "currency": "USD",
1568
+ "refunded": true
1569
+ }
1570
+ ],
1571
+ "events": [
1572
+ {
1573
+ "refundId": "refund-1",
1574
+ "orderId": "order-paid",
1575
+ "actorId": "actor-owner",
1576
+ "amountCents": 4900,
1577
+ "currency": "USD"
1578
+ }
1579
+ ]
1580
+ }
1581
+ }
1582
+ }
1583
+ ],
1584
+ "failures": [],
1585
+ "error": null
1586
+ },
1587
+ {
1588
+ "id": "repeat-request:support",
1589
+ "entry": "support",
1590
+ "label": "Repeat request",
1591
+ "status": "PASS",
1592
+ "calls": [
1593
+ {
1594
+ "expected": {
1595
+ "ok": true,
1596
+ "code": "REFUNDED",
1597
+ "sinkCalls": 1,
1598
+ "event": {
1599
+ "orderId": "order-paid",
1600
+ "actorId": "actor-owner",
1601
+ "amountCents": 4900,
1602
+ "currency": "USD"
1603
+ },
1604
+ "orderAfterRefunded": true
1605
+ },
1606
+ "observed": {
1607
+ "result": {
1608
+ "ok": true,
1609
+ "code": "REFUNDED",
1610
+ "refundId": "refund-1"
1611
+ },
1612
+ "sinkCalls": 1,
1613
+ "events": [
1614
+ {
1615
+ "refundId": "refund-1",
1616
+ "orderId": "order-paid",
1617
+ "actorId": "actor-owner",
1618
+ "amountCents": 4900,
1619
+ "currency": "USD"
1620
+ }
1621
+ ],
1622
+ "orderAfter": {
1623
+ "id": "order-paid",
1624
+ "ownerId": "actor-owner",
1625
+ "paymentStatus": "paid",
1626
+ "amountCents": 4900,
1627
+ "currency": "USD",
1628
+ "refunded": true
1629
+ },
1630
+ "snapshotBefore": {
1631
+ "orders": [
1632
+ {
1633
+ "id": "order-paid",
1634
+ "ownerId": "actor-owner",
1635
+ "paymentStatus": "paid",
1636
+ "amountCents": 4900,
1637
+ "currency": "USD",
1638
+ "refunded": false
1639
+ }
1640
+ ],
1641
+ "events": []
1642
+ },
1643
+ "snapshotAfter": {
1644
+ "orders": [
1645
+ {
1646
+ "id": "order-paid",
1647
+ "ownerId": "actor-owner",
1648
+ "paymentStatus": "paid",
1649
+ "amountCents": 4900,
1650
+ "currency": "USD",
1651
+ "refunded": true
1652
+ }
1653
+ ],
1654
+ "events": [
1655
+ {
1656
+ "refundId": "refund-1",
1657
+ "orderId": "order-paid",
1658
+ "actorId": "actor-owner",
1659
+ "amountCents": 4900,
1660
+ "currency": "USD"
1661
+ }
1662
+ ]
1663
+ }
1664
+ }
1665
+ },
1666
+ {
1667
+ "expected": {
1668
+ "ok": false,
1669
+ "code": "ALREADY_REFUNDED",
1670
+ "sinkCalls": 0,
1671
+ "orderAfterRefunded": true
1672
+ },
1673
+ "observed": {
1674
+ "result": {
1675
+ "ok": false,
1676
+ "code": "ALREADY_REFUNDED"
1677
+ },
1678
+ "sinkCalls": 0,
1679
+ "events": [],
1680
+ "orderAfter": {
1681
+ "id": "order-paid",
1682
+ "ownerId": "actor-owner",
1683
+ "paymentStatus": "paid",
1684
+ "amountCents": 4900,
1685
+ "currency": "USD",
1686
+ "refunded": true
1687
+ },
1688
+ "snapshotBefore": {
1689
+ "orders": [
1690
+ {
1691
+ "id": "order-paid",
1692
+ "ownerId": "actor-owner",
1693
+ "paymentStatus": "paid",
1694
+ "amountCents": 4900,
1695
+ "currency": "USD",
1696
+ "refunded": true
1697
+ }
1698
+ ],
1699
+ "events": [
1700
+ {
1701
+ "refundId": "refund-1",
1702
+ "orderId": "order-paid",
1703
+ "actorId": "actor-owner",
1704
+ "amountCents": 4900,
1705
+ "currency": "USD"
1706
+ }
1707
+ ]
1708
+ },
1709
+ "snapshotAfter": {
1710
+ "orders": [
1711
+ {
1712
+ "id": "order-paid",
1713
+ "ownerId": "actor-owner",
1714
+ "paymentStatus": "paid",
1715
+ "amountCents": 4900,
1716
+ "currency": "USD",
1717
+ "refunded": true
1718
+ }
1719
+ ],
1720
+ "events": [
1721
+ {
1722
+ "refundId": "refund-1",
1723
+ "orderId": "order-paid",
1724
+ "actorId": "actor-owner",
1725
+ "amountCents": 4900,
1726
+ "currency": "USD"
1727
+ }
1728
+ ]
1729
+ }
1730
+ }
1731
+ }
1732
+ ],
1733
+ "failures": [],
1734
+ "error": null
1735
+ }
1736
+ ]
1737
+ },
1738
+ {
1739
+ "id": "mutation",
1740
+ "label": "Ownership-check mutation detected",
1741
+ "command": "node --test test/refunds.test.js",
1742
+ "exitCode": 1,
1743
+ "signal": null,
1744
+ "sourceHash": "cb17864a67c4730c9bcc6a563b79794ebeb3f4d3bdf3918ba00d0b25493757c6",
1745
+ "resultStatus": "FAIL",
1746
+ "expectationMet": true,
1747
+ "witnesses": [
1748
+ "wrong-owner:customer",
1749
+ "wrong-owner:support"
1750
+ ],
1751
+ "results": [
1752
+ {
1753
+ "id": "valid-owner:customer",
1754
+ "entry": "customer",
1755
+ "label": "Valid owner",
1756
+ "status": "PASS",
1757
+ "calls": [
1758
+ {
1759
+ "expected": {
1760
+ "ok": true,
1761
+ "code": "REFUNDED",
1762
+ "sinkCalls": 1,
1763
+ "event": {
1764
+ "orderId": "order-paid",
1765
+ "actorId": "actor-owner",
1766
+ "amountCents": 4900,
1767
+ "currency": "USD"
1768
+ },
1769
+ "orderAfterRefunded": true
1770
+ },
1771
+ "observed": {
1772
+ "result": {
1773
+ "ok": true,
1774
+ "code": "REFUNDED",
1775
+ "refundId": "refund-1"
1776
+ },
1777
+ "sinkCalls": 1,
1778
+ "events": [
1779
+ {
1780
+ "refundId": "refund-1",
1781
+ "orderId": "order-paid",
1782
+ "actorId": "actor-owner",
1783
+ "amountCents": 4900,
1784
+ "currency": "USD"
1785
+ }
1786
+ ],
1787
+ "orderAfter": {
1788
+ "id": "order-paid",
1789
+ "ownerId": "actor-owner",
1790
+ "paymentStatus": "paid",
1791
+ "amountCents": 4900,
1792
+ "currency": "USD",
1793
+ "refunded": true
1794
+ },
1795
+ "snapshotBefore": {
1796
+ "orders": [
1797
+ {
1798
+ "id": "order-paid",
1799
+ "ownerId": "actor-owner",
1800
+ "paymentStatus": "paid",
1801
+ "amountCents": 4900,
1802
+ "currency": "USD",
1803
+ "refunded": false
1804
+ }
1805
+ ],
1806
+ "events": []
1807
+ },
1808
+ "snapshotAfter": {
1809
+ "orders": [
1810
+ {
1811
+ "id": "order-paid",
1812
+ "ownerId": "actor-owner",
1813
+ "paymentStatus": "paid",
1814
+ "amountCents": 4900,
1815
+ "currency": "USD",
1816
+ "refunded": true
1817
+ }
1818
+ ],
1819
+ "events": [
1820
+ {
1821
+ "refundId": "refund-1",
1822
+ "orderId": "order-paid",
1823
+ "actorId": "actor-owner",
1824
+ "amountCents": 4900,
1825
+ "currency": "USD"
1826
+ }
1827
+ ]
1828
+ }
1829
+ }
1830
+ }
1831
+ ],
1832
+ "failures": [],
1833
+ "error": null
1834
+ },
1835
+ {
1836
+ "id": "valid-owner:support",
1837
+ "entry": "support",
1838
+ "label": "Valid owner",
1839
+ "status": "PASS",
1840
+ "calls": [
1841
+ {
1842
+ "expected": {
1843
+ "ok": true,
1844
+ "code": "REFUNDED",
1845
+ "sinkCalls": 1,
1846
+ "event": {
1847
+ "orderId": "order-paid",
1848
+ "actorId": "actor-owner",
1849
+ "amountCents": 4900,
1850
+ "currency": "USD"
1851
+ },
1852
+ "orderAfterRefunded": true
1853
+ },
1854
+ "observed": {
1855
+ "result": {
1856
+ "ok": true,
1857
+ "code": "REFUNDED",
1858
+ "refundId": "refund-1"
1859
+ },
1860
+ "sinkCalls": 1,
1861
+ "events": [
1862
+ {
1863
+ "refundId": "refund-1",
1864
+ "orderId": "order-paid",
1865
+ "actorId": "actor-owner",
1866
+ "amountCents": 4900,
1867
+ "currency": "USD"
1868
+ }
1869
+ ],
1870
+ "orderAfter": {
1871
+ "id": "order-paid",
1872
+ "ownerId": "actor-owner",
1873
+ "paymentStatus": "paid",
1874
+ "amountCents": 4900,
1875
+ "currency": "USD",
1876
+ "refunded": true
1877
+ },
1878
+ "snapshotBefore": {
1879
+ "orders": [
1880
+ {
1881
+ "id": "order-paid",
1882
+ "ownerId": "actor-owner",
1883
+ "paymentStatus": "paid",
1884
+ "amountCents": 4900,
1885
+ "currency": "USD",
1886
+ "refunded": false
1887
+ }
1888
+ ],
1889
+ "events": []
1890
+ },
1891
+ "snapshotAfter": {
1892
+ "orders": [
1893
+ {
1894
+ "id": "order-paid",
1895
+ "ownerId": "actor-owner",
1896
+ "paymentStatus": "paid",
1897
+ "amountCents": 4900,
1898
+ "currency": "USD",
1899
+ "refunded": true
1900
+ }
1901
+ ],
1902
+ "events": [
1903
+ {
1904
+ "refundId": "refund-1",
1905
+ "orderId": "order-paid",
1906
+ "actorId": "actor-owner",
1907
+ "amountCents": 4900,
1908
+ "currency": "USD"
1909
+ }
1910
+ ]
1911
+ }
1912
+ }
1913
+ }
1914
+ ],
1915
+ "failures": [],
1916
+ "error": null
1917
+ },
1918
+ {
1919
+ "id": "wrong-owner:customer",
1920
+ "entry": "customer",
1921
+ "label": "Wrong owner",
1922
+ "status": "FAIL",
1923
+ "calls": [
1924
+ {
1925
+ "expected": {
1926
+ "ok": false,
1927
+ "code": "NOT_OWNER",
1928
+ "sinkCalls": 0,
1929
+ "orderAfterRefunded": false
1930
+ },
1931
+ "observed": {
1932
+ "result": {
1933
+ "ok": true,
1934
+ "code": "REFUNDED",
1935
+ "refundId": "refund-1"
1936
+ },
1937
+ "sinkCalls": 1,
1938
+ "events": [
1939
+ {
1940
+ "refundId": "refund-1",
1941
+ "orderId": "order-paid",
1942
+ "actorId": "actor-other",
1943
+ "amountCents": 4900,
1944
+ "currency": "USD"
1945
+ }
1946
+ ],
1947
+ "orderAfter": {
1948
+ "id": "order-paid",
1949
+ "ownerId": "actor-owner",
1950
+ "paymentStatus": "paid",
1951
+ "amountCents": 4900,
1952
+ "currency": "USD",
1953
+ "refunded": true
1954
+ },
1955
+ "snapshotBefore": {
1956
+ "orders": [
1957
+ {
1958
+ "id": "order-paid",
1959
+ "ownerId": "actor-owner",
1960
+ "paymentStatus": "paid",
1961
+ "amountCents": 4900,
1962
+ "currency": "USD",
1963
+ "refunded": false
1964
+ }
1965
+ ],
1966
+ "events": []
1967
+ },
1968
+ "snapshotAfter": {
1969
+ "orders": [
1970
+ {
1971
+ "id": "order-paid",
1972
+ "ownerId": "actor-owner",
1973
+ "paymentStatus": "paid",
1974
+ "amountCents": 4900,
1975
+ "currency": "USD",
1976
+ "refunded": true
1977
+ }
1978
+ ],
1979
+ "events": [
1980
+ {
1981
+ "refundId": "refund-1",
1982
+ "orderId": "order-paid",
1983
+ "actorId": "actor-other",
1984
+ "amountCents": 4900,
1985
+ "currency": "USD"
1986
+ }
1987
+ ]
1988
+ }
1989
+ }
1990
+ }
1991
+ ],
1992
+ "failures": [
1993
+ "wrong-owner:customer call 1: expected ok=false; observed ok=true",
1994
+ "wrong-owner:customer call 1: expected code=NOT_OWNER; observed code=REFUNDED",
1995
+ "wrong-owner:customer call 1: expected 0 new sink event(s); observed 1 for order order-paid by actor-other",
1996
+ "wrong-owner:customer call 1: expected order.refunded=false; observed true",
1997
+ "wrong-owner:customer call 1: state mutated on denial — Order order-paid.refunded mutated: false → true"
1998
+ ],
1999
+ "error": null
2000
+ },
2001
+ {
2002
+ "id": "wrong-owner:support",
2003
+ "entry": "support",
2004
+ "label": "Wrong owner",
2005
+ "status": "FAIL",
2006
+ "calls": [
2007
+ {
2008
+ "expected": {
2009
+ "ok": false,
2010
+ "code": "NOT_OWNER",
2011
+ "sinkCalls": 0,
2012
+ "orderAfterRefunded": false
2013
+ },
2014
+ "observed": {
2015
+ "result": {
2016
+ "ok": true,
2017
+ "code": "REFUNDED",
2018
+ "refundId": "refund-1"
2019
+ },
2020
+ "sinkCalls": 1,
2021
+ "events": [
2022
+ {
2023
+ "refundId": "refund-1",
2024
+ "orderId": "order-paid",
2025
+ "actorId": "actor-other",
2026
+ "amountCents": 4900,
2027
+ "currency": "USD"
2028
+ }
2029
+ ],
2030
+ "orderAfter": {
2031
+ "id": "order-paid",
2032
+ "ownerId": "actor-owner",
2033
+ "paymentStatus": "paid",
2034
+ "amountCents": 4900,
2035
+ "currency": "USD",
2036
+ "refunded": true
2037
+ },
2038
+ "snapshotBefore": {
2039
+ "orders": [
2040
+ {
2041
+ "id": "order-paid",
2042
+ "ownerId": "actor-owner",
2043
+ "paymentStatus": "paid",
2044
+ "amountCents": 4900,
2045
+ "currency": "USD",
2046
+ "refunded": false
2047
+ }
2048
+ ],
2049
+ "events": []
2050
+ },
2051
+ "snapshotAfter": {
2052
+ "orders": [
2053
+ {
2054
+ "id": "order-paid",
2055
+ "ownerId": "actor-owner",
2056
+ "paymentStatus": "paid",
2057
+ "amountCents": 4900,
2058
+ "currency": "USD",
2059
+ "refunded": true
2060
+ }
2061
+ ],
2062
+ "events": [
2063
+ {
2064
+ "refundId": "refund-1",
2065
+ "orderId": "order-paid",
2066
+ "actorId": "actor-other",
2067
+ "amountCents": 4900,
2068
+ "currency": "USD"
2069
+ }
2070
+ ]
2071
+ }
2072
+ }
2073
+ }
2074
+ ],
2075
+ "failures": [
2076
+ "wrong-owner:support call 1: expected ok=false; observed ok=true",
2077
+ "wrong-owner:support call 1: expected code=NOT_OWNER; observed code=REFUNDED",
2078
+ "wrong-owner:support call 1: expected 0 new sink event(s); observed 1 for order order-paid by actor-other",
2079
+ "wrong-owner:support call 1: expected order.refunded=false; observed true",
2080
+ "wrong-owner:support call 1: state mutated on denial — Order order-paid.refunded mutated: false → true"
2081
+ ],
2082
+ "error": null
2083
+ },
2084
+ {
2085
+ "id": "unpaid-order:customer",
2086
+ "entry": "customer",
2087
+ "label": "Unpaid order",
2088
+ "status": "PASS",
2089
+ "calls": [
2090
+ {
2091
+ "expected": {
2092
+ "ok": false,
2093
+ "code": "NOT_PAID",
2094
+ "sinkCalls": 0,
2095
+ "orderAfterRefunded": false
2096
+ },
2097
+ "observed": {
2098
+ "result": {
2099
+ "ok": false,
2100
+ "code": "NOT_PAID"
2101
+ },
2102
+ "sinkCalls": 0,
2103
+ "events": [],
2104
+ "orderAfter": {
2105
+ "id": "order-unpaid",
2106
+ "ownerId": "actor-owner",
2107
+ "paymentStatus": "unpaid",
2108
+ "amountCents": 2200,
2109
+ "currency": "USD",
2110
+ "refunded": false
2111
+ },
2112
+ "snapshotBefore": {
2113
+ "orders": [
2114
+ {
2115
+ "id": "order-unpaid",
2116
+ "ownerId": "actor-owner",
2117
+ "paymentStatus": "unpaid",
2118
+ "amountCents": 2200,
2119
+ "currency": "USD",
2120
+ "refunded": false
2121
+ }
2122
+ ],
2123
+ "events": []
2124
+ },
2125
+ "snapshotAfter": {
2126
+ "orders": [
2127
+ {
2128
+ "id": "order-unpaid",
2129
+ "ownerId": "actor-owner",
2130
+ "paymentStatus": "unpaid",
2131
+ "amountCents": 2200,
2132
+ "currency": "USD",
2133
+ "refunded": false
2134
+ }
2135
+ ],
2136
+ "events": []
2137
+ }
2138
+ }
2139
+ }
2140
+ ],
2141
+ "failures": [],
2142
+ "error": null
2143
+ },
2144
+ {
2145
+ "id": "unpaid-order:support",
2146
+ "entry": "support",
2147
+ "label": "Unpaid order",
2148
+ "status": "PASS",
2149
+ "calls": [
2150
+ {
2151
+ "expected": {
2152
+ "ok": false,
2153
+ "code": "NOT_PAID",
2154
+ "sinkCalls": 0,
2155
+ "orderAfterRefunded": false
2156
+ },
2157
+ "observed": {
2158
+ "result": {
2159
+ "ok": false,
2160
+ "code": "NOT_PAID"
2161
+ },
2162
+ "sinkCalls": 0,
2163
+ "events": [],
2164
+ "orderAfter": {
2165
+ "id": "order-unpaid",
2166
+ "ownerId": "actor-owner",
2167
+ "paymentStatus": "unpaid",
2168
+ "amountCents": 2200,
2169
+ "currency": "USD",
2170
+ "refunded": false
2171
+ },
2172
+ "snapshotBefore": {
2173
+ "orders": [
2174
+ {
2175
+ "id": "order-unpaid",
2176
+ "ownerId": "actor-owner",
2177
+ "paymentStatus": "unpaid",
2178
+ "amountCents": 2200,
2179
+ "currency": "USD",
2180
+ "refunded": false
2181
+ }
2182
+ ],
2183
+ "events": []
2184
+ },
2185
+ "snapshotAfter": {
2186
+ "orders": [
2187
+ {
2188
+ "id": "order-unpaid",
2189
+ "ownerId": "actor-owner",
2190
+ "paymentStatus": "unpaid",
2191
+ "amountCents": 2200,
2192
+ "currency": "USD",
2193
+ "refunded": false
2194
+ }
2195
+ ],
2196
+ "events": []
2197
+ }
2198
+ }
2199
+ }
2200
+ ],
2201
+ "failures": [],
2202
+ "error": null
2203
+ },
2204
+ {
2205
+ "id": "already-refunded:customer",
2206
+ "entry": "customer",
2207
+ "label": "Already refunded",
2208
+ "status": "PASS",
2209
+ "calls": [
2210
+ {
2211
+ "expected": {
2212
+ "ok": false,
2213
+ "code": "ALREADY_REFUNDED",
2214
+ "sinkCalls": 0,
2215
+ "orderAfterRefunded": true
2216
+ },
2217
+ "observed": {
2218
+ "result": {
2219
+ "ok": false,
2220
+ "code": "ALREADY_REFUNDED"
2221
+ },
2222
+ "sinkCalls": 0,
2223
+ "events": [],
2224
+ "orderAfter": {
2225
+ "id": "order-refunded",
2226
+ "ownerId": "actor-owner",
2227
+ "paymentStatus": "paid",
2228
+ "amountCents": 3300,
2229
+ "currency": "USD",
2230
+ "refunded": true
2231
+ },
2232
+ "snapshotBefore": {
2233
+ "orders": [
2234
+ {
2235
+ "id": "order-refunded",
2236
+ "ownerId": "actor-owner",
2237
+ "paymentStatus": "paid",
2238
+ "amountCents": 3300,
2239
+ "currency": "USD",
2240
+ "refunded": true
2241
+ }
2242
+ ],
2243
+ "events": []
2244
+ },
2245
+ "snapshotAfter": {
2246
+ "orders": [
2247
+ {
2248
+ "id": "order-refunded",
2249
+ "ownerId": "actor-owner",
2250
+ "paymentStatus": "paid",
2251
+ "amountCents": 3300,
2252
+ "currency": "USD",
2253
+ "refunded": true
2254
+ }
2255
+ ],
2256
+ "events": []
2257
+ }
2258
+ }
2259
+ }
2260
+ ],
2261
+ "failures": [],
2262
+ "error": null
2263
+ },
2264
+ {
2265
+ "id": "already-refunded:support",
2266
+ "entry": "support",
2267
+ "label": "Already refunded",
2268
+ "status": "PASS",
2269
+ "calls": [
2270
+ {
2271
+ "expected": {
2272
+ "ok": false,
2273
+ "code": "ALREADY_REFUNDED",
2274
+ "sinkCalls": 0,
2275
+ "orderAfterRefunded": true
2276
+ },
2277
+ "observed": {
2278
+ "result": {
2279
+ "ok": false,
2280
+ "code": "ALREADY_REFUNDED"
2281
+ },
2282
+ "sinkCalls": 0,
2283
+ "events": [],
2284
+ "orderAfter": {
2285
+ "id": "order-refunded",
2286
+ "ownerId": "actor-owner",
2287
+ "paymentStatus": "paid",
2288
+ "amountCents": 3300,
2289
+ "currency": "USD",
2290
+ "refunded": true
2291
+ },
2292
+ "snapshotBefore": {
2293
+ "orders": [
2294
+ {
2295
+ "id": "order-refunded",
2296
+ "ownerId": "actor-owner",
2297
+ "paymentStatus": "paid",
2298
+ "amountCents": 3300,
2299
+ "currency": "USD",
2300
+ "refunded": true
2301
+ }
2302
+ ],
2303
+ "events": []
2304
+ },
2305
+ "snapshotAfter": {
2306
+ "orders": [
2307
+ {
2308
+ "id": "order-refunded",
2309
+ "ownerId": "actor-owner",
2310
+ "paymentStatus": "paid",
2311
+ "amountCents": 3300,
2312
+ "currency": "USD",
2313
+ "refunded": true
2314
+ }
2315
+ ],
2316
+ "events": []
2317
+ }
2318
+ }
2319
+ }
2320
+ ],
2321
+ "failures": [],
2322
+ "error": null
2323
+ },
2324
+ {
2325
+ "id": "repeat-request:customer",
2326
+ "entry": "customer",
2327
+ "label": "Repeat request",
2328
+ "status": "PASS",
2329
+ "calls": [
2330
+ {
2331
+ "expected": {
2332
+ "ok": true,
2333
+ "code": "REFUNDED",
2334
+ "sinkCalls": 1,
2335
+ "event": {
2336
+ "orderId": "order-paid",
2337
+ "actorId": "actor-owner",
2338
+ "amountCents": 4900,
2339
+ "currency": "USD"
2340
+ },
2341
+ "orderAfterRefunded": true
2342
+ },
2343
+ "observed": {
2344
+ "result": {
2345
+ "ok": true,
2346
+ "code": "REFUNDED",
2347
+ "refundId": "refund-1"
2348
+ },
2349
+ "sinkCalls": 1,
2350
+ "events": [
2351
+ {
2352
+ "refundId": "refund-1",
2353
+ "orderId": "order-paid",
2354
+ "actorId": "actor-owner",
2355
+ "amountCents": 4900,
2356
+ "currency": "USD"
2357
+ }
2358
+ ],
2359
+ "orderAfter": {
2360
+ "id": "order-paid",
2361
+ "ownerId": "actor-owner",
2362
+ "paymentStatus": "paid",
2363
+ "amountCents": 4900,
2364
+ "currency": "USD",
2365
+ "refunded": true
2366
+ },
2367
+ "snapshotBefore": {
2368
+ "orders": [
2369
+ {
2370
+ "id": "order-paid",
2371
+ "ownerId": "actor-owner",
2372
+ "paymentStatus": "paid",
2373
+ "amountCents": 4900,
2374
+ "currency": "USD",
2375
+ "refunded": false
2376
+ }
2377
+ ],
2378
+ "events": []
2379
+ },
2380
+ "snapshotAfter": {
2381
+ "orders": [
2382
+ {
2383
+ "id": "order-paid",
2384
+ "ownerId": "actor-owner",
2385
+ "paymentStatus": "paid",
2386
+ "amountCents": 4900,
2387
+ "currency": "USD",
2388
+ "refunded": true
2389
+ }
2390
+ ],
2391
+ "events": [
2392
+ {
2393
+ "refundId": "refund-1",
2394
+ "orderId": "order-paid",
2395
+ "actorId": "actor-owner",
2396
+ "amountCents": 4900,
2397
+ "currency": "USD"
2398
+ }
2399
+ ]
2400
+ }
2401
+ }
2402
+ },
2403
+ {
2404
+ "expected": {
2405
+ "ok": false,
2406
+ "code": "ALREADY_REFUNDED",
2407
+ "sinkCalls": 0,
2408
+ "orderAfterRefunded": true
2409
+ },
2410
+ "observed": {
2411
+ "result": {
2412
+ "ok": false,
2413
+ "code": "ALREADY_REFUNDED"
2414
+ },
2415
+ "sinkCalls": 0,
2416
+ "events": [],
2417
+ "orderAfter": {
2418
+ "id": "order-paid",
2419
+ "ownerId": "actor-owner",
2420
+ "paymentStatus": "paid",
2421
+ "amountCents": 4900,
2422
+ "currency": "USD",
2423
+ "refunded": true
2424
+ },
2425
+ "snapshotBefore": {
2426
+ "orders": [
2427
+ {
2428
+ "id": "order-paid",
2429
+ "ownerId": "actor-owner",
2430
+ "paymentStatus": "paid",
2431
+ "amountCents": 4900,
2432
+ "currency": "USD",
2433
+ "refunded": true
2434
+ }
2435
+ ],
2436
+ "events": [
2437
+ {
2438
+ "refundId": "refund-1",
2439
+ "orderId": "order-paid",
2440
+ "actorId": "actor-owner",
2441
+ "amountCents": 4900,
2442
+ "currency": "USD"
2443
+ }
2444
+ ]
2445
+ },
2446
+ "snapshotAfter": {
2447
+ "orders": [
2448
+ {
2449
+ "id": "order-paid",
2450
+ "ownerId": "actor-owner",
2451
+ "paymentStatus": "paid",
2452
+ "amountCents": 4900,
2453
+ "currency": "USD",
2454
+ "refunded": true
2455
+ }
2456
+ ],
2457
+ "events": [
2458
+ {
2459
+ "refundId": "refund-1",
2460
+ "orderId": "order-paid",
2461
+ "actorId": "actor-owner",
2462
+ "amountCents": 4900,
2463
+ "currency": "USD"
2464
+ }
2465
+ ]
2466
+ }
2467
+ }
2468
+ }
2469
+ ],
2470
+ "failures": [],
2471
+ "error": null
2472
+ },
2473
+ {
2474
+ "id": "repeat-request:support",
2475
+ "entry": "support",
2476
+ "label": "Repeat request",
2477
+ "status": "PASS",
2478
+ "calls": [
2479
+ {
2480
+ "expected": {
2481
+ "ok": true,
2482
+ "code": "REFUNDED",
2483
+ "sinkCalls": 1,
2484
+ "event": {
2485
+ "orderId": "order-paid",
2486
+ "actorId": "actor-owner",
2487
+ "amountCents": 4900,
2488
+ "currency": "USD"
2489
+ },
2490
+ "orderAfterRefunded": true
2491
+ },
2492
+ "observed": {
2493
+ "result": {
2494
+ "ok": true,
2495
+ "code": "REFUNDED",
2496
+ "refundId": "refund-1"
2497
+ },
2498
+ "sinkCalls": 1,
2499
+ "events": [
2500
+ {
2501
+ "refundId": "refund-1",
2502
+ "orderId": "order-paid",
2503
+ "actorId": "actor-owner",
2504
+ "amountCents": 4900,
2505
+ "currency": "USD"
2506
+ }
2507
+ ],
2508
+ "orderAfter": {
2509
+ "id": "order-paid",
2510
+ "ownerId": "actor-owner",
2511
+ "paymentStatus": "paid",
2512
+ "amountCents": 4900,
2513
+ "currency": "USD",
2514
+ "refunded": true
2515
+ },
2516
+ "snapshotBefore": {
2517
+ "orders": [
2518
+ {
2519
+ "id": "order-paid",
2520
+ "ownerId": "actor-owner",
2521
+ "paymentStatus": "paid",
2522
+ "amountCents": 4900,
2523
+ "currency": "USD",
2524
+ "refunded": false
2525
+ }
2526
+ ],
2527
+ "events": []
2528
+ },
2529
+ "snapshotAfter": {
2530
+ "orders": [
2531
+ {
2532
+ "id": "order-paid",
2533
+ "ownerId": "actor-owner",
2534
+ "paymentStatus": "paid",
2535
+ "amountCents": 4900,
2536
+ "currency": "USD",
2537
+ "refunded": true
2538
+ }
2539
+ ],
2540
+ "events": [
2541
+ {
2542
+ "refundId": "refund-1",
2543
+ "orderId": "order-paid",
2544
+ "actorId": "actor-owner",
2545
+ "amountCents": 4900,
2546
+ "currency": "USD"
2547
+ }
2548
+ ]
2549
+ }
2550
+ }
2551
+ },
2552
+ {
2553
+ "expected": {
2554
+ "ok": false,
2555
+ "code": "ALREADY_REFUNDED",
2556
+ "sinkCalls": 0,
2557
+ "orderAfterRefunded": true
2558
+ },
2559
+ "observed": {
2560
+ "result": {
2561
+ "ok": false,
2562
+ "code": "ALREADY_REFUNDED"
2563
+ },
2564
+ "sinkCalls": 0,
2565
+ "events": [],
2566
+ "orderAfter": {
2567
+ "id": "order-paid",
2568
+ "ownerId": "actor-owner",
2569
+ "paymentStatus": "paid",
2570
+ "amountCents": 4900,
2571
+ "currency": "USD",
2572
+ "refunded": true
2573
+ },
2574
+ "snapshotBefore": {
2575
+ "orders": [
2576
+ {
2577
+ "id": "order-paid",
2578
+ "ownerId": "actor-owner",
2579
+ "paymentStatus": "paid",
2580
+ "amountCents": 4900,
2581
+ "currency": "USD",
2582
+ "refunded": true
2583
+ }
2584
+ ],
2585
+ "events": [
2586
+ {
2587
+ "refundId": "refund-1",
2588
+ "orderId": "order-paid",
2589
+ "actorId": "actor-owner",
2590
+ "amountCents": 4900,
2591
+ "currency": "USD"
2592
+ }
2593
+ ]
2594
+ },
2595
+ "snapshotAfter": {
2596
+ "orders": [
2597
+ {
2598
+ "id": "order-paid",
2599
+ "ownerId": "actor-owner",
2600
+ "paymentStatus": "paid",
2601
+ "amountCents": 4900,
2602
+ "currency": "USD",
2603
+ "refunded": true
2604
+ }
2605
+ ],
2606
+ "events": [
2607
+ {
2608
+ "refundId": "refund-1",
2609
+ "orderId": "order-paid",
2610
+ "actorId": "actor-owner",
2611
+ "amountCents": 4900,
2612
+ "currency": "USD"
2613
+ }
2614
+ ]
2615
+ }
2616
+ }
2617
+ }
2618
+ ],
2619
+ "failures": [],
2620
+ "error": null
2621
+ }
2622
+ ]
2623
+ },
2624
+ {
2625
+ "id": "restored",
2626
+ "label": "Restored (exact fixed bytes)",
2627
+ "command": "node --test test/refunds.test.js",
2628
+ "exitCode": 0,
2629
+ "signal": null,
2630
+ "sourceHash": "7c8a25d3e8914de539be1189183386324b7bb1e25106808273076e2261136195",
2631
+ "resultStatus": "PASS",
2632
+ "expectationMet": true,
2633
+ "witnesses": [
2634
+ "valid-owner:customer",
2635
+ "valid-owner:support",
2636
+ "wrong-owner:customer",
2637
+ "wrong-owner:support",
2638
+ "unpaid-order:customer",
2639
+ "unpaid-order:support",
2640
+ "already-refunded:customer",
2641
+ "already-refunded:support",
2642
+ "repeat-request:customer",
2643
+ "repeat-request:support"
2644
+ ],
2645
+ "results": [
2646
+ {
2647
+ "id": "valid-owner:customer",
2648
+ "entry": "customer",
2649
+ "label": "Valid owner",
2650
+ "status": "PASS",
2651
+ "calls": [
2652
+ {
2653
+ "expected": {
2654
+ "ok": true,
2655
+ "code": "REFUNDED",
2656
+ "sinkCalls": 1,
2657
+ "event": {
2658
+ "orderId": "order-paid",
2659
+ "actorId": "actor-owner",
2660
+ "amountCents": 4900,
2661
+ "currency": "USD"
2662
+ },
2663
+ "orderAfterRefunded": true
2664
+ },
2665
+ "observed": {
2666
+ "result": {
2667
+ "ok": true,
2668
+ "code": "REFUNDED",
2669
+ "refundId": "refund-1"
2670
+ },
2671
+ "sinkCalls": 1,
2672
+ "events": [
2673
+ {
2674
+ "refundId": "refund-1",
2675
+ "orderId": "order-paid",
2676
+ "actorId": "actor-owner",
2677
+ "amountCents": 4900,
2678
+ "currency": "USD"
2679
+ }
2680
+ ],
2681
+ "orderAfter": {
2682
+ "id": "order-paid",
2683
+ "ownerId": "actor-owner",
2684
+ "paymentStatus": "paid",
2685
+ "amountCents": 4900,
2686
+ "currency": "USD",
2687
+ "refunded": true
2688
+ },
2689
+ "snapshotBefore": {
2690
+ "orders": [
2691
+ {
2692
+ "id": "order-paid",
2693
+ "ownerId": "actor-owner",
2694
+ "paymentStatus": "paid",
2695
+ "amountCents": 4900,
2696
+ "currency": "USD",
2697
+ "refunded": false
2698
+ }
2699
+ ],
2700
+ "events": []
2701
+ },
2702
+ "snapshotAfter": {
2703
+ "orders": [
2704
+ {
2705
+ "id": "order-paid",
2706
+ "ownerId": "actor-owner",
2707
+ "paymentStatus": "paid",
2708
+ "amountCents": 4900,
2709
+ "currency": "USD",
2710
+ "refunded": true
2711
+ }
2712
+ ],
2713
+ "events": [
2714
+ {
2715
+ "refundId": "refund-1",
2716
+ "orderId": "order-paid",
2717
+ "actorId": "actor-owner",
2718
+ "amountCents": 4900,
2719
+ "currency": "USD"
2720
+ }
2721
+ ]
2722
+ }
2723
+ }
2724
+ }
2725
+ ],
2726
+ "failures": [],
2727
+ "error": null
2728
+ },
2729
+ {
2730
+ "id": "valid-owner:support",
2731
+ "entry": "support",
2732
+ "label": "Valid owner",
2733
+ "status": "PASS",
2734
+ "calls": [
2735
+ {
2736
+ "expected": {
2737
+ "ok": true,
2738
+ "code": "REFUNDED",
2739
+ "sinkCalls": 1,
2740
+ "event": {
2741
+ "orderId": "order-paid",
2742
+ "actorId": "actor-owner",
2743
+ "amountCents": 4900,
2744
+ "currency": "USD"
2745
+ },
2746
+ "orderAfterRefunded": true
2747
+ },
2748
+ "observed": {
2749
+ "result": {
2750
+ "ok": true,
2751
+ "code": "REFUNDED",
2752
+ "refundId": "refund-1"
2753
+ },
2754
+ "sinkCalls": 1,
2755
+ "events": [
2756
+ {
2757
+ "refundId": "refund-1",
2758
+ "orderId": "order-paid",
2759
+ "actorId": "actor-owner",
2760
+ "amountCents": 4900,
2761
+ "currency": "USD"
2762
+ }
2763
+ ],
2764
+ "orderAfter": {
2765
+ "id": "order-paid",
2766
+ "ownerId": "actor-owner",
2767
+ "paymentStatus": "paid",
2768
+ "amountCents": 4900,
2769
+ "currency": "USD",
2770
+ "refunded": true
2771
+ },
2772
+ "snapshotBefore": {
2773
+ "orders": [
2774
+ {
2775
+ "id": "order-paid",
2776
+ "ownerId": "actor-owner",
2777
+ "paymentStatus": "paid",
2778
+ "amountCents": 4900,
2779
+ "currency": "USD",
2780
+ "refunded": false
2781
+ }
2782
+ ],
2783
+ "events": []
2784
+ },
2785
+ "snapshotAfter": {
2786
+ "orders": [
2787
+ {
2788
+ "id": "order-paid",
2789
+ "ownerId": "actor-owner",
2790
+ "paymentStatus": "paid",
2791
+ "amountCents": 4900,
2792
+ "currency": "USD",
2793
+ "refunded": true
2794
+ }
2795
+ ],
2796
+ "events": [
2797
+ {
2798
+ "refundId": "refund-1",
2799
+ "orderId": "order-paid",
2800
+ "actorId": "actor-owner",
2801
+ "amountCents": 4900,
2802
+ "currency": "USD"
2803
+ }
2804
+ ]
2805
+ }
2806
+ }
2807
+ }
2808
+ ],
2809
+ "failures": [],
2810
+ "error": null
2811
+ },
2812
+ {
2813
+ "id": "wrong-owner:customer",
2814
+ "entry": "customer",
2815
+ "label": "Wrong owner",
2816
+ "status": "PASS",
2817
+ "calls": [
2818
+ {
2819
+ "expected": {
2820
+ "ok": false,
2821
+ "code": "NOT_OWNER",
2822
+ "sinkCalls": 0,
2823
+ "orderAfterRefunded": false
2824
+ },
2825
+ "observed": {
2826
+ "result": {
2827
+ "ok": false,
2828
+ "code": "NOT_OWNER"
2829
+ },
2830
+ "sinkCalls": 0,
2831
+ "events": [],
2832
+ "orderAfter": {
2833
+ "id": "order-paid",
2834
+ "ownerId": "actor-owner",
2835
+ "paymentStatus": "paid",
2836
+ "amountCents": 4900,
2837
+ "currency": "USD",
2838
+ "refunded": false
2839
+ },
2840
+ "snapshotBefore": {
2841
+ "orders": [
2842
+ {
2843
+ "id": "order-paid",
2844
+ "ownerId": "actor-owner",
2845
+ "paymentStatus": "paid",
2846
+ "amountCents": 4900,
2847
+ "currency": "USD",
2848
+ "refunded": false
2849
+ }
2850
+ ],
2851
+ "events": []
2852
+ },
2853
+ "snapshotAfter": {
2854
+ "orders": [
2855
+ {
2856
+ "id": "order-paid",
2857
+ "ownerId": "actor-owner",
2858
+ "paymentStatus": "paid",
2859
+ "amountCents": 4900,
2860
+ "currency": "USD",
2861
+ "refunded": false
2862
+ }
2863
+ ],
2864
+ "events": []
2865
+ }
2866
+ }
2867
+ }
2868
+ ],
2869
+ "failures": [],
2870
+ "error": null
2871
+ },
2872
+ {
2873
+ "id": "wrong-owner:support",
2874
+ "entry": "support",
2875
+ "label": "Wrong owner",
2876
+ "status": "PASS",
2877
+ "calls": [
2878
+ {
2879
+ "expected": {
2880
+ "ok": false,
2881
+ "code": "NOT_OWNER",
2882
+ "sinkCalls": 0,
2883
+ "orderAfterRefunded": false
2884
+ },
2885
+ "observed": {
2886
+ "result": {
2887
+ "ok": false,
2888
+ "code": "NOT_OWNER"
2889
+ },
2890
+ "sinkCalls": 0,
2891
+ "events": [],
2892
+ "orderAfter": {
2893
+ "id": "order-paid",
2894
+ "ownerId": "actor-owner",
2895
+ "paymentStatus": "paid",
2896
+ "amountCents": 4900,
2897
+ "currency": "USD",
2898
+ "refunded": false
2899
+ },
2900
+ "snapshotBefore": {
2901
+ "orders": [
2902
+ {
2903
+ "id": "order-paid",
2904
+ "ownerId": "actor-owner",
2905
+ "paymentStatus": "paid",
2906
+ "amountCents": 4900,
2907
+ "currency": "USD",
2908
+ "refunded": false
2909
+ }
2910
+ ],
2911
+ "events": []
2912
+ },
2913
+ "snapshotAfter": {
2914
+ "orders": [
2915
+ {
2916
+ "id": "order-paid",
2917
+ "ownerId": "actor-owner",
2918
+ "paymentStatus": "paid",
2919
+ "amountCents": 4900,
2920
+ "currency": "USD",
2921
+ "refunded": false
2922
+ }
2923
+ ],
2924
+ "events": []
2925
+ }
2926
+ }
2927
+ }
2928
+ ],
2929
+ "failures": [],
2930
+ "error": null
2931
+ },
2932
+ {
2933
+ "id": "unpaid-order:customer",
2934
+ "entry": "customer",
2935
+ "label": "Unpaid order",
2936
+ "status": "PASS",
2937
+ "calls": [
2938
+ {
2939
+ "expected": {
2940
+ "ok": false,
2941
+ "code": "NOT_PAID",
2942
+ "sinkCalls": 0,
2943
+ "orderAfterRefunded": false
2944
+ },
2945
+ "observed": {
2946
+ "result": {
2947
+ "ok": false,
2948
+ "code": "NOT_PAID"
2949
+ },
2950
+ "sinkCalls": 0,
2951
+ "events": [],
2952
+ "orderAfter": {
2953
+ "id": "order-unpaid",
2954
+ "ownerId": "actor-owner",
2955
+ "paymentStatus": "unpaid",
2956
+ "amountCents": 2200,
2957
+ "currency": "USD",
2958
+ "refunded": false
2959
+ },
2960
+ "snapshotBefore": {
2961
+ "orders": [
2962
+ {
2963
+ "id": "order-unpaid",
2964
+ "ownerId": "actor-owner",
2965
+ "paymentStatus": "unpaid",
2966
+ "amountCents": 2200,
2967
+ "currency": "USD",
2968
+ "refunded": false
2969
+ }
2970
+ ],
2971
+ "events": []
2972
+ },
2973
+ "snapshotAfter": {
2974
+ "orders": [
2975
+ {
2976
+ "id": "order-unpaid",
2977
+ "ownerId": "actor-owner",
2978
+ "paymentStatus": "unpaid",
2979
+ "amountCents": 2200,
2980
+ "currency": "USD",
2981
+ "refunded": false
2982
+ }
2983
+ ],
2984
+ "events": []
2985
+ }
2986
+ }
2987
+ }
2988
+ ],
2989
+ "failures": [],
2990
+ "error": null
2991
+ },
2992
+ {
2993
+ "id": "unpaid-order:support",
2994
+ "entry": "support",
2995
+ "label": "Unpaid order",
2996
+ "status": "PASS",
2997
+ "calls": [
2998
+ {
2999
+ "expected": {
3000
+ "ok": false,
3001
+ "code": "NOT_PAID",
3002
+ "sinkCalls": 0,
3003
+ "orderAfterRefunded": false
3004
+ },
3005
+ "observed": {
3006
+ "result": {
3007
+ "ok": false,
3008
+ "code": "NOT_PAID"
3009
+ },
3010
+ "sinkCalls": 0,
3011
+ "events": [],
3012
+ "orderAfter": {
3013
+ "id": "order-unpaid",
3014
+ "ownerId": "actor-owner",
3015
+ "paymentStatus": "unpaid",
3016
+ "amountCents": 2200,
3017
+ "currency": "USD",
3018
+ "refunded": false
3019
+ },
3020
+ "snapshotBefore": {
3021
+ "orders": [
3022
+ {
3023
+ "id": "order-unpaid",
3024
+ "ownerId": "actor-owner",
3025
+ "paymentStatus": "unpaid",
3026
+ "amountCents": 2200,
3027
+ "currency": "USD",
3028
+ "refunded": false
3029
+ }
3030
+ ],
3031
+ "events": []
3032
+ },
3033
+ "snapshotAfter": {
3034
+ "orders": [
3035
+ {
3036
+ "id": "order-unpaid",
3037
+ "ownerId": "actor-owner",
3038
+ "paymentStatus": "unpaid",
3039
+ "amountCents": 2200,
3040
+ "currency": "USD",
3041
+ "refunded": false
3042
+ }
3043
+ ],
3044
+ "events": []
3045
+ }
3046
+ }
3047
+ }
3048
+ ],
3049
+ "failures": [],
3050
+ "error": null
3051
+ },
3052
+ {
3053
+ "id": "already-refunded:customer",
3054
+ "entry": "customer",
3055
+ "label": "Already refunded",
3056
+ "status": "PASS",
3057
+ "calls": [
3058
+ {
3059
+ "expected": {
3060
+ "ok": false,
3061
+ "code": "ALREADY_REFUNDED",
3062
+ "sinkCalls": 0,
3063
+ "orderAfterRefunded": true
3064
+ },
3065
+ "observed": {
3066
+ "result": {
3067
+ "ok": false,
3068
+ "code": "ALREADY_REFUNDED"
3069
+ },
3070
+ "sinkCalls": 0,
3071
+ "events": [],
3072
+ "orderAfter": {
3073
+ "id": "order-refunded",
3074
+ "ownerId": "actor-owner",
3075
+ "paymentStatus": "paid",
3076
+ "amountCents": 3300,
3077
+ "currency": "USD",
3078
+ "refunded": true
3079
+ },
3080
+ "snapshotBefore": {
3081
+ "orders": [
3082
+ {
3083
+ "id": "order-refunded",
3084
+ "ownerId": "actor-owner",
3085
+ "paymentStatus": "paid",
3086
+ "amountCents": 3300,
3087
+ "currency": "USD",
3088
+ "refunded": true
3089
+ }
3090
+ ],
3091
+ "events": []
3092
+ },
3093
+ "snapshotAfter": {
3094
+ "orders": [
3095
+ {
3096
+ "id": "order-refunded",
3097
+ "ownerId": "actor-owner",
3098
+ "paymentStatus": "paid",
3099
+ "amountCents": 3300,
3100
+ "currency": "USD",
3101
+ "refunded": true
3102
+ }
3103
+ ],
3104
+ "events": []
3105
+ }
3106
+ }
3107
+ }
3108
+ ],
3109
+ "failures": [],
3110
+ "error": null
3111
+ },
3112
+ {
3113
+ "id": "already-refunded:support",
3114
+ "entry": "support",
3115
+ "label": "Already refunded",
3116
+ "status": "PASS",
3117
+ "calls": [
3118
+ {
3119
+ "expected": {
3120
+ "ok": false,
3121
+ "code": "ALREADY_REFUNDED",
3122
+ "sinkCalls": 0,
3123
+ "orderAfterRefunded": true
3124
+ },
3125
+ "observed": {
3126
+ "result": {
3127
+ "ok": false,
3128
+ "code": "ALREADY_REFUNDED"
3129
+ },
3130
+ "sinkCalls": 0,
3131
+ "events": [],
3132
+ "orderAfter": {
3133
+ "id": "order-refunded",
3134
+ "ownerId": "actor-owner",
3135
+ "paymentStatus": "paid",
3136
+ "amountCents": 3300,
3137
+ "currency": "USD",
3138
+ "refunded": true
3139
+ },
3140
+ "snapshotBefore": {
3141
+ "orders": [
3142
+ {
3143
+ "id": "order-refunded",
3144
+ "ownerId": "actor-owner",
3145
+ "paymentStatus": "paid",
3146
+ "amountCents": 3300,
3147
+ "currency": "USD",
3148
+ "refunded": true
3149
+ }
3150
+ ],
3151
+ "events": []
3152
+ },
3153
+ "snapshotAfter": {
3154
+ "orders": [
3155
+ {
3156
+ "id": "order-refunded",
3157
+ "ownerId": "actor-owner",
3158
+ "paymentStatus": "paid",
3159
+ "amountCents": 3300,
3160
+ "currency": "USD",
3161
+ "refunded": true
3162
+ }
3163
+ ],
3164
+ "events": []
3165
+ }
3166
+ }
3167
+ }
3168
+ ],
3169
+ "failures": [],
3170
+ "error": null
3171
+ },
3172
+ {
3173
+ "id": "repeat-request:customer",
3174
+ "entry": "customer",
3175
+ "label": "Repeat request",
3176
+ "status": "PASS",
3177
+ "calls": [
3178
+ {
3179
+ "expected": {
3180
+ "ok": true,
3181
+ "code": "REFUNDED",
3182
+ "sinkCalls": 1,
3183
+ "event": {
3184
+ "orderId": "order-paid",
3185
+ "actorId": "actor-owner",
3186
+ "amountCents": 4900,
3187
+ "currency": "USD"
3188
+ },
3189
+ "orderAfterRefunded": true
3190
+ },
3191
+ "observed": {
3192
+ "result": {
3193
+ "ok": true,
3194
+ "code": "REFUNDED",
3195
+ "refundId": "refund-1"
3196
+ },
3197
+ "sinkCalls": 1,
3198
+ "events": [
3199
+ {
3200
+ "refundId": "refund-1",
3201
+ "orderId": "order-paid",
3202
+ "actorId": "actor-owner",
3203
+ "amountCents": 4900,
3204
+ "currency": "USD"
3205
+ }
3206
+ ],
3207
+ "orderAfter": {
3208
+ "id": "order-paid",
3209
+ "ownerId": "actor-owner",
3210
+ "paymentStatus": "paid",
3211
+ "amountCents": 4900,
3212
+ "currency": "USD",
3213
+ "refunded": true
3214
+ },
3215
+ "snapshotBefore": {
3216
+ "orders": [
3217
+ {
3218
+ "id": "order-paid",
3219
+ "ownerId": "actor-owner",
3220
+ "paymentStatus": "paid",
3221
+ "amountCents": 4900,
3222
+ "currency": "USD",
3223
+ "refunded": false
3224
+ }
3225
+ ],
3226
+ "events": []
3227
+ },
3228
+ "snapshotAfter": {
3229
+ "orders": [
3230
+ {
3231
+ "id": "order-paid",
3232
+ "ownerId": "actor-owner",
3233
+ "paymentStatus": "paid",
3234
+ "amountCents": 4900,
3235
+ "currency": "USD",
3236
+ "refunded": true
3237
+ }
3238
+ ],
3239
+ "events": [
3240
+ {
3241
+ "refundId": "refund-1",
3242
+ "orderId": "order-paid",
3243
+ "actorId": "actor-owner",
3244
+ "amountCents": 4900,
3245
+ "currency": "USD"
3246
+ }
3247
+ ]
3248
+ }
3249
+ }
3250
+ },
3251
+ {
3252
+ "expected": {
3253
+ "ok": false,
3254
+ "code": "ALREADY_REFUNDED",
3255
+ "sinkCalls": 0,
3256
+ "orderAfterRefunded": true
3257
+ },
3258
+ "observed": {
3259
+ "result": {
3260
+ "ok": false,
3261
+ "code": "ALREADY_REFUNDED"
3262
+ },
3263
+ "sinkCalls": 0,
3264
+ "events": [],
3265
+ "orderAfter": {
3266
+ "id": "order-paid",
3267
+ "ownerId": "actor-owner",
3268
+ "paymentStatus": "paid",
3269
+ "amountCents": 4900,
3270
+ "currency": "USD",
3271
+ "refunded": true
3272
+ },
3273
+ "snapshotBefore": {
3274
+ "orders": [
3275
+ {
3276
+ "id": "order-paid",
3277
+ "ownerId": "actor-owner",
3278
+ "paymentStatus": "paid",
3279
+ "amountCents": 4900,
3280
+ "currency": "USD",
3281
+ "refunded": true
3282
+ }
3283
+ ],
3284
+ "events": [
3285
+ {
3286
+ "refundId": "refund-1",
3287
+ "orderId": "order-paid",
3288
+ "actorId": "actor-owner",
3289
+ "amountCents": 4900,
3290
+ "currency": "USD"
3291
+ }
3292
+ ]
3293
+ },
3294
+ "snapshotAfter": {
3295
+ "orders": [
3296
+ {
3297
+ "id": "order-paid",
3298
+ "ownerId": "actor-owner",
3299
+ "paymentStatus": "paid",
3300
+ "amountCents": 4900,
3301
+ "currency": "USD",
3302
+ "refunded": true
3303
+ }
3304
+ ],
3305
+ "events": [
3306
+ {
3307
+ "refundId": "refund-1",
3308
+ "orderId": "order-paid",
3309
+ "actorId": "actor-owner",
3310
+ "amountCents": 4900,
3311
+ "currency": "USD"
3312
+ }
3313
+ ]
3314
+ }
3315
+ }
3316
+ }
3317
+ ],
3318
+ "failures": [],
3319
+ "error": null
3320
+ },
3321
+ {
3322
+ "id": "repeat-request:support",
3323
+ "entry": "support",
3324
+ "label": "Repeat request",
3325
+ "status": "PASS",
3326
+ "calls": [
3327
+ {
3328
+ "expected": {
3329
+ "ok": true,
3330
+ "code": "REFUNDED",
3331
+ "sinkCalls": 1,
3332
+ "event": {
3333
+ "orderId": "order-paid",
3334
+ "actorId": "actor-owner",
3335
+ "amountCents": 4900,
3336
+ "currency": "USD"
3337
+ },
3338
+ "orderAfterRefunded": true
3339
+ },
3340
+ "observed": {
3341
+ "result": {
3342
+ "ok": true,
3343
+ "code": "REFUNDED",
3344
+ "refundId": "refund-1"
3345
+ },
3346
+ "sinkCalls": 1,
3347
+ "events": [
3348
+ {
3349
+ "refundId": "refund-1",
3350
+ "orderId": "order-paid",
3351
+ "actorId": "actor-owner",
3352
+ "amountCents": 4900,
3353
+ "currency": "USD"
3354
+ }
3355
+ ],
3356
+ "orderAfter": {
3357
+ "id": "order-paid",
3358
+ "ownerId": "actor-owner",
3359
+ "paymentStatus": "paid",
3360
+ "amountCents": 4900,
3361
+ "currency": "USD",
3362
+ "refunded": true
3363
+ },
3364
+ "snapshotBefore": {
3365
+ "orders": [
3366
+ {
3367
+ "id": "order-paid",
3368
+ "ownerId": "actor-owner",
3369
+ "paymentStatus": "paid",
3370
+ "amountCents": 4900,
3371
+ "currency": "USD",
3372
+ "refunded": false
3373
+ }
3374
+ ],
3375
+ "events": []
3376
+ },
3377
+ "snapshotAfter": {
3378
+ "orders": [
3379
+ {
3380
+ "id": "order-paid",
3381
+ "ownerId": "actor-owner",
3382
+ "paymentStatus": "paid",
3383
+ "amountCents": 4900,
3384
+ "currency": "USD",
3385
+ "refunded": true
3386
+ }
3387
+ ],
3388
+ "events": [
3389
+ {
3390
+ "refundId": "refund-1",
3391
+ "orderId": "order-paid",
3392
+ "actorId": "actor-owner",
3393
+ "amountCents": 4900,
3394
+ "currency": "USD"
3395
+ }
3396
+ ]
3397
+ }
3398
+ }
3399
+ },
3400
+ {
3401
+ "expected": {
3402
+ "ok": false,
3403
+ "code": "ALREADY_REFUNDED",
3404
+ "sinkCalls": 0,
3405
+ "orderAfterRefunded": true
3406
+ },
3407
+ "observed": {
3408
+ "result": {
3409
+ "ok": false,
3410
+ "code": "ALREADY_REFUNDED"
3411
+ },
3412
+ "sinkCalls": 0,
3413
+ "events": [],
3414
+ "orderAfter": {
3415
+ "id": "order-paid",
3416
+ "ownerId": "actor-owner",
3417
+ "paymentStatus": "paid",
3418
+ "amountCents": 4900,
3419
+ "currency": "USD",
3420
+ "refunded": true
3421
+ },
3422
+ "snapshotBefore": {
3423
+ "orders": [
3424
+ {
3425
+ "id": "order-paid",
3426
+ "ownerId": "actor-owner",
3427
+ "paymentStatus": "paid",
3428
+ "amountCents": 4900,
3429
+ "currency": "USD",
3430
+ "refunded": true
3431
+ }
3432
+ ],
3433
+ "events": [
3434
+ {
3435
+ "refundId": "refund-1",
3436
+ "orderId": "order-paid",
3437
+ "actorId": "actor-owner",
3438
+ "amountCents": 4900,
3439
+ "currency": "USD"
3440
+ }
3441
+ ]
3442
+ },
3443
+ "snapshotAfter": {
3444
+ "orders": [
3445
+ {
3446
+ "id": "order-paid",
3447
+ "ownerId": "actor-owner",
3448
+ "paymentStatus": "paid",
3449
+ "amountCents": 4900,
3450
+ "currency": "USD",
3451
+ "refunded": true
3452
+ }
3453
+ ],
3454
+ "events": [
3455
+ {
3456
+ "refundId": "refund-1",
3457
+ "orderId": "order-paid",
3458
+ "actorId": "actor-owner",
3459
+ "amountCents": 4900,
3460
+ "currency": "USD"
3461
+ }
3462
+ ]
3463
+ }
3464
+ }
3465
+ }
3466
+ ],
3467
+ "failures": [],
3468
+ "error": null
3469
+ }
3470
+ ]
3471
+ }
3472
+ ]
3473
+ }