reviewflow 3.17.1 → 3.19.1

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 (189) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/config/projectConfig.d.ts +8 -0
  3. package/dist/config/projectConfig.d.ts.map +1 -1
  4. package/dist/config/projectConfig.js +59 -7
  5. package/dist/config/projectConfig.js.map +1 -1
  6. package/dist/dashboard/index.html +303 -175
  7. package/dist/dashboard/modules/budgetSettings.d.ts.map +1 -1
  8. package/dist/dashboard/modules/budgetSettings.js +2 -4
  9. package/dist/dashboard/modules/budgetSettings.js.map +1 -1
  10. package/dist/dashboard/modules/desktopNotifications.d.ts.map +1 -1
  11. package/dist/dashboard/modules/desktopNotifications.js +1 -0
  12. package/dist/dashboard/modules/desktopNotifications.js.map +1 -1
  13. package/dist/dashboard/modules/i18n.d.ts.map +1 -1
  14. package/dist/dashboard/modules/i18n.js +12 -0
  15. package/dist/dashboard/modules/i18n.js.map +1 -1
  16. package/dist/dashboard/modules/pendingReviews.d.ts +49 -0
  17. package/dist/dashboard/modules/pendingReviews.d.ts.map +1 -0
  18. package/dist/dashboard/modules/pendingReviews.js +80 -0
  19. package/dist/dashboard/modules/pendingReviews.js.map +1 -0
  20. package/dist/dashboard/styles.css +162 -8
  21. package/dist/frameworks/config/configLoader.d.ts +2 -0
  22. package/dist/frameworks/config/configLoader.d.ts.map +1 -1
  23. package/dist/frameworks/config/configLoader.js +27 -2
  24. package/dist/frameworks/config/configLoader.js.map +1 -1
  25. package/dist/main/routes.d.ts.map +1 -1
  26. package/dist/main/routes.js +57 -2
  27. package/dist/main/routes.js.map +1 -1
  28. package/dist/main/websocket.d.ts +1 -0
  29. package/dist/main/websocket.d.ts.map +1 -1
  30. package/dist/main/websocket.js +11 -0
  31. package/dist/main/websocket.js.map +1 -1
  32. package/dist/modules/claude-invocation/usecases/runClaudeReviewJob.usecase.d.ts.map +1 -1
  33. package/dist/modules/claude-invocation/usecases/runClaudeReviewJob.usecase.js +8 -0
  34. package/dist/modules/claude-invocation/usecases/runClaudeReviewJob.usecase.js.map +1 -1
  35. package/dist/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.d.ts.map +1 -1
  36. package/dist/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.js +24 -6
  37. package/dist/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.js.map +1 -1
  38. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.d.ts +2 -0
  39. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.d.ts.map +1 -1
  40. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.js +54 -6
  41. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/github.controller.js.map +1 -1
  42. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.d.ts +6 -0
  43. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.d.ts.map +1 -1
  44. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.js +76 -21
  45. package/dist/modules/platform-integration/interface-adapters/controllers/webhook/gitlab.controller.js.map +1 -1
  46. package/dist/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.gateway.d.ts +8 -0
  47. package/dist/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.gateway.d.ts.map +1 -0
  48. package/dist/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.gateway.js +2 -0
  49. package/dist/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.gateway.js.map +1 -0
  50. package/dist/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.guard.d.ts +29 -0
  51. package/dist/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.guard.d.ts.map +1 -0
  52. package/dist/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.guard.js +4 -0
  53. package/dist/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.guard.js.map +1 -0
  54. package/dist/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.schema.d.ts +94 -0
  55. package/dist/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.schema.d.ts.map +1 -0
  56. package/dist/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.schema.js +40 -0
  57. package/dist/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.schema.js.map +1 -0
  58. package/dist/modules/review-execution/entities/progress/agentDefinition.type.d.ts +4 -0
  59. package/dist/modules/review-execution/entities/progress/agentDefinition.type.d.ts.map +1 -1
  60. package/dist/modules/review-execution/entities/progress/agentDefinition.type.js +42 -0
  61. package/dist/modules/review-execution/entities/progress/agentDefinition.type.js.map +1 -1
  62. package/dist/modules/review-execution/entities/progress/reviewFocus.type.d.ts +8 -0
  63. package/dist/modules/review-execution/entities/progress/reviewFocus.type.d.ts.map +1 -0
  64. package/dist/modules/review-execution/entities/progress/reviewFocus.type.js +30 -0
  65. package/dist/modules/review-execution/entities/progress/reviewFocus.type.js.map +1 -0
  66. package/dist/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.d.ts +13 -0
  67. package/dist/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.d.ts.map +1 -0
  68. package/dist/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.js +34 -0
  69. package/dist/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.js.map +1 -0
  70. package/dist/modules/review-execution/interface-adapters/gateways/pendingReviewRequest.fileSystem.gateway.d.ts +16 -0
  71. package/dist/modules/review-execution/interface-adapters/gateways/pendingReviewRequest.fileSystem.gateway.d.ts.map +1 -0
  72. package/dist/modules/review-execution/interface-adapters/gateways/pendingReviewRequest.fileSystem.gateway.js +81 -0
  73. package/dist/modules/review-execution/interface-adapters/gateways/pendingReviewRequest.fileSystem.gateway.js.map +1 -0
  74. package/dist/modules/review-execution/interface-adapters/presenters/pendingReview.presenter.d.ts +25 -0
  75. package/dist/modules/review-execution/interface-adapters/presenters/pendingReview.presenter.d.ts.map +1 -0
  76. package/dist/modules/review-execution/interface-adapters/presenters/pendingReview.presenter.js +41 -0
  77. package/dist/modules/review-execution/interface-adapters/presenters/pendingReview.presenter.js.map +1 -0
  78. package/dist/modules/review-execution/services/processorRegistry.d.ts +15 -0
  79. package/dist/modules/review-execution/services/processorRegistry.d.ts.map +1 -0
  80. package/dist/modules/review-execution/services/processorRegistry.js +23 -0
  81. package/dist/modules/review-execution/services/processorRegistry.js.map +1 -0
  82. package/dist/modules/review-execution/usecases/confirmPendingReview.usecase.d.ts +32 -0
  83. package/dist/modules/review-execution/usecases/confirmPendingReview.usecase.d.ts.map +1 -0
  84. package/dist/modules/review-execution/usecases/confirmPendingReview.usecase.js +29 -0
  85. package/dist/modules/review-execution/usecases/confirmPendingReview.usecase.js.map +1 -0
  86. package/dist/modules/review-execution/usecases/dismissPendingReview.usecase.d.ts +26 -0
  87. package/dist/modules/review-execution/usecases/dismissPendingReview.usecase.d.ts.map +1 -0
  88. package/dist/modules/review-execution/usecases/dismissPendingReview.usecase.js +22 -0
  89. package/dist/modules/review-execution/usecases/dismissPendingReview.usecase.js.map +1 -0
  90. package/dist/modules/review-execution/usecases/gateClaudeInvocation.usecase.d.ts +36 -0
  91. package/dist/modules/review-execution/usecases/gateClaudeInvocation.usecase.d.ts.map +1 -0
  92. package/dist/modules/review-execution/usecases/gateClaudeInvocation.usecase.js +36 -0
  93. package/dist/modules/review-execution/usecases/gateClaudeInvocation.usecase.js.map +1 -0
  94. package/dist/modules/review-execution/usecases/listPendingReviews.usecase.d.ts +11 -0
  95. package/dist/modules/review-execution/usecases/listPendingReviews.usecase.d.ts.map +1 -0
  96. package/dist/modules/review-execution/usecases/listPendingReviews.usecase.js +10 -0
  97. package/dist/modules/review-execution/usecases/listPendingReviews.usecase.js.map +1 -0
  98. package/dist/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.d.ts +2 -0
  99. package/dist/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.d.ts.map +1 -1
  100. package/dist/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.js +22 -4
  101. package/dist/modules/tracking/interface-adapters/controllers/http/mrTrackingAdvanced.routes.js.map +1 -1
  102. package/dist/tests/acceptance/174-semi-auto-review-trigger-mode.acceptance.test.d.ts +2 -0
  103. package/dist/tests/acceptance/174-semi-auto-review-trigger-mode.acceptance.test.d.ts.map +1 -0
  104. package/dist/tests/acceptance/174-semi-auto-review-trigger-mode.acceptance.test.js +161 -0
  105. package/dist/tests/acceptance/174-semi-auto-review-trigger-mode.acceptance.test.js.map +1 -0
  106. package/dist/tests/acceptance/46-github-followup-review-on-push.acceptance.test.js +1 -0
  107. package/dist/tests/acceptance/46-github-followup-review-on-push.acceptance.test.js.map +1 -1
  108. package/dist/tests/acceptance/reviewFocus.acceptance.test.d.ts +2 -0
  109. package/dist/tests/acceptance/reviewFocus.acceptance.test.d.ts.map +1 -0
  110. package/dist/tests/acceptance/reviewFocus.acceptance.test.js +114 -0
  111. package/dist/tests/acceptance/reviewFocus.acceptance.test.js.map +1 -0
  112. package/dist/tests/factories/config.factory.d.ts.map +1 -1
  113. package/dist/tests/factories/config.factory.js +1 -0
  114. package/dist/tests/factories/config.factory.js.map +1 -1
  115. package/dist/tests/factories/pendingReviewRequest.factory.d.ts +5 -0
  116. package/dist/tests/factories/pendingReviewRequest.factory.d.ts.map +1 -0
  117. package/dist/tests/factories/pendingReviewRequest.factory.js +25 -0
  118. package/dist/tests/factories/pendingReviewRequest.factory.js.map +1 -0
  119. package/dist/tests/factories/projectConfig.factory.d.ts +21 -0
  120. package/dist/tests/factories/projectConfig.factory.d.ts.map +1 -0
  121. package/dist/tests/factories/projectConfig.factory.js +43 -0
  122. package/dist/tests/factories/projectConfig.factory.js.map +1 -0
  123. package/dist/tests/stubs/pendingReviewRequest.stub.d.ts +14 -0
  124. package/dist/tests/stubs/pendingReviewRequest.stub.d.ts.map +1 -0
  125. package/dist/tests/stubs/pendingReviewRequest.stub.js +29 -0
  126. package/dist/tests/stubs/pendingReviewRequest.stub.js.map +1 -0
  127. package/dist/tests/units/config/projectConfig.test.js +101 -1
  128. package/dist/tests/units/config/projectConfig.test.js.map +1 -1
  129. package/dist/tests/units/dashboard/modules/pendingReviews.test.d.ts +2 -0
  130. package/dist/tests/units/dashboard/modules/pendingReviews.test.d.ts.map +1 -0
  131. package/dist/tests/units/dashboard/modules/pendingReviews.test.js +60 -0
  132. package/dist/tests/units/dashboard/modules/pendingReviews.test.js.map +1 -0
  133. package/dist/tests/units/frameworks/config/configLoader.test.js +85 -0
  134. package/dist/tests/units/frameworks/config/configLoader.test.js.map +1 -1
  135. package/dist/tests/units/interface-adapters/controllers/webhook/github.controller.test.js +1 -0
  136. package/dist/tests/units/interface-adapters/controllers/webhook/github.controller.test.js.map +1 -1
  137. package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js +1 -0
  138. package/dist/tests/units/interface-adapters/controllers/webhook/gitlab.controller.test.js.map +1 -1
  139. package/dist/tests/units/modules/claude-invocation/usecases/runClaudeReviewJob.usecase.test.js +21 -1
  140. package/dist/tests/units/modules/claude-invocation/usecases/runClaudeReviewJob.usecase.test.js.map +1 -1
  141. package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.test.d.ts +2 -0
  142. package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.test.d.ts.map +1 -0
  143. package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.test.js +130 -0
  144. package/dist/tests/units/modules/cli-configuration/interface-adapters/controllers/http/projectConfig.routes.test.js.map +1 -0
  145. package/dist/tests/units/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.guard.test.d.ts +2 -0
  146. package/dist/tests/units/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.guard.test.d.ts.map +1 -0
  147. package/dist/tests/units/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.guard.test.js +32 -0
  148. package/dist/tests/units/modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.guard.test.js.map +1 -0
  149. package/dist/tests/units/modules/review-execution/entities/progress/agentDefinition.type.test.d.ts +2 -0
  150. package/dist/tests/units/modules/review-execution/entities/progress/agentDefinition.type.test.d.ts.map +1 -0
  151. package/dist/tests/units/modules/review-execution/entities/progress/agentDefinition.type.test.js +108 -0
  152. package/dist/tests/units/modules/review-execution/entities/progress/agentDefinition.type.test.js.map +1 -0
  153. package/dist/tests/units/modules/review-execution/entities/progress/reviewFocus.type.test.d.ts +2 -0
  154. package/dist/tests/units/modules/review-execution/entities/progress/reviewFocus.type.test.d.ts.map +1 -0
  155. package/dist/tests/units/modules/review-execution/entities/progress/reviewFocus.type.test.js +73 -0
  156. package/dist/tests/units/modules/review-execution/entities/progress/reviewFocus.type.test.js.map +1 -0
  157. package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.test.d.ts +2 -0
  158. package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.test.d.ts.map +1 -0
  159. package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.test.js +114 -0
  160. package/dist/tests/units/modules/review-execution/interface-adapters/controllers/http/pendingReviews.routes.test.js.map +1 -0
  161. package/dist/tests/units/modules/review-execution/interface-adapters/gateways/pendingReviewRequest.fileSystem.gateway.test.d.ts +2 -0
  162. package/dist/tests/units/modules/review-execution/interface-adapters/gateways/pendingReviewRequest.fileSystem.gateway.test.d.ts.map +1 -0
  163. package/dist/tests/units/modules/review-execution/interface-adapters/gateways/pendingReviewRequest.fileSystem.gateway.test.js +67 -0
  164. package/dist/tests/units/modules/review-execution/interface-adapters/gateways/pendingReviewRequest.fileSystem.gateway.test.js.map +1 -0
  165. package/dist/tests/units/modules/review-execution/interface-adapters/presenters/pendingReview.presenter.test.d.ts +2 -0
  166. package/dist/tests/units/modules/review-execution/interface-adapters/presenters/pendingReview.presenter.test.d.ts.map +1 -0
  167. package/dist/tests/units/modules/review-execution/interface-adapters/presenters/pendingReview.presenter.test.js +40 -0
  168. package/dist/tests/units/modules/review-execution/interface-adapters/presenters/pendingReview.presenter.test.js.map +1 -0
  169. package/dist/tests/units/modules/review-execution/services/processorRegistry.test.d.ts +2 -0
  170. package/dist/tests/units/modules/review-execution/services/processorRegistry.test.d.ts.map +1 -0
  171. package/dist/tests/units/modules/review-execution/services/processorRegistry.test.js +54 -0
  172. package/dist/tests/units/modules/review-execution/services/processorRegistry.test.js.map +1 -0
  173. package/dist/tests/units/modules/review-execution/usecases/confirmPendingReview.usecase.test.d.ts +2 -0
  174. package/dist/tests/units/modules/review-execution/usecases/confirmPendingReview.usecase.test.d.ts.map +1 -0
  175. package/dist/tests/units/modules/review-execution/usecases/confirmPendingReview.usecase.test.js +86 -0
  176. package/dist/tests/units/modules/review-execution/usecases/confirmPendingReview.usecase.test.js.map +1 -0
  177. package/dist/tests/units/modules/review-execution/usecases/dismissPendingReview.usecase.test.d.ts +2 -0
  178. package/dist/tests/units/modules/review-execution/usecases/dismissPendingReview.usecase.test.d.ts.map +1 -0
  179. package/dist/tests/units/modules/review-execution/usecases/dismissPendingReview.usecase.test.js +50 -0
  180. package/dist/tests/units/modules/review-execution/usecases/dismissPendingReview.usecase.test.js.map +1 -0
  181. package/dist/tests/units/modules/review-execution/usecases/gateClaudeInvocation.usecase.test.d.ts +2 -0
  182. package/dist/tests/units/modules/review-execution/usecases/gateClaudeInvocation.usecase.test.d.ts.map +1 -0
  183. package/dist/tests/units/modules/review-execution/usecases/gateClaudeInvocation.usecase.test.js +134 -0
  184. package/dist/tests/units/modules/review-execution/usecases/gateClaudeInvocation.usecase.test.js.map +1 -0
  185. package/dist/tests/units/modules/review-execution/usecases/listPendingReviews.usecase.test.d.ts +2 -0
  186. package/dist/tests/units/modules/review-execution/usecases/listPendingReviews.usecase.test.d.ts.map +1 -0
  187. package/dist/tests/units/modules/review-execution/usecases/listPendingReviews.usecase.test.js +27 -0
  188. package/dist/tests/units/modules/review-execution/usecases/listPendingReviews.usecase.test.js.map +1 -0
  189. package/package.json +1 -1
