Files
TeleWave/backend/tests/TeleWave.Domain.Tests/Library/ShowGenreTests.cs
T

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"));
}