reviewflow 3.34.0 → 3.35.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.
Files changed (190) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/dashboard/index.html +16 -2
  3. package/dist/dashboard/setup.html +17 -1
  4. package/dist/dashboard/styles.css +75 -0
  5. package/dist/main/routes.d.ts.map +1 -1
  6. package/dist/main/routes.js +56 -28
  7. package/dist/main/routes.js.map +1 -1
  8. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.d.ts +4 -0
  9. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.d.ts.map +1 -1
  10. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.js +54 -46
  11. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.js.map +1 -1
  12. package/dist/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.github.cli.gateway.d.ts.map +1 -1
  13. package/dist/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.github.cli.gateway.js +4 -1
  14. package/dist/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.github.cli.gateway.js.map +1 -1
  15. package/dist/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.gitlab.cli.gateway.d.ts.map +1 -1
  16. package/dist/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.gitlab.cli.gateway.js +4 -1
  17. package/dist/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.gitlab.cli.gateway.js.map +1 -1
  18. package/dist/modules/platform-integration/interface-adapters/gateways/threadFetch.gitlab.gateway.d.ts.map +1 -1
  19. package/dist/modules/platform-integration/interface-adapters/gateways/threadFetch.gitlab.gateway.js +3 -0
  20. package/dist/modules/platform-integration/interface-adapters/gateways/threadFetch.gitlab.gateway.js.map +1 -1
  21. package/dist/modules/platform-integration/services/scopedExecutorEnvironment.d.ts +1 -0
  22. package/dist/modules/platform-integration/services/scopedExecutorEnvironment.d.ts.map +1 -1
  23. package/dist/modules/platform-integration/services/scopedExecutorEnvironment.js +10 -3
  24. package/dist/modules/platform-integration/services/scopedExecutorEnvironment.js.map +1 -1
  25. package/dist/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.d.ts.map +1 -1
  26. package/dist/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.js +5 -1
  27. package/dist/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.js.map +1 -1
  28. package/dist/modules/review-execution/interface-adapters/gateways/cli/reviewAction.github.cli.gateway.d.ts.map +1 -1
  29. package/dist/modules/review-execution/interface-adapters/gateways/cli/reviewAction.github.cli.gateway.js +6 -4
  30. package/dist/modules/review-execution/interface-adapters/gateways/cli/reviewAction.github.cli.gateway.js.map +1 -1
  31. package/dist/modules/review-execution/services/contextActionsExecutor.d.ts.map +1 -1
  32. package/dist/modules/review-execution/services/contextActionsExecutor.js +23 -1
  33. package/dist/modules/review-execution/services/contextActionsExecutor.js.map +1 -1
  34. package/dist/modules/review-execution/usecases/confirmPendingReview.usecase.d.ts +4 -0
  35. package/dist/modules/review-execution/usecases/confirmPendingReview.usecase.d.ts.map +1 -1
  36. package/dist/modules/review-execution/usecases/confirmPendingReview.usecase.js +6 -1
  37. package/dist/modules/review-execution/usecases/confirmPendingReview.usecase.js.map +1 -1
  38. package/dist/modules/setup-wizard/interface-adapters/controllers/http/setupWizard.routes.d.ts.map +1 -1
  39. package/dist/modules/setup-wizard/interface-adapters/controllers/http/setupWizard.routes.js +9 -0
  40. package/dist/modules/setup-wizard/interface-adapters/controllers/http/setupWizard.routes.js.map +1 -1
  41. package/dist/modules/setup-wizard/usecases/streamSetupRun.usecase.d.ts +14 -1
  42. package/dist/modules/setup-wizard/usecases/streamSetupRun.usecase.d.ts.map +1 -1
  43. package/dist/modules/setup-wizard/usecases/streamSetupRun.usecase.js +50 -6
  44. package/dist/modules/setup-wizard/usecases/streamSetupRun.usecase.js.map +1 -1
  45. package/dist/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.d.ts.map +1 -1
  46. package/dist/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.js +14 -6
  47. package/dist/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.js.map +1 -1
  48. package/dist/tests/acceptance/174-semi-auto-review-trigger-mode.acceptance.test.js +1 -0
  49. package/dist/tests/acceptance/174-semi-auto-review-trigger-mode.acceptance.test.js.map +1 -1
  50. package/dist/tests/acceptance/202-confirm-pending-review-runs-review.acceptance.test.d.ts +2 -0
  51. package/dist/tests/acceptance/202-confirm-pending-review-runs-review.acceptance.test.d.ts.map +1 -0
  52. package/dist/tests/acceptance/202-confirm-pending-review-runs-review.acceptance.test.js +173 -0
  53. package/dist/tests/acceptance/202-confirm-pending-review-runs-review.acceptance.test.js.map +1 -0
  54. package/dist/tests/factories/pendingReviewRequest.factory.d.ts +1 -0
  55. package/dist/tests/factories/pendingReviewRequest.factory.d.ts.map +1 -1
  56. package/dist/tests/factories/pendingReviewRequest.factory.js +22 -0
  57. package/dist/tests/factories/pendingReviewRequest.factory.js.map +1 -1
  58. package/dist/tests/stubs/claudeSession.stub.d.ts +8 -0
  59. package/dist/tests/stubs/claudeSession.stub.d.ts.map +1 -1
  60. package/dist/tests/stubs/claudeSession.stub.js +24 -2
  61. package/dist/tests/stubs/claudeSession.stub.js.map +1 -1
  62. package/dist/tests/units/entities/insight/teamInsight.guard.test.d.ts +2 -0
  63. package/dist/tests/units/entities/insight/teamInsight.guard.test.d.ts.map +1 -0
  64. package/dist/tests/units/entities/insight/teamInsight.guard.test.js +45 -0
  65. package/dist/tests/units/entities/insight/teamInsight.guard.test.js.map +1 -0
  66. package/dist/tests/units/interface-adapters/controllers/http/stats.routes.test.d.ts +2 -0
  67. package/dist/tests/units/interface-adapters/controllers/http/stats.routes.test.d.ts.map +1 -0
  68. package/dist/tests/units/interface-adapters/controllers/http/stats.routes.test.js +208 -0
  69. package/dist/tests/units/interface-adapters/controllers/http/stats.routes.test.js.map +1 -0
  70. package/dist/tests/units/interface-adapters/controllers/mcp/addAction.handler.test.js +92 -0
  71. package/dist/tests/units/interface-adapters/controllers/mcp/addAction.handler.test.js.map +1 -1
  72. package/dist/tests/units/interface-adapters/controllers/webhook/github.controller.test.js +303 -0
  73. package/dist/tests/units/interface-adapters/controllers/webhook/github.controller.test.js.map +1 -1
  74. package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js +359 -1
  75. package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js.map +1 -1
  76. package/dist/tests/units/interface-adapters/gateways/cli/reviewAction.github.cli.gateway.test.js +10 -3
  77. package/dist/tests/units/interface-adapters/gateways/cli/reviewAction.github.cli.gateway.test.js.map +1 -1
  78. package/dist/tests/units/modules/claude-invocation/usecases/awaitSessionCompletion.usecase.test.js +66 -0
  79. package/dist/tests/units/modules/claude-invocation/usecases/awaitSessionCompletion.usecase.test.js.map +1 -1
  80. package/dist/tests/units/modules/claude-invocation/usecases/cleanupClaudeSession.usecase.test.js +62 -0
  81. package/dist/tests/units/modules/claude-invocation/usecases/cleanupClaudeSession.usecase.test.js.map +1 -1
  82. package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/cliStatus.routes.test.d.ts +2 -0
  83. package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/cliStatus.routes.test.d.ts.map +1 -0
  84. package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/cliStatus.routes.test.js +182 -0
  85. package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/cliStatus.routes.test.js.map +1 -0
  86. package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.test.js +225 -0
  87. package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.test.js.map +1 -1
  88. package/dist/tests/units/modules/ember-chat/gateways/emberAnswerTransport.claude.gateway.test.d.ts +2 -0
  89. package/dist/tests/units/modules/ember-chat/gateways/emberAnswerTransport.claude.gateway.test.d.ts.map +1 -0
  90. package/dist/tests/units/modules/ember-chat/gateways/emberAnswerTransport.claude.gateway.test.js +171 -0
  91. package/dist/tests/units/modules/ember-chat/gateways/emberAnswerTransport.claude.gateway.test.js.map +1 -0
  92. package/dist/tests/units/modules/platform-integration/controllers/githubProcessorProvenance.test.d.ts +2 -0
  93. package/dist/tests/units/modules/platform-integration/controllers/githubProcessorProvenance.test.d.ts.map +1 -0
  94. package/dist/tests/units/modules/platform-integration/controllers/githubProcessorProvenance.test.js +70 -0
  95. package/dist/tests/units/modules/platform-integration/controllers/githubProcessorProvenance.test.js.map +1 -0
  96. package/dist/tests/units/modules/platform-integration/entities/transport/cidr.test.d.ts +2 -0
  97. package/dist/tests/units/modules/platform-integration/entities/transport/cidr.test.d.ts.map +1 -0
  98. package/dist/tests/units/modules/platform-integration/entities/transport/cidr.test.js +51 -0
  99. package/dist/tests/units/modules/platform-integration/entities/transport/cidr.test.js.map +1 -0
  100. package/dist/tests/units/modules/platform-integration/gateways/scopedGitLabExecutor.test.js +4 -0
  101. package/dist/tests/units/modules/platform-integration/gateways/scopedGitLabExecutor.test.js.map +1 -1
  102. package/dist/tests/units/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.cli.shellSafety.test.d.ts +2 -0
  103. package/dist/tests/units/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.cli.shellSafety.test.d.ts.map +1 -0
  104. package/dist/tests/units/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.cli.shellSafety.test.js +39 -0
  105. package/dist/tests/units/modules/platform-integration/interface-adapters/gateways/cli/noteCommentPost.cli.shellSafety.test.js.map +1 -0
  106. package/dist/tests/units/modules/platform-integration/services/scopedExecutorEnvironment.test.js +15 -2
  107. package/dist/tests/units/modules/platform-integration/services/scopedExecutorEnvironment.test.js.map +1 -1
  108. package/dist/tests/units/modules/review-execution/entities/reviewRequest/reviewRequest.guard.test.d.ts +2 -0
  109. package/dist/tests/units/modules/review-execution/entities/reviewRequest/reviewRequest.guard.test.d.ts.map +1 -0
  110. package/dist/tests/units/modules/review-execution/entities/reviewRequest/reviewRequest.guard.test.js +34 -0
  111. package/dist/tests/units/modules/review-execution/entities/reviewRequest/reviewRequest.guard.test.js.map +1 -0
  112. package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.test.js +21 -2
  113. package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.test.js.map +1 -1
  114. package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/reviews.routes.test.d.ts +2 -0
  115. package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/reviews.routes.test.d.ts.map +1 -0
  116. package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/reviews.routes.test.js +210 -0
  117. package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/reviews.routes.test.js.map +1 -0
  118. package/dist/tests/units/modules/review-execution/interface-adapters/gateways/fileSystem/reviewFile.fileSystem.test.d.ts +2 -0
  119. package/dist/tests/units/modules/review-execution/interface-adapters/gateways/fileSystem/reviewFile.fileSystem.test.d.ts.map +1 -0
  120. package/dist/tests/units/modules/review-execution/interface-adapters/gateways/fileSystem/reviewFile.fileSystem.test.js +103 -0
  121. package/dist/tests/units/modules/review-execution/interface-adapters/gateways/fileSystem/reviewFile.fileSystem.test.js.map +1 -0
  122. package/dist/tests/units/modules/review-execution/usecases/confirmPendingReview.usecase.test.js +25 -0
  123. package/dist/tests/units/modules/review-execution/usecases/confirmPendingReview.usecase.test.js.map +1 -1
  124. package/dist/tests/units/modules/setup-wizard/gateways/serverConfig.fileSystem.gateway.test.d.ts +2 -0
  125. package/dist/tests/units/modules/setup-wizard/gateways/serverConfig.fileSystem.gateway.test.d.ts.map +1 -0
  126. package/dist/tests/units/modules/setup-wizard/gateways/serverConfig.fileSystem.gateway.test.js +98 -0
  127. package/dist/tests/units/modules/setup-wizard/gateways/serverConfig.fileSystem.gateway.test.js.map +1 -0
  128. package/dist/tests/units/modules/setup-wizard/interface-adapters/controllers/http/setupWizard.routes.test.js +12 -0
  129. package/dist/tests/units/modules/setup-wizard/interface-adapters/controllers/http/setupWizard.routes.test.js.map +1 -1
  130. package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/skillTemplate.fileSystem.gateway.test.d.ts +2 -0
  131. package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/skillTemplate.fileSystem.gateway.test.d.ts.map +1 -0
  132. package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/skillTemplate.fileSystem.gateway.test.js +51 -0
  133. package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/skillTemplate.fileSystem.gateway.test.js.map +1 -0
  134. package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/validation.adapter.gateway.test.d.ts +2 -0
  135. package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/validation.adapter.gateway.test.d.ts.map +1 -0
  136. package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/validation.adapter.gateway.test.js +70 -0
  137. package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/validation.adapter.gateway.test.js.map +1 -0
  138. package/dist/tests/units/modules/setup-wizard/usecases/streamSetupRun.usecase.test.js +60 -1
  139. package/dist/tests/units/modules/setup-wizard/usecases/streamSetupRun.usecase.test.js.map +1 -1
  140. package/dist/tests/units/modules/statistics-insights/entities/insight/developerInsight.guard.test.d.ts +2 -0
  141. package/dist/tests/units/modules/statistics-insights/entities/insight/developerInsight.guard.test.d.ts.map +1 -0
  142. package/dist/tests/units/modules/statistics-insights/entities/insight/developerInsight.guard.test.js +49 -0
  143. package/dist/tests/units/modules/statistics-insights/entities/insight/developerInsight.guard.test.js.map +1 -0
  144. package/dist/tests/units/modules/statistics-insights/entities/insight/persistedInsightsData.guard.test.d.ts +2 -0
  145. package/dist/tests/units/modules/statistics-insights/entities/insight/persistedInsightsData.guard.test.d.ts.map +1 -0
  146. package/dist/tests/units/modules/statistics-insights/entities/insight/persistedInsightsData.guard.test.js +29 -0
  147. package/dist/tests/units/modules/statistics-insights/entities/insight/persistedInsightsData.guard.test.js.map +1 -0
  148. package/dist/tests/units/modules/statistics-insights/gateways/aiInsightsSession.claude.gateway.test.d.ts +2 -0
  149. package/dist/tests/units/modules/statistics-insights/gateways/aiInsightsSession.claude.gateway.test.d.ts.map +1 -0
  150. package/dist/tests/units/modules/statistics-insights/gateways/aiInsightsSession.claude.gateway.test.js +63 -0
  151. package/dist/tests/units/modules/statistics-insights/gateways/aiInsightsSession.claude.gateway.test.js.map +1 -0
  152. package/dist/tests/units/modules/statistics-insights/gateways/stats.fileSystem.test.d.ts +2 -0
  153. package/dist/tests/units/modules/statistics-insights/gateways/stats.fileSystem.test.d.ts.map +1 -0
  154. package/dist/tests/units/modules/statistics-insights/gateways/stats.fileSystem.test.js +73 -0
  155. package/dist/tests/units/modules/statistics-insights/gateways/stats.fileSystem.test.js.map +1 -0
  156. package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/overview.presenter.test.js +99 -0
  157. package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/overview.presenter.test.js.map +1 -1
  158. package/dist/tests/units/modules/supervisor-management/gateways/supervisorLock.fileSystem.gateway.test.js +60 -2
  159. package/dist/tests/units/modules/supervisor-management/gateways/supervisorLock.fileSystem.gateway.test.js.map +1 -1
  160. package/dist/tests/units/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.test.js +499 -18
  161. package/dist/tests/units/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.test.js.map +1 -1
  162. package/dist/tests/units/modules/tracking/interface-adapters/gateways/fileSystem/reviewRequestTracking.fileSystem.test.d.ts +2 -0
  163. package/dist/tests/units/modules/tracking/interface-adapters/gateways/fileSystem/reviewRequestTracking.fileSystem.test.d.ts.map +1 -0
  164. package/dist/tests/units/modules/tracking/interface-adapters/gateways/fileSystem/reviewRequestTracking.fileSystem.test.js +273 -0
  165. package/dist/tests/units/modules/tracking/interface-adapters/gateways/fileSystem/reviewRequestTracking.fileSystem.test.js.map +1 -0
  166. package/dist/tests/units/modules/worktree-management/entities/worktree/worktree.test.js +47 -1
  167. package/dist/tests/units/modules/worktree-management/entities/worktree/worktree.test.js.map +1 -1
  168. package/dist/tests/units/modules/worktree-management/usecases/sweepStaleWorktrees.usecase.test.js +98 -0
  169. package/dist/tests/units/modules/worktree-management/usecases/sweepStaleWorktrees.usecase.test.js.map +1 -1
  170. package/dist/tests/units/services/contextActionsExecutor.test.js +67 -0
  171. package/dist/tests/units/services/contextActionsExecutor.test.js.map +1 -1
  172. package/dist/tests/units/services/statsService.branches.test.d.ts +2 -0
  173. package/dist/tests/units/services/statsService.branches.test.d.ts.map +1 -0
  174. package/dist/tests/units/services/statsService.branches.test.js +266 -0
  175. package/dist/tests/units/services/statsService.branches.test.js.map +1 -0
  176. package/dist/tests/units/shared/services/logFileReader.test.d.ts +2 -0
  177. package/dist/tests/units/shared/services/logFileReader.test.d.ts.map +1 -0
  178. package/dist/tests/units/shared/services/logFileReader.test.js +70 -0
  179. package/dist/tests/units/shared/services/logFileReader.test.js.map +1 -0
  180. package/dist/tests/units/usecases/insights/buildAiInsightsPrompt.test.js +206 -0
  181. package/dist/tests/units/usecases/insights/buildAiInsightsPrompt.test.js.map +1 -1
  182. package/dist/tests/units/usecases/insights/computeDeveloperInsights.usecase.test.js +40 -0
  183. package/dist/tests/units/usecases/insights/computeDeveloperInsights.usecase.test.js.map +1 -1
  184. package/dist/tests/units/usecases/insights/computeInsightsWithPersistence.usecase.test.js +204 -0
  185. package/dist/tests/units/usecases/insights/computeInsightsWithPersistence.usecase.test.js.map +1 -1
  186. package/dist/tests/units/usecases/insights/getInsightsWithAiStatus.usecase.test.js +57 -0
  187. package/dist/tests/units/usecases/insights/getInsightsWithAiStatus.usecase.test.js.map +1 -1
  188. package/dist/tests/units/usecases/insights/insightLevelComputation.service.test.js +391 -1
  189. package/dist/tests/units/usecases/insights/insightLevelComputation.service.test.js.map +1 -1
  190. package/package.json +4 -1