@@ -0,0 +1,25 @@
1
+ export const PendingReviewRequestFactory = {
2
+ create(overrides = {}) {
3
+ return {
4
+ pendingReviewRequestId: 'pending-gitlab-group-project-42',
5
+ job: {
6
+ id: 'gitlab:group/project:42',
7
+ platform: 'gitlab',
8
+ projectPath: 'group/project',
9
+ localPath: '/home/user/projects/test',
10
+ mrNumber: 42,
11
+ skill: 'review-code',
12
+ mrUrl: 'https://gitlab.example.com/group/project/-/merge_requests/42',
13
+ sourceBranch: 'feature/x',
14
+ targetBranch: 'main',
15
+ jobType: 'review',
16
+ },
17
+ jobType: 'review',
18
+ platform: 'gitlab',
19
+ triggerSource: 'webhook-initial',
20
+ createdAt: '2026-05-23T10:00:00.000Z',
21
+ ...overrides,
22
+ };
23
+ },
24
+ };
25
+ //# sourceMappingURL=pendingReviewRequest.factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pendingReviewRequest.factory.js","sourceRoot":"","sources":["../../../src/tests/factories/pendingReviewRequest.factory.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,MAAM,CAAC,YAA2C,EAAE;QAClD,OAAO;YACL,sBAAsB,EAAE,iCAAiC;YACzD,GAAG,EAAE;gBACH,EAAE,EAAE,yBAAyB;gBAC7B,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,eAAe;gBAC5B,SAAS,EAAE,0BAA0B;gBACrC,QAAQ,EAAE,EAAE;gBACZ,KAAK,EAAE,aAAa;gBACpB,KAAK,EAAE,8DAA8D;gBACrE,YAAY,EAAE,WAAW;gBACzB,YAAY,EAAE,MAAM;gBACpB,OAAO,EAAE,QAAQ;aAClB;YACD,OAAO,EAAE,QAAQ;YACjB,QAAQ,EAAE,QAAQ;YAClB,aAAa,EAAE,iBAAiB;YAChC,SAAS,EAAE,0BAA0B;YACrC,GAAG,SAAS;SACb,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { AgentDefinition } from '../../modules/review-execution/entities/progress/agentDefinition.type.js';
2
+ export interface ProjectConfigOverrides {
3
+ github?: boolean;
4
+ gitlab?: boolean;
5
+ defaultModel?: 'haiku' | 'sonnet' | 'opus';
6
+ reviewSkill?: string;
7
+ reviewFollowupSkill?: string;
8
+ reviewFocus?: string;
9
+ language?: 'en' | 'fr';
10
+ retentionDays?: number;
11
+ agents?: AgentDefinition[];
12
+ followupAgents?: AgentDefinition[];
13
+ routingPolicy?: {
14
+ haikuMaxLines: number;
15
+ sonnetMaxLines: number;
16
+ };
17
+ }
18
+ export declare const ProjectConfigFactory: {
19
+ create(overrides?: ProjectConfigOverrides): Record<string, unknown>;
20
+ };
21
+ //# sourceMappingURL=projectConfig.factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectConfig.factory.d.ts","sourceRoot":"","sources":["../../../src/tests/factories/projectConfig.factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sEAAsE,CAAC;AAE5G,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,cAAc,CAAC,EAAE,eAAe,EAAE,CAAC;IACnC,aAAa,CAAC,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;CACnE;AA2CD,eAAO,MAAM,oBAAoB;uBACb,sBAAsB,GAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAGxE,CAAC"}
@@ -0,0 +1,43 @@
1
+ function buildPayload(overrides) {
2
+ const payload = {
3
+ github: overrides.github ?? true,
4
+ gitlab: overrides.gitlab ?? false,
5
+ defaultModel: overrides.defaultModel ?? 'sonnet',
6
+ reviewFollowupSkill: overrides.reviewFollowupSkill ?? 'review-followup',
7
+ };
8
+ if (Object.prototype.hasOwnProperty.call(overrides, 'reviewSkill')) {
9
+ if (overrides.reviewSkill !== undefined) {
10
+ payload.reviewSkill = overrides.reviewSkill;
11
+ }
12
+ }
13
+ else {
14
+ payload.reviewSkill = 'review-front';
15
+ }
16
+ if (Object.prototype.hasOwnProperty.call(overrides, 'reviewFocus')) {
17
+ if (overrides.reviewFocus !== undefined) {
18
+ payload.reviewFocus = overrides.reviewFocus;
19
+ }
20
+ }
21
+ if (overrides.language !== undefined) {
22
+ payload.language = overrides.language;
23
+ }
24
+ if (overrides.retentionDays !== undefined) {
25
+ payload.retentionDays = overrides.retentionDays;
26
+ }
27
+ if (overrides.agents !== undefined) {
28
+ payload.agents = overrides.agents;
29
+ }
30
+ if (overrides.followupAgents !== undefined) {
31
+ payload.followupAgents = overrides.followupAgents;
32
+ }
33
+ if (overrides.routingPolicy !== undefined) {
34
+ payload.routingPolicy = overrides.routingPolicy;
35
+ }
36
+ return payload;
37
+ }
38
+ export const ProjectConfigFactory = {
39
+ create(overrides = {}) {
40
+ return buildPayload(overrides);
41
+ },
42
+ };
43
+ //# sourceMappingURL=projectConfig.factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectConfig.factory.js","sourceRoot":"","sources":["../../../src/tests/factories/projectConfig.factory.ts"],"names":[],"mappings":"AAgBA,SAAS,YAAY,CAAC,SAAiC;IACrD,MAAM,OAAO,GAA4B;QACvC,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,IAAI;QAChC,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,KAAK;QACjC,YAAY,EAAE,SAAS,CAAC,YAAY,IAAI,QAAQ;QAChD,mBAAmB,EAAE,SAAS,CAAC,mBAAmB,IAAI,iBAAiB;KACxE,CAAC;IAEF,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,CAAC;QACnE,IAAI,SAAS,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;QAC9C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,WAAW,GAAG,cAAc,CAAC;IACvC,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,CAAC;QACnE,IAAI,SAAS,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,IAAI,SAAS,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;IACxC,CAAC;IACD,IAAI,SAAS,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,aAAa,CAAC;IAClD,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IACpC,CAAC;IACD,IAAI,SAAS,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QAC3C,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,cAAc,CAAC;IACpD,CAAC;IACD,IAAI,SAAS,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,aAAa,CAAC;IAClD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,MAAM,CAAC,YAAoC,EAAE;QAC3C,OAAO,YAAY,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;CACF,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { PendingReviewRequestGateway } from '../../modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.gateway.js';
2
+ import type { PendingReviewRequest } from '../../modules/review-execution/entities/pendingReviewRequest/pendingReviewRequest.schema.js';
3
+ export declare class StubPendingReviewRequestGateway implements PendingReviewRequestGateway {
4
+ private storage;
5
+ saveCount: number;
6
+ deleteCount: number;
7
+ save(pending: PendingReviewRequest): Promise<void>;
8
+ load(pendingReviewRequestId: string): Promise<PendingReviewRequest | null>;
9
+ listAll(): Promise<PendingReviewRequest[]>;
10
+ delete(pendingReviewRequestId: string): Promise<boolean>;
11
+ prepopulate(pending: PendingReviewRequest): void;
12
+ clear(): void;
13
+ }
14
+ //# sourceMappingURL=pendingReviewRequest.stub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pendingReviewRequest.stub.d.ts","sourceRoot":"","sources":["../../../src/tests/stubs/pendingReviewRequest.stub.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,0FAA0F,CAAC;AAC5I,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yFAAyF,CAAC;AAEpI,qBAAa,+BAAgC,YAAW,2BAA2B;IACjF,OAAO,CAAC,OAAO,CAA2C;IACnD,SAAS,SAAK;IACd,WAAW,SAAK;IAEjB,IAAI,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlD,IAAI,CAAC,sBAAsB,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAK1E,OAAO,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAI1C,MAAM,CAAC,sBAAsB,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK9D,WAAW,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI;IAIhD,KAAK,IAAI,IAAI;CAKd"}
@@ -0,0 +1,29 @@
1
+ export class StubPendingReviewRequestGateway {
2
+ storage = new Map();
3
+ saveCount = 0;
4
+ deleteCount = 0;
5
+ async save(pending) {
6
+ this.storage.set(pending.pendingReviewRequestId, { ...pending });
7
+ this.saveCount += 1;
8
+ }
9
+ async load(pendingReviewRequestId) {
10
+ const found = this.storage.get(pendingReviewRequestId);
11
+ return found ? { ...found } : null;
12
+ }
13
+ async listAll() {
14
+ return Array.from(this.storage.values()).map((entry) => ({ ...entry }));
15
+ }
16
+ async delete(pendingReviewRequestId) {
17
+ this.deleteCount += 1;
18
+ return this.storage.delete(pendingReviewRequestId);
19
+ }
20
+ prepopulate(pending) {
21
+ this.storage.set(pending.pendingReviewRequestId, { ...pending });
22
+ }
23
+ clear() {
24
+ this.storage.clear();
25
+ this.saveCount = 0;
26
+ this.deleteCount = 0;
27
+ }
28
+ }
29
+ //# sourceMappingURL=pendingReviewRequest.stub.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pendingReviewRequest.stub.js","sourceRoot":"","sources":["../../../src/tests/stubs/pendingReviewRequest.stub.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,+BAA+B;IAClC,OAAO,GAAG,IAAI,GAAG,EAAgC,CAAC;IACnD,SAAS,GAAG,CAAC,CAAC;IACd,WAAW,GAAG,CAAC,CAAC;IAEvB,KAAK,CAAC,IAAI,CAAC,OAA6B;QACtC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,sBAA8B;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACvD,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,sBAA8B;QACzC,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACrD,CAAC;IAED,WAAW,CAAC,OAA6B;QACvC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;IACvB,CAAC;CACF"}
@@ -1,6 +1,9 @@
1
1
  import { describe, it, expect, vi, beforeEach } from 'vitest';
