diff --git a/src/app/services/artist/artist.service.spec.ts b/src/app/services/artist/artist.service.spec.ts index 0919db30..ad30c1ce 100644 --- a/src/app/services/artist/artist.service.spec.ts +++ b/src/app/services/artist/artist.service.spec.ts @@ -29,7 +29,7 @@ describe('ArtistService', () => { function createService(): ArtistService { artistSplitter = new ArtistSplitter(translatorServiceMock.object, settingsMock); - return new ArtistService(artistSplitter, trackRepositoryMock.object, loggerMock.object); + return new ArtistService(artistSplitter, trackRepositoryMock.object, settingsMock, loggerMock.object); } function createArtistModel(artist: string): ArtistModel { @@ -216,6 +216,12 @@ describe('ArtistService', () => { new ArtistData(';;'), new ArtistData(';Drift;'), new ArtistData(';Driftwood;'), + new ArtistData(';Ida;'), + new ArtistData(';Suicidal Tendencies;'), + new ArtistData(';blink-182;'), + new ArtistData(';Link;'), + new ArtistData(';Mid Carson July;'), + new ArtistData(';July;'), ]; settingsMock.artistSplitSeparators = '[ft.][feat.][&][|]'; @@ -237,6 +243,12 @@ describe('ArtistService', () => { const sourceArtists8: string[] = service.getSourceArtists([createArtistModel('Artist6 | Artist7')]); const sourceArtists9: string[] = service.getSourceArtists([createArtistModel('Drift')]); const sourceArtists10: string[] = service.getSourceArtists([createArtistModel('Driftwood')]); + const sourceArtists11: string[] = service.getSourceArtists([createArtistModel('Ida')]); + const sourceArtists12: string[] = service.getSourceArtists([createArtistModel('Suicidal Tendencies')]); + const sourceArtists13: string[] = service.getSourceArtists([createArtistModel('blink-182')]); + const sourceArtists14: string[] = service.getSourceArtists([createArtistModel('Link')]); + const sourceArtists15: string[] = service.getSourceArtists([createArtistModel('Mid Carson July')]); + const sourceArtists16: string[] = service.getSourceArtists([createArtistModel('July')]); // Assert expect(sourceArtists1.length).toEqual(4); @@ -280,6 +292,24 @@ describe('ArtistService', () => { expect(sourceArtists10.length).toEqual(1); expect(sourceArtists10[0]).toEqual('Driftwood'); + + expect(sourceArtists11.length).toEqual(1); + expect(sourceArtists11[0]).toEqual('Ida'); + + expect(sourceArtists12.length).toEqual(1); + expect(sourceArtists12[0]).toEqual('Suicidal Tendencies'); + + expect(sourceArtists13.length).toEqual(1); + expect(sourceArtists13[0]).toEqual('blink-182'); + + expect(sourceArtists14.length).toEqual(1); + expect(sourceArtists14[0]).toEqual('Link'); + + expect(sourceArtists15.length).toEqual(1); + expect(sourceArtists15[0]).toEqual('Mid Carson July'); + + expect(sourceArtists16.length).toEqual(1); + expect(sourceArtists16[0]).toEqual('July'); }); }); }); diff --git a/src/app/services/artist/artist.service.ts b/src/app/services/artist/artist.service.ts index 52958165..cda4476b 100644 --- a/src/app/services/artist/artist.service.ts +++ b/src/app/services/artist/artist.service.ts @@ -10,6 +10,7 @@ import { ArtistSplitter } from './artist-splitter'; import { Timer } from '../../common/scheduling/timer'; import { Logger } from '../../common/logger'; import { CollectionUtils } from '../../common/utils/collections-utils'; +import { SettingsBase } from '../../common/settings/settings.base'; @Injectable() export class ArtistService implements ArtistServiceBase { @@ -17,6 +18,7 @@ export class ArtistService implements ArtistServiceBase { public constructor( private artistSplitter: ArtistSplitter, private trackRepository: TrackRepositoryBase, + private settings: SettingsBase, private logger: Logger, ) {} @@ -59,16 +61,19 @@ export class ArtistService implements ArtistServiceBase { } public getSourceArtists(artists: ArtistModel[]): string[] { + const separators: string[] = CollectionUtils.fromString(this.settings.artistSplitSeparators); const filteredSourceArtists: string[] = []; const lowerCaseArtistNames = new Set(artists.map((artist) => artist.name.toLowerCase())); for (const sourceArtist of this.sourceArtists) { if ( - [...lowerCaseArtistNames].some( - (name) => - sourceArtist.toLowerCase() === name || - sourceArtist.toLowerCase().includes(` ${name}`) || - sourceArtist.toLowerCase().includes(`${name} `), + [...lowerCaseArtistNames].some((name) => + separators.some( + (separator) => + sourceArtist.toLowerCase() === name || + sourceArtist.toLowerCase().includes(`${separator} ${name}`) || + sourceArtist.toLowerCase().includes(`${name} ${separator}`), + ), ) ) { filteredSourceArtists.push(sourceArtist);