@@ -0,0 +1,34 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { parseReviewRequest, safeParseReviewRequest, isValidReviewRequest, } from '../../../../../../modules/review-execution/entities/reviewRequest/reviewRequest.guard.js';
3
+ const validReviewRequest = {
4
+ platform: 'gitlab',
5
+ projectPath: 'group/project',
6
+ reviewRequestNumber: 42,
7
+ title: 'Add feature',
8
+ sourceBranch: 'feat/x',
9
+ targetBranch: 'main',
10
+ state: 'open',
11
+ isDraft: false,
12
+ author: 'alice',
13
+ webUrl: 'https://gitlab.example.com/group/project/-/merge_requests/42',
14
+ createdAt: '2026-05-30T10:00:00Z',
15
+ updatedAt: '2026-05-30T11:00:00Z',
16
+ };
17
+ describe('reviewRequest.guard', () => {
18
+ it('parses a valid review request', () => {
19
+ const result = parseReviewRequest(validReviewRequest);
20
+ expect(result.reviewRequestNumber).toBe(42);
21
+ });
22
+ it('throws when parsing an invalid review request', () => {
23
+ expect(() => parseReviewRequest({ ...validReviewRequest, reviewRequestNumber: -1 })).toThrow();
24
+ });
25
+ it('safeParse succeeds on a valid request and fails on a bad url', () => {
26
+ expect(safeParseReviewRequest(validReviewRequest).success).toBe(true);
27
+ expect(safeParseReviewRequest({ ...validReviewRequest, webUrl: 'not-a-url' }).success).toBe(false);
28
+ });
29
+ it('isValid reflects validity', () => {
30
+ expect(isValidReviewRequest(validReviewRequest)).toBe(true);
31
+ expect(isValidReviewRequest({ platform: 'bitbucket' })).toBe(false);
32
+ });
33
+ });
34
+ //# sourceMappingURL=reviewRequest.guard.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewRequest.guard.test.js","sourceRoot":"","sources":["../../../../../../../src/tests/units/modules/review-execution/entities/reviewRequest/reviewRequest.guard.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,0EAA0E,CAAC;AAElF,MAAM,kBAAkB,GAAG;IACzB,QAAQ,EAAE,QAAQ;IAClB,WAAW,EAAE,eAAe;IAC5B,mBAAmB,EAAE,EAAE;IACvB,KAAK,EAAE,aAAa;IACpB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,MAAM;IACpB,KAAK,EAAE,MAAM;IACb,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,8DAA8D;IACtE,SAAS,EAAE,sBAAsB;IACjC,SAAS,EAAE,sBAAsB;CAClC,CAAC;AAEF,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,GAAG,kBAAkB,EAAE,mBAAmB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACjG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,MAAM,CAAC,sBAAsB,CAAC,EAAE,GAAG,kBAAkB,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,CAAC,oBAAoB,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -8,7 +8,7 @@ import { PendingReviewPresenter } from '../../../../../../../modules/review-exec
8
8
  import { StubPendingReviewRequestGateway } from '../../../../../../../tests/stubs/pendingReviewRequest.stub.js';
