reviewflow 3.41.0 → 3.42.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.
- package/CHANGELOG.md +33 -0
- package/dist/dashboard/index.html +40 -226
- package/dist/dashboard/modules/i18n.d.ts.map +1 -1
- package/dist/dashboard/modules/i18n.js +16 -2
- package/dist/dashboard/modules/i18n.js.map +1 -1
- package/dist/dashboard/modules/statsCharts.d.ts.map +1 -1
- package/dist/dashboard/modules/statsCharts.js +43 -28
- package/dist/dashboard/modules/statsCharts.js.map +1 -1
- package/dist/dashboard/modules/statsPage.d.ts +15 -0
- package/dist/dashboard/modules/statsPage.d.ts.map +1 -0
- package/dist/dashboard/modules/statsPage.js +250 -0
- package/dist/dashboard/modules/statsPage.js.map +1 -0
- package/dist/dashboard/stats.html +371 -0
- package/dist/dashboard/styles.css +23 -8
- package/dist/main/routes.d.ts.map +1 -1
- package/dist/main/routes.js +14 -4
- package/dist/main/routes.js.map +1 -1
- package/dist/modules/setup-wizard/interface-adapters/gateways/validation.adapter.gateway.d.ts +1 -1
- package/dist/modules/setup-wizard/interface-adapters/gateways/validation.adapter.gateway.d.ts.map +1 -1
- package/dist/modules/setup-wizard/interface-adapters/gateways/validation.adapter.gateway.js +10 -5
- package/dist/modules/setup-wizard/interface-adapters/gateways/validation.adapter.gateway.js.map +1 -1
- package/dist/modules/statistics-insights/entities/stats/keyInsights.d.ts +4 -3
- package/dist/modules/statistics-insights/entities/stats/keyInsights.d.ts.map +1 -1
- package/dist/modules/statistics-insights/entities/stats/keyInsights.js +27 -7
- package/dist/modules/statistics-insights/entities/stats/keyInsights.js.map +1 -1
- package/dist/modules/statistics-insights/interface-adapters/presenters/statsSummary.presenter.d.ts +7 -0
- package/dist/modules/statistics-insights/interface-adapters/presenters/statsSummary.presenter.d.ts.map +1 -1
- package/dist/modules/statistics-insights/interface-adapters/presenters/statsSummary.presenter.js +24 -1
- package/dist/modules/statistics-insights/interface-adapters/presenters/statsSummary.presenter.js.map +1 -1
- package/dist/modules/tracking/interface-adapters/controllers/http/mrTracking.routes.d.ts +9 -1
- package/dist/modules/tracking/interface-adapters/controllers/http/mrTracking.routes.d.ts.map +1 -1
- package/dist/modules/tracking/interface-adapters/controllers/http/mrTracking.routes.js +14 -25
- package/dist/modules/tracking/interface-adapters/controllers/http/mrTracking.routes.js.map +1 -1
- package/dist/modules/tracking/usecases/tracking/markReviewAsMerged.usecase.d.ts +33 -0
- package/dist/modules/tracking/usecases/tracking/markReviewAsMerged.usecase.d.ts.map +1 -0
- package/dist/modules/tracking/usecases/tracking/markReviewAsMerged.usecase.js +42 -0
- package/dist/modules/tracking/usecases/tracking/markReviewAsMerged.usecase.js.map +1 -0
- package/dist/modules/worktree-management/interface-adapters/gateways/worktree.fileSystem.gateway.d.ts.map +1 -1
- package/dist/modules/worktree-management/interface-adapters/gateways/worktree.fileSystem.gateway.js +2 -1
- package/dist/modules/worktree-management/interface-adapters/gateways/worktree.fileSystem.gateway.js.map +1 -1
- package/dist/modules/worktree-management/usecases/ensureWorktree.usecase.d.ts +1 -0
- package/dist/modules/worktree-management/usecases/ensureWorktree.usecase.d.ts.map +1 -1
- package/dist/modules/worktree-management/usecases/ensureWorktree.usecase.js +17 -1
- package/dist/modules/worktree-management/usecases/ensureWorktree.usecase.js.map +1 -1
- package/dist/tests/acceptance/170-prebuilt-worktree-lifecycle.acceptance.test.js +3 -0
- package/dist/tests/acceptance/170-prebuilt-worktree-lifecycle.acceptance.test.js.map +1 -1
- package/dist/tests/acceptance/180-quality-threshold-block-approval.acceptance.test.js +7 -0
- package/dist/tests/acceptance/180-quality-threshold-block-approval.acceptance.test.js.map +1 -1
- package/dist/tests/acceptance/215-mark-any-review-as-merged.acceptance.test.d.ts +12 -0
- package/dist/tests/acceptance/215-mark-any-review-as-merged.acceptance.test.d.ts.map +1 -0
- package/dist/tests/acceptance/215-mark-any-review-as-merged.acceptance.test.js +158 -0
- package/dist/tests/acceptance/215-mark-any-review-as-merged.acceptance.test.js.map +1 -0
- package/dist/tests/acceptance/80-split-stats-service.acceptance.test.js +8 -1
- package/dist/tests/acceptance/80-split-stats-service.acceptance.test.js.map +1 -1
- package/dist/tests/units/dashboard/dashboardLayout.test.js +11 -18
- package/dist/tests/units/dashboard/dashboardLayout.test.js.map +1 -1
- package/dist/tests/units/dashboard/modules/i18n.test.js +13 -0
- package/dist/tests/units/dashboard/modules/i18n.test.js.map +1 -1
- package/dist/tests/units/dashboard/modules/statsCharts.test.js +37 -0
- package/dist/tests/units/dashboard/modules/statsCharts.test.js.map +1 -1
- package/dist/tests/units/dashboard/modules/statsPage.test.d.ts +2 -0
- package/dist/tests/units/dashboard/modules/statsPage.test.d.ts.map +1 -0
- package/dist/tests/units/dashboard/modules/statsPage.test.js +169 -0
- package/dist/tests/units/dashboard/modules/statsPage.test.js.map +1 -0
- package/dist/tests/units/interface-adapters/presenters/statsSummary.presenter.test.js +61 -1
- package/dist/tests/units/interface-adapters/presenters/statsSummary.presenter.test.js.map +1 -1
- package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/validation.adapter.gateway.test.js +23 -14
- package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/validation.adapter.gateway.test.js.map +1 -1
- package/dist/tests/units/modules/statistics-insights/entities/stats/keyInsights.test.js +49 -0
- package/dist/tests/units/modules/statistics-insights/entities/stats/keyInsights.test.js.map +1 -1
- package/dist/tests/units/modules/statistics-insights/entities/stats/reviewOutput.parser.test.d.ts.map +1 -0
- package/dist/tests/units/{entities → modules/statistics-insights/entities}/stats/reviewOutput.parser.test.js +1 -1
- package/dist/tests/units/modules/statistics-insights/entities/stats/reviewOutput.parser.test.js.map +1 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/keyInsights.presenter.test.js +24 -0
- package/dist/tests/units/modules/statistics-insights/interface-adapters/presenters/keyInsights.presenter.test.js.map +1 -1
- package/dist/tests/units/modules/statistics-insights/usecases/stats/addReviewStats.counter.test.d.ts +2 -0
- package/dist/tests/units/modules/statistics-insights/usecases/stats/addReviewStats.counter.test.d.ts.map +1 -0
- package/dist/tests/units/modules/statistics-insights/usecases/stats/addReviewStats.counter.test.js +95 -0
- package/dist/tests/units/modules/statistics-insights/usecases/stats/addReviewStats.counter.test.js.map +1 -0
- package/dist/tests/units/modules/tracking/interface-adapters/controllers/http/mrTracking.markAsMerged.routes.test.d.ts +2 -0
- package/dist/tests/units/modules/tracking/interface-adapters/controllers/http/mrTracking.markAsMerged.routes.test.d.ts.map +1 -0
- package/dist/tests/units/modules/tracking/interface-adapters/controllers/http/mrTracking.markAsMerged.routes.test.js +108 -0
- package/dist/tests/units/modules/tracking/interface-adapters/controllers/http/mrTracking.markAsMerged.routes.test.js.map +1 -0
- package/dist/tests/units/modules/tracking/interface-adapters/controllers/http/mrTracking.routes.test.js +11 -5
- package/dist/tests/units/modules/tracking/interface-adapters/controllers/http/mrTracking.routes.test.js.map +1 -1
- package/dist/tests/units/modules/tracking/usecases/tracking/markReviewAsMerged.usecase.test.d.ts +2 -0
- package/dist/tests/units/modules/tracking/usecases/tracking/markReviewAsMerged.usecase.test.d.ts.map +1 -0
- package/dist/tests/units/modules/tracking/usecases/tracking/markReviewAsMerged.usecase.test.js +138 -0
- package/dist/tests/units/modules/tracking/usecases/tracking/markReviewAsMerged.usecase.test.js.map +1 -0
- package/dist/tests/units/modules/worktree-management/usecases/ensureWorktree.usecase.test.js +71 -34
- package/dist/tests/units/modules/worktree-management/usecases/ensureWorktree.usecase.test.js.map +1 -1
- package/package.json +1 -1
- package/dist/tests/acceptance/182-mark-pending-fix-as-merged.acceptance.test.d.ts +0 -19
- package/dist/tests/acceptance/182-mark-pending-fix-as-merged.acceptance.test.d.ts.map +0 -1
- package/dist/tests/acceptance/182-mark-pending-fix-as-merged.acceptance.test.js +0 -157
- package/dist/tests/acceptance/182-mark-pending-fix-as-merged.acceptance.test.js.map +0 -1
- package/dist/tests/units/entities/stats/reviewOutput.parser.test.d.ts.map +0 -1
- package/dist/tests/units/entities/stats/reviewOutput.parser.test.js.map +0 -1
- /package/dist/tests/units/{entities → modules/statistics-insights/entities}/stats/reviewOutput.parser.test.d.ts +0 -0
package/dist/tests/units/modules/worktree-management/usecases/ensureWorktree.usecase.test.js
CHANGED
|
@@ -1,9 +1,24 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach } from 'vitest';
|
|
2
2
|
import { deriveWorktreePath } from '../../../../../modules/worktree-management/entities/worktree/worktree.js';
|
|
3
|
-
import { ensureWorktree } from '../../../../../modules/worktree-management/usecases/ensureWorktree.usecase.js';
|
|
3
|
+
import { ensureWorktree, } from '../../../../../modules/worktree-management/usecases/ensureWorktree.usecase.js';
|
|
4
4
|
import { StubGitCommandExecutor } from '../../../../../tests/stubs/gitCommandExecutor.stub.js';
|
|
5
5
|
function buildStubFileSystem() {
|
|
6
|
-
return { existingPaths: new Set(), settingsWrites: [] };
|
|
6
|
+
return { existingPaths: new Set(), settingsWrites: [], removedDirectories: [] };
|
|
7
|
+
}
|
|
8
|
+
function buildDeps(executor, fileSystem, overrides = {}) {
|
|
9
|
+
return {
|
|
10
|
+
executor,
|
|
11
|
+
worktreeExists: async (path) => fileSystem.existingPaths.has(path),
|
|
12
|
+
removeDirectory: async (path) => {
|
|
13
|
+
fileSystem.removedDirectories.push(path);
|
|
14
|
+
fileSystem.existingPaths.delete(path);
|
|
15
|
+
},
|
|
16
|
+
writeWorktreeSettings: async (path) => {
|
|
17
|
+
fileSystem.settingsWrites.push({ path, content: 'settings' });
|
|
18
|
+
return { status: 'ok' };
|
|
19
|
+
},
|
|
20
|
+
...overrides,
|
|
21
|
+
};
|
|
7
22
|
}
|
|
8
23
|
const identity = {
|
|
9
24
|
platform: 'gitlab',
|
|
@@ -24,39 +39,51 @@ describe('ensureWorktree use case', () => {
|
|
|
24
39
|
sourceBranch: 'feat/x',
|
|
25
40
|
source: { kind: 'origin' },
|
|
26
41
|
sourceCheckoutPath: '/repo',
|
|
27
|
-
},
|
|
28
|
-
executor,
|
|
29
|
-
worktreeExists: async (path) => fileSystem.existingPaths.has(path),
|
|
30
|
-
writeWorktreeSettings: async (path) => {
|
|
31
|
-
fileSystem.settingsWrites.push({ path, content: 'settings' });
|
|
32
|
-
return { status: 'ok' };
|
|
33
|
-
},
|
|
34
|
-
});
|
|
42
|
+
}, buildDeps(executor, fileSystem));
|
|
35
43
|
expect(result).toEqual({ status: 'created', path: expectedPath, settingsWarning: null });
|
|
36
44
|
const kinds = executor.calls.map((c) => c.kind);
|
|
37
45
|
expect(kinds).toEqual(['worktree-prune', 'fetch', 'worktree-add']);
|
|
38
46
|
expect(executor.callsOfKind('worktree-add')[0]?.args).toContain(expectedPath);
|
|
39
47
|
expect(fileSystem.settingsWrites).toEqual([{ path: expectedPath, content: 'settings' }]);
|
|
40
48
|
});
|
|
41
|
-
it('reuses
|
|
49
|
+
it('reuses a healthy existing worktree by fast-forwarding it', async () => {
|
|
42
50
|
fileSystem.existingPaths.add(expectedPath);
|
|
43
51
|
const result = await ensureWorktree({
|
|
44
52
|
identity,
|
|
45
53
|
sourceBranch: 'feat/x',
|
|
46
54
|
source: { kind: 'origin' },
|
|
47
55
|
sourceCheckoutPath: '/repo',
|
|
48
|
-
},
|
|
49
|
-
executor,
|
|
50
|
-
worktreeExists: async (path) => fileSystem.existingPaths.has(path),
|
|
51
|
-
writeWorktreeSettings: async (path) => {
|
|
52
|
-
fileSystem.settingsWrites.push({ path, content: 'settings' });
|
|
53
|
-
return { status: 'ok' };
|
|
54
|
-
},
|
|
55
|
-
});
|
|
56
|
+
}, buildDeps(executor, fileSystem));
|
|
56
57
|
expect(result).toEqual({ status: 'reused', path: expectedPath });
|
|
57
58
|
const kinds = executor.calls.map((c) => c.kind);
|
|
58
|
-
expect(kinds).toEqual(['worktree-prune', 'fetch', 'reset-hard']);
|
|
59
|
+
expect(kinds).toEqual(['worktree-prune', 'rev-parse-toplevel', 'fetch', 'reset-hard']);
|
|
59
60
|
expect(executor.callsOfKind('worktree-add')).toHaveLength(0);
|
|
61
|
+
expect(fileSystem.removedDirectories).toEqual([]);
|
|
62
|
+
});
|
|
63
|
+
it('self-heals a broken worktree directory by removing it and recreating', async () => {
|
|
64
|
+
fileSystem.existingPaths.add(expectedPath);
|
|
65
|
+
executor.programResponse('rev-parse-toplevel', {
|
|
66
|
+
exitCode: 128,
|
|
67
|
+
stdout: '',
|
|
68
|
+
stderr: 'fatal: not a git repository',
|
|
69
|
+
});
|
|
70
|
+
const result = await ensureWorktree({
|
|
71
|
+
identity,
|
|
72
|
+
sourceBranch: 'feat/x',
|
|
73
|
+
source: { kind: 'origin' },
|
|
74
|
+
sourceCheckoutPath: '/repo',
|
|
75
|
+
}, buildDeps(executor, fileSystem));
|
|
76
|
+
expect(result).toEqual({ status: 'created', path: expectedPath, settingsWarning: null });
|
|
77
|
+
expect(fileSystem.removedDirectories).toEqual([expectedPath]);
|
|
78
|
+
const kinds = executor.calls.map((c) => c.kind);
|
|
79
|
+
expect(kinds).toEqual([
|
|
80
|
+
'worktree-prune',
|
|
81
|
+
'rev-parse-toplevel',
|
|
82
|
+
'worktree-prune',
|
|
83
|
+
'fetch',
|
|
84
|
+
'worktree-add',
|
|
85
|
+
]);
|
|
86
|
+
expect(executor.callsOfKind('worktree-add')[0]?.cwd).toBe('/repo');
|
|
60
87
|
});
|
|
61
88
|
it('uses the fork URL as remote when the source is a fork', async () => {
|
|
62
89
|
await ensureWorktree({
|
|
@@ -64,18 +91,14 @@ describe('ensureWorktree use case', () => {
|
|
|
64
91
|
sourceBranch: 'patch-1',
|
|
65
92
|
source: { kind: 'fork', cloneUrl: 'https://github.com/contributor/fork.git' },
|
|
66
93
|
sourceCheckoutPath: '/repo',
|
|
67
|
-
},
|
|
68
|
-
executor,
|
|
69
|
-
worktreeExists: async (path) => fileSystem.existingPaths.has(path),
|
|
70
|
-
writeWorktreeSettings: async () => ({ status: 'ok' }),
|
|
71
|
-
});
|
|
94
|
+
}, buildDeps(executor, fileSystem));
|
|
72
95
|
const fetchCall = executor.callsOfKind('fetch')[0];
|
|
73
96
|
expect(fetchCall?.args).toContain('https://github.com/contributor/fork.git');
|
|
74
97
|
expect(fetchCall?.args).toContain(`patch-1:refs/remotes/pr-${identity.mrNumber}/head`);
|
|
75
98
|
const addCall = executor.callsOfKind('worktree-add')[0];
|
|
76
99
|
expect(addCall?.args).toContain(`refs/remotes/pr-${identity.mrNumber}/head`);
|
|
77
100
|
});
|
|
78
|
-
it('returns branch-not-found when the fetch fails', async () => {
|
|
101
|
+
it('returns branch-not-found when the fetch fails on a fresh create', async () => {
|
|
79
102
|
executor.programResponse('fetch', {
|
|
80
103
|
exitCode: 128,
|
|
81
104
|
stdout: '',
|
|
@@ -86,15 +109,31 @@ describe('ensureWorktree use case', () => {
|
|
|
86
109
|
sourceBranch: 'feat/x',
|
|
87
110
|
source: { kind: 'origin' },
|
|
88
111
|
sourceCheckoutPath: '/repo',
|
|
89
|
-
},
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
112
|
+
}, buildDeps(executor, fileSystem));
|
|
113
|
+
expect(result.status).toBe('failed');
|
|
114
|
+
if (result.status === 'failed') {
|
|
115
|
+
expect(result.reason).toBe('branch-not-found');
|
|
116
|
+
}
|
|
117
|
+
expect(executor.callsOfKind('worktree-add')).toHaveLength(0);
|
|
118
|
+
});
|
|
119
|
+
it('returns branch-not-found when a healthy worktree branch was deleted on the remote', async () => {
|
|
120
|
+
fileSystem.existingPaths.add(expectedPath);
|
|
121
|
+
executor.programResponse('fetch', {
|
|
122
|
+
exitCode: 128,
|
|
123
|
+
stdout: '',
|
|
124
|
+
stderr: "fatal: couldn't find remote ref feat/x",
|
|
93
125
|
});
|
|
126
|
+
const result = await ensureWorktree({
|
|
127
|
+
identity,
|
|
128
|
+
sourceBranch: 'feat/x',
|
|
129
|
+
source: { kind: 'origin' },
|
|
130
|
+
sourceCheckoutPath: '/repo',
|
|
131
|
+
}, buildDeps(executor, fileSystem));
|
|
94
132
|
expect(result.status).toBe('failed');
|
|
95
133
|
if (result.status === 'failed') {
|
|
96
134
|
expect(result.reason).toBe('branch-not-found');
|
|
97
135
|
}
|
|
136
|
+
expect(fileSystem.removedDirectories).toEqual([]);
|
|
98
137
|
expect(executor.callsOfKind('worktree-add')).toHaveLength(0);
|
|
99
138
|
});
|
|
100
139
|
it('still returns created when settings write fails (no rollback) and surfaces the warning', async () => {
|
|
@@ -103,11 +142,9 @@ describe('ensureWorktree use case', () => {
|
|
|
103
142
|
sourceBranch: 'feat/x',
|
|
104
143
|
source: { kind: 'origin' },
|
|
105
144
|
sourceCheckoutPath: '/repo',
|
|
106
|
-
}, {
|
|
107
|
-
executor,
|
|
108
|
-
worktreeExists: async () => false,
|
|
145
|
+
}, buildDeps(executor, fileSystem, {
|
|
109
146
|
writeWorktreeSettings: async () => ({ status: 'failed', reason: 'disk-full' }),
|
|
110
|
-
});
|
|
147
|
+
}));
|
|
111
148
|
expect(result.status).toBe('created');
|
|
112
149
|
if (result.status === 'created') {
|
|
113
150
|
expect(result.settingsWarning).toBe('disk-full');
|
package/dist/tests/units/modules/worktree-management/usecases/ensureWorktree.usecase.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensureWorktree.usecase.test.js","sourceRoot":"","sources":["../../../../../../src/tests/units/modules/worktree-management/usecases/ensureWorktree.usecase.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6DAA6D,CAAC;AAEjG,OAAO,
|
|
1
|
+
{"version":3,"file":"ensureWorktree.usecase.test.js","sourceRoot":"","sources":["../../../../../../src/tests/units/modules/worktree-management/usecases/ensureWorktree.usecase.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SPEC-182 — Manually mark a pending-fix MR as merged
|
|
3
|
-
*
|
|
4
|
-
* Outer-loop acceptance test (SDD): exercises POST /api/mr-tracking/mark-as-merged
|
|
5
|
-
* through the Fastify plugin wired with the in-memory tracking gateway. Covers
|
|
6
|
-
* the 8 scenarios from the spec.
|
|
7
|
-
*
|
|
8
|
-
* Scenarios from docs/specs/182-mark-pending-fix-as-merged.md:
|
|
9
|
-
* - valid pending-fix → merged: 200 + state="merged" + mergedAt set
|
|
10
|
-
* - pending-approval rejected: 409 + invalid-current-state message
|
|
11
|
-
* - approved rejected: 409 + invalid-current-state message
|
|
12
|
-
* - merged rejected: 409 + invalid-current-state message
|
|
13
|
-
* - unknown MR: 404 + "MR non trouvée"
|
|
14
|
-
* - missing mrId: 400 + "mrId requis"
|
|
15
|
-
* - missing project path: 400 + "Chemin du projet requis"
|
|
16
|
-
* - invalid project path: 400 + "Chemin invalide"
|
|
17
|
-
*/
|
|
18
|
-
export {};
|
|
19
|
-
//# sourceMappingURL=182-mark-pending-fix-as-merged.acceptance.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"182-mark-pending-fix-as-merged.acceptance.test.d.ts","sourceRoot":"","sources":["../../../src/tests/acceptance/182-mark-pending-fix-as-merged.acceptance.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG"}
|
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SPEC-182 — Manually mark a pending-fix MR as merged
|
|
3
|
-
*
|
|
4
|
-
* Outer-loop acceptance test (SDD): exercises POST /api/mr-tracking/mark-as-merged
|
|
5
|
-
* through the Fastify plugin wired with the in-memory tracking gateway. Covers
|
|
6
|
-
* the 8 scenarios from the spec.
|
|
7
|
-
*
|
|
8
|
-
* Scenarios from docs/specs/182-mark-pending-fix-as-merged.md:
|
|
9
|
-
* - valid pending-fix → merged: 200 + state="merged" + mergedAt set
|
|
10
|
-
* - pending-approval rejected: 409 + invalid-current-state message
|
|
11
|
-
* - approved rejected: 409 + invalid-current-state message
|
|
12
|
-
* - merged rejected: 409 + invalid-current-state message
|
|
13
|
-
* - unknown MR: 404 + "MR non trouvée"
|
|
14
|
-
* - missing mrId: 400 + "mrId requis"
|
|
15
|
-
* - missing project path: 400 + "Chemin du projet requis"
|
|
16
|
-
* - invalid project path: 400 + "Chemin invalide"
|
|
17
|
-
*/
|
|
18
|
-
import Fastify from 'fastify';
|
|
19
|
-
import { beforeEach, describe, expect, it } from 'vitest';
|
|
20
|
-
import { mrTrackingRoutes } from '../../modules/tracking/interface-adapters/controllers/http/mrTracking.routes.js';
|
|
21
|
-
import { TrackedMrFactory } from '../../tests/factories/trackedMr.factory.js';
|
|
22
|
-
import { InMemoryReviewRequestTrackingGateway } from '../../tests/stubs/reviewRequestTracking.stub.js';
|
|
23
|
-
const INVALID_CURRENT_STATE_MESSAGE = 'Seules les MR en correction peuvent être marquées comme mergées';
|
|
24
|
-
async function buildApp(gateway) {
|
|
25
|
-
const app = Fastify();
|
|
26
|
-
await app.register(mrTrackingRoutes, {
|
|
27
|
-
reviewRequestTrackingGateway: gateway,
|
|
28
|
-
getQualityThreshold: () => null,
|
|
29
|
-
});
|
|
30
|
-
return app;
|
|
31
|
-
}
|
|
32
|
-
function seedMr(gateway, projectPath, overrides) {
|
|
33
|
-
gateway.create(projectPath, TrackedMrFactory.create({ id: 'mr-42', ...overrides }));
|
|
34
|
-
}
|
|
35
|
-
describe('Acceptance — SPEC-182: Manually mark a pending-fix MR as merged', () => {
|
|
36
|
-
let gateway;
|
|
37
|
-
const projectPath = '/home/user/proj';
|
|
38
|
-
beforeEach(() => {
|
|
39
|
-
gateway = new InMemoryReviewRequestTrackingGateway();
|
|
40
|
-
});
|
|
41
|
-
describe('Rule: pending-fix MR can be transitioned to merged', () => {
|
|
42
|
-
it('valid pending-fix transition → status "merged" + mergedAt set', async () => {
|
|
43
|
-
seedMr(gateway, projectPath, { state: 'pending-fix' });
|
|
44
|
-
const app = await buildApp(gateway);
|
|
45
|
-
const response = await app.inject({
|
|
46
|
-
method: 'POST',
|
|
47
|
-
url: '/api/mr-tracking/mark-as-merged',
|
|
48
|
-
payload: { mrId: 'mr-42', projectPath },
|
|
49
|
-
});
|
|
50
|
-
expect(response.statusCode).toBe(200);
|
|
51
|
-
const body = response.json();
|
|
52
|
-
expect(body.success).toBe(true);
|
|
53
|
-
expect(body.mrId).toBe('mr-42');
|
|
54
|
-
const updated = gateway.getById(projectPath, 'mr-42');
|
|
55
|
-
expect(updated?.state).toBe('merged');
|
|
56
|
-
expect(updated?.mergedAt).not.toBeNull();
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
describe('Rule: transition restricted to pending-fix state', () => {
|
|
60
|
-
it('pending-approval rejected → 409 with invalid-current-state message', async () => {
|
|
61
|
-
seedMr(gateway, projectPath, { state: 'pending-approval' });
|
|
62
|
-
const app = await buildApp(gateway);
|
|
63
|
-
const response = await app.inject({
|
|
64
|
-
method: 'POST',
|
|
65
|
-
url: '/api/mr-tracking/mark-as-merged',
|
|
66
|
-
payload: { mrId: 'mr-42', projectPath },
|
|
67
|
-
});
|
|
68
|
-
expect(response.statusCode).toBe(409);
|
|
69
|
-
const body = response.json();
|
|
70
|
-
expect(body.success).toBe(false);
|
|
71
|
-
expect(body.error).toBe(INVALID_CURRENT_STATE_MESSAGE);
|
|
72
|
-
const untouched = gateway.getById(projectPath, 'mr-42');
|
|
73
|
-
expect(untouched?.state).toBe('pending-approval');
|
|
74
|
-
expect(untouched?.mergedAt).toBeNull();
|
|
75
|
-
});
|
|
76
|
-
it('approved rejected → 409 with invalid-current-state message', async () => {
|
|
77
|
-
seedMr(gateway, projectPath, { state: 'approved' });
|
|
78
|
-
const app = await buildApp(gateway);
|
|
79
|
-
const response = await app.inject({
|
|
80
|
-
method: 'POST',
|
|
81
|
-
url: '/api/mr-tracking/mark-as-merged',
|
|
82
|
-
payload: { mrId: 'mr-42', projectPath },
|
|
83
|
-
});
|
|
84
|
-
expect(response.statusCode).toBe(409);
|
|
85
|
-
const body = response.json();
|
|
86
|
-
expect(body.success).toBe(false);
|
|
87
|
-
expect(body.error).toBe(INVALID_CURRENT_STATE_MESSAGE);
|
|
88
|
-
const untouched = gateway.getById(projectPath, 'mr-42');
|
|
89
|
-
expect(untouched?.state).toBe('approved');
|
|
90
|
-
expect(untouched?.mergedAt).toBeNull();
|
|
91
|
-
});
|
|
92
|
-
it('merged rejected → 409 with invalid-current-state message', async () => {
|
|
93
|
-
seedMr(gateway, projectPath, { state: 'merged', mergedAt: '2026-01-01T00:00:00.000Z' });
|
|
94
|
-
const app = await buildApp(gateway);
|
|
95
|
-
const response = await app.inject({
|
|
96
|
-
method: 'POST',
|
|
97
|
-
url: '/api/mr-tracking/mark-as-merged',
|
|
98
|
-
payload: { mrId: 'mr-42', projectPath },
|
|
99
|
-
});
|
|
100
|
-
expect(response.statusCode).toBe(409);
|
|
101
|
-
const body = response.json();
|
|
102
|
-
expect(body.success).toBe(false);
|
|
103
|
-
expect(body.error).toBe(INVALID_CURRENT_STATE_MESSAGE);
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
describe('Rule: action requires a known MR and valid inputs', () => {
|
|
107
|
-
it('unknown MR → 404 with "MR non trouvée"', async () => {
|
|
108
|
-
const app = await buildApp(gateway);
|
|
109
|
-
const response = await app.inject({
|
|
110
|
-
method: 'POST',
|
|
111
|
-
url: '/api/mr-tracking/mark-as-merged',
|
|
112
|
-
payload: { mrId: 'ghost', projectPath },
|
|
113
|
-
});
|
|
114
|
-
expect(response.statusCode).toBe(404);
|
|
115
|
-
const body = response.json();
|
|
116
|
-
expect(body.success).toBe(false);
|
|
117
|
-
expect(body.error).toBe('MR non trouvée');
|
|
118
|
-
});
|
|
119
|
-
it('missing mrId → 400 with "mrId requis"', async () => {
|
|
120
|
-
const app = await buildApp(gateway);
|
|
121
|
-
const response = await app.inject({
|
|
122
|
-
method: 'POST',
|
|
123
|
-
url: '/api/mr-tracking/mark-as-merged',
|
|
124
|
-
payload: { mrId: '', projectPath },
|
|
125
|
-
});
|
|
126
|
-
expect(response.statusCode).toBe(400);
|
|
127
|
-
const body = response.json();
|
|
128
|
-
expect(body.success).toBe(false);
|
|
129
|
-
expect(body.error).toBe('mrId requis');
|
|
130
|
-
});
|
|
131
|
-
it('missing project path → 400 with "Chemin du projet requis"', async () => {
|
|
132
|
-
const app = await buildApp(gateway);
|
|
133
|
-
const response = await app.inject({
|
|
134
|
-
method: 'POST',
|
|
135
|
-
url: '/api/mr-tracking/mark-as-merged',
|
|
136
|
-
payload: { mrId: 'mr-42', projectPath: '' },
|
|
137
|
-
});
|
|
138
|
-
expect(response.statusCode).toBe(400);
|
|
139
|
-
const body = response.json();
|
|
140
|
-
expect(body.success).toBe(false);
|
|
141
|
-
expect(body.error).toBe('Chemin du projet requis');
|
|
142
|
-
});
|
|
143
|
-
it('invalid project path → 400 with "Chemin invalide"', async () => {
|
|
144
|
-
const app = await buildApp(gateway);
|
|
145
|
-
const response = await app.inject({
|
|
146
|
-
method: 'POST',
|
|
147
|
-
url: '/api/mr-tracking/mark-as-merged',
|
|
148
|
-
payload: { mrId: 'mr-42', projectPath: '../etc' },
|
|
149
|
-
});
|
|
150
|
-
expect(response.statusCode).toBe(400);
|
|
151
|
-
const body = response.json();
|
|
152
|
-
expect(body.success).toBe(false);
|
|
153
|
-
expect(body.error).toBe('Chemin invalide');
|
|
154
|
-
});
|
|
155
|
-
});
|
|
156
|
-
});
|
|
157
|
-
//# sourceMappingURL=182-mark-pending-fix-as-merged.acceptance.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"182-mark-pending-fix-as-merged.acceptance.test.js","sourceRoot":"","sources":["../../../src/tests/acceptance/182-mark-pending-fix-as-merged.acceptance.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reviewOutput.parser.test.d.ts","sourceRoot":"","sources":["../../../../../src/tests/units/entities/stats/reviewOutput.parser.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"reviewOutput.parser.test.js","sourceRoot":"","sources":["../../../../../src/tests/units/entities/stats/reviewOutput.parser.test.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|