115 lines
3.0 KiB
C#
115 lines
3.0 KiB
C#
using TeleWave.Domain.Library;
|
|
using Xunit;
|
|
|
|
namespace TeleWave.Domain.Tests.Library;
|
|
|
|
public class ShowGenreTests
|
|
{
|
|
private static Show NewShow() => Show.Create("A", ShowKind.Series);
|
|
|
|
[Fact]
|
|
public void SetGenres_MarksRequestedPrimary()
|
|
{
|
|
var show = NewShow();
|
|
var action = Guid.NewGuid();
|
|
var comedy = Guid.NewGuid();
|
|
|
|
show.SetGenres([action, comedy], comedy);
|
|
|
|
Assert.Equal(2, show.Genres.Count);
|
|
Assert.Equal(comedy, show.PrimaryGenreId);
|
|
}
|
|
|
|
[Fact]
|
|
public void SetGenres_FallsBackToFirst_WhenPrimaryNotInSet()
|
|
{
|
|
var show = NewShow();
|
|
var action = Guid.NewGuid();
|
|
var comedy = Guid.NewGuid();
|
|
|
|
show.SetGenres([action, comedy], Guid.NewGuid());
|
|
|
|
// Шоу с жанрами не должно оставаться без основного — иначе список показывал бы прочерк.
|
|
Assert.Equal(action, show.PrimaryGenreId);
|
|
Assert.Single(show.Genres, g => g.IsPrimary);
|
|
}
|
|
|
|
[Fact]
|
|
public void SetGenres_DropsDuplicatesAndEmpty()
|
|
{
|
|
var show = NewShow();
|
|
var action = Guid.NewGuid();
|
|
|
|
show.SetGenres([action, action, Guid.Empty]);
|
|
|
|
Assert.Single(show.Genres);
|
|
Assert.Equal(action, show.PrimaryGenreId);
|
|
}
|
|
|
|
[Fact]
|
|
public void SetGenres_ReplacesPreviousSet()
|
|
{
|
|
var show = NewShow();
|
|
var first = Guid.NewGuid();
|
|
var second = Guid.NewGuid();
|
|
|
|
show.SetGenres([first]);
|
|
show.SetGenres([second]);
|
|
|
|
Assert.Single(show.Genres);
|
|
Assert.Equal(second, show.PrimaryGenreId);
|
|
}
|
|
|
|
[Fact]
|
|
public void SetGenres_Empty_LeavesNoPrimary()
|
|
{
|
|
var show = NewShow();
|
|
show.SetGenres([Guid.NewGuid()]);
|
|
|
|
show.SetGenres([]);
|
|
|
|
Assert.Empty(show.Genres);
|
|
Assert.Null(show.PrimaryGenreId);
|
|
}
|
|
}
|
|
|
|
public class GenreTests
|
|
{
|
|
[Theory]
|
|
[InlineData(" Sci-Fi ", "sci-fi")]
|
|
[InlineData("Action & Adventure", "action & adventure")]
|
|
[InlineData("БОЕВИК", "боевик")]
|
|
[InlineData(" ", "")]
|
|
[InlineData(null, "")]
|
|
public void Normalize_CollapsesCaseAndSpacing(string? input, string expected) =>
|
|
Assert.Equal(expected, GenreAlias.Normalize(input));
|
|
|
|
[Fact]
|
|
public void AddAlias_IgnoresDuplicatesRegardlessOfSpelling()
|
|
{
|
|
var genre = Genre.Create("Боевик", "action");
|
|
|
|
genre.AddAlias("Action");
|
|
genre.AddAlias(" action ");
|
|
genre.AddAlias("боевик");
|
|
|
|
Assert.Equal(2, genre.Aliases.Count);
|
|
}
|
|
|
|
[Fact]
|
|
public void ReplaceAliases_DropsOldOnes()
|
|
{
|
|
var genre = Genre.Create("Боевик", "action");
|
|
genre.AddAlias("tmdb:28");
|
|
|
|
genre.ReplaceAliases(["tmdb:10759"]);
|
|
|
|
Assert.Single(genre.Aliases);
|
|
Assert.Equal("tmdb:10759", genre.Aliases[0].Value);
|
|
}
|
|
|
|
[Fact]
|
|
public void ProviderKey_BuildsNormalizedPrefixedAlias() =>
|
|
Assert.Equal("tmdb:28", GenreAlias.ProviderKey("TMDB", "28"));
|
|
}
|