diff --git a/src/converterService.spec.ts b/src/converterService.spec.ts index b2a3732..524cd7f 100644 --- a/src/converterService.spec.ts +++ b/src/converterService.spec.ts @@ -252,5 +252,47 @@ describe('converterService', () => { } `); }); + + it('should work correctly for file renames only (no changes)', () => { + expect( + getSongDiffFromManifest( + { + inventory: [ + { + id: 'de8UGb2cKEsThEuMwFvjQq', + fileName: 'A Mea iubire si mantuire.txt', + contentHash: 'a83f0e', + }, + ], + + updatedOn: '2023-09-25-17:14:16', + }, + { + inventory: [ + { + id: 'de8UGb2cKEsThEuMwFvjQq', + fileName: 'A mea iubire si mantuire.txt', + contentHash: 'a83f0e', + }, + ], + + updatedOn: '2023-09-25-17:14:16', + }, + ), + ).toMatchInlineSnapshot(` + { + "newOrUpdatedSongs": [ + { + "contentHash": "a83f0e", + "fileName": "A Mea iubire si mantuire.txt", + "id": "de8UGb2cKEsThEuMwFvjQq", + }, + ], + "toBeRemovedFileNames": [ + "A mea iubire si mantuire.txt", + ], + } + `); + }); }); }); diff --git a/src/converterService.ts b/src/converterService.ts index f93fc98..c0fb8b8 100644 --- a/src/converterService.ts +++ b/src/converterService.ts @@ -82,28 +82,29 @@ export const transformManifestToHashMapForFasterRetrievals = ( ); export const getSongDiffFromManifest = ( - currentManifest: SongsInventoryManifest, + newManifest: SongsInventoryManifest, previousManifest: SongsInventoryManifest, ) => { const previousManifestHashMap = transformManifestToHashMapForFasterRetrievals( previousManifest.inventory, ); const currentManifestHashMap = transformManifestToHashMapForFasterRetrievals( - currentManifest.inventory, + newManifest.inventory, ); - const newOrUpdatedSongs = currentManifest.inventory.filter(function ({ + const newOrUpdatedSongs = newManifest.inventory.filter(function ({ id, fileName, contentHash, }) { const maybePreviousSong = previousManifestHashMap[id]; const isNewSong = !maybePreviousSong; + const isExistingSongChanged = + !isNewSong && !isEqual(maybePreviousSong?.contentHash, contentHash); + const isFileNameChanged = + !isNewSong && !isEqual(previousManifestHashMap[id]?.fileName, fileName); - return ( - isNewSong || - (!isNewSong && !isEqual(maybePreviousSong?.contentHash, contentHash)) - ); + return isNewSong || isExistingSongChanged || isFileNameChanged; }); const toBeRemovedFileNames = previousManifest.inventory