58 lines
1.8 KiB
C#
58 lines
1.8 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;
|
|
using Testably.Abstractions.Testing;
|
|
|
|
namespace ErsatzTV.Tests.Application.Channels;
|
|
|
|
[TestFixture]
|
|
public class BulkDeleteChannelsHandlerTests : ChannelHandlerTestBase
|
|
{
|
|
private readonly MockFileSystem _fileSystem = new();
|
|
|
|
private BulkDeleteChannelsHandler MakeHandler() => new(Db.Factory, Worker, _fileSystem, SearchTargets);
|
|
|
|
[Test]
|
|
public async Task Should_Delete_All_Channels()
|
|
{
|
|
await SeedChannel(1, "5");
|
|
await SeedChannel(2, "6");
|
|
|
|
Either<BaseError, Unit> result =
|
|
await MakeHandler().Handle(new BulkDeleteChannels([1, 2]), CancellationToken.None);
|
|
|
|
result.IsRight.ShouldBeTrue();
|
|
|
|
await using TvContext context = Db.CreateContext();
|
|
int count = await context.Channels.CountAsync();
|
|
count.ShouldBe(0);
|
|
SearchTargets.Received(1).SearchTargetsChanged();
|
|
}
|
|
|
|
[Test]
|
|
public async Task Should_Return_NotFound_And_Not_Delete_When_Any_Channel_Is_Missing()
|
|
{
|
|
await SeedChannel(1, "5");
|
|
|
|
Either<BaseError, Unit> result =
|
|
await MakeHandler().Handle(new BulkDeleteChannels([1, 99]), CancellationToken.None);
|
|
|
|
BaseError error = LeftOf(result);
|
|
error.ShouldBeOfType<NotFoundError>();
|
|
|
|
await using TvContext context = Db.CreateContext();
|
|
bool exists = await context.Channels.AnyAsync(c => c.Id == 1);
|
|
exists.ShouldBeTrue();
|
|
}
|
|
|
|
private static BaseError LeftOf<TR>(Either<BaseError, TR> either) =>
|
|
either.Match(Left: e => e, Right: _ => throw new AssertionException("Expected a Left result"));
|
|
}
|