Fixed: Artist FindById Should Find OldIds

pull/6/head
Qstick 5 years ago
parent 55e141c44b
commit f4e4bae465

@ -19,7 +19,6 @@ namespace NzbDrone.Core.Test.MusicTests.ArtistRepositoryTests
{ {
private ArtistRepository _artistRepo; private ArtistRepository _artistRepo;
private ArtistMetadataRepository _artistMetadataRepo; private ArtistMetadataRepository _artistMetadataRepo;
private int _id = 1;
[SetUp] [SetUp]
public void Setup() public void Setup()
@ -28,20 +27,25 @@ namespace NzbDrone.Core.Test.MusicTests.ArtistRepositoryTests
_artistMetadataRepo = Mocker.Resolve<ArtistMetadataRepository>(); _artistMetadataRepo = Mocker.Resolve<ArtistMetadataRepository>();
} }
private void AddArtist(string name) private void AddArtist(string name, string foreignId, List<string> oldIds = null)
{ {
if (oldIds == null)
{
oldIds = new List<string>();
}
var metadata = Builder<ArtistMetadata>.CreateNew() var metadata = Builder<ArtistMetadata>.CreateNew()
.With(a => a.Id = 0) .With(a => a.Id = 0)
.With(a => a.Name = name) .With(a => a.Name = name)
.With(a=> a.OldForeignArtistIds = oldIds)
.BuildNew(); .BuildNew();
var artist = Builder<Artist>.CreateNew() var artist = Builder<Artist>.CreateNew()
.With(a => a.Id = 0) .With(a => a.Id = 0)
.With(a => a.Metadata = metadata) .With(a => a.Metadata = metadata)
.With(a => a.CleanName = Parser.Parser.CleanArtistName(name)) .With(a => a.CleanName = Parser.Parser.CleanArtistName(name))
.With(a => a.ForeignArtistId = _id.ToString()) .With(a => a.ForeignArtistId = foreignId)
.BuildNew(); .BuildNew();
_id++;
_artistMetadataRepo.Insert(metadata); _artistMetadataRepo.Insert(metadata);
artist.ArtistMetadataId = metadata.Id; artist.ArtistMetadataId = metadata.Id;
@ -50,8 +54,8 @@ namespace NzbDrone.Core.Test.MusicTests.ArtistRepositoryTests
private void GivenArtists() private void GivenArtists()
{ {
AddArtist("The Black Eyed Peas"); AddArtist("The Black Eyed Peas", "d5be5333-4171-427e-8e12-732087c6b78e");
AddArtist("The Black Keys"); AddArtist("The Black Keys", "d15721d8-56b4-453d-b506-fc915b14cba2", new List<string> { "6f2ed437-825c-4cea-bb58-bf7688c6317a" });
} }
[Test] [Test]
@ -100,14 +104,35 @@ namespace NzbDrone.Core.Test.MusicTests.ArtistRepositoryTests
artist.Name.Should().Be(name); artist.Name.Should().Be(name);
} }
[Test]
public void should_find_artist_in_by_id()
{
GivenArtists();
var artist = _artistRepo.FindById("d5be5333-4171-427e-8e12-732087c6b78e");
artist.Should().NotBeNull();
artist.ForeignArtistId.Should().Be("d5be5333-4171-427e-8e12-732087c6b78e");
}
[Test]
public void should_find_artist_in_by_old_id()
{
GivenArtists();
var artist = _artistRepo.FindById("6f2ed437-825c-4cea-bb58-bf7688c6317a");
artist.Should().NotBeNull();
artist.Name.Should().Be("The Black Keys");
artist.ForeignArtistId.Should().Be("d15721d8-56b4-453d-b506-fc915b14cba2");
}
[Test] [Test]
public void should_not_find_artist_if_multiple_artists_have_same_name() public void should_not_find_artist_if_multiple_artists_have_same_name()
{ {
GivenArtists(); GivenArtists();
string name = "Alice Cooper"; string name = "Alice Cooper";
AddArtist(name); AddArtist(name, "ee58c59f-8e7f-4430-b8ca-236c4d3745ae");
AddArtist(name); AddArtist(name, "4d7928cd-7ed2-4282-8c29-c0c9f966f1bd");
_artistRepo.All().Should().HaveCount(4); _artistRepo.All().Should().HaveCount(4);

@ -14,7 +14,6 @@ namespace NzbDrone.Core.ImportLists
{ {
public class ImportListSyncService : IExecute<ImportListSyncCommand> public class ImportListSyncService : IExecute<ImportListSyncCommand>
{ {
private readonly IImportListStatusService _importListStatusService;
private readonly IImportListFactory _importListFactory; private readonly IImportListFactory _importListFactory;
private readonly IImportListExclusionService _importListExclusionService; private readonly IImportListExclusionService _importListExclusionService;
private readonly IFetchAndParseImportList _listFetcherAndParser; private readonly IFetchAndParseImportList _listFetcherAndParser;
@ -25,8 +24,7 @@ namespace NzbDrone.Core.ImportLists
private readonly IEventAggregator _eventAggregator; private readonly IEventAggregator _eventAggregator;
private readonly Logger _logger; private readonly Logger _logger;
public ImportListSyncService(IImportListStatusService importListStatusService, public ImportListSyncService(IImportListFactory importListFactory,
IImportListFactory importListFactory,
IImportListExclusionService importListExclusionService, IImportListExclusionService importListExclusionService,
IFetchAndParseImportList listFetcherAndParser, IFetchAndParseImportList listFetcherAndParser,
ISearchForNewAlbum albumSearchService, ISearchForNewAlbum albumSearchService,
@ -36,7 +34,6 @@ namespace NzbDrone.Core.ImportLists
IEventAggregator eventAggregator, IEventAggregator eventAggregator,
Logger logger) Logger logger)
{ {
_importListStatusService = importListStatusService;
_importListFactory = importListFactory; _importListFactory = importListFactory;
_importListExclusionService = importListExclusionService; _importListExclusionService = importListExclusionService;
_listFetcherAndParser = listFetcherAndParser; _listFetcherAndParser = listFetcherAndParser;
@ -118,22 +115,33 @@ namespace NzbDrone.Core.ImportLists
// Check to see if artist in DB // Check to see if artist in DB
var existingArtist = _artistService.FindById(report.ArtistMusicBrainzId); var existingArtist = _artistService.FindById(report.ArtistMusicBrainzId);
// TODO: Rework this for albums when we can add albums seperate from Artists
// (If list contains albums we should not break for an existing artist, we should add new albums that are not in DB)
if (existingArtist != null)
{
_logger.Debug("{0} [{1}] Rejected, Artist Exists in DB", report.ArtistMusicBrainzId, report.Artist);
continue;
}
// Check to see if artist excluded // Check to see if artist excluded
var excludedArtist = listExclusions.Where(s => s.ForeignId == report.ArtistMusicBrainzId).SingleOrDefault(); var excludedArtist = listExclusions.Where(s => s.ForeignId == report.ArtistMusicBrainzId).SingleOrDefault();
if (excludedArtist != null) if (excludedArtist != null)
{ {
_logger.Debug("{0} [{1}] Rejected due to list exlcusion", report.ArtistMusicBrainzId, report.Artist); _logger.Debug("{0} [{1}] Rejected due to list exlcusion", report.ArtistMusicBrainzId, report.Artist);
continue;
} }
// Append Artist if not already in DB or already on add list // Append Artist if not already in DB or already on add list
if (existingArtist == null && excludedArtist == null && artistsToAdd.All(s => s.Metadata.Value.ForeignArtistId != report.ArtistMusicBrainzId)) if (artistsToAdd.All(s => s.Metadata.Value.ForeignArtistId != report.ArtistMusicBrainzId))
{ {
var monitored = importList.ShouldMonitor != ImportListMonitorType.None; var monitored = importList.ShouldMonitor != ImportListMonitorType.None;
artistsToAdd.Add(new Artist artistsToAdd.Add(new Artist
{ {
Metadata = new ArtistMetadata { Metadata = new ArtistMetadata
{
ForeignArtistId = report.ArtistMusicBrainzId, ForeignArtistId = report.ArtistMusicBrainzId,
Name = report.Artist Name = report.Artist
}, },
@ -143,7 +151,8 @@ namespace NzbDrone.Core.ImportLists
MetadataProfileId = importList.MetadataProfileId, MetadataProfileId = importList.MetadataProfileId,
Tags = importList.Tags, Tags = importList.Tags,
AlbumFolder = true, AlbumFolder = true,
AddOptions = new AddArtistOptions { AddOptions = new AddArtistOptions
{
SearchForMissingAlbums = monitored, SearchForMissingAlbums = monitored,
Monitored = monitored, Monitored = monitored,
Monitor = monitored ? MonitorTypes.All : MonitorTypes.None Monitor = monitored ? MonitorTypes.All : MonitorTypes.None
@ -160,7 +169,7 @@ namespace NzbDrone.Core.ImportLists
_addArtistService.AddArtists(artistsToAdd); _addArtistService.AddArtists(artistsToAdd);
var message = string.Format("Import List Sync Completed. Reports found: {0}, Reports grabbed: {1}", reports.Count, processed.Count); var message = string.Format("Import List Sync Completed. Items found: {0}, Artists added: {1}", reports.Count, artistsToAdd.Count);
_logger.ProgressInfo(message); _logger.ProgressInfo(message);

@ -31,7 +31,16 @@ namespace NzbDrone.Core.Music
public Artist FindById(string foreignArtistId) public Artist FindById(string foreignArtistId)
{ {
return Query.Where<ArtistMetadata>(m => m.ForeignArtistId == foreignArtistId).SingleOrDefault(); var artist = Query.Where<ArtistMetadata>(m => m.ForeignArtistId == foreignArtistId).SingleOrDefault();
if (artist == null)
{
var id = "\"" + foreignArtistId + "\"";
artist = Query.Where<ArtistMetadata>(x => x.OldForeignArtistIds.Contains(id))
.SingleOrDefault();
}
return artist;
} }
public Artist FindByName(string cleanName) public Artist FindByName(string cleanName)

Loading…
Cancel
Save