From 43677e8481bcfc4f79907bf0985c34a337d50988 Mon Sep 17 00:00:00 2001 From: Qstick Date: Thu, 31 Aug 2017 22:28:18 -0400 Subject: [PATCH] Create OrphanedTracks Housekeeper (#81) --- .../CleanupOrphanedEpisodesFixture.cs | 43 ------------------- .../CleanupOrphanedTracksFixture.cs | 43 +++++++++++++++++++ .../NzbDrone.Core.Test.csproj | 2 +- .../Housekeepers/CleanupOrphanedEpisodes.cs | 26 ----------- .../Housekeepers/CleanupOrphanedTracks.cs | 26 +++++++++++ src/NzbDrone.Core/NzbDrone.Core.csproj | 2 +- 6 files changed, 71 insertions(+), 71 deletions(-) delete mode 100644 src/NzbDrone.Core.Test/Housekeeping/Housekeepers/CleanupOrphanedEpisodesFixture.cs create mode 100644 src/NzbDrone.Core.Test/Housekeeping/Housekeepers/CleanupOrphanedTracksFixture.cs delete mode 100644 src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedEpisodes.cs create mode 100644 src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedTracks.cs diff --git a/src/NzbDrone.Core.Test/Housekeeping/Housekeepers/CleanupOrphanedEpisodesFixture.cs b/src/NzbDrone.Core.Test/Housekeeping/Housekeepers/CleanupOrphanedEpisodesFixture.cs deleted file mode 100644 index 03f8b395e..000000000 --- a/src/NzbDrone.Core.Test/Housekeeping/Housekeepers/CleanupOrphanedEpisodesFixture.cs +++ /dev/null @@ -1,43 +0,0 @@ -using FizzWare.NBuilder; -using FluentAssertions; -using NUnit.Framework; -using NzbDrone.Core.Housekeeping.Housekeepers; -using NzbDrone.Core.Test.Framework; -using NzbDrone.Core.Tv; - -namespace NzbDrone.Core.Test.Housekeeping.Housekeepers -{ - [TestFixture] - public class CleanupOrphanedEpisodesFixture : DbTest - { - [Test] - public void should_delete_orphaned_episodes() - { - var episode = Builder.CreateNew() - .BuildNew(); - - Db.Insert(episode); - Subject.Clean(); - AllStoredModels.Should().BeEmpty(); - } - - [Test] - public void should_not_delete_unorphaned_episodes() - { - var series = Builder.CreateNew() - .BuildNew(); - - Db.Insert(series); - - var episodes = Builder.CreateListOfSize(2) - .TheFirst(1) - .With(e => e.SeriesId = series.Id) - .BuildListOfNew(); - - Db.InsertMany(episodes); - Subject.Clean(); - AllStoredModels.Should().HaveCount(1); - AllStoredModels.Should().Contain(e => e.SeriesId == series.Id); - } - } -} diff --git a/src/NzbDrone.Core.Test/Housekeeping/Housekeepers/CleanupOrphanedTracksFixture.cs b/src/NzbDrone.Core.Test/Housekeeping/Housekeepers/CleanupOrphanedTracksFixture.cs new file mode 100644 index 000000000..c46e86894 --- /dev/null +++ b/src/NzbDrone.Core.Test/Housekeeping/Housekeepers/CleanupOrphanedTracksFixture.cs @@ -0,0 +1,43 @@ +using FizzWare.NBuilder; +using FluentAssertions; +using NUnit.Framework; +using NzbDrone.Core.Housekeeping.Housekeepers; +using NzbDrone.Core.Test.Framework; +using NzbDrone.Core.Music; + +namespace NzbDrone.Core.Test.Housekeeping.Housekeepers +{ + [TestFixture] + public class CleanupOrphanedTracksFixture : DbTest + { + [Test] + public void should_delete_orphaned_tracks() + { + var track = Builder.CreateNew() + .BuildNew(); + + Db.Insert(track); + Subject.Clean(); + AllStoredModels.Should().BeEmpty(); + } + + [Test] + public void should_not_delete_unorphaned_tracks() + { + var album = Builder.CreateNew() + .BuildNew(); + + Db.Insert(album); + + var tracks = Builder.CreateListOfSize(2) + .TheFirst(1) + .With(e => e.AlbumId = album.Id) + .BuildListOfNew(); + + Db.InsertMany(tracks); + Subject.Clean(); + AllStoredModels.Should().HaveCount(1); + AllStoredModels.Should().Contain(e => e.AlbumId == album.Id); + } + } +} diff --git a/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj b/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj index 0c088e8d5..9c4973c75 100644 --- a/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj +++ b/src/NzbDrone.Core.Test/NzbDrone.Core.Test.csproj @@ -237,7 +237,7 @@ - + diff --git a/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedEpisodes.cs b/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedEpisodes.cs deleted file mode 100644 index 6d9d208c9..000000000 --- a/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedEpisodes.cs +++ /dev/null @@ -1,26 +0,0 @@ -using NzbDrone.Core.Datastore; - -namespace NzbDrone.Core.Housekeeping.Housekeepers -{ - public class CleanupOrphanedEpisodes : IHousekeepingTask - { - private readonly IMainDatabase _database; - - public CleanupOrphanedEpisodes(IMainDatabase database) - { - _database = database; - } - - public void Clean() - { - var mapper = _database.GetDataMapper(); - - mapper.ExecuteNonQuery(@"DELETE FROM Episodes - WHERE Id IN ( - SELECT Episodes.Id FROM Episodes - LEFT OUTER JOIN Series - ON Episodes.SeriesId = Series.Id - WHERE Series.Id IS NULL)"); - } - } -} diff --git a/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedTracks.cs b/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedTracks.cs new file mode 100644 index 000000000..dbdac6daf --- /dev/null +++ b/src/NzbDrone.Core/Housekeeping/Housekeepers/CleanupOrphanedTracks.cs @@ -0,0 +1,26 @@ +using NzbDrone.Core.Datastore; + +namespace NzbDrone.Core.Housekeeping.Housekeepers +{ + public class CleanupOrphanedTracks : IHousekeepingTask + { + private readonly IMainDatabase _database; + + public CleanupOrphanedTracks(IMainDatabase database) + { + _database = database; + } + + public void Clean() + { + var mapper = _database.GetDataMapper(); + + mapper.ExecuteNonQuery(@"DELETE FROM Tracks + WHERE Id IN ( + SELECT Tracks.Id FROM Tracks + LEFT OUTER JOIN Albums + ON Tracks.AlbumId = Albums.Id + WHERE Albums.Id IS NULL)"); + } + } +} diff --git a/src/NzbDrone.Core/NzbDrone.Core.csproj b/src/NzbDrone.Core/NzbDrone.Core.csproj index 737531f03..9bb8c692d 100644 --- a/src/NzbDrone.Core/NzbDrone.Core.csproj +++ b/src/NzbDrone.Core/NzbDrone.Core.csproj @@ -591,7 +591,7 @@ - +