9
9
  import { PendingReviewRequestFactory } from '../../../../../../../tests/factories/pendingReviewRequest.factory.js';
10
10
  import { createStubLogger } from '../../../../../../../tests/stubs/logger.stub.js';
11
- async function buildApp(gateway, activeJobs) {
11
+ async function buildApp(gateway, activeJobs, isProjectRunnable = () => true) {
12
12
  const app = Fastify();
13
13
  const logger = createStubLogger();
14
14
  await app.register(pendingReviewsRoutes, {
@@ -21,6 +21,7 @@ async function buildApp(gateway, activeJobs) {
21
21
  return true;
22
22
  },
23
23
  resolveProcessor: () => async () => { },
24
+ isProjectRunnable,
24
25
  logger,
25
26
  }),
26
27
  dismissPendingReview: new DismissPendingReviewUseCase({
@@ -70,7 +71,10 @@ describe('pendingReviewsRoutes', () => {
70
71
  url: '/api/pending-reviews/unknown/confirm',
71
72
  });
72
73
  expect(response.statusCode).toBe(404);
73
- expect(response.json()).toEqual({ status: 'not-found' });
74
+ expect(response.json()).toEqual({
75
+ status: 'not-found',
76
+ message: 'Cette review en attente est introuvable',
77
+ });
74
78
  });
75
79
  it('POST .../confirm returns 409 with French message when already running', async () => {
76
80
  const pending = PendingReviewRequestFactory.create();
@@ -86,6 +90,21 @@ describe('pendingReviewsRoutes', () => {
86
90
  message: 'Cette review est déjà en cours',
87
91
  });
88
92
  });
93
+ it('POST .../confirm returns 422 with French message when the project is no longer configured', async () => {
94
+ const pending = PendingReviewRequestFactory.create();
95
+ gateway.prepopulate(pending);
96
+ await app.close();
97
+ app = await buildApp(gateway, activeJobs, () => false);
98
+ const response = await app.inject({
99
+ method: 'POST',
100
+ url: `/api/pending-reviews/${pending.pendingReviewRequestId}/confirm`,
101
+ });
102
+ expect(response.statusCode).toBe(422);
103
+ expect(response.json()).toEqual({
104
+ status: 'project-not-configured',
105
+ message: "Le projet associé n'est plus configuré",
106
+ });
107
+ });
89
108
  it('DELETE /api/pending-reviews/:id returns dismissed status', async () => {
90
109
  const pending = PendingReviewRequestFactory.create();
91
110
  gateway.prepopulate(pending);
@@ -1 +1 @@
1
- {"version":3,"file":"pendingReviews.routes.test.js","sourceRoot":"","sources":["../../../../../../../../src/tests/units/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pendingReviews.routes.test.js","sourceRoot":"","sources":["../../../../../../../../src/tests/units/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=reviews.routes.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviews.routes.test.d.ts","sourceRoot":"","sources":["../../../../../../../../src/tests/units/modules/review-execution/interface-adapters/controllers/http/reviews.routes.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,210 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import Fastify from 'fastify';
3
+ import { reviewRoutes } from '../../../../../../../modules/review-execution/interface-adapters/controllers/http/reviews.routes.js';
4
+ import { InMemoryReviewFileGateway } from '../../../../../../../tests/stubs/reviewFile.stub.js';
5
+ import { InMemoryReviewRequestTrackingGateway } from '../../../../../../../tests/stubs/reviewRequestTracking.stub.js';
6
+ import { StubReviewQueuePort } from '../../../../../../../tests/stubs/reviewQueue.stub.js';
7
+ import { createStubLogger } from '../../../../../../../tests/stubs/logger.stub.js';
8
+ import { TrackedMrFactory } from '../../../../../../../tests/factories/trackedMr.factory.js';
9
+ describe('reviewRoutes', () => {
10
+ let app;
11
+ let reviewFileGateway;
12
+ let reviewRequestTrackingGateway;
13
+ let queuePort;
14
+ let repositories;
15
+ beforeEach(async () => {
16
+ app = Fastify();
17
+ reviewFileGateway = new InMemoryReviewFileGateway();
18
+ reviewRequestTrackingGateway = new InMemoryReviewRequestTrackingGateway();
19
+ queuePort = new StubReviewQueuePort();
20
+ repositories = [];
21
+ await app.register(reviewRoutes, {
22
+ reviewFileGateway,
23
+ reviewRequestTrackingGateway,
24
+ getRepositories: () => repositories,
25
+ queuePort,
26
+ logger: createStubLogger(),
27
+ });
28
+ await app.ready();
29
+ });
30
+ afterEach(async () => {
31
+ await app.close();
32
+ });
33
+ describe('GET /api/reviews', () => {
34
+ it('returns reviews for an explicit valid path', async () => {
35
+ reviewFileGateway.addReview('/repo/a', '2026-05-01-MR-12-front.md', '# Code Review - MR #12 (login)');
36
+ const response = await app.inject({
37
+ method: 'GET',
38
+ url: '/api/reviews?path=/repo/a',
39
+ });
40
+ expect(response.statusCode).toBe(200);
41
+ const body = response.json();
42
+ expect(body.count).toBe(1);
43
+ expect(body.reviews[0].filename).toBe('2026-05-01-MR-12-front.md');
44
+ });
45
+ it('rejects a path without a leading slash', async () => {
46
+ const response = await app.inject({
47
+ method: 'GET',
48
+ url: '/api/reviews?path=relative/path',
49
+ });
50
+ expect(response.statusCode).toBe(200);
51
+ const body = response.json();
52
+ expect(body.error).toBe('Invalid path');
53
+ expect(body.reviews).toEqual([]);
54
+ expect(body.count).toBe(0);
55
+ });
56
+ it('rejects a path containing directory traversal', async () => {
57
+ const response = await app.inject({
58
+ method: 'GET',
59
+ url: '/api/reviews?path=/repo/../etc',
60
+ });
61
+ expect(response.statusCode).toBe(200);
62
+ const body = response.json();
63
+ expect(body.error).toBe('Invalid path');
64
+ });
65
+ it('aggregates enabled repositories and skips disabled ones when no path is given', async () => {
66
+ reviewFileGateway.addReview('/repo/a', '2026-05-01-MR-1-front.md', '# Code Review - MR #1 (a)');
67
+ reviewFileGateway.addReview('/repo/b', '2026-05-02-MR-2-front.md', '# Code Review - MR #2 (b)');
68
+ repositories = [
69
+ { localPath: '/repo/a', enabled: true },
70
+ { localPath: '/repo/b', enabled: false },
71
+ ];
72
+ const response = await app.inject({
73
+ method: 'GET',
74
+ url: '/api/reviews',
75
+ });
76
+ expect(response.statusCode).toBe(200);
77
+ const body = response.json();
78
+ expect(body.count).toBe(1);
79
+ expect(body.reviews[0].filename).toBe('2026-05-01-MR-1-front.md');
80
+ });
81
+ it('returns an empty aggregate when no repositories are configured', async () => {
82
+ const response = await app.inject({
83
+ method: 'GET',
84
+ url: '/api/reviews',
85
+ });
86
+ expect(response.statusCode).toBe(200);
87
+ const body = response.json();
88
+ expect(body.reviews).toEqual([]);
89
+ expect(body.count).toBe(0);
90
+ });
91
+ });
92
+ describe('GET /api/reviews/:filename', () => {
93
+ it('returns 400 for an invalid filename format', async () => {
94
+ const response = await app.inject({
95
+ method: 'GET',
96
+ url: '/api/reviews/not-a-valid-name',
97
+ });
98
+ expect(response.statusCode).toBe(400);
99
+ expect(response.json().error).toBe('Invalid filename format');
100
+ });
101
+ it('returns the review content from an enabled repository', async () => {
102
+ reviewFileGateway.addReview('/repo/a', '2026-05-01-MR-12-front.md', 'CONTENT');
103
+ repositories = [{ localPath: '/repo/a', enabled: true }];
104
+ const response = await app.inject({
105
+ method: 'GET',
106
+ url: '/api/reviews/2026-05-01-MR-12-front.md',
107
+ });
108
+ expect(response.statusCode).toBe(200);
109
+ const body = response.json();
110
+ expect(body.filename).toBe('2026-05-01-MR-12-front.md');
111
+ expect(body.content).toBe('CONTENT');
112
+ });
113
+ it('skips disabled repositories and returns 404 when not found anywhere', async () => {
114
+ reviewFileGateway.addReview('/repo/a', '2026-05-01-MR-12-front.md', 'CONTENT');
115
+ repositories = [{ localPath: '/repo/a', enabled: false }];
116
+ const response = await app.inject({
117
+ method: 'GET',
118
+ url: '/api/reviews/2026-05-01-MR-12-front.md',
119
+ });
120
+ expect(response.statusCode).toBe(404);
121
+ expect(response.json().error).toBe('Review not found');
122
+ });
123
+ });
124
+ describe('DELETE /api/reviews/:filename', () => {
125
+ it('returns 400 for an invalid filename format', async () => {
126
+ const response = await app.inject({
127
+ method: 'DELETE',
128
+ url: '/api/reviews/invalid',
129
+ });
130
+ expect(response.statusCode).toBe(400);
131
+ const body = response.json();
132
+ expect(body.success).toBe(false);
133
+ expect(body.error).toBe('Invalid filename format');
134
+ });
135
+ it('deletes an existing review in an enabled repository', async () => {
136
+ reviewFileGateway.addReview('/repo/a', '2026-05-01-MR-12-front.md', 'CONTENT');
137
+ repositories = [{ localPath: '/repo/a', enabled: true }];
138
+ const response = await app.inject({
139
+ method: 'DELETE',
140
+ url: '/api/reviews/2026-05-01-MR-12-front.md',
141
+ });
142
+ expect(response.statusCode).toBe(200);
143
+ expect(response.json().success).toBe(true);
144
+ expect(await reviewFileGateway.reviewExists('/repo/a', '2026-05-01-MR-12-front.md')).toBe(false);
145
+ });
146
+ it('skips disabled repositories and returns 404 when nothing is deleted', async () => {
147
+ reviewFileGateway.addReview('/repo/a', '2026-05-01-MR-12-front.md', 'CONTENT');
148
+ repositories = [{ localPath: '/repo/a', enabled: false }];
149
+ const response = await app.inject({
150
+ method: 'DELETE',
151
+ url: '/api/reviews/2026-05-01-MR-12-front.md',
152
+ });
153
+ expect(response.statusCode).toBe(404);
154
+ const body = response.json();
155
+ expect(body.success).toBe(false);
156
+ expect(body.error).toBe('Review not found');
157
+ });
158
+ });
159
+ describe('POST /api/reviews/cancel/:jobId', () => {
160
+ it('cancels a running job without tracking removal when body is empty', async () => {
161
+ queuePort.setJobStatus('job-1', 'running');
162
+ const response = await app.inject({
163
+ method: 'POST',
164
+ url: '/api/reviews/cancel/job-1',
165
+ payload: {},
166
+ });
167
+ expect(response.statusCode).toBe(200);
168
+ const body = response.json();
169
+ expect(body.success).toBe(true);
170
+ expect(body.message).toBe('Job job-1 cancelled');
171
+ expect(queuePort.cancelledJobs).toContain('job-1');
172
+ });
173
+ it('cancels a job and removes tracking when projectPath and mrId are provided', async () => {
174
+ queuePort.setJobStatus('job-2', 'queued');
175
+ reviewRequestTrackingGateway.create('/repo/a', TrackedMrFactory.create({ id: 'mr-99', mrNumber: 99 }));
176
+ const response = await app.inject({
177
+ method: 'POST',
178
+ url: '/api/reviews/cancel/job-2',
179
+ payload: { projectPath: '/repo/a', mrId: 'mr-99' },
180
+ });
181
+ expect(response.statusCode).toBe(200);
182
+ expect(response.json().success).toBe(true);
183
+ expect(reviewRequestTrackingGateway.getById('/repo/a', 'mr-99')).toBeNull();
184
+ });
185
+ it('returns already-completed status when the job is finished', async () => {
186
+ queuePort.setJobStatus('job-3', 'completed');
187
+ const response = await app.inject({
188
+ method: 'POST',
189
+ url: '/api/reviews/cancel/job-3',
190
+ payload: {},
191
+ });
192
+ expect(response.statusCode).toBe(200);
193
+ const body = response.json();
194
+ expect(body.success).toBe(false);
195
+ expect(body.status).toBe('already-completed');
196
+ });
197
+ it('returns 404 when the job does not exist', async () => {
198
+ const response = await app.inject({
199
+ method: 'POST',
200
+ url: '/api/reviews/cancel/unknown-job',
201
+ payload: {},
202
+ });
203
+ expect(response.statusCode).toBe(404);
204
+ const body = response.json();
205
+ expect(body.success).toBe(false);
206
+ expect(body.error).toBe('Job non trouvé');
207
+ });
208
+ });
209
+ });
210
+ //# sourceMappingURL=reviews.routes.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviews.routes.test.js","sourceRoot":"","sources":["../../../../../../../../src/tests/units/modules/review-execution/interface-adapters/controllers/http/reviews.routes.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=reviewFile.fileSystem.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewFile.fileSystem.test.d.ts","sourceRoot":"","sources":["../../../../../../../../src/tests/units/modules/review-execution/interface-adapters/gateways/fileSystem/reviewFile.fileSystem.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,103 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
+ import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from 'node:fs';
3
+ import { tmpdir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ import { FileSystemReviewFileGateway } from '../../../../../../../modules/review-execution/interface-adapters/gateways/fileSystem/reviewFile.fileSystem.js';
6
+ function reviewsDir(projectPath) {
7
+ const dir = join(projectPath, '.claude', 'reviews');
8
+ mkdirSync(dir, { recursive: true });
9
+ return dir;
10
+ }
11
+ describe('FileSystemReviewFileGateway (integration with real filesystem)', () => {
12
+ let projectPath;
13
+ let gateway;
14
+ beforeEach(() => {
15
+ projectPath = mkdtempSync(join(tmpdir(), 'review-file-'));
16
+ gateway = new FileSystemReviewFileGateway();
17
+ });
18
+ afterEach(() => {
19
+ rmSync(projectPath, { recursive: true, force: true });
20
+ });
21
+ describe('getReviewsDirectory', () => {
22
+ it('returns the .claude/reviews directory under the project path', () => {
23
+ expect(gateway.getReviewsDirectory('/my/project')).toBe('/my/project/.claude/reviews');
24
+ });
25
+ });
26
+ describe('listReviews', () => {
27
+ it('returns an empty array when the reviews directory does not exist', async () => {
28
+ const result = await gateway.listReviews(projectPath);
29
+ expect(result).toEqual([]);
30
+ });
31
+ it('parses metadata and title for MR and PR review files, sorted by mtime desc', async () => {
32
+ const dir = reviewsDir(projectPath);
33
+ writeFileSync(join(dir, '2024-01-15-MR-42-review.md'), '# Code Review - MR !42 (fix: resolve bug)\n\nbody');
34
+ writeFileSync(join(dir, '2024-01-16-PR-123-review.md'), '# Code Review - PR #123 (feat: add feature)\n\nbody');
35
+ const result = await gateway.listReviews(projectPath);
36
+ expect(result).toHaveLength(2);
37
+ const byNumber = new Map(result.map(review => [review.mrNumber, review]));
38
+ const mrReview = byNumber.get('42');
39
+ const prReview = byNumber.get('123');
40
+ expect(mrReview?.date).toBe('2024-01-15');
41
+ expect(mrReview?.type).toBe('review');
42
+ expect(mrReview?.title).toBe('fix: resolve bug');
43
+ expect(mrReview?.size).toBeGreaterThan(0);
44
+ expect(mrReview?.path).toBe(join(dir, '2024-01-15-MR-42-review.md'));
45
+ expect(prReview?.title).toBe('feat: add feature');
46
+ expect(typeof prReview?.mtime).toBe('string');
47
+ });
48
+ it('leaves the title absent when the first line does not match the title format', async () => {
49
+ const dir = reviewsDir(projectPath);
50
+ writeFileSync(join(dir, '2024-01-15-PR-7-review.md'), '# Some other heading\n\nbody');
51
+ const result = await gateway.listReviews(projectPath);
52
+ expect(result).toHaveLength(1);
53
+ expect(result[0].title).toBeUndefined();
54
+ });
55
+ it('ignores non-markdown files and markdown files not matching the review pattern', async () => {
56
+ const dir = reviewsDir(projectPath);
57
+ writeFileSync(join(dir, '2024-01-15-MR-42-review.md'), '# Code Review - MR !42 (ok)\n');
58
+ writeFileSync(join(dir, 'notes.txt'), 'plain text');
59
+ writeFileSync(join(dir, 'random.md'), '# not a review');
60
+ const result = await gateway.listReviews(projectPath);
61
+ expect(result).toHaveLength(1);
62
+ expect(result[0].mrNumber).toBe('42');
63
+ });
64
+ });
65
+ describe('readReview', () => {
66
+ it('returns the file content when the review exists', async () => {
67
+ const dir = reviewsDir(projectPath);
68
+ writeFileSync(join(dir, '2024-01-15-MR-42-review.md'), '# Review\n\nContent here');
69
+ const result = await gateway.readReview(projectPath, '2024-01-15-MR-42-review.md');
70
+ expect(result).toBe('# Review\n\nContent here');
71
+ });
72
+ it('returns null when the review file is missing', async () => {
73
+ const result = await gateway.readReview(projectPath, 'missing.md');
74
+ expect(result).toBeNull();
75
+ });
76
+ });
77
+ describe('reviewExists', () => {
78
+ it('returns true when the review file exists', async () => {
79
+ const dir = reviewsDir(projectPath);
80
+ writeFileSync(join(dir, '2024-01-15-MR-42-review.md'), 'Content');
81
+ const result = await gateway.reviewExists(projectPath, '2024-01-15-MR-42-review.md');
82
+ expect(result).toBe(true);
83
+ });
84
+ it('returns false when the review file is missing', async () => {
85
+ const result = await gateway.reviewExists(projectPath, 'missing.md');
86
+ expect(result).toBe(false);
87
+ });
88
+ });
89
+ describe('deleteReview', () => {
90
+ it('deletes an existing review and returns true', async () => {
91
+ const dir = reviewsDir(projectPath);
92
+ writeFileSync(join(dir, '2024-01-15-MR-42-review.md'), 'Content');
93
+ const result = await gateway.deleteReview(projectPath, '2024-01-15-MR-42-review.md');
94
+ expect(result).toBe(true);
95
+ expect(await gateway.reviewExists(projectPath, '2024-01-15-MR-42-review.md')).toBe(false);
96
+ });
97
+ it('returns false when the review file is missing', async () => {
98
+ const result = await gateway.deleteReview(projectPath, 'missing.md');
99
+ expect(result).toBe(false);
100
+ });
101
+ });
102
+ });
103
+ //# sourceMappingURL=reviewFile.fileSystem.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewFile.fileSystem.test.js","sourceRoot":"","sources":["../../../../../../../../src/tests/units/modules/review-execution/interface-adapters/gateways/fileSystem/reviewFile.fileSystem.test.ts"],"names":[],"mappings":"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"}
@@ -33,6 +33,7 @@ describe('ConfirmPendingReviewUseCase', () => {
33
33
  },
34
34
  enqueue: enqueueSuccess,
35
35
  resolveProcessor: () => fakeProcessor,
36
+ isProjectRunnable: () => true,
36
37
  logger,
37
38
  });
38
39
  }
@@ -76,11 +77,35 @@ describe('ConfirmPendingReviewUseCase', () => {
76
77
  queuePort: { hasActiveJob: () => false, getJobStatus: () => null },
77
78
  enqueue: async () => false,
78
79
  resolveProcessor: () => fakeProcessor,
80
+ isProjectRunnable: () => true,
79
81
  logger,
80
82
  });
81
83
  const result = await useCase.execute({ pendingId: pending.pendingReviewRequestId });
82
84
  expect(result.status).toBe('already-running');
83
85
  });
84
86
  });
87
+ describe('Rule: confirming a request whose project is no longer configured is rejected', () => {
88
+ it('returns project-not-configured with the exact French message and keeps the pending entry', async () => {
89
+ const pending = PendingReviewRequestFactory.create();
90
+ gateway.prepopulate(pending);
91
+ const useCase = new ConfirmPendingReviewUseCase({
92
+ pendingReviewRequestGateway: gateway,
93
+ queuePort: { hasActiveJob: (id) => activeJobs.has(id), getJobStatus: () => null },
94
+ enqueue: enqueueSuccess,
95
+ resolveProcessor: () => fakeProcessor,
96
+ isProjectRunnable: () => false,
97
+ logger,
98
+ });
99
+ const result = await useCase.execute({ pendingId: pending.pendingReviewRequestId });
100
+ expect(result.status).toBe('project-not-configured');
101
+ if (result.status === 'project-not-configured') {
102
+ expect(result.message).toBe("Le projet associé n'est plus configuré");
103
+ }
104
+ expect(enqueueCalls).toHaveLength(0);
105
+ expect(processorRuns).toBe(0);
106
+ expect(gateway.deleteCount).toBe(0);
107
+ expect(await gateway.listAll()).toHaveLength(1);
108
+ });
109
+ });
85
110
  });
86
111
  //# sourceMappingURL=confirmPendingReview.usecase.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"confirmPendingReview.usecase.test.js","sourceRoot":"","sources":["../../../../../../src/tests/units/modules/review-execution/usecases/confirmPendingReview.usecase.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"confirmPendingReview.usecase.test.js","sourceRoot":"","sources":["../../../../../../src/tests/units/modules/review-execution/usecases/confirmPendingReview.usecase.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=serverConfig.fileSystem.gateway.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverConfig.fileSystem.gateway.test.d.ts","sourceRoot":"","sources":["../../../../../../src/tests/units/modules/setup-wizard/gateways/serverConfig.fileSystem.gateway.test.ts"],"names":[],"mappings":""}