From ca519047dd03dcebacd1c46a904999dc1fc71991 Mon Sep 17 00:00:00 2001 From: Qstick Date: Fri, 1 Jul 2022 19:45:05 -0500 Subject: [PATCH] Fixed: Migration 208 fails when collection doesn't have name --- .../Migration/208_collectionsFixture.cs | 45 +++++++++++++++++++ .../Datastore/Migration/208_collections.cs | 10 +++-- 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/src/NzbDrone.Core.Test/Datastore/Migration/208_collectionsFixture.cs b/src/NzbDrone.Core.Test/Datastore/Migration/208_collectionsFixture.cs index 9678b89cb..24a077115 100644 --- a/src/NzbDrone.Core.Test/Datastore/Migration/208_collectionsFixture.cs +++ b/src/NzbDrone.Core.Test/Datastore/Migration/208_collectionsFixture.cs @@ -56,6 +56,51 @@ namespace NzbDrone.Core.Test.Datastore.Migration movies.First().CollectionTmdbId.Should().Be(collections.First().TmdbId); } + [Test] + public void should_skip_collection_from_movie_without_name() + { + var db = WithMigrationTestDb(c => + { + c.Insert.IntoTable("Movies").Row(new + { + Monitored = true, + MinimumAvailability = 4, + ProfileId = 1, + MovieFileId = 0, + MovieMetadataId = 1, + Path = string.Format("/Movies/{0}", "Title"), + }); + + c.Insert.IntoTable("MovieMetadata").Row(new + { + Title = "Title", + CleanTitle = "CleanTitle", + Status = 3, + Images = new[] { new { CoverType = "Poster" } }.ToJson(), + Recommendations = new[] { 1 }.ToJson(), + Runtime = 90, + OriginalTitle = "Title", + CleanOriginalTitle = "CleanTitle", + OriginalLanguage = 1, + TmdbId = 132456, + Collection = new { TmdbId = 11 }.ToJson(), + LastInfoSync = DateTime.UtcNow, + }); + }); + + var collections = db.Query("SELECT \"Id\", \"Title\", \"TmdbId\", \"Monitored\" FROM \"Collections\""); + + collections.Should().HaveCount(1); + collections.First().TmdbId.Should().Be(11); + collections.First().Title.Should().Be("Collection 11"); + collections.First().Monitored.Should().BeFalse(); + + var movies = db.Query("SELECT \"Id\", \"CollectionTmdbId\" FROM \"MovieMetadata\""); + + movies.Should().HaveCount(1); + movies.First().CollectionTmdbId.Should().Be(collections.First().TmdbId); + } + [Test] public void should_not_duplicate_collection() { diff --git a/src/NzbDrone.Core/Datastore/Migration/208_collections.cs b/src/NzbDrone.Core/Datastore/Migration/208_collections.cs index 9d5f8cd05..65f65c88d 100644 --- a/src/NzbDrone.Core/Datastore/Migration/208_collections.cs +++ b/src/NzbDrone.Core/Datastore/Migration/208_collections.cs @@ -85,7 +85,7 @@ namespace NzbDrone.Core.Datastore.Migration var moviePath = reader.GetString(3); var data = STJson.Deserialize(collection); - if (newCollections.Any(d => d.TmdbId == data.TmdbId)) + if (data.TmdbId == 0 || newCollections.Any(d => d.TmdbId == data.TmdbId)) { continue; } @@ -104,12 +104,14 @@ namespace NzbDrone.Core.Datastore.Migration rootFolderPath = moviePath.GetParentPath(); } + var collectionName = data.Name ?? $"Collection {data.TmdbId}"; + newCollections.Add(new MovieCollection208 { TmdbId = data.TmdbId, - Title = data.Name, - CleanTitle = data.Name.CleanMovieTitle(), - SortTitle = Parser.Parser.NormalizeTitle(data.Name), + Title = collectionName, + CleanTitle = collectionName.CleanMovieTitle(), + SortTitle = Parser.Parser.NormalizeTitle(collectionName), Added = added, QualityProfileId = qualityProfileId, RootFolderPath = rootFolderPath,