75 lines
2.5 KiB
C#
75 lines
2.5 KiB
C#
using ErsatzTV.Application.Channels;
|
|
using ErsatzTV.Core;
|
|
using ErsatzTV.Core.Errors;
|
|
using ErsatzTV.Infrastructure.Data;
|
|
using ErsatzTV.Tests.Support;
|
|
using LanguageExt;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using NSubstitute;
|
|
using NUnit.Framework;
|
|
using Shouldly;
|
|
|
|
namespace ErsatzTV.Tests.Application.Channels;
|
|
|
|
[TestFixture]
|
|
public class BulkMoveChannelsToGroupHandlerTests : ChannelHandlerTestBase
|
|
{
|
|
private BulkMoveChannelsToGroupHandler MakeHandler() => new(Db.Factory, Worker, SearchTargets);
|
|
|
|
[Test]
|
|
public async Task Should_Move_All_Channels_To_Group()
|
|
{
|
|
await SeedChannel(1, "5");
|
|
await SeedChannel(2, "6");
|
|
|
|
Either<BaseError, Unit> result =
|
|
await MakeHandler().Handle(new BulkMoveChannelsToGroup([1, 2], "Movies"), CancellationToken.None);
|
|
|
|
result.IsRight.ShouldBeTrue();
|
|
|
|
await using TvContext context = Db.CreateContext();
|
|
List<string> groups = await context.Channels
|
|
.OrderBy(c => c.Id)
|
|
.Select(c => c.Group)
|
|
.ToListAsync();
|
|
groups.ShouldBe(["Movies", "Movies"]);
|
|
SearchTargets.Received(1).SearchTargetsChanged();
|
|
}
|
|
|
|
[Test]
|
|
public async Task Should_Return_NotFound_And_Not_Move_When_Any_Channel_Is_Missing()
|
|
{
|
|
await SeedChannel(1, "5", group: "Original");
|
|
|
|
Either<BaseError, Unit> result =
|
|
await MakeHandler().Handle(new BulkMoveChannelsToGroup([1, 99], "Movies"), CancellationToken.None);
|
|
|
|
BaseError error = LeftOf(result);
|
|
error.ShouldBeOfType<NotFoundError>();
|
|
|
|
await using TvContext context = Db.CreateContext();
|
|
string group = await context.Channels.Where(c => c.Id == 1).Select(c => c.Group).SingleAsync();
|
|
group.ShouldBe("Original");
|
|
}
|
|
|
|
[Test]
|
|
public async Task Should_Reject_Empty_Group()
|
|
{
|
|
await SeedChannel(1, "5", group: "Original");
|
|
|
|
Either<BaseError, Unit> result =
|
|
await MakeHandler().Handle(new BulkMoveChannelsToGroup([1], ""), CancellationToken.None);
|
|
|
|
BaseError error = LeftOf(result);
|
|
error.ShouldNotBeOfType<NotFoundError>();
|
|
error.Value.ShouldContain("group");
|
|
|
|
await using TvContext context = Db.CreateContext();
|
|
string group = await context.Channels.Where(c => c.Id == 1).Select(c => c.Group).SingleAsync();
|
|
group.ShouldBe("Original");
|
|
}
|
|
|
|
private static BaseError LeftOf<TR>(Either<BaseError, TR> either) =>
|
|
either.Match(Left: e => e, Right: _ => throw new AssertionException("Expected a Left result"));
|
|
}
|