@volontariapp/post-processors 1.0.0-snap-856af13 → 1.0.0-snap-fb20f49

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.
Files changed (194) hide show
  1. package/dist/constants/config.default.d.ts +27 -0
  2. package/dist/constants/config.default.d.ts.map +1 -0
  3. package/dist/constants/config.default.js +29 -0
  4. package/dist/constants/config.default.js.map +1 -0
  5. package/dist/constants/index.d.ts +2 -0
  6. package/dist/constants/index.d.ts.map +1 -0
  7. package/dist/constants/index.js +2 -0
  8. package/dist/constants/index.js.map +1 -0
  9. package/dist/core/helpers/index.d.ts +3 -0
  10. package/dist/core/helpers/index.d.ts.map +1 -0
  11. package/dist/core/helpers/index.js +3 -0
  12. package/dist/core/helpers/index.js.map +1 -0
  13. package/dist/core/{redis-stream.helper.d.ts → helpers/redis-stream.helper.d.ts} +2 -2
  14. package/dist/core/helpers/redis-stream.helper.d.ts.map +1 -0
  15. package/dist/core/helpers/redis-stream.helper.js.map +1 -0
  16. package/dist/core/helpers/retry.helper.d.ts +24 -0
  17. package/dist/core/helpers/retry.helper.d.ts.map +1 -0
  18. package/dist/core/helpers/retry.helper.js +104 -0
  19. package/dist/core/helpers/retry.helper.js.map +1 -0
  20. package/dist/core/index.d.ts +7 -4
  21. package/dist/core/index.d.ts.map +1 -1
  22. package/dist/core/index.js +7 -4
  23. package/dist/core/index.js.map +1 -1
  24. package/dist/core/processors/base.post-processor.d.ts +46 -0
  25. package/dist/core/processors/base.post-processor.d.ts.map +1 -0
  26. package/dist/core/processors/base.post-processor.js +422 -0
  27. package/dist/core/processors/base.post-processor.js.map +1 -0
  28. package/dist/core/{batch.post-processor.d.ts → processors/batch.post-processor.d.ts} +3 -2
  29. package/dist/core/processors/batch.post-processor.d.ts.map +1 -0
  30. package/dist/core/{batch.post-processor.js → processors/batch.post-processor.js} +56 -5
  31. package/dist/core/processors/batch.post-processor.js.map +1 -0
  32. package/dist/core/processors/index.d.ts +4 -0
  33. package/dist/core/processors/index.d.ts.map +1 -0
  34. package/dist/core/processors/index.js +4 -0
  35. package/dist/core/processors/index.js.map +1 -0
  36. package/dist/core/{single.post-processor.d.ts → processors/single.post-processor.d.ts} +3 -1
  37. package/dist/core/processors/single.post-processor.d.ts.map +1 -0
  38. package/dist/core/processors/single.post-processor.js +120 -0
  39. package/dist/core/processors/single.post-processor.js.map +1 -0
  40. package/dist/core/validators/circuit-breaker.d.ts +27 -0
  41. package/dist/core/validators/circuit-breaker.d.ts.map +1 -0
  42. package/dist/core/validators/circuit-breaker.js +83 -0
  43. package/dist/core/validators/circuit-breaker.js.map +1 -0
  44. package/dist/core/validators/index.d.ts +2 -0
  45. package/dist/core/validators/index.d.ts.map +1 -0
  46. package/dist/core/validators/index.js +2 -0
  47. package/dist/core/validators/index.js.map +1 -0
  48. package/dist/core/validators/options-validator.d.ts +5 -0
  49. package/dist/core/validators/options-validator.d.ts.map +1 -0
  50. package/dist/core/validators/options-validator.js +90 -0
  51. package/dist/core/validators/options-validator.js.map +1 -0
  52. package/dist/enums/circuit-breaker-state.enum.d.ts +6 -0
  53. package/dist/enums/circuit-breaker-state.enum.d.ts.map +1 -0
  54. package/dist/enums/circuit-breaker-state.enum.js +7 -0
  55. package/dist/enums/circuit-breaker-state.enum.js.map +1 -0
  56. package/dist/enums/index.d.ts +2 -0
  57. package/dist/enums/index.d.ts.map +1 -0
  58. package/dist/enums/index.js +2 -0
  59. package/dist/enums/index.js.map +1 -0
  60. package/dist/index.d.ts +2 -0
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +2 -0
  63. package/dist/index.js.map +1 -1
  64. package/dist/interfaces/index.d.ts +7 -3
  65. package/dist/interfaces/index.d.ts.map +1 -1
  66. package/dist/interfaces/{batch-event-item.interface.d.ts → processors/batch-event-item.interface.d.ts} +1 -1
  67. package/dist/interfaces/processors/batch-event-item.interface.d.ts.map +1 -0
  68. package/dist/interfaces/processors/batch-event-item.interface.js.map +1 -0
  69. package/dist/interfaces/processors/normalized-post-processor-options.interface.d.ts +6 -0
  70. package/dist/interfaces/processors/normalized-post-processor-options.interface.d.ts.map +1 -0
  71. package/dist/interfaces/processors/normalized-post-processor-options.interface.js +2 -0
  72. package/dist/interfaces/processors/normalized-post-processor-options.interface.js.map +1 -0
  73. package/dist/interfaces/processors/pending-message-info.interface.d.ts.map +1 -0
  74. package/dist/interfaces/processors/pending-message-info.interface.js.map +1 -0
  75. package/dist/interfaces/processors/post-processor-options.interface.d.ts +21 -0
  76. package/dist/interfaces/processors/post-processor-options.interface.d.ts.map +1 -0
  77. package/dist/interfaces/processors/post-processor-options.interface.js.map +1 -0
  78. package/dist/interfaces/retry/retry-metadata.interface.d.ts +6 -0
  79. package/dist/interfaces/retry/retry-metadata.interface.d.ts.map +1 -0
  80. package/dist/interfaces/retry/retry-metadata.interface.js +2 -0
  81. package/dist/interfaces/retry/retry-metadata.interface.js.map +1 -0
  82. package/dist/interfaces/retry/retry-options.interface.d.ts +8 -0
  83. package/dist/interfaces/retry/retry-options.interface.d.ts.map +1 -0
  84. package/dist/interfaces/retry/retry-options.interface.js +2 -0
  85. package/dist/interfaces/retry/retry-options.interface.js.map +1 -0
  86. package/dist/interfaces/validators/circuit-breaker-config.interface.d.ts +6 -0
  87. package/dist/interfaces/validators/circuit-breaker-config.interface.d.ts.map +1 -0
  88. package/dist/interfaces/validators/circuit-breaker-config.interface.js +2 -0
  89. package/dist/interfaces/validators/circuit-breaker-config.interface.js.map +1 -0
  90. package/dist/test/data-source.d.ts.map +1 -0
  91. package/dist/test/data-source.js.map +1 -0
  92. package/dist/test/migrations/1776783577425-CreateJobsOutbox.d.ts.map +1 -0
  93. package/dist/test/migrations/1776783577425-CreateJobsOutbox.js.map +1 -0
  94. package/dist/test/migrations/1778328780881-InitialSchemaJobAudit.d.ts.map +1 -0
  95. package/dist/test/migrations/1778328780881-InitialSchemaJobAudit.js.map +1 -0
  96. package/dist/test/specs/batch-post-processor/batch-post-processor.int.spec.js +92 -4
  97. package/dist/test/specs/batch-post-processor/batch-post-processor.int.spec.js.map +1 -1
  98. package/dist/test/specs/batch-post-processor/batch-post-processor.unit.spec.js +174 -7
  99. package/dist/test/specs/batch-post-processor/batch-post-processor.unit.spec.js.map +1 -1
  100. package/dist/test/specs/helpers/redis-stream-helper.int.spec.d.ts +2 -0
  101. package/dist/test/specs/helpers/redis-stream-helper.int.spec.d.ts.map +1 -0
  102. package/dist/test/specs/helpers/redis-stream-helper.int.spec.js +56 -0
  103. package/dist/test/specs/helpers/redis-stream-helper.int.spec.js.map +1 -0
  104. package/dist/test/specs/helpers/redis-stream-helper.unit.spec.d.ts +2 -0
  105. package/dist/test/specs/helpers/redis-stream-helper.unit.spec.d.ts.map +1 -0
  106. package/dist/test/specs/helpers/redis-stream-helper.unit.spec.js +102 -0
  107. package/dist/test/specs/helpers/redis-stream-helper.unit.spec.js.map +1 -0
  108. package/dist/test/specs/helpers/retry-helper.int.spec.d.ts +2 -0
  109. package/dist/test/specs/helpers/retry-helper.int.spec.d.ts.map +1 -0
  110. package/dist/test/specs/helpers/retry-helper.int.spec.js +101 -0
  111. package/dist/test/specs/helpers/retry-helper.int.spec.js.map +1 -0
  112. package/dist/test/specs/helpers/retry-helper.unit.spec.d.ts +2 -0
  113. package/dist/test/specs/helpers/retry-helper.unit.spec.d.ts.map +1 -0
  114. package/dist/test/specs/helpers/retry-helper.unit.spec.js +202 -0
  115. package/dist/test/specs/helpers/retry-helper.unit.spec.js.map +1 -0
  116. package/dist/test/specs/integration/circuit-breaker.integration.spec.d.ts +2 -0
  117. package/dist/test/specs/integration/circuit-breaker.integration.spec.d.ts.map +1 -0
  118. package/dist/test/specs/integration/circuit-breaker.integration.spec.js +112 -0
  119. package/dist/test/specs/integration/circuit-breaker.integration.spec.js.map +1 -0
  120. package/dist/test/specs/single-post-processor/single-post-processor-retry.int.spec.d.ts +2 -0
  121. package/dist/test/specs/single-post-processor/single-post-processor-retry.int.spec.d.ts.map +1 -0
  122. package/dist/test/specs/single-post-processor/single-post-processor-retry.int.spec.js +142 -0
  123. package/dist/test/specs/single-post-processor/single-post-processor-retry.int.spec.js.map +1 -0
  124. package/dist/test/specs/single-post-processor/single-post-processor.int.spec.js +49 -7
  125. package/dist/test/specs/single-post-processor/single-post-processor.int.spec.js.map +1 -1
  126. package/dist/test/specs/single-post-processor/single-post-processor.unit.spec.js +110 -22
  127. package/dist/test/specs/single-post-processor/single-post-processor.unit.spec.js.map +1 -1
  128. package/dist/test/specs/validators/options-validator.unit.spec.d.ts +2 -0
  129. package/dist/test/specs/validators/options-validator.unit.spec.d.ts.map +1 -0
  130. package/dist/test/specs/validators/options-validator.unit.spec.js +290 -0
  131. package/dist/test/specs/validators/options-validator.unit.spec.js.map +1 -0
  132. package/dist/test/utils/classes/test-batch-post-processor.class.d.ts +2 -1
  133. package/dist/test/utils/classes/test-batch-post-processor.class.d.ts.map +1 -1
  134. package/dist/test/utils/classes/test-batch-post-processor.class.js +4 -1
  135. package/dist/test/utils/classes/test-batch-post-processor.class.js.map +1 -1
  136. package/dist/test/utils/classes/test-post-processor.class.d.ts +2 -1
  137. package/dist/test/utils/classes/test-post-processor.class.d.ts.map +1 -1
  138. package/dist/test/utils/classes/test-post-processor.class.js +4 -1
  139. package/dist/test/utils/classes/test-post-processor.class.js.map +1 -1
  140. package/dist/test/utils/helpers/wait.helper.d.ts +2 -0
  141. package/dist/test/utils/helpers/wait.helper.d.ts.map +1 -0
  142. package/dist/test/utils/helpers/wait.helper.js +11 -0
  143. package/dist/test/utils/helpers/wait.helper.js.map +1 -0
  144. package/dist/test/utils/index.d.ts +1 -0
  145. package/dist/test/utils/index.d.ts.map +1 -1
  146. package/dist/test/utils/index.js +1 -0
  147. package/dist/test/utils/index.js.map +1 -1
  148. package/dist/test/utils/mocks/redis-call.mock.d.ts.map +1 -1
  149. package/dist/test/utils/mocks/redis-call.mock.js +9 -0
  150. package/dist/test/utils/mocks/redis-call.mock.js.map +1 -1
  151. package/dist/types/index.d.ts +1 -0
  152. package/dist/types/index.d.ts.map +1 -1
  153. package/dist/types/index.js +1 -1
  154. package/dist/types/index.js.map +1 -1
  155. package/dist/types/parse-event.types.d.ts +13 -0
  156. package/dist/types/parse-event.types.d.ts.map +1 -0
  157. package/dist/types/parse-event.types.js +2 -0
  158. package/dist/types/parse-event.types.js.map +1 -0
  159. package/package.json +1 -1
  160. package/dist/core/base.post-processor.d.ts +0 -27
  161. package/dist/core/base.post-processor.d.ts.map +0 -1
  162. package/dist/core/base.post-processor.js +0 -206
  163. package/dist/core/base.post-processor.js.map +0 -1
  164. package/dist/core/batch.post-processor.d.ts.map +0 -1
  165. package/dist/core/batch.post-processor.js.map +0 -1
  166. package/dist/core/redis-stream.helper.d.ts.map +0 -1
  167. package/dist/core/redis-stream.helper.js.map +0 -1
  168. package/dist/core/single.post-processor.d.ts.map +0 -1
  169. package/dist/core/single.post-processor.js +0 -58
  170. package/dist/core/single.post-processor.js.map +0 -1
  171. package/dist/data-source.d.ts.map +0 -1
  172. package/dist/data-source.js.map +0 -1
  173. package/dist/interfaces/batch-event-item.interface.d.ts.map +0 -1
  174. package/dist/interfaces/batch-event-item.interface.js.map +0 -1
  175. package/dist/interfaces/pending-message-info.interface.d.ts.map +0 -1
  176. package/dist/interfaces/pending-message-info.interface.js.map +0 -1
  177. package/dist/interfaces/post-processor-options.interface.d.ts +0 -11
  178. package/dist/interfaces/post-processor-options.interface.d.ts.map +0 -1
  179. package/dist/interfaces/post-processor-options.interface.js.map +0 -1
  180. package/dist/migrations/1776783577425-CreateJobsOutbox.d.ts.map +0 -1
  181. package/dist/migrations/1776783577425-CreateJobsOutbox.js.map +0 -1
  182. package/dist/migrations/1778328780881-InitialSchemaJobAudit.d.ts.map +0 -1
  183. package/dist/migrations/1778328780881-InitialSchemaJobAudit.js.map +0 -1
  184. /package/dist/core/{redis-stream.helper.js → helpers/redis-stream.helper.js} +0 -0
  185. /package/dist/interfaces/{batch-event-item.interface.js → processors/batch-event-item.interface.js} +0 -0
  186. /package/dist/interfaces/{pending-message-info.interface.d.ts → processors/pending-message-info.interface.d.ts} +0 -0
  187. /package/dist/interfaces/{pending-message-info.interface.js → processors/pending-message-info.interface.js} +0 -0
  188. /package/dist/interfaces/{post-processor-options.interface.js → processors/post-processor-options.interface.js} +0 -0
  189. /package/dist/{data-source.d.ts → test/data-source.d.ts} +0 -0
  190. /package/dist/{data-source.js → test/data-source.js} +0 -0
  191. /package/dist/{migrations → test/migrations}/1776783577425-CreateJobsOutbox.d.ts +0 -0
  192. /package/dist/{migrations → test/migrations}/1776783577425-CreateJobsOutbox.js +0 -0
  193. /package/dist/{migrations → test/migrations}/1778328780881-InitialSchemaJobAudit.d.ts +0 -0
  194. /package/dist/{migrations → test/migrations}/1778328780881-InitialSchemaJobAudit.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"1776783577425-CreateJobsOutbox.d.ts","sourceRoot":"","sources":["../../../src/test/migrations/1776783577425-CreateJobsOutbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE/D,qBAAa,6BAA8B,YAAW,kBAAkB;IACtE,IAAI,SAAmC;IAE1B,EAAE,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB3C,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAG3D"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"1776783577425-CreateJobsOutbox.js","sourceRoot":"","sources":["../../../src/test/migrations/1776783577425-CreateJobsOutbox.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,6BAA6B;IACxC,IAAI,GAAG,+BAA+B,CAAC;IAEhC,KAAK,CAAC,EAAE,CAAC,WAAwB;QACtC,MAAM,WAAW,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QACtE,MAAM,WAAW,CAAC,KAAK,CACrB;;;;;;;;;;;;;;QAcE,CACH,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,WAAwB;QACxC,MAAM,WAAW,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACtD,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"1778328780881-InitialSchemaJobAudit.d.ts","sourceRoot":"","sources":["../../../src/test/migrations/1778328780881-InitialSchemaJobAudit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAEvF,qBAAa,kCAAmC,YAAW,kBAAkB;IAC9D,EAAE,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA2F3C,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAG3D"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"1778328780881-InitialSchemaJobAudit.js","sourceRoot":"","sources":["../../../src/test/migrations/1778328780881-InitialSchemaJobAudit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAA6C,MAAM,SAAS,CAAC;AAEvF,MAAM,OAAO,kCAAkC;IACtC,KAAK,CAAC,EAAE,CAAC,WAAwB;QACtC,MAAM,WAAW,CAAC,WAAW,CAC3B,IAAI,KAAK,CAAC;YACR,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,IAAI;oBACV,IAAI,EAAE,MAAM;oBACZ,SAAS,EAAE,IAAI;oBACf,WAAW,EAAE,IAAI;oBACjB,kBAAkB,EAAE,MAAM;oBAC1B,OAAO,EAAE,mBAAmB;iBAC7B;gBACD;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,SAAS;oBACf,MAAM,EAAE,KAAK;oBACb,UAAU,EAAE,KAAK;oBACjB,QAAQ,EAAE,IAAI;iBACf;gBACD;oBACE,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,SAAS;oBACf,MAAM,EAAE,KAAK;oBACb,UAAU,EAAE,KAAK;iBAClB;gBACD;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,SAAS;oBACf,MAAM,EAAE,IAAI;oBACZ,OAAO,EAAE,WAAW;iBACrB;gBACD;oBACE,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,SAAS;oBACf,MAAM,EAAE,KAAK;oBACb,UAAU,EAAE,KAAK;iBAClB;gBACD;oBACE,IAAI,EAAE,iBAAiB;oBACvB,IAAI,EAAE,KAAK;oBACX,OAAO,EAAE,CAAC;iBACX;gBACD;oBACE,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,WAAW;oBACjB,UAAU,EAAE,IAAI;iBACjB;gBACD;oBACE,IAAI,EAAE,aAAa;oBACnB,IAAI,EAAE,WAAW;oBACjB,UAAU,EAAE,IAAI;iBACjB;gBACD;oBACE,IAAI,EAAE,gBAAgB;oBACtB,IAAI,EAAE,OAAO;oBACb,UAAU,EAAE,IAAI;iBACjB;gBACD;oBACE,IAAI,EAAE,eAAe;oBACrB,IAAI,EAAE,MAAM;oBACZ,UAAU,EAAE,IAAI;iBACjB;gBACD;oBACE,IAAI,EAAE,aAAa;oBACnB,IAAI,EAAE,MAAM;oBACZ,UAAU,EAAE,IAAI;iBACjB;gBACD;oBACE,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,OAAO;iBACjB;gBACD;oBACE,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,OAAO;iBACjB;aACF;SACF,CAAC,EACF,IAAI,CACL,CAAC;QAEF,MAAM,WAAW,CAAC,aAAa,CAAC,WAAW,EAAE;YAC3C,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC3D,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7C,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9C,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;SAC5C,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,WAAwB;QACxC,MAAM,WAAW,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;CACF"}
@@ -1,7 +1,8 @@
1
- import { describe, it, expect, beforeEach, afterEach, beforeAll, afterAll } from '@jest/globals';
1
+ import { describe, it, expect, beforeEach, afterEach, beforeAll, afterAll, jest, } from '@jest/globals';
2
2
  import { Redis } from 'ioredis';
3
3
  import { testRedisOptions } from '../../redis-config.js';
4
- import { TestBatchPostProcessor, makeTestEvent, pushTestEventToStream, TestMessagingStream, TestMessagingGroup, TestMessagingConsumer, } from '../../utils/index.js';
4
+ import { CircuitBreakerState } from '../../../enums/circuit-breaker-state.enum.js';
5
+ import { TestBatchPostProcessor, makeTestEvent, pushTestEventToStream, TestMessagingStream, TestMessagingGroup, TestMessagingConsumer, waitFor, } from '../../utils/index.js';
5
6
  describe('BatchPostProcessor — Integration', () => {
6
7
  let redis;
7
8
  let processor;
@@ -17,10 +18,22 @@ describe('BatchPostProcessor — Integration', () => {
17
18
  streamName: TestMessagingStream.TEST_STREAM,
18
19
  groupName: TestMessagingGroup.TEST_GROUP,
19
20
  consumerName: TestMessagingConsumer.TEST_CONSUMER,
20
- claimIntervalMs: 500,
21
- claimMinIdleTimeMs: 100,
21
+ claimIntervalMs: 200,
22
+ claimMinIdleTimeMs: 50,
22
23
  blockMs: 50,
23
24
  batchSize: 10,
25
+ circuitBreaker: {
26
+ failureThreshold: 3,
27
+ resetTimeoutMs: 1000,
28
+ successThreshold: 1,
29
+ },
30
+ retry: {
31
+ maxRetries: 2,
32
+ initialDelayMs: 100,
33
+ maxDelayMs: 500,
34
+ backoffMultiplier: 2,
35
+ enableDlq: true,
36
+ },
24
37
  });
25
38
  });
26
39
  afterEach(async () => {
@@ -83,5 +96,80 @@ describe('BatchPostProcessor — Integration', () => {
83
96
  expect(await redis.get(key1)).toBeNull();
84
97
  expect(await redis.get(key2)).toBeNull();
85
98
  });
99
+ it('should retry batch items individually and recover on subsequent retry loops', async () => {
100
+ const eventPayload1 = makeTestEvent('evt-batch-retry1');
101
+ const eventPayload2 = makeTestEvent('evt-batch-retry2');
102
+ await pushTestEventToStream(redis, TestMessagingStream.TEST_STREAM, 'evt-batch-retry1', eventPayload1);
103
+ await pushTestEventToStream(redis, TestMessagingStream.TEST_STREAM, 'evt-batch-retry2', eventPayload2);
104
+ processor.processError = new Error('Database locks');
105
+ await processor.start();
106
+ const retryQueueKey = `retry-queue:post-processor:${TestMessagingGroup.TEST_GROUP}`;
107
+ await waitFor(async () => {
108
+ const count = await redis.zcard(retryQueueKey);
109
+ return count === 2;
110
+ });
111
+ expect(processor.processedBatches).toHaveLength(0);
112
+ processor.processError = null;
113
+ await waitFor(() => processor.processedBatches.length >= 1, 3000);
114
+ const processedIds = processor.processedBatches.flat().map((item) => item.event.id);
115
+ expect(processedIds).toContain('evt-batch-retry1');
116
+ expect(processedIds).toContain('evt-batch-retry2');
117
+ });
118
+ it('should adjust batch size dynamically based on slow processing latency', async () => {
119
+ await processor.stop();
120
+ const dynamicProcessor = new TestBatchPostProcessor(redis, {
121
+ streamName: TestMessagingStream.TEST_STREAM,
122
+ groupName: TestMessagingGroup.TEST_GROUP,
123
+ consumerName: TestMessagingConsumer.TEST_CONSUMER,
124
+ claimIntervalMs: 500,
125
+ blockMs: 50,
126
+ batchSize: 10,
127
+ dynamicBatching: {
128
+ enabled: true,
129
+ minBatchSize: 2,
130
+ maxBatchSize: 10,
131
+ targetLatencyMs: 10,
132
+ },
133
+ });
134
+ const eventPayload = makeTestEvent('evt-latency');
135
+ await pushTestEventToStream(redis, TestMessagingStream.TEST_STREAM, 'evt-latency', eventPayload);
136
+ const originalProcess = dynamicProcessor.processEvents.bind(dynamicProcessor);
137
+ jest.spyOn(dynamicProcessor, 'processEvents').mockImplementation(async (events) => {
138
+ await new Promise((resolve) => setTimeout(resolve, 30));
139
+ await originalProcess(events);
140
+ });
141
+ await dynamicProcessor.start();
142
+ await new Promise((resolve) => setTimeout(resolve, 300));
143
+ expect(dynamicProcessor.getCurrentBatchSize()).toBe(8);
144
+ await dynamicProcessor.stop();
145
+ });
146
+ it('should trip circuit breaker on consecutive errors and recover after timeout', async () => {
147
+ await processor.stop();
148
+ const cbProcessor = new TestBatchPostProcessor(redis, {
149
+ streamName: TestMessagingStream.TEST_STREAM,
150
+ groupName: TestMessagingGroup.TEST_GROUP,
151
+ consumerName: TestMessagingConsumer.TEST_CONSUMER,
152
+ claimIntervalMs: 100,
153
+ blockMs: 50,
154
+ batchSize: 10,
155
+ circuitBreaker: {
156
+ failureThreshold: 2,
157
+ resetTimeoutMs: 1000,
158
+ successThreshold: 1,
159
+ },
160
+ });
161
+ await pushTestEventToStream(redis, TestMessagingStream.TEST_STREAM, 'evt-cb-trip1', makeTestEvent('evt-cb-trip1'));
162
+ await pushTestEventToStream(redis, TestMessagingStream.TEST_STREAM, 'evt-cb-trip2', makeTestEvent('evt-cb-trip2'));
163
+ cbProcessor.processError = new Error('Simulated down stream');
164
+ await cbProcessor.start();
165
+ await waitFor(() => cbProcessor.getCircuitBreaker().getDiagnostics().state === CircuitBreakerState.OPEN, 3000);
166
+ expect(cbProcessor.getCircuitBreaker().getDiagnostics().state).toBe(CircuitBreakerState.OPEN);
167
+ cbProcessor.processError = null;
168
+ await new Promise((resolve) => setTimeout(resolve, 1100));
169
+ await pushTestEventToStream(redis, TestMessagingStream.TEST_STREAM, 'evt-cb-probe', makeTestEvent('evt-cb-probe'));
170
+ await waitFor(() => cbProcessor.getCircuitBreaker().getDiagnostics().state === CircuitBreakerState.CLOSED, 3000);
171
+ expect(cbProcessor.getCircuitBreaker().getDiagnostics().state).toBe(CircuitBreakerState.CLOSED);
172
+ await cbProcessor.stop();
173
+ });
86
174
  });
87
175
  //# sourceMappingURL=batch-post-processor.int.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"batch-post-processor.int.spec.js","sourceRoot":"","sources":["../../../../src/test/specs/batch-post-processor/batch-post-processor.int.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"batch-post-processor.int.spec.js","sourceRoot":"","sources":["../../../../src/test/specs/batch-post-processor/batch-post-processor.int.spec.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,10 @@
1
1
  import { describe, it, expect, beforeEach, afterEach, jest } from '@jest/globals';
2
2
  import { createMock } from '@volontariapp/testing';
3
- import { TestBatchPostProcessor, makeTestEvent, TestMessagingStream, TestMessagingGroup, TestMessagingConsumer, mockRedisCall, mockRedisXreadgroup, } from '../../utils/index.js';
4
- describe('BatchPostProcessor', () => {
3
+ import os from 'node:os';
4
+ import v8 from 'node:v8';
5
+ import { CircuitBreakerState } from '../../../enums/circuit-breaker-state.enum.js';
6
+ import { TestBatchPostProcessor, makeTestEvent, TestMessagingStream, TestMessagingGroup, TestMessagingConsumer, mockRedisCall, mockRedisXreadgroup, formatEventsToXreadgroupResponse, } from '../../utils/index.js';
7
+ describe('BatchPostProcessor — Unit', () => {
5
8
  let redisMock;
6
9
  let processor;
7
10
  let callMock;
@@ -15,6 +18,11 @@ describe('BatchPostProcessor', () => {
15
18
  consumerName: TestMessagingConsumer.TEST_CONSUMER,
16
19
  claimIntervalMs: 50,
17
20
  claimMinIdleTimeMs: 100,
21
+ circuitBreaker: {
22
+ failureThreshold: 3,
23
+ resetTimeoutMs: 1000,
24
+ successThreshold: 1,
25
+ },
18
26
  });
19
27
  });
20
28
  afterEach(async () => {
@@ -30,7 +38,7 @@ describe('BatchPostProcessor', () => {
30
38
  ]);
31
39
  const processSpy = jest.spyOn(processor, 'processEvents');
32
40
  await processor.start();
33
- await new Promise((resolve) => setTimeout(resolve, 50));
41
+ await new Promise((resolve) => setTimeout(resolve, 60));
34
42
  expect(processSpy).toHaveBeenCalledTimes(1);
35
43
  expect(processSpy).toHaveBeenCalledWith([
36
44
  expect.objectContaining({
@@ -42,8 +50,20 @@ describe('BatchPostProcessor', () => {
42
50
  messageId: '2-0',
43
51
  }),
44
52
  ]);
45
- expect(callMock).toHaveBeenCalledWith('XACK', TestMessagingStream.TEST_STREAM, TestMessagingGroup.TEST_GROUP, '1-0');
46
- expect(callMock).toHaveBeenCalledWith('XACK', TestMessagingStream.TEST_STREAM, TestMessagingGroup.TEST_GROUP, '2-0');
53
+ const xackCalls = callMock.mock.calls.filter((c) => c[0] === 'XACK');
54
+ expect(xackCalls).toHaveLength(2);
55
+ expect(xackCalls[0]).toEqual([
56
+ 'XACK',
57
+ TestMessagingStream.TEST_STREAM,
58
+ TestMessagingGroup.TEST_GROUP,
59
+ '1-0',
60
+ ]);
61
+ expect(xackCalls[1]).toEqual([
62
+ 'XACK',
63
+ TestMessagingStream.TEST_STREAM,
64
+ TestMessagingGroup.TEST_GROUP,
65
+ '2-0',
66
+ ]);
47
67
  });
48
68
  it('should not acknowledge batch if processEvents throws an error', async () => {
49
69
  const mockEvent = makeTestEvent('evt-1');
@@ -53,9 +73,156 @@ describe('BatchPostProcessor', () => {
53
73
  const processSpy = jest.spyOn(processor, 'processEvents');
54
74
  processor.processError = new Error('Batch processing failed');
55
75
  await processor.start();
56
- await new Promise((resolve) => setTimeout(resolve, 50));
76
+ await new Promise((resolve) => setTimeout(resolve, 60));
57
77
  expect(processSpy).toHaveBeenCalledTimes(1);
58
- expect(callMock).not.toHaveBeenCalledWith('XACK', expect.any(String), expect.any(String), expect.any(String));
78
+ const xackCalls = callMock.mock.calls.filter((c) => c[0] === 'XACK');
79
+ expect(xackCalls).toHaveLength(0);
80
+ });
81
+ });
82
+ describe('Batch Retry & DLQ', () => {
83
+ it('should individually schedule batch items for retry when batch execution fails', async () => {
84
+ const mockEvent1 = makeTestEvent('evt-1');
85
+ const mockEvent2 = makeTestEvent('evt-2');
86
+ mockRedisXreadgroup(callMock, TestMessagingStream.TEST_STREAM, [
87
+ { messageId: '1-0', event: mockEvent1 },
88
+ { messageId: '2-0', event: mockEvent2 },
89
+ ]);
90
+ const zaddSpy = jest.spyOn(redisMock, 'zadd');
91
+ const incrSpy = jest.spyOn(redisMock, 'incr');
92
+ processor.processError = new Error('Database connection failed');
93
+ await processor.start();
94
+ await new Promise((resolve) => setTimeout(resolve, 60));
95
+ const incrCalls = incrSpy.mock.calls;
96
+ expect(incrCalls.length).toBeGreaterThanOrEqual(2);
97
+ expect(incrCalls.some((c) => c[0].includes('1-0:attempt'))).toBe(true);
98
+ expect(incrCalls.some((c) => c[0].includes('2-0:attempt'))).toBe(true);
99
+ const zaddCalls = zaddSpy.mock.calls;
100
+ expect(zaddCalls.length).toBeGreaterThanOrEqual(2);
101
+ expect(zaddCalls.some((c) => String(c[2]) === '1-0')).toBe(true);
102
+ expect(zaddCalls.some((c) => String(c[2]) === '2-0')).toBe(true);
103
+ });
104
+ });
105
+ describe('Dynamic Batching', () => {
106
+ it('should reduce batch size under high memory pressure', async () => {
107
+ const mockEvent = makeTestEvent('evt-1');
108
+ mockRedisXreadgroup(callMock, TestMessagingStream.TEST_STREAM, [
109
+ { messageId: '1-0', event: mockEvent },
110
+ ]);
111
+ const heapSpy = jest.spyOn(v8, 'getHeapStatistics').mockReturnValue({
112
+ total_heap_size: 100,
113
+ total_heap_size_executable: 0,
114
+ total_physical_size: 100,
115
+ total_available_size: 100,
116
+ used_heap_size: 90,
117
+ heap_size_limit: 100,
118
+ malloced_memory: 0,
119
+ peak_malloced_memory: 0,
120
+ does_zap_garbage: 0,
121
+ external_memory: 0,
122
+ total_global_handles_size: 0,
123
+ used_global_handles_size: 0,
124
+ number_of_native_contexts: 0,
125
+ number_of_detached_contexts: 0,
126
+ });
127
+ processor = new TestBatchPostProcessor(redisMock, {
128
+ streamName: TestMessagingStream.TEST_STREAM,
129
+ groupName: TestMessagingGroup.TEST_GROUP,
130
+ consumerName: TestMessagingConsumer.TEST_CONSUMER,
131
+ batchSize: 10,
132
+ dynamicBatching: {
133
+ enabled: true,
134
+ minBatchSize: 2,
135
+ maxBatchSize: 10,
136
+ targetLatencyMs: 100,
137
+ },
138
+ });
139
+ await processor.start();
140
+ await new Promise((resolve) => setTimeout(resolve, 60));
141
+ expect(processor.getCurrentBatchSize()).toBe(2);
142
+ heapSpy.mockRestore();
143
+ });
144
+ it('should reduce batch size under high CPU pressure', async () => {
145
+ const mockEvent = makeTestEvent('evt-1');
146
+ mockRedisXreadgroup(callMock, TestMessagingStream.TEST_STREAM, [
147
+ { messageId: '1-0', event: mockEvent },
148
+ ]);
149
+ const loadSpy = jest.spyOn(os, 'loadavg').mockReturnValue([5.0, 0, 0]);
150
+ const cpusSpy = jest.spyOn(os, 'cpus').mockReturnValue([{}]);
151
+ processor = new TestBatchPostProcessor(redisMock, {
152
+ streamName: TestMessagingStream.TEST_STREAM,
153
+ groupName: TestMessagingGroup.TEST_GROUP,
154
+ consumerName: TestMessagingConsumer.TEST_CONSUMER,
155
+ batchSize: 10,
156
+ dynamicBatching: {
157
+ enabled: true,
158
+ minBatchSize: 2,
159
+ maxBatchSize: 10,
160
+ targetLatencyMs: 100,
161
+ },
162
+ });
163
+ await processor.start();
164
+ await new Promise((resolve) => setTimeout(resolve, 60));
165
+ expect(processor.getCurrentBatchSize()).toBe(7);
166
+ loadSpy.mockRestore();
167
+ cpusSpy.mockRestore();
168
+ });
169
+ it('should adjust batch size based on execution latency', async () => {
170
+ const mockEvent = makeTestEvent('evt-1');
171
+ mockRedisXreadgroup(callMock, TestMessagingStream.TEST_STREAM, [
172
+ { messageId: '1-0', event: mockEvent },
173
+ ]);
174
+ let timeCount = 0;
175
+ const dateSpy = jest.spyOn(Date, 'now').mockImplementation(() => {
176
+ timeCount++;
177
+ if (timeCount === 1)
178
+ return 1000;
179
+ return 1500;
180
+ });
181
+ processor = new TestBatchPostProcessor(redisMock, {
182
+ streamName: TestMessagingStream.TEST_STREAM,
183
+ groupName: TestMessagingGroup.TEST_GROUP,
184
+ consumerName: TestMessagingConsumer.TEST_CONSUMER,
185
+ batchSize: 10,
186
+ dynamicBatching: {
187
+ enabled: true,
188
+ minBatchSize: 3,
189
+ maxBatchSize: 10,
190
+ targetLatencyMs: 100,
191
+ },
192
+ });
193
+ await processor.start();
194
+ await new Promise((resolve) => setTimeout(resolve, 60));
195
+ expect(processor.getCurrentBatchSize()).toBe(8);
196
+ dateSpy.mockRestore();
197
+ });
198
+ });
199
+ describe('Circuit Breaker Integration', () => {
200
+ it('should trip circuit breaker to OPEN on consecutive failed batch cycles', async () => {
201
+ const mockEvent = makeTestEvent('evt-1');
202
+ let xreadgroupCount = 0;
203
+ callMock.mockImplementation(async (command, ..._args) => {
204
+ if (command === 'XGROUP')
205
+ return 'OK';
206
+ if (command === 'XREADGROUP') {
207
+ xreadgroupCount++;
208
+ if (xreadgroupCount <= 3) {
209
+ return formatEventsToXreadgroupResponse(TestMessagingStream.TEST_STREAM, [
210
+ { messageId: '1-0', event: mockEvent },
211
+ ]);
212
+ }
213
+ await new Promise((resolve) => setTimeout(resolve, 50));
214
+ return [];
215
+ }
216
+ if (command === 'SET')
217
+ return 'OK';
218
+ return [];
219
+ });
220
+ processor.processError = new Error('External service timeout');
221
+ await processor.start();
222
+ await new Promise((resolve) => setTimeout(resolve, 300));
223
+ const diag = processor.getCircuitBreaker().getDiagnostics();
224
+ expect(diag.state).toBe(CircuitBreakerState.OPEN);
225
+ expect(diag.failureCount).toBeGreaterThanOrEqual(3);
59
226
  });
60
227
  });
61
228
  });
@@ -1 +1 @@
1
- {"version":3,"file":"batch-post-processor.unit.spec.js","sourceRoot":"","sources":["../../../../src/test/specs/batch-post-processor/batch-post-processor.unit.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"batch-post-processor.unit.spec.js","sourceRoot":"","sources":["../../../../src/test/specs/batch-post-processor/batch-post-processor.unit.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=redis-stream-helper.int.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-stream-helper.int.spec.d.ts","sourceRoot":"","sources":["../../../../src/test/specs/helpers/redis-stream-helper.int.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,56 @@
1
+ import { describe, it, expect, beforeEach, afterAll, beforeAll } from '@jest/globals';
2
+ import { Redis } from 'ioredis';
3
+ import { testRedisOptions } from '../../redis-config.js';
4
+ import { RedisStreamHelper } from '../../../core/helpers/redis-stream.helper.js';
5
+ describe('RedisStreamHelper — Integration', () => {
6
+ let redis;
7
+ beforeAll(() => {
8
+ redis = new Redis(testRedisOptions);
9
+ });
10
+ afterAll(async () => {
11
+ await redis.quit();
12
+ });
13
+ beforeEach(async () => {
14
+ await redis.flushdb();
15
+ });
16
+ it('should manage idempotency locks with acquire/remove operations in a real Redis database', async () => {
17
+ const groupName = 'test-group';
18
+ const messageId = '1-0';
19
+ const ttl = 10;
20
+ const firstAcquire = await RedisStreamHelper.acquireIdempotencyLock(redis, groupName, messageId, ttl);
21
+ expect(firstAcquire).toBe(true);
22
+ const key = RedisStreamHelper.getIdempotencyKey(groupName, messageId);
23
+ const value = await redis.get(key);
24
+ expect(value).toBe('processing');
25
+ const secondAcquire = await RedisStreamHelper.acquireIdempotencyLock(redis, groupName, messageId, ttl);
26
+ expect(secondAcquire).toBe(false);
27
+ await RedisStreamHelper.removeIdempotencyLock(redis, groupName, messageId);
28
+ const valueAfterRemoval = await redis.get(key);
29
+ expect(valueAfterRemoval).toBeNull();
30
+ const thirdAcquire = await RedisStreamHelper.acquireIdempotencyLock(redis, groupName, messageId, ttl);
31
+ expect(thirdAcquire).toBe(true);
32
+ });
33
+ it('should interact with Redis streams to get and claim pending messages', async () => {
34
+ const streamName = 'stream:test-helper';
35
+ const groupName = 'group:test-helper';
36
+ const consumerName1 = 'consumer-1';
37
+ const consumerName2 = 'consumer-2';
38
+ await redis.xgroup('CREATE', streamName, groupName, '$', 'MKSTREAM');
39
+ const messageId = await redis.xadd(streamName, '*', 'key', 'value');
40
+ expect(messageId).not.toBeNull();
41
+ if (!messageId) {
42
+ throw new Error('xadd failed to return a valid messageId');
43
+ }
44
+ await redis.xreadgroup('GROUP', groupName, consumerName1, 'COUNT', 1, 'STREAMS', streamName, '>');
45
+ const pendingList = await RedisStreamHelper.getPendingMessages(redis, streamName, groupName, 10);
46
+ expect(pendingList).toHaveLength(1);
47
+ expect(pendingList[0]?.messageId).toBe(messageId);
48
+ expect(pendingList[0]?.consumerName).toBe(consumerName1);
49
+ expect(pendingList[0]?.deliveryCount).toBe(1);
50
+ await RedisStreamHelper.claimMessage(redis, streamName, groupName, consumerName2, 0, messageId);
51
+ const pendingListAfterClaim = await RedisStreamHelper.getPendingMessages(redis, streamName, groupName, 10);
52
+ expect(pendingListAfterClaim).toHaveLength(1);
53
+ expect(pendingListAfterClaim[0]?.consumerName).toBe(consumerName2);
54
+ });
55
+ });
56
+ //# sourceMappingURL=redis-stream-helper.int.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-stream-helper.int.spec.js","sourceRoot":"","sources":["../../../../src/test/specs/helpers/redis-stream-helper.int.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=redis-stream-helper.unit.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-stream-helper.unit.spec.d.ts","sourceRoot":"","sources":["../../../../src/test/specs/helpers/redis-stream-helper.unit.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,102 @@
1
+ import { describe, it, expect, beforeEach, jest } from '@jest/globals';
2
+ import { createMock } from '@volontariapp/testing';
3
+ import { RedisStreamHelper } from '../../../core/helpers/redis-stream.helper.js';
4
+ describe('RedisStreamHelper — Unit', () => {
5
+ let redisMock;
6
+ beforeEach(() => {
7
+ redisMock = createMock();
8
+ });
9
+ describe('parseRawEntries', () => {
10
+ it('should parse raw Redis Stream entries correctly', () => {
11
+ const rawEntries = [
12
+ ['1-0', ['id', 'evt-1', 'type', 'test-event', 'event', '{"foo":"bar"}']],
13
+ ];
14
+ const result = RedisStreamHelper.parseRawEntries(rawEntries);
15
+ expect(result).toHaveLength(1);
16
+ expect(result[0]?.id).toBe('1-0');
17
+ expect(result[0]?.fields).toEqual({
18
+ id: 'evt-1',
19
+ type: 'test-event',
20
+ event: '{"foo":"bar"}',
21
+ });
22
+ });
23
+ it('should ignore keys with missing values', () => {
24
+ const rawEntries = [
25
+ [
26
+ '2-0',
27
+ ['id', 'evt-2', 'missingVal'],
28
+ ],
29
+ ];
30
+ const result = RedisStreamHelper.parseRawEntries(rawEntries);
31
+ expect(result).toHaveLength(1);
32
+ expect(result[0]?.fields).toEqual({
33
+ id: 'evt-2',
34
+ });
35
+ });
36
+ it('should return empty array if rawEntries is empty', () => {
37
+ const result = RedisStreamHelper.parseRawEntries([]);
38
+ expect(result).toEqual([]);
39
+ });
40
+ });
41
+ describe('getPendingMessages', () => {
42
+ it('should retrieve pending messages using XPENDING and parse them correctly', async () => {
43
+ const rawPendingResponse = [
44
+ ['1-0', 'consumer-1', 2500, 3],
45
+ ['2-0', 'consumer-2', 5000, 1],
46
+ ];
47
+ redisMock.call.mockResolvedValue(rawPendingResponse);
48
+ const callSpy = jest.spyOn(redisMock, 'call');
49
+ const result = await RedisStreamHelper.getPendingMessages(redisMock, 'stream:test', 'group:test', 10);
50
+ expect(callSpy).toHaveBeenCalledWith('XPENDING', 'stream:test', 'group:test', '-', '+', 10);
51
+ expect(result).toHaveLength(2);
52
+ expect(result[0]).toEqual({
53
+ messageId: '1-0',
54
+ consumerName: 'consumer-1',
55
+ idleTimeMs: 2500,
56
+ deliveryCount: 3,
57
+ });
58
+ });
59
+ it('should return empty array if XPENDING returns null', async () => {
60
+ redisMock.call.mockResolvedValue(null);
61
+ const result = await RedisStreamHelper.getPendingMessages(redisMock, 'stream:test', 'group:test', 10);
62
+ expect(result).toEqual([]);
63
+ });
64
+ });
65
+ describe('claimMessage', () => {
66
+ it('should invoke XCLAIM with JUSTID option', async () => {
67
+ redisMock.call.mockResolvedValue('1-0');
68
+ const callSpy = jest.spyOn(redisMock, 'call');
69
+ await RedisStreamHelper.claimMessage(redisMock, 'stream:test', 'group:test', 'consumer-1', 1000, '1-0');
70
+ expect(callSpy).toHaveBeenCalledWith('XCLAIM', 'stream:test', 'group:test', 'consumer-1', '1000', '1-0', 'JUSTID');
71
+ });
72
+ });
73
+ describe('getIdempotencyKey', () => {
74
+ it('should format key correctly', () => {
75
+ const key = RedisStreamHelper.getIdempotencyKey('group:test', '1-0');
76
+ expect(key).toBe('idempotency:post-processor:group:test:1-0');
77
+ });
78
+ });
79
+ describe('acquireIdempotencyLock', () => {
80
+ it('should return true if lock acquisition returns OK', async () => {
81
+ redisMock.call.mockResolvedValue('OK');
82
+ const callSpy = jest.spyOn(redisMock, 'call');
83
+ const result = await RedisStreamHelper.acquireIdempotencyLock(redisMock, 'group:test', '1-0', 60);
84
+ expect(callSpy).toHaveBeenCalledWith('SET', 'idempotency:post-processor:group:test:1-0', 'processing', 'NX', 'EX', 60);
85
+ expect(result).toBe(true);
86
+ });
87
+ it('should return false if lock acquisition fails', async () => {
88
+ redisMock.call.mockResolvedValue(null);
89
+ const result = await RedisStreamHelper.acquireIdempotencyLock(redisMock, 'group:test', '1-0', 60);
90
+ expect(result).toBe(false);
91
+ });
92
+ });
93
+ describe('removeIdempotencyLock', () => {
94
+ it('should delete the idempotency key', async () => {
95
+ redisMock.del.mockResolvedValue(1);
96
+ const delSpy = jest.spyOn(redisMock, 'del');
97
+ await RedisStreamHelper.removeIdempotencyLock(redisMock, 'group:test', '1-0');
98
+ expect(delSpy.mock.calls[0]).toEqual(['idempotency:post-processor:group:test:1-0']);
99
+ });
100
+ });
101
+ });
102
+ //# sourceMappingURL=redis-stream-helper.unit.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-stream-helper.unit.spec.js","sourceRoot":"","sources":["../../../../src/test/specs/helpers/redis-stream-helper.unit.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=retry-helper.int.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry-helper.int.spec.d.ts","sourceRoot":"","sources":["../../../../src/test/specs/helpers/retry-helper.int.spec.ts"],"names":[],"mappings":""}