fix(審查流程): 修正 bot 跳過、JSON 驗證與排除比對邊界
This commit is contained in:
@@ -83,6 +83,17 @@ describe('groupConversations', () => {
|
||||
const convos = groupConversations([{ id: 1, path: 'a.js', original_position: 7, body: 'x' }]);
|
||||
assert.equal(convos[0].line, 7);
|
||||
});
|
||||
|
||||
it('keeps multiple bot findings on the same path and line', () => {
|
||||
const comments = [
|
||||
{ id: 1, path: 'a.js', position: 10, body: reviewBody('🔴 嚴重', 'Assassin', 'p1', 's1') },
|
||||
{ id: 2, path: 'a.js', position: 10, body: reviewBody('🟡 警告', 'Mage', 'p2', 's2') },
|
||||
];
|
||||
const convos = groupConversations(comments);
|
||||
assert.equal(convos.length, 1);
|
||||
assert.equal(convos[0].botFindings.length, 2);
|
||||
assert.deepEqual(convos[0].botFindings.map(f => f.role), ['Assassin', 'Mage']);
|
||||
});
|
||||
});
|
||||
|
||||
describe('codeWindow', () => {
|
||||
@@ -207,6 +218,19 @@ describe('reconcileConversations', () => {
|
||||
assert.equal(result.closedCount, 3);
|
||||
});
|
||||
|
||||
it('preserves multiple bot findings when a grouped conversation is still open', async () => {
|
||||
const deps = baseDeps();
|
||||
deps.listComments = async () => [
|
||||
{ id: 10, path: 'a.js', position: 5, body: reviewBody('🔴 嚴重', 'Assassin', 'p', 's10') },
|
||||
{ id: 11, path: 'a.js', position: 5, body: reviewBody('🟡 警告', 'Mage', 'p', 's11') },
|
||||
];
|
||||
deps.judge = async (items) => items.map(it => ({ idx: it.idx, verdict: 'open' }));
|
||||
|
||||
const result = await reconcileConversations(deps);
|
||||
|
||||
assert.deepEqual(result.carriedFindings.map(f => f.suggestion).sort(), ['s10', 's11']);
|
||||
});
|
||||
|
||||
it('counts only successful closes when some resolve calls fail', async () => {
|
||||
const deps = baseDeps();
|
||||
// a.js(id1) 關閉成功、b.js(id2) 關閉失敗(c.js 已 resolved 略過)
|
||||
|
||||
Reference in New Issue
Block a user