test(ai-review): 補 comment 只標註新問題與對話收斂 duplicate 分支測試

This commit is contained in:
Jeffery
2026-06-23 13:51:36 +08:00
parent fb2624a215
commit cadfaff31d
2 changed files with 28 additions and 9 deletions
+17
View File
@@ -171,6 +171,23 @@ describe('reconcileConversations', () => {
assert.deepEqual(result.carriedFindings.map(f => f.suggestion), ['fix two']);
});
it('resolves (not carries) an unresolved conversation already present in old findings', async () => {
const resolvedIds = [];
const deps = baseDeps();
deps.judge = async (items) => items.map(it => ({ idx: it.idx, resolved: false })); // 全部未修復
deps.resolveComment = async (id) => { resolvedIds.push(id); return { ok: true }; };
// b.js 的問題已存在於舊問題(檔案+建議簽章相符,行號不同不影響)→ 應解決對話、不加回
deps.oldFindings = [{ location: 'b.js:99', suggestion: 'fix two' }];
const result = await reconcileConversations(deps);
assert.deepEqual(resolvedIds, [2]); // 僅 b.js(id=2) 因已存在舊問題而被 resolve
assert.equal(result.duplicateCount, 1);
assert.equal(result.resolvedCount, 0);
assert.deepEqual(result.carriedFindings.map(f => f.suggestion), ['fix one']); // a.js 不在舊問題 → 加回
assert.deepEqual(result.resolvedFindings, []); // duplicate 不從舊問題移除
});
it('carries the conversation back when the resolve API call fails', async () => {
const deps = baseDeps();
deps.judge = async (items) => items.map(it => ({ idx: it.idx, resolved: true }));