parent
1ec5973520
commit
a85c6c0a91
@ -0,0 +1,178 @@
|
|||||||
|
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 add_download_client_priorityFixture : MigrationTest<add_download_client_priority>
|
||||||
|
{
|
||||||
|
[Test]
|
||||||
|
public void should_set_prio_to_one()
|
||||||
|
{
|
||||||
|
var db = WithMigrationTestDb(c =>
|
||||||
|
{
|
||||||
|
c.Insert.IntoTable("DownloadClients").Row(new
|
||||||
|
{
|
||||||
|
Enable = 1,
|
||||||
|
Name = "Deluge",
|
||||||
|
Implementation = "Deluge",
|
||||||
|
Settings = new DelugeSettings36
|
||||||
|
{
|
||||||
|
Host = "127.0.0.1",
|
||||||
|
MusicCategory = "abc",
|
||||||
|
UrlBase = "/my/"
|
||||||
|
}.ToJson(),
|
||||||
|
ConfigContract = "DelugeSettings"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
var items = db.Query<DownloadClientDefinition036>("SELECT * FROM DownloadClients");
|
||||||
|
|
||||||
|
items.Should().HaveCount(1);
|
||||||
|
items.First().Priority.Should().Be(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_renumber_prio_for_enabled_clients()
|
||||||
|
{
|
||||||
|
var db = WithMigrationTestDb(c =>
|
||||||
|
{
|
||||||
|
c.Insert.IntoTable("DownloadClients").Row(new
|
||||||
|
{
|
||||||
|
Enable = 1,
|
||||||
|
Name = "Deluge",
|
||||||
|
Implementation = "Deluge",
|
||||||
|
Settings = new DelugeSettings36
|
||||||
|
{
|
||||||
|
Host = "127.0.0.1",
|
||||||
|
MusicCategory = "abc",
|
||||||
|
UrlBase = "/my/"
|
||||||
|
}.ToJson(),
|
||||||
|
ConfigContract = "DelugeSettings"
|
||||||
|
}).Row(new
|
||||||
|
{
|
||||||
|
Enable = 1,
|
||||||
|
Name = "Deluge2",
|
||||||
|
Implementation = "Deluge",
|
||||||
|
Settings = new DelugeSettings36
|
||||||
|
{
|
||||||
|
Host = "127.0.0.1",
|
||||||
|
MusicCategory = "abc",
|
||||||
|
UrlBase = "/my/"
|
||||||
|
}.ToJson(),
|
||||||
|
ConfigContract = "DelugeSettings"
|
||||||
|
}).Row(new
|
||||||
|
{
|
||||||
|
Enable = 1,
|
||||||
|
Name = "sab",
|
||||||
|
Implementation = "Sabnzbd",
|
||||||
|
Settings = new SabnzbdSettings36
|
||||||
|
{
|
||||||
|
Host = "127.0.0.1",
|
||||||
|
MusicCategory = "abc"
|
||||||
|
}.ToJson(),
|
||||||
|
ConfigContract = "SabnzbdSettings"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
var items = db.Query<DownloadClientDefinition036>("SELECT * FROM DownloadClients");
|
||||||
|
|
||||||
|
items.Should().HaveCount(3);
|
||||||
|
items[0].Priority.Should().Be(1);
|
||||||
|
items[1].Priority.Should().Be(2);
|
||||||
|
items[2].Priority.Should().Be(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void should_not_renumber_prio_for_disabled_clients()
|
||||||
|
{
|
||||||
|
var db = WithMigrationTestDb(c =>
|
||||||
|
{
|
||||||
|
c.Insert.IntoTable("DownloadClients").Row(new
|
||||||
|
{
|
||||||
|
Enable = 0,
|
||||||
|
Name = "Deluge",
|
||||||
|
Implementation = "Deluge",
|
||||||
|
Settings = new DelugeSettings36
|
||||||
|
{
|
||||||
|
Host = "127.0.0.1",
|
||||||
|
MusicCategory = "abc",
|
||||||
|
UrlBase = "/my/"
|
||||||
|
}.ToJson(),
|
||||||
|
ConfigContract = "DelugeSettings"
|
||||||
|
}).Row(new
|
||||||
|
{
|
||||||
|
Enable = 0,
|
||||||
|
Name = "Deluge2",
|
||||||
|
Implementation = "Deluge",
|
||||||
|
Settings = new DelugeSettings36
|
||||||
|
{
|
||||||
|
Host = "127.0.0.1",
|
||||||
|
MusicCategory = "abc",
|
||||||
|
UrlBase = "/my/"
|
||||||
|
}.ToJson(),
|
||||||
|
ConfigContract = "DelugeSettings"
|
||||||
|
}).Row(new
|
||||||
|
{
|
||||||
|
Enable = 0,
|
||||||
|
Name = "sab",
|
||||||
|
Implementation = "Sabnzbd",
|
||||||
|
Settings = new SabnzbdSettings36
|
||||||
|
{
|
||||||
|
Host = "127.0.0.1",
|
||||||
|
MusicCategory = "abc"
|
||||||
|
}.ToJson(),
|
||||||
|
ConfigContract = "SabnzbdSettings"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
var items = db.Query<DownloadClientDefinition036>("SELECT * FROM DownloadClients");
|
||||||
|
|
||||||
|
items.Should().HaveCount(3);
|
||||||
|
items[0].Priority.Should().Be(1);
|
||||||
|
items[1].Priority.Should().Be(1);
|
||||||
|
items[1].Priority.Should().Be(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class DownloadClientDefinition036
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
public bool Enable { get; set; }
|
||||||
|
public int Priority { get; set; }
|
||||||
|
public string Name { get; set; }
|
||||||
|
public string Implementation { get; set; }
|
||||||
|
public JObject Settings { get; set; }
|
||||||
|
public string ConfigContract { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class DelugeSettings36
|
||||||
|
{
|
||||||
|
public string Host { get; set; }
|
||||||
|
public int Port { get; set; }
|
||||||
|
public string UrlBase { get; set; }
|
||||||
|
public string Password { get; set; }
|
||||||
|
public string MusicCategory { get; set; }
|
||||||
|
public int RecentTvPriority { get; set; }
|
||||||
|
public int OlderTvPriority { get; set; }
|
||||||
|
public bool UseSsl { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SabnzbdSettings36
|
||||||
|
{
|
||||||
|
public string Host { get; set; }
|
||||||
|
public int Port { get; set; }
|
||||||
|
public string ApiKey { get; set; }
|
||||||
|
public string Username { get; set; }
|
||||||
|
public string Password { get; set; }
|
||||||
|
public string MusicCategory { get; set; }
|
||||||
|
public int RecentTvPriority { get; set; }
|
||||||
|
public int OlderTvPriority { get; set; }
|
||||||
|
public bool UseSsl { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Data;
|
||||||
|
using FluentMigrator;
|
||||||
|
using NzbDrone.Core.Datastore.Migration.Framework;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.Datastore.Migration
|
||||||
|
{
|
||||||
|
[Migration(036)]
|
||||||
|
public class add_download_client_priority : NzbDroneMigrationBase
|
||||||
|
{
|
||||||
|
// Need snapshot in time without having to instantiate.
|
||||||
|
private static HashSet<string> _usenetImplementations = new HashSet<string>
|
||||||
|
{
|
||||||
|
"Sabnzbd", "NzbGet", "NzbVortex", "UsenetBlackhole", "UsenetDownloadStation"
|
||||||
|
};
|
||||||
|
|
||||||
|
protected override void MainDbUpgrade()
|
||||||
|
{
|
||||||
|
Alter.Table("DownloadClients").AddColumn("Priority").AsInt32().WithDefaultValue(1);
|
||||||
|
Execute.WithConnection(InitPriorityForBackwardCompatibility);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void InitPriorityForBackwardCompatibility(IDbConnection conn, IDbTransaction tran)
|
||||||
|
{
|
||||||
|
using (var cmd = conn.CreateCommand())
|
||||||
|
{
|
||||||
|
cmd.Transaction = tran;
|
||||||
|
cmd.CommandText = "SELECT Id, Implementation FROM DownloadClients WHERE Enable = 1";
|
||||||
|
|
||||||
|
using (var reader = cmd.ExecuteReader())
|
||||||
|
{
|
||||||
|
int nextUsenet = 1;
|
||||||
|
int nextTorrent = 1;
|
||||||
|
while (reader.Read())
|
||||||
|
{
|
||||||
|
var id = reader.GetInt32(0);
|
||||||
|
var implName = reader.GetString(1);
|
||||||
|
|
||||||
|
var isUsenet = _usenetImplementations.Contains(implName);
|
||||||
|
|
||||||
|
using (var updateCmd = conn.CreateCommand())
|
||||||
|
{
|
||||||
|
updateCmd.Transaction = tran;
|
||||||
|
updateCmd.CommandText = "UPDATE DownloadClients SET Priority = ? WHERE Id = ?";
|
||||||
|
updateCmd.AddParameter(isUsenet ? nextUsenet++ : nextTorrent++);
|
||||||
|
updateCmd.AddParameter(id);
|
||||||
|
|
||||||
|
updateCmd.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue