From 878ad833e7e99f4c29ab343bbfbfe2421e7f288c Mon Sep 17 00:00:00 2001 From: "D. Ror" Date: Tue, 30 Jan 2024 17:01:12 -0500 Subject: [PATCH] [MergeDups] Fix determining which words have been merged (#2902) --- .../MergeDuplicates/Redux/MergeDupsActions.ts | 6 ++-- .../Redux/tests/MergeDupsActions.test.tsx | 28 +++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/goals/MergeDuplicates/Redux/MergeDupsActions.ts b/src/goals/MergeDuplicates/Redux/MergeDupsActions.ts index 44781642c0..dd753a3683 100644 --- a/src/goals/MergeDuplicates/Redux/MergeDupsActions.ts +++ b/src/goals/MergeDuplicates/Redux/MergeDupsActions.ts @@ -136,9 +136,11 @@ export function mergeAll() { } // Blacklist the set of words with updated ids. - const mergedIds = mergeWordsArray.map((mw) => mw.parent.id); + const mergedIds = new Set( + mergeWordsArray.flatMap((mw) => mw.children.map((c) => c.srcWordId)) + ); const unmergedIds = Object.keys(mergeTree.data.words).filter( - (id) => !mergedIds.includes(id) + (id) => !mergedIds.has(id) ); const blacklistIds = [...unmergedIds, ...parentIds]; if (blacklistIds.length > 1) { diff --git a/src/goals/MergeDuplicates/Redux/tests/MergeDupsActions.test.tsx b/src/goals/MergeDuplicates/Redux/tests/MergeDupsActions.test.tsx index 87c17dd840..1bef3d9bf1 100644 --- a/src/goals/MergeDuplicates/Redux/tests/MergeDupsActions.test.tsx +++ b/src/goals/MergeDuplicates/Redux/tests/MergeDupsActions.test.tsx @@ -252,6 +252,34 @@ describe("MergeDupActions", () => { // No blacklist entry added for only 1 resulting word. expect(mockBlacklistAdd).not.toHaveBeenCalled(); }); + // Move all senses from B to A + it("moves all senses to other word", async () => { + const WA = newMergeTreeWord(vernA, { + ID1: [S1, S3], + ID2: [S2], + ID3: [S4], + }); + const tree: MergeTree = { ...defaultTree, words: { WA } }; + const store = setupStore({ + ...preloadedState, + mergeDuplicateGoal: { ...defaultMergeState, data, tree }, + }); + await store.dispatch(mergeAll()); + + expect(mockMergeWords).toHaveBeenCalledTimes(1); + const parentA = wordAnyGuids( + vernA, + [senses["S1"], senses["S2"], senses["S4"]], + idA + ); + const childA = { srcWordId: idA, getAudio: true }; + const childB = { srcWordId: idB, getAudio: true }; + const mockMerge = newMergeWords(parentA, [childA, childB]); + expect(mockMergeWords).toHaveBeenCalledWith([mockMerge]); + + // No blacklist entry added for only 1 resulting word. + expect(mockBlacklistAdd).not.toHaveBeenCalled(); + }); // Performs a merge when a word is flagged it("adds a flag to a word", async () => {