2
2
  import * as fs from 'node:fs';
3
- import { loadProjectConfig, getProjectLanguage, getProjectRetentionDays } from '../../../config/projectConfig.js';
3
+ import { loadProjectConfig, getProjectLanguage, getProjectRetentionDays, getProjectAgentsOrFocusDefaults, } from '../../../config/projectConfig.js';
4
+ import { DEFAULT_FRONT_AGENTS, DEFAULT_BACK_AGENTS, DEFAULT_FULLSTACK_AGENTS, DEFAULT_DOC_AGENTS, } from '../../../modules/review-execution/entities/progress/agentDefinition.type.js';
5
+ import { clearLogs, getLogs } from '../../../frameworks/logging/logBuffer.js';
6
+ import { ProjectConfigFactory } from '../../../tests/factories/projectConfig.factory.js';
4
7
  vi.mock('node:fs');
5
8
  describe('loadProjectConfig', () => {
6
9
  beforeEach(() => {
@@ -172,4 +175,101 @@ describe('loadProjectConfig — routingPolicy', () => {
172
175
  expect(config?.routingPolicy).toBeUndefined();
173
176
  });
174
177
  });
178
+ describe('loadProjectConfig — reviewFocus derivation', () => {
179
+ beforeEach(() => {
180
+ vi.resetAllMocks();
181
+ clearLogs();
182
+ });
183
+ it('derives reviewSkill as "review-back" when reviewFocus is "back" and reviewSkill is absent', () => {
184
+ vi.mocked(fs.existsSync).mockReturnValue(true);
185
+ vi.mocked(fs.readFileSync).mockReturnValue(JSON.stringify(ProjectConfigFactory.create({ reviewFocus: 'back', reviewSkill: undefined })));
186
+ const config = loadProjectConfig('/fake/path');
187
+ expect(config?.reviewSkill).toBe('review-back');
188
+ expect(config?.reviewFocus).toBe('back');
189
+ });
190
+ it('derives reviewSkill as "review-front" for "front" focus', () => {
191
+ vi.mocked(fs.existsSync).mockReturnValue(true);
192
+ vi.mocked(fs.readFileSync).mockReturnValue(JSON.stringify(ProjectConfigFactory.create({ reviewFocus: 'front', reviewSkill: undefined })));
193
+ expect(loadProjectConfig('/fake/path')?.reviewSkill).toBe('review-front');
194
+ });
195
+ it('derives reviewSkill as "review-fullstack" for "fullstack" focus', () => {
196
+ vi.mocked(fs.existsSync).mockReturnValue(true);
197
+ vi.mocked(fs.readFileSync).mockReturnValue(JSON.stringify(ProjectConfigFactory.create({ reviewFocus: 'fullstack', reviewSkill: undefined })));
198
+ expect(loadProjectConfig('/fake/path')?.reviewSkill).toBe('review-fullstack');
199
+ });
200
+ it('derives reviewSkill as "review-doc" for "doc" focus', () => {
201
+ vi.mocked(fs.existsSync).mockReturnValue(true);
202
+ vi.mocked(fs.readFileSync).mockReturnValue(JSON.stringify(ProjectConfigFactory.create({ reviewFocus: 'doc', reviewSkill: undefined })));
203
+ expect(loadProjectConfig('/fake/path')?.reviewSkill).toBe('review-doc');
204
+ });
205
+ it('keeps explicit reviewSkill and logs a warning when both reviewFocus and reviewSkill are set', () => {
206
+ vi.mocked(fs.existsSync).mockReturnValue(true);
207
+ vi.mocked(fs.readFileSync).mockReturnValue(JSON.stringify(ProjectConfigFactory.create({ reviewFocus: 'back', reviewSkill: 'my-custom-skill' })));
208
+ const config = loadProjectConfig('/fake/path');
209
+ expect(config?.reviewSkill).toBe('my-custom-skill');
210
+ expect(config?.reviewFocus).toBe('back');
211
+ const warnLogs = getLogs().filter(log => log.level === 'warn');
212
+ expect(warnLogs.length).toBeGreaterThan(0);
213
+ expect(warnLogs[0]?.message).toContain('reviewSkill takes precedence');
214
+ });
215
+ it('throws an error listing the four valid focus values when reviewFocus is invalid', () => {
216
+ vi.mocked(fs.existsSync).mockReturnValue(true);
217
+ vi.mocked(fs.readFileSync).mockReturnValue(JSON.stringify(ProjectConfigFactory.create({ reviewFocus: 'mobile' })));
218
+ expect(() => loadProjectConfig('/fake/path')).toThrow(/Invalid reviewFocus.*'front'.*'back'.*'fullstack'.*'doc'/);
219
+ });
220
+ it('still throws when both reviewFocus and reviewSkill are missing (no over-relaxation)', () => {
221
+ vi.mocked(fs.existsSync).mockReturnValue(true);
222
+ vi.mocked(fs.readFileSync).mockReturnValue(JSON.stringify({
223
+ github: true,
224
+ gitlab: false,
225
+ defaultModel: 'sonnet',
226
+ reviewFollowupSkill: 'review-followup',
227
+ }));
228
+ expect(() => loadProjectConfig('/fake/path')).toThrow(/reviewSkill/);
229
+ });
230
+ });
231
+ describe('getProjectAgentsOrFocusDefaults', () => {
232
+ beforeEach(() => {
233
+ vi.resetAllMocks();
234
+ });
235
+ it('returns the explicit agents array when one is set in config', () => {
236
+ const explicitAgents = [{ name: 'security', displayName: 'Security' }];
237
+ vi.mocked(fs.existsSync).mockReturnValue(true);
238
+ vi.mocked(fs.readFileSync).mockReturnValue(JSON.stringify(ProjectConfigFactory.create({
239
+ reviewFocus: 'back',
240
+ reviewSkill: undefined,
241
+ agents: explicitAgents,
242
+ })));
243
+ expect(getProjectAgentsOrFocusDefaults('/fake/path')).toEqual(explicitAgents);
244
+ });
245
+ it('falls back to DEFAULT_FRONT_AGENTS when reviewFocus is "front" and no agents array is set', () => {
246
+ vi.mocked(fs.existsSync).mockReturnValue(true);
247
+ vi.mocked(fs.readFileSync).mockReturnValue(JSON.stringify(ProjectConfigFactory.create({ reviewFocus: 'front', reviewSkill: undefined })));
248
+ expect(getProjectAgentsOrFocusDefaults('/fake/path')).toEqual(DEFAULT_FRONT_AGENTS);
249
+ });
250
+ it('falls back to DEFAULT_BACK_AGENTS when reviewFocus is "back"', () => {
251
+ vi.mocked(fs.existsSync).mockReturnValue(true);
252
+ vi.mocked(fs.readFileSync).mockReturnValue(JSON.stringify(ProjectConfigFactory.create({ reviewFocus: 'back', reviewSkill: undefined })));
253
+ expect(getProjectAgentsOrFocusDefaults('/fake/path')).toEqual(DEFAULT_BACK_AGENTS);
254
+ });
255
+ it('falls back to DEFAULT_FULLSTACK_AGENTS when reviewFocus is "fullstack"', () => {
256
+ vi.mocked(fs.existsSync).mockReturnValue(true);
257
+ vi.mocked(fs.readFileSync).mockReturnValue(JSON.stringify(ProjectConfigFactory.create({ reviewFocus: 'fullstack', reviewSkill: undefined })));
258
+ expect(getProjectAgentsOrFocusDefaults('/fake/path')).toEqual(DEFAULT_FULLSTACK_AGENTS);
259
+ });
260
+ it('falls back to DEFAULT_DOC_AGENTS when reviewFocus is "doc"', () => {
261
+ vi.mocked(fs.existsSync).mockReturnValue(true);
262
+ vi.mocked(fs.readFileSync).mockReturnValue(JSON.stringify(ProjectConfigFactory.create({ reviewFocus: 'doc', reviewSkill: undefined })));
263
+ expect(getProjectAgentsOrFocusDefaults('/fake/path')).toEqual(DEFAULT_DOC_AGENTS);
264
+ });
265
+ it('returns undefined when neither agents nor reviewFocus is set', () => {
266
+ vi.mocked(fs.existsSync).mockReturnValue(true);
267
+ vi.mocked(fs.readFileSync).mockReturnValue(JSON.stringify(ProjectConfigFactory.create({ reviewFocus: undefined })));
268
+ expect(getProjectAgentsOrFocusDefaults('/fake/path')).toBeUndefined();
269
+ });
270
+ it('returns undefined when the config does not exist', () => {
271
+ vi.mocked(fs.existsSync).mockReturnValue(false);
272
+ expect(getProjectAgentsOrFocusDefaults('/nonexistent')).toBeUndefined();
273
+ });
274
+ });
175
275
  //# sourceMappingURL=projectConfig.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"projectConfig.test.js","sourceRoot":"","sources":["../../../../src/tests/units/config/projectConfig.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projectConfig.test.js","sourceRoot":"","sources":["../../../../src/tests/units/config/projectConfig.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=pendingReviews.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pendingReviews.test.d.ts","sourceRoot":"","sources":["../../../../../src/tests/units/dashboard/modules/pendingReviews.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,60 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { buildPendingReviewsModel, renderPendingReviewsHtml, } from '../../../../dashboard/modules/pendingReviews.js';
3
+ function makeViewModel(overrides = {}) {
4
+ return {
5
+ identifier: 'pending-1',
6
+ mrNumber: 42,
7
+ displayTitle: 'MR !42 - Refactor X',
8
+ projectPath: 'group/project',
9
+ mrUrl: 'https://gitlab.example.com/group/project/-/merge_requests/42',
10
+ jobTypeLabel: 'Review',
11
+ triggerSourceLabel: 'Webhook',
12
+ createdAtRelative: 'il y a 2m',
13
+ confirmActionUrl: '/api/pending-reviews/pending-1/confirm',
14
+ dismissActionUrl: '/api/pending-reviews/pending-1',
15
+ ...overrides,
16
+ };
17
+ }
18
+ describe('buildPendingReviewsModel', () => {
19
+ it('returns an empty model when the input is empty', () => {
20
+ const model = buildPendingReviewsModel([]);
21
+ expect(model.items).toHaveLength(0);
22
+ expect(model.count).toBe(0);
23
+ expect(model.isEmpty).toBe(true);
24
+ expect(model.emptyMessage).toBe('Aucune review en attente de confirmation');
25
+ });
26
+ it('returns the items unchanged when present', () => {
27
+ const item = makeViewModel();
28
+ const model = buildPendingReviewsModel([item]);
29
+ expect(model.items).toEqual([item]);
30
+ expect(model.count).toBe(1);
31
+ expect(model.isEmpty).toBe(false);
32
+ });
33
+ it('treats a missing array as empty (defensive)', () => {
34
+ const model = buildPendingReviewsModel(undefined);
35
+ expect(model.isEmpty).toBe(true);
36
+ });
37
+ });
38
+ describe('renderPendingReviewsHtml', () => {
39
+ it('renders the French empty-state when no pending reviews', () => {
40
+ const html = renderPendingReviewsHtml(buildPendingReviewsModel([]));
41
+ expect(html).toContain('Aucune review en attente de confirmation');
42
+ expect(html).toContain('empty-state');
43
+ });
44
+ it('renders confirm and dismiss buttons with the pending id', () => {
45
+ const item = makeViewModel({ identifier: 'pending-abc' });
46
+ const html = renderPendingReviewsHtml(buildPendingReviewsModel([item]));
47
+ expect(html).toContain('data-pending-id="pending-abc"');
48
+ expect(html).toContain('btn-confirm-pending');
49
+ expect(html).toContain('btn-dismiss-pending');
50
+ expect(html).toContain('Confirmer');
51
+ expect(html).toContain('Ignorer');
52
+ });
53
+ it('escapes HTML special characters in user-controlled fields', () => {
54
+ const item = makeViewModel({ displayTitle: 'MR !42 - <script>alert(1)</script>' });
55
+ const html = renderPendingReviewsHtml(buildPendingReviewsModel([item]));
56
+ expect(html).not.toContain('<script>alert(1)</script>');
57
+ expect(html).toContain('&lt;script&gt;');
58
+ });
59
+ });
60
+ //# sourceMappingURL=pendingReviews.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pendingReviews.test.js","sourceRoot":"","sources":["../../../../../src/tests/units/dashboard/modules/pendingReviews.test.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,22 @@
1
+ import { vi } from 'vitest';
2
+ import * as fs from 'node:fs';
3
+ import * as childProcess from 'node:child_process';
1
4
  import { validateAndEnrichConfig } from '../../../../frameworks/config/configLoader.js';
5
+ vi.mock('node:fs', async () => {
6
+ const actual = await vi.importActual('node:fs');
7
+ return {
8
+ ...actual,
9
+ existsSync: vi.fn(),
10
+ readFileSync: vi.fn(),
11
+ };
12
+ });
13
+ vi.mock('node:child_process', async () => {
14
+ const actual = await vi.importActual('node:child_process');
15
+ return {
16
+ ...actual,
17
+ execSync: vi.fn(),
18
+ };
19
+ });
2
20
  function createValidConfig(userOverrides = {}) {
3
21
  return {
4
22
  server: { port: 3000 },
@@ -65,5 +83,72 @@ describe('validateAndEnrichConfig', () => {
65
83
  expect(() => validateAndEnrichConfig(config)).toThrow('githubUsername');
66
84
  });
67
85
  });
86
+ describe('triggerMode validation (SPEC-174)', () => {
87
+ it('default mode when missing: falls back to full-auto', () => {
88
+ const config = createValidConfig();
89
+ const result = validateAndEnrichConfig(config);
90
+ expect(result.triggerMode).toBe('full-auto');
91
+ });
92
+ it('accepts triggerMode "full-auto"', () => {
93
+ const config = { ...createValidConfig(), triggerMode: 'full-auto' };
94
+ const result = validateAndEnrichConfig(config);
95
+ expect(result.triggerMode).toBe('full-auto');
96
+ });
97
+ it('accepts triggerMode "semi-auto"', () => {
98
+ const config = { ...createValidConfig(), triggerMode: 'semi-auto' };
99
+ const result = validateAndEnrichConfig(config);
100
+ expect(result.triggerMode).toBe('semi-auto');
101
+ });
102
+ it('rejects an unknown triggerMode value with the exact French error from the spec', () => {
103
+ const config = { ...createValidConfig(), triggerMode: 'unknown-value' };
104
+ expect(() => validateAndEnrichConfig(config)).toThrow('Mode de déclenchement invalide : valeurs autorisées « full-auto » ou « semi-auto »');
105
+ });
106
+ });
107
+ });
108
+ describe('enrichRepository — reviewFocus derivation', () => {
109
+ beforeEach(() => {
110
+ vi.resetAllMocks();
111
+ });
112
+ function setupProjectConfigOnDisk(projectJson) {
113
+ vi.mocked(fs.existsSync).mockReturnValue(true);
114
+ vi.mocked(fs.readFileSync).mockImplementation(() => JSON.stringify(projectJson));
115
+ vi.mocked(childProcess.execSync).mockImplementation(() => 'https://github.com/test/repo.git\n');
116
+ }
117
+ function configWithRepo() {
118
+ return {
119
+ server: { port: 3000 },
120
+ user: { gitlabUsername: 'u', githubUsername: 'u' },
121
+ queue: { maxConcurrent: 1, deduplicationWindowMs: 1000 },
122
+ repositories: [
123
+ { name: 'test-repo', localPath: '/fake/path', enabled: true },
124
+ ],
125
+ };
126
+ }
127
+ it('derives skill "review-back" when project config has reviewFocus "back" and no reviewSkill', () => {
128
+ setupProjectConfigOnDisk({ github: true, gitlab: false, reviewFocus: 'back' });
129
+ const result = validateAndEnrichConfig(configWithRepo());
130
+ expect(result.repositories).toHaveLength(1);
131
+ expect(result.repositories[0]?.skill).toBe('review-back');
132
+ });
133
+ it('derives skill "review-doc" when project config has reviewFocus "doc"', () => {
134
+ setupProjectConfigOnDisk({ github: true, gitlab: false, reviewFocus: 'doc' });
135
+ const result = validateAndEnrichConfig(configWithRepo());
136
+ expect(result.repositories[0]?.skill).toBe('review-doc');
137
+ });
138
+ it('keeps explicit reviewSkill when both fields are set', () => {
139
+ setupProjectConfigOnDisk({
140
+ github: true,
141
+ gitlab: false,
142
+ reviewSkill: 'my-custom-skill',
143
+ reviewFocus: 'back',
144
+ });
145
+ const result = validateAndEnrichConfig(configWithRepo());
146
+ expect(result.repositories[0]?.skill).toBe('my-custom-skill');
147
+ });
148
+ it('falls back to "review-code" when neither reviewSkill nor reviewFocus is set', () => {
149
+ setupProjectConfigOnDisk({ github: true, gitlab: false });
150
+ const result = validateAndEnrichConfig(configWithRepo());
151
+ expect(result.repositories[0]?.skill).toBe('review-code');
152
+ });
68
153
  });
69
154
  //# sourceMappingURL=configLoader.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"configLoader.test.js","sourceRoot":"","sources":["../../../../../src/tests/units/frameworks/config/configLoader.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"configLoader.test.js","sourceRoot":"","sources":["../../../../../src/tests/units/frameworks/config/configLoader.test.ts"],"names":[],"mappings":"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"}
@@ -44,6 +44,7 @@ vi.mock('../../../../../main/websocket.js', () => ({
44
44
  vi.mock('../../../../../config/projectConfig.js', () => ({
45
45
  loadProjectConfig: vi.fn(() => null),
46
46
  getProjectAgents: vi.fn(() => null),
47
+ getProjectAgentsOrFocusDefaults: vi.fn(() => null),
47
48
  getFollowupAgents: vi.fn(() => null),
48
49
  getProjectLanguage: vi.fn(() => 'en'),
49
50
  }));