From 36f34a41137b22d34a2cd9173beea7f9bbe90d24 Mon Sep 17 00:00:00 2001 From: Tom Andrews Date: Tue, 12 Mar 2019 22:37:59 +0000 Subject: [PATCH] Fixed: Don't find album when multiple albums have the same name --- .../AlbumRepositoryFixture.cs | 42 ++++++++++--------- src/NzbDrone.Core/Music/AlbumRepository.cs | 23 +--------- 2 files changed, 24 insertions(+), 41 deletions(-) diff --git a/src/NzbDrone.Core.Test/MusicTests/AlbumRepositoryTests/AlbumRepositoryFixture.cs b/src/NzbDrone.Core.Test/MusicTests/AlbumRepositoryTests/AlbumRepositoryFixture.cs index eff2146fe..f904346c8 100644 --- a/src/NzbDrone.Core.Test/MusicTests/AlbumRepositoryTests/AlbumRepositoryFixture.cs +++ b/src/NzbDrone.Core.Test/MusicTests/AlbumRepositoryTests/AlbumRepositoryFixture.cs @@ -13,7 +13,6 @@ namespace NzbDrone.Core.Test.MusicTests.AlbumRepositoryTests private Artist _artist; private Album _album; private Album _albumSpecial; - private Album _albumSimilar; private AlbumRelease _release; private AlbumRepository _albumRepo; private ReleaseRepository _releaseRepo; @@ -48,6 +47,7 @@ namespace NzbDrone.Core.Test.MusicTests.AlbumRepositoryTests ForeignAlbumId = "1", CleanTitle = "anthology", Artist = _artist, + ArtistMetadataId = _artist.ArtistMetadataId, AlbumType = "", AlbumReleases = new List {_release }, }; @@ -63,7 +63,7 @@ namespace NzbDrone.Core.Test.MusicTests.AlbumRepositoryTests ForeignAlbumId = "2", CleanTitle = "", Artist = _artist, - ArtistId = _artist.ArtistMetadataId, + ArtistMetadataId = _artist.ArtistMetadataId, AlbumType = "", AlbumReleases = new List { @@ -77,24 +77,6 @@ namespace NzbDrone.Core.Test.MusicTests.AlbumRepositoryTests _albumRepo.Insert(_albumSpecial); - _albumSimilar = new Album - { - Title = "ANThology2", - ForeignAlbumId = "3", - CleanTitle = "anthology2", - Artist = _artist, - ArtistId = _artist.ArtistMetadataId, - AlbumType = "", - AlbumReleases = new List - { - new AlbumRelease - { - ForeignReleaseId = "fake id 2" - } - } - - }; - } [Test] @@ -139,6 +121,26 @@ namespace NzbDrone.Core.Test.MusicTests.AlbumRepositoryTests album.Should().BeNull(); } + [Test] + public void should_not_find_album_when_two_albums_have_same_name() + { + var albums = Builder.CreateListOfSize(2) + .All() + .With(x => x.Id = 0) + .With(x => x.Artist = _artist) + .With(x => x.ArtistMetadataId = _artist.ArtistMetadataId) + .With(x => x.Title = "Weezer") + .With(x => x.CleanTitle = "weezer") + .Build(); + + _albumRepo.InsertMany(albums); + + var album = _albumRepo.FindByTitle(_artist.ArtistMetadataId, "Weezer"); + + _albumRepo.All().Should().HaveCount(4); + album.Should().BeNull(); + } + [Test] public void should_not_find_album_in_db_by_partial_releaseid() { diff --git a/src/NzbDrone.Core/Music/AlbumRepository.cs b/src/NzbDrone.Core/Music/AlbumRepository.cs index 3883b73e7..e045be6c6 100644 --- a/src/NzbDrone.Core/Music/AlbumRepository.cs +++ b/src/NzbDrone.Core/Music/AlbumRepository.cs @@ -8,6 +8,7 @@ using System.Collections.Generic; using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Languages; using NzbDrone.Core.Qualities; +using NzbDrone.Common.Extensions; namespace NzbDrone.Core.Music { @@ -15,9 +16,7 @@ namespace NzbDrone.Core.Music { List GetAlbums(int artistId); List GetAlbumsByArtistMetadataId(int artistMetadataId); - Album FindByName(string cleanTitle); Album FindByTitle(int artistMetadataId, string title); - Album FindByArtistAndName(string artistName, string cleanTitle); Album FindById(string foreignId); List FindById(List foreignIds); PagingSpec AlbumsWithoutFiles(PagingSpec pagingSpec); @@ -328,13 +327,6 @@ namespace NzbDrone.Core.Music mapper.ExecuteNonQuery(sql); } - public Album FindByName(string cleanTitle) - { - cleanTitle = cleanTitle.ToLowerInvariant(); - - return Query.Where(s => s.CleanTitle == cleanTitle).SingleOrDefault(); - } - public Album FindByTitle(int artistMetadataId, string title) { var cleanTitle = Parser.Parser.CleanArtistName(title); @@ -344,18 +336,7 @@ namespace NzbDrone.Core.Music return Query.Where(s => s.CleanTitle == cleanTitle || s.Title == title) .AndWhere(s => s.ArtistMetadataId == artistMetadataId) - .FirstOrDefault(); - } - - public Album FindByArtistAndName(string artistName, string cleanTitle) - { - var cleanArtistName = Parser.Parser.CleanArtistName(artistName); - cleanTitle = cleanTitle.ToLowerInvariant(); - - return Query.Join(JoinType.Inner, rg => rg.Artist, (rg, artist) => rg.ArtistMetadataId == artist.ArtistMetadataId) - .Where(artist => artist.CleanName == cleanArtistName) - .Where(album => album.CleanTitle == cleanTitle) - .SingleOrDefault(); + .ExclusiveOrDefault(); } public Album FindAlbumByRelease(string albumReleaseId)