You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Radarr/src/NzbDrone.Core.Test/Datastore/Migration/180_fix_invalid_profile_ref...

219 lines
7.3 KiB

using System.Collections.Generic;
using System.Linq;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Common.Serializer;
using NzbDrone.Core.Datastore.Migration;
using NzbDrone.Core.Languages;
using NzbDrone.Core.Movies;
using NzbDrone.Core.Profiles;
using NzbDrone.Core.Qualities;
using NzbDrone.Core.Test.Framework;
namespace NzbDrone.Core.Test.Datastore.Migration
{
[TestFixture]
public class fix_invalid_profile_referencesFixture : MigrationTest<fix_invalid_profile_references>
{
private void AddDefaultProfile(fix_invalid_profile_references m, string name, int profileId)
{
var allowed = new Quality[] { Quality.WEBDL720p };
var items = Quality.DefaultQualityDefinitions
.OrderBy(v => v.Weight)
.Select(v => new { Quality = (int)v.Quality, Allowed = allowed.Contains(v.Quality) })
.ToList();
var profile = new
{
Id = profileId,
Name = name,
FormatItems = new List<ProfileFormatItem>().ToJson(),
Cutoff = (int)Quality.WEBDL720p,
Items = items.ToJson(),
Language = (int)Language.English,
MinFormatScore = 0,
CutoffFormatScore = 0
};
m.Insert.IntoTable("Profiles").Row(profile);
}
private void AddMovie(fix_invalid_profile_references m, string movieTitle, int tmdbId, int profileId)
{
var movie = new
{
Id = tmdbId,
Monitored = true,
Title = movieTitle,
CleanTitle = movieTitle,
Status = (int)MovieStatusType.Announced,
MinimumAvailability = (int)MovieStatusType.Announced,
Images = new[] { new { CoverType = "Poster" } }.ToJson(),
Recommendations = new[] { 1 }.ToJson(),
HasPreDBEntry = false,
Runtime = 90,
OriginalLanguage = 1,
ProfileId = profileId,
MovieFileId = 1,
Path = string.Format("/Movies/{0}", movieTitle),
TitleSlug = movieTitle,
TmdbId = tmdbId
};
m.Insert.IntoTable("Movies").Row(movie);
}
private void AddCustomFormat(fix_invalid_profile_references c, int id, string name)
{
var customFormat = new
{
Id = id,
Name = name,
Specifications = "[]"
};
c.Insert.IntoTable("CustomFormats").Row(customFormat);
}
[Test]
public void should_add_default_profiles_if_none_exist_but_movies_exist()
{
var profileId = 18;
var db = WithMigrationTestDb(c =>
{
AddMovie(c, "movie", 123456, profileId);
});
var items = db.Query<Movie179>("SELECT \"Id\", \"ProfileId\" FROM \"Movies\"");
var profiles = db.Query<Profile179>("SELECT \"Id\" FROM \"Profiles\"");
items.Should().HaveCount(1);
profiles.Should().HaveCount(6);
items.First().ProfileId.Should().BeOneOf(profiles.Select(p => p.Id));
}
[Test]
public void should_not_add_default_profiles_if_one_exist()
{
var profileId = 18;
var db = WithMigrationTestDb(c =>
{
AddDefaultProfile(c, "My Custom Profile", profileId);
AddMovie(c, "movie", 123456, 17);
});
var items = db.Query<Movie179>("SELECT \"Id\", \"ProfileId\" FROM \"Movies\"");
var profiles = db.Query<Profile179>("SELECT \"Id\" FROM \"Profiles\"");
items.Should().HaveCount(1);
profiles.Should().HaveCount(1);
items.First().ProfileId.Should().BeOneOf(profiles.Select(p => p.Id));
}
[Test]
public void should_add_custom_formats_to_default_profiles_if_some_exist()
{
var profileId = 18;
var formatId = 3;
var db = WithMigrationTestDb(c =>
{
AddCustomFormat(c, formatId, "SomeFormat");
AddMovie(c, "movie", 123456, profileId);
});
var items = db.Query<Movie179>("SELECT \"Id\", \"ProfileId\" FROM \"Movies\"");
var profiles = db.Query<Profile179>("SELECT \"Id\", \"FormatItems\" FROM \"Profiles\"");
items.Should().HaveCount(1);
profiles.Should().HaveCount(6);
profiles.First().FormatItems.Should().HaveCount(1);
profiles.First().FormatItems.First().Format.Should().Be(formatId);
items.First().ProfileId.Should().BeOneOf(profiles.Select(p => p.Id));
}
[Test]
public void should_not_change_movies_with_valid_profile()
{
var profileId = 2;
var db = WithMigrationTestDb(c =>
{
AddDefaultProfile(c, "My Custom Profile", profileId);
AddMovie(c, "movie", 123456, profileId);
});
var items = db.Query<Movie179>("SELECT \"Id\", \"ProfileId\" FROM \"Movies\"");
items.Should().HaveCount(1);
items.First().ProfileId.Should().Be(profileId);
}
[Test]
public void should_change_movies_with_bad_profile_id()
{
var profileId = 2;
var db = WithMigrationTestDb(c =>
{
AddDefaultProfile(c, "My Custom Profile", profileId);
AddMovie(c, "movie", 123456, 1);
});
var items = db.Query<Movie179>("SELECT \"Id\", \"ProfileId\" FROM \"Movies\"");
items.Should().HaveCount(1);
items.First().ProfileId.Should().Be(profileId);
}
[Test]
public void should_change_to_most_common_valid_profile_in_library()
{
var commonProfileId = 2;
var otherProfileId = 3;
var db = WithMigrationTestDb(c =>
{
AddDefaultProfile(c, "My Custom Profile", commonProfileId);
AddDefaultProfile(c, "My Custom Profile 2", otherProfileId);
AddMovie(c, "movie1", 123451, 1);
AddMovie(c, "movie2", 123452, 1);
AddMovie(c, "movie3", 123453, 1);
AddMovie(c, "movie4", 123454, 1);
AddMovie(c, "movie5", 123455, commonProfileId);
AddMovie(c, "movie6", 123456, commonProfileId);
AddMovie(c, "movie7", 123457, commonProfileId);
AddMovie(c, "movie8", 123458, otherProfileId);
AddMovie(c, "movie9", 123459, otherProfileId);
});
var items = db.Query<Movie179>("SELECT \"Id\", \"ProfileId\" FROM \"Movies\"");
items.Should().HaveCount(9);
items.Where(x => x.ProfileId == commonProfileId).Should().HaveCount(7);
}
}
public class Movie179
{
public int Id { get; set; }
public int ProfileId { get; set; }
}
public class Profile179
{
public int Id { get; set; }
public List<ProfileFormatItem179> FormatItems { get; set; }
}
public class ProfileFormatItem179
{
public int Id { get; set; }
public int Format { get; set; }
public int Score { get; set; }
}
}