mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-04-01 06:12:07 -07:00
fix: address follow-up CodeRabbit review
This commit is contained in:
@@ -474,7 +474,7 @@ test('CardCreationService tracks pre-add duplicate note ids for kiku sentence ca
|
|||||||
trackLastAddedNoteId: () => undefined,
|
trackLastAddedNoteId: () => undefined,
|
||||||
findDuplicateNoteIds: async (expression) => {
|
findDuplicateNoteIds: async (expression) => {
|
||||||
duplicateLookupExpressions.push(expression);
|
duplicateLookupExpressions.push(expression);
|
||||||
return [18, 7, 30];
|
return [18, 7, 30, 7];
|
||||||
},
|
},
|
||||||
trackLastAddedDuplicateNoteIds: (noteId, duplicateNoteIds) => {
|
trackLastAddedDuplicateNoteIds: (noteId, duplicateNoteIds) => {
|
||||||
trackedDuplicates.push({ noteId, duplicateNoteIds });
|
trackedDuplicates.push({ noteId, duplicateNoteIds });
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import test from 'node:test';
|
import test from 'node:test';
|
||||||
import assert from 'node:assert/strict';
|
import assert from 'node:assert/strict';
|
||||||
import { findDuplicateNote, type NoteInfo } from './duplicate';
|
import { findDuplicateNote, findDuplicateNoteIds, type NoteInfo } from './duplicate';
|
||||||
|
|
||||||
function createFieldResolver(noteInfo: NoteInfo, preferredName: string): string | null {
|
function createFieldResolver(noteInfo: NoteInfo, preferredName: string): string | null {
|
||||||
const names = Object.keys(noteInfo.fields);
|
const names = Object.keys(noteInfo.fields);
|
||||||
@@ -297,3 +297,32 @@ test('findDuplicateNote stops after the first exact-match chunk', async () => {
|
|||||||
assert.equal(duplicateId, 200);
|
assert.equal(duplicateId, 200);
|
||||||
assert.equal(notesInfoCalls, 1);
|
assert.equal(notesInfoCalls, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('findDuplicateNoteIds returns no matches when maxMatches is zero', async () => {
|
||||||
|
const currentNote: NoteInfo = {
|
||||||
|
noteId: 100,
|
||||||
|
fields: {
|
||||||
|
Expression: { value: '貴様' },
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
let notesInfoCalls = 0;
|
||||||
|
const duplicateIds = await findDuplicateNoteIds('貴様', 100, currentNote, {
|
||||||
|
findNotes: async () => [200],
|
||||||
|
notesInfo: async (noteIds) => {
|
||||||
|
notesInfoCalls += 1;
|
||||||
|
return noteIds.map((noteId) => ({
|
||||||
|
noteId,
|
||||||
|
fields: {
|
||||||
|
Expression: { value: '貴様' },
|
||||||
|
},
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
getDeck: () => 'Japanese::Mining',
|
||||||
|
resolveFieldName: (noteInfo, preferredName) => createFieldResolver(noteInfo, preferredName),
|
||||||
|
logWarn: () => {},
|
||||||
|
}, 0);
|
||||||
|
|
||||||
|
assert.deepEqual(duplicateIds, []);
|
||||||
|
assert.equal(notesInfoCalls, 0);
|
||||||
|
});
|
||||||
|
|||||||
@@ -122,6 +122,10 @@ function findExactDuplicateNoteIds(
|
|||||||
deps: DuplicateDetectionDeps,
|
deps: DuplicateDetectionDeps,
|
||||||
maxMatches?: number,
|
maxMatches?: number,
|
||||||
): Promise<number[]> {
|
): Promise<number[]> {
|
||||||
|
if (maxMatches !== undefined && maxMatches <= 0) {
|
||||||
|
return Promise.resolve([]);
|
||||||
|
}
|
||||||
|
|
||||||
const candidates = Array.from(candidateNoteIds).filter((id) => id !== excludeNoteId);
|
const candidates = Array.from(candidateNoteIds).filter((id) => id !== excludeNoteId);
|
||||||
deps.logDebug?.(`[duplicate] candidateIds=${candidates.length} exclude=${excludeNoteId}`);
|
deps.logDebug?.(`[duplicate] candidateIds=${candidates.length} exclude=${excludeNoteId}`);
|
||||||
if (candidates.length === 0) {
|
if (candidates.length === 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user