diff --git a/src/NzbDrone.Core.Test/Datastore/Migration/044_nzb_su_url_to_nzb_lifeFixture.cs b/src/NzbDrone.Core.Test/Datastore/Migration/044_nzb_su_url_to_nzb_lifeFixture.cs new file mode 100644 index 000000000..7ff8884b9 --- /dev/null +++ b/src/NzbDrone.Core.Test/Datastore/Migration/044_nzb_su_url_to_nzb_lifeFixture.cs @@ -0,0 +1,88 @@ +using System.Collections.Generic; +using System.Linq; +using FluentAssertions; +using Newtonsoft.Json.Linq; +using NUnit.Framework; +using NzbDrone.Common.Serializer; +using NzbDrone.Core.Datastore.Migration; +using NzbDrone.Core.Test.Framework; + +namespace NzbDrone.Core.Test.Datastore.Migration +{ + [TestFixture] + public class nzb_su_url_to_nzb_lifeFixture : MigrationTest + { + [TestCase("Newznab", "https://api.nzb.su")] + [TestCase("Newznab", "http://api.nzb.su")] + public void should_replace_old_url(string impl, string baseUrl) + { + var db = WithMigrationTestDb(c => + { + c.Insert.IntoTable("Indexers").Row(new + { + Name = "Nzb.su", + Implementation = impl, + Settings = new NewznabSettings044 + { + BaseUrl = baseUrl, + ApiPath = "/api" + }.ToJson(), + ConfigContract = impl + "Settings", + EnableInteractiveSearch = false + }); + }); + + var items = db.Query("SELECT * FROM \"Indexers\""); + + items.Should().HaveCount(1); + items.First().Settings.ToObject().BaseUrl.Should().Be(baseUrl.Replace("su", "life")); + } + + [TestCase("Newznab", "https://api.indexer.com")] + public void should_not_replace_different_url(string impl, string baseUrl) + { + var db = WithMigrationTestDb(c => + { + c.Insert.IntoTable("Indexers").Row(new + { + Name = "Indexer.com", + Implementation = impl, + Settings = new NewznabSettings044 + { + BaseUrl = baseUrl, + ApiPath = "/api" + }.ToJson(), + ConfigContract = impl + "Settings", + EnableInteractiveSearch = false + }); + }); + + var items = db.Query("SELECT * FROM \"Indexers\""); + + items.Should().HaveCount(1); + items.First().Settings.ToObject().BaseUrl.Should().Be(baseUrl); + } + } + + internal class IndexerDefinition044 + { + public int Id { get; set; } + public string Name { get; set; } + public JObject Settings { get; set; } + public int Priority { get; set; } + public string Implementation { get; set; } + public string ConfigContract { get; set; } + public bool EnableRss { get; set; } + public bool EnableAutomaticSearch { get; set; } + public bool EnableInteractiveSearch { get; set; } + public HashSet Tags { get; set; } + public int DownloadClientId { get; set; } + public int SeasonSearchMaximumSingleEpisodeAge { get; set; } + } + + internal class NewznabSettings044 + { + public string BaseUrl { get; set; } + public string ApiPath { get; set; } + } +} diff --git a/src/NzbDrone.Core/Datastore/Migration/044_nzb_su_url_to_nzb_life.cs b/src/NzbDrone.Core/Datastore/Migration/044_nzb_su_url_to_nzb_life.cs new file mode 100644 index 000000000..6b38f4949 --- /dev/null +++ b/src/NzbDrone.Core/Datastore/Migration/044_nzb_su_url_to_nzb_life.cs @@ -0,0 +1,16 @@ +using FluentMigrator; +using NzbDrone.Core.Datastore.Migration.Framework; + +namespace NzbDrone.Core.Datastore.Migration +{ + [Migration(044)] + public class nzb_su_url_to_nzb_life : NzbDroneMigrationBase + { + protected override void MainDbUpgrade() + { + Execute.Sql("UPDATE \"Indexers\" SET \"Settings\" = replace(\"Settings\", '//api.nzb.su', '//api.nzb.life')" + + "WHERE \"Implementation\" = 'Newznab'" + + "AND \"Settings\" LIKE '%//api.nzb.su%'"); + } + } +}