parent
5765961c3a
commit
158a06adbf
@ -0,0 +1,375 @@
|
||||
using System;
|
||||
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.Qualities;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Test.Datastore.Migration
|
||||
{
|
||||
[TestFixture]
|
||||
public class add_language_to_files_history_blacklistFixture : MigrationTest<add_language_to_files_history_blacklist>
|
||||
{
|
||||
private void AddDefaultProfile(add_language_to_files_history_blacklist m, string name, Language language)
|
||||
{
|
||||
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 = 1, Name = name, Cutoff = (int)Quality.WEBDL720p, Items = items.ToJson(), Language = (int)language };
|
||||
|
||||
var movie = new
|
||||
{
|
||||
Id = 1,
|
||||
Monitored = true,
|
||||
Title = "My Movie",
|
||||
CleanTitle = "mytitle",
|
||||
Status = MovieStatusType.Announced,
|
||||
MinimumAvailability = MovieStatusType.Announced,
|
||||
Images = new[] { new { CoverType = "Poster" } }.ToJson(),
|
||||
HasPreDBEntry = false,
|
||||
PathState = 1,
|
||||
Runtime = 90,
|
||||
ProfileId = 1,
|
||||
MovieFileId = 1,
|
||||
Path = "/Some/Path",
|
||||
TitleSlug = "123456",
|
||||
TmdbId = 123456
|
||||
};
|
||||
|
||||
m.Insert.IntoTable("Profiles").Row(profile);
|
||||
m.Insert.IntoTable("Movies").Row(movie);
|
||||
}
|
||||
|
||||
private void AddMovieFile(add_language_to_files_history_blacklist m, string sceneName, string mediaInfoLanugaes)
|
||||
{
|
||||
m.Insert.IntoTable("MovieFiles").Row(new
|
||||
{
|
||||
MovieId = 1,
|
||||
Quality = new
|
||||
{
|
||||
Quality = 6
|
||||
}.ToJson(),
|
||||
Size = 997478103,
|
||||
DateAdded = DateTime.Now,
|
||||
SceneName = sceneName,
|
||||
MediaInfo = new
|
||||
{
|
||||
AudioLanguages = mediaInfoLanugaes
|
||||
}.ToJson(),
|
||||
RelativePath = "Never Say Never Again.1983.Bluray-720p.mp4",
|
||||
});
|
||||
}
|
||||
|
||||
private void AddHistory(add_language_to_files_history_blacklist m, string sourceTitle)
|
||||
{
|
||||
m.Insert.IntoTable("History").Row(new
|
||||
{
|
||||
MovieId = 1,
|
||||
Quality = new
|
||||
{
|
||||
Quality = 6
|
||||
}.ToJson(),
|
||||
EventType = 1,
|
||||
Date = DateTime.Now,
|
||||
SourceTitle = sourceTitle,
|
||||
Data = new
|
||||
{
|
||||
Indexer = "My Indexer"
|
||||
}.ToJson()
|
||||
});
|
||||
}
|
||||
|
||||
private void AddBlacklist(add_language_to_files_history_blacklist m, string sourceTitle)
|
||||
{
|
||||
m.Insert.IntoTable("Blacklist").Row(new
|
||||
{
|
||||
MovieId = 1,
|
||||
Quality = new
|
||||
{
|
||||
Quality = 6
|
||||
}.ToJson(),
|
||||
Date = DateTime.Now,
|
||||
SourceTitle = sourceTitle,
|
||||
Size = 997478103
|
||||
});
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_add_languages_from_media_info_if_available()
|
||||
{
|
||||
var db = WithMigrationTestDb(c =>
|
||||
{
|
||||
AddDefaultProfile(c, "My Custom Profile", Language.Dutch);
|
||||
AddMovieFile(c, "My.Movie.2018.German.BluRay-Radarr", "Japanese");
|
||||
});
|
||||
|
||||
var items = db.Query<ModelWithLanguages154>("SELECT Id, Languages FROM MovieFiles");
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
items.First().Languages.Count.Should().Be(1);
|
||||
items.First().Languages.Should().Contain((int)Language.Japanese);
|
||||
items.First().Languages.Should().NotContain((int)Language.English);
|
||||
items.First().Languages.Should().NotContain((int)Language.Dutch);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_add_languages_from_media_info_with_multiple_language()
|
||||
{
|
||||
var db = WithMigrationTestDb(c =>
|
||||
{
|
||||
AddDefaultProfile(c, "My Custom Profile", Language.Dutch);
|
||||
AddMovieFile(c, "My.Movie.2018.German.BluRay-Radarr", "Japanese / French");
|
||||
});
|
||||
|
||||
var items = db.Query<ModelWithLanguages154>("SELECT Id, Languages FROM MovieFiles");
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
items.First().Languages.Count.Should().Be(2);
|
||||
items.First().Languages.Should().Contain((int)Language.Japanese);
|
||||
items.First().Languages.Should().Contain((int)Language.French);
|
||||
items.First().Languages.Should().NotContain((int)Language.English);
|
||||
items.First().Languages.Should().NotContain((int)Language.Dutch);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_fallback_to_scenename_if_no_mediainfo_languages()
|
||||
{
|
||||
var db = WithMigrationTestDb(c =>
|
||||
{
|
||||
AddDefaultProfile(c, "My Custom Profile", Language.Dutch);
|
||||
AddMovieFile(c, "My.Movie.2018.German.BluRay-Radarr", "");
|
||||
});
|
||||
|
||||
var items = db.Query<ModelWithLanguages154>("SELECT Id, Languages FROM MovieFiles");
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
items.First().Languages.Count.Should().Be(1);
|
||||
items.First().Languages.Should().Contain((int)Language.German);
|
||||
items.First().Languages.Should().NotContain((int)Language.Dutch);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_fallback_to_scenename_if_mediainfo_language_invalid()
|
||||
{
|
||||
var db = WithMigrationTestDb(c =>
|
||||
{
|
||||
AddDefaultProfile(c, "My Custom Profile", Language.Dutch);
|
||||
AddMovieFile(c, "My.Movie.2018.German.BluRay-Radarr", "English (USA)");
|
||||
});
|
||||
|
||||
var items = db.Query<ModelWithLanguages154>("SELECT Id, Languages FROM MovieFiles");
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
items.First().Languages.Count.Should().Be(1);
|
||||
items.First().Languages.Should().Contain((int)Language.German);
|
||||
items.First().Languages.Should().NotContain((int)Language.Dutch);
|
||||
items.First().Languages.Should().NotContain((int)Language.English);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_fallback_to_profile_if_no_mediainfo_no_scene_name()
|
||||
{
|
||||
var db = WithMigrationTestDb(c =>
|
||||
{
|
||||
AddDefaultProfile(c, "My Custom Profile", Language.Dutch);
|
||||
AddMovieFile(c, "", "");
|
||||
});
|
||||
|
||||
var items = db.Query<ModelWithLanguages154>("SELECT Id, Languages FROM MovieFiles");
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
items.First().Languages.Count.Should().Be(1);
|
||||
items.First().Languages.Should().Contain((int)Language.Dutch);
|
||||
items.First().Languages.Should().NotContain((int)Language.Unknown);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_handle_if_null_mediainfo_and_null_scenename()
|
||||
{
|
||||
var db = WithMigrationTestDb(c =>
|
||||
{
|
||||
AddDefaultProfile(c, "My Custom Profile", Language.Dutch);
|
||||
AddMovieFile(c, null, null);
|
||||
});
|
||||
|
||||
var items = db.Query<ModelWithLanguages154>("SELECT Id, Languages FROM MovieFiles");
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
items.First().Languages.Count.Should().Be(1);
|
||||
items.First().Languages.Should().Contain((int)Language.Dutch);
|
||||
items.First().Languages.Should().NotContain((int)Language.Unknown);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_fallback_to_profile_if_unknown_language_from_scene_name()
|
||||
{
|
||||
var db = WithMigrationTestDb(c =>
|
||||
{
|
||||
AddDefaultProfile(c, "My Custom Profile", Language.Dutch);
|
||||
AddMovieFile(c, "My.Movie.2018.BluRay-Radarr", "");
|
||||
});
|
||||
|
||||
var items = db.Query<ModelWithLanguages154>("SELECT Id, Languages FROM MovieFiles");
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
items.First().Languages.Count.Should().Be(1);
|
||||
items.First().Languages.Should().Contain((int)Language.Dutch);
|
||||
items.First().Languages.Should().NotContain((int)Language.Unknown);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_use_english_if_fallback_to_profile_and_profile_is_any()
|
||||
{
|
||||
var db = WithMigrationTestDb(c =>
|
||||
{
|
||||
AddDefaultProfile(c, "My Custom Profile", Language.Any);
|
||||
AddMovieFile(c, "", "");
|
||||
});
|
||||
|
||||
var items = db.Query<ModelWithLanguages154>("SELECT Id, Languages FROM MovieFiles");
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
items.First().Languages.Count.Should().Be(1);
|
||||
items.First().Languages.Should().Contain((int)Language.English);
|
||||
items.First().Languages.Should().NotContain((int)Language.Any);
|
||||
items.First().Languages.Should().NotContain((int)Language.Unknown);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_assign_history_languages_from_sourceTitle()
|
||||
{
|
||||
var db = WithMigrationTestDb(c =>
|
||||
{
|
||||
AddDefaultProfile(c, "My Custom Profile", Language.Dutch);
|
||||
AddHistory(c, "My.Movie.2018.Italian.BluRay-Radarr");
|
||||
});
|
||||
|
||||
var items = db.Query<ModelWithLanguages154>("SELECT Id, Languages FROM History");
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
items.First().Languages.Count.Should().Be(1);
|
||||
items.First().Languages.Should().Contain((int)Language.Italian);
|
||||
items.First().Languages.Should().NotContain((int)Language.Dutch);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_assign_history_languages_from_profile_if_no_sourceTitle()
|
||||
{
|
||||
var db = WithMigrationTestDb(c =>
|
||||
{
|
||||
AddDefaultProfile(c, "My Custom Profile", Language.Dutch);
|
||||
AddHistory(c, "");
|
||||
});
|
||||
|
||||
var items = db.Query<ModelWithLanguages154>("SELECT Id, Languages FROM History");
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
items.First().Languages.Count.Should().Be(1);
|
||||
items.First().Languages.Should().Contain((int)Language.Dutch);
|
||||
items.First().Languages.Should().NotContain((int)Language.Unknown);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_assign_history_languages_from_profile_if_unknown_sourceTitle()
|
||||
{
|
||||
var db = WithMigrationTestDb(c =>
|
||||
{
|
||||
AddDefaultProfile(c, "My Custom Profile", Language.Dutch);
|
||||
AddHistory(c, "Man on Fire");
|
||||
});
|
||||
|
||||
var items = db.Query<ModelWithLanguages154>("SELECT Id, Languages FROM History");
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
items.First().Languages.Count.Should().Be(1);
|
||||
items.First().Languages.Should().Contain((int)Language.Dutch);
|
||||
items.First().Languages.Should().NotContain((int)Language.Unknown);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_assign_history_languages_from_moviefile_release_mapping_with_mediainfo()
|
||||
{
|
||||
var db = WithMigrationTestDb(c =>
|
||||
{
|
||||
AddDefaultProfile(c, "My Custom Profile", Language.Dutch);
|
||||
AddMovieFile(c, "My.Movie.2018.Italian.BluRay-Radarr", "Italian / French / German");
|
||||
AddHistory(c, "My.Movie.2018.Italian.BluRay-Radarr");
|
||||
});
|
||||
|
||||
var items = db.Query<ModelWithLanguages154>("SELECT Id, Languages FROM History");
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
items.First().Languages.Count.Should().Be(3);
|
||||
items.First().Languages.Should().Contain((int)Language.Italian);
|
||||
items.First().Languages.Should().Contain((int)Language.French);
|
||||
items.First().Languages.Should().Contain((int)Language.German);
|
||||
items.First().Languages.Should().NotContain((int)Language.Dutch);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_assign_blacklist_languages_from_sourceTitle()
|
||||
{
|
||||
var db = WithMigrationTestDb(c =>
|
||||
{
|
||||
AddDefaultProfile(c, "My Custom Profile", Language.Dutch);
|
||||
AddBlacklist(c, "My.Movie.2018.Italian.BluRay-Radarr");
|
||||
});
|
||||
|
||||
var items = db.Query<ModelWithLanguages154>("SELECT Id, Languages FROM Blacklist");
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
items.First().Languages.Count.Should().Be(1);
|
||||
items.First().Languages.Should().Contain((int)Language.Italian);
|
||||
items.First().Languages.Should().NotContain((int)Language.Dutch);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_assign_blacklist_languages_from_profile_if_no_sourceTitle()
|
||||
{
|
||||
var db = WithMigrationTestDb(c =>
|
||||
{
|
||||
AddDefaultProfile(c, "My Custom Profile", Language.Dutch);
|
||||
AddBlacklist(c, "");
|
||||
});
|
||||
|
||||
var items = db.Query<ModelWithLanguages154>("SELECT Id, Languages FROM Blacklist");
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
items.First().Languages.Count.Should().Be(1);
|
||||
items.First().Languages.Should().Contain((int)Language.Dutch);
|
||||
items.First().Languages.Should().NotContain((int)Language.Unknown);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_assign_blacklist_languages_from_profile_if_unknown_sourceTitle()
|
||||
{
|
||||
var db = WithMigrationTestDb(c =>
|
||||
{
|
||||
AddDefaultProfile(c, "My Custom Profile", Language.Dutch);
|
||||
AddBlacklist(c, "Man on Fire");
|
||||
});
|
||||
|
||||
var items = db.Query<ModelWithLanguages154>("SELECT Id, Languages FROM Blacklist");
|
||||
|
||||
items.Should().HaveCount(1);
|
||||
items.First().Languages.Count.Should().Be(1);
|
||||
items.First().Languages.Should().Contain((int)Language.Dutch);
|
||||
items.First().Languages.Should().NotContain((int)Language.Unknown);
|
||||
}
|
||||
}
|
||||
|
||||
public class ModelWithLanguages154
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public List<int> Languages { get; set; }
|
||||
}
|
||||
}
|
Loading…
Reference in new issue