Add project reference for TeleWave.Infrastructure: include TeleWave.Infrastructure.csproj in TeleWave.Application.Tests project to support additional testing capabilities.

This commit is contained in:
Leonid Pershin
2026-07-25 20:12:04 +03:00
parent ed240ef73c
commit 4611f90d11
18 changed files with 2027 additions and 0 deletions
@@ -0,0 +1,139 @@
using Microsoft.EntityFrameworkCore;
using TeleWave.Application.Broadcast;
using TeleWave.Application.Broadcast.Bumpers;
using TeleWave.Application.Tests.Support;
using TeleWave.Domain.Broadcast;
using Xunit;
namespace TeleWave.Application.Tests.Broadcast;
public class BumperVariantHandlersTests
{
private static readonly DateTimeOffset T0 = new(2026, 1, 1, 0, 0, 0, TimeSpan.Zero);
[Fact]
public async Task AddVariant_AutoNames_WhenBlank()
{
var fixture = new TestDb();
var channel = Channel.Create("c", "c", T0);
var template = channel.BumperTemplates[0];
await using (var seed = fixture.New())
{
seed.Channels.Add(channel);
await seed.SaveChangesAsync(CancellationToken.None);
}
await using var db = fixture.New();
var result = await new AddBumperTextVariantCommandHandler(db).Handle(
new AddBumperTextVariantCommand(channel.Id, template.Id, " "),
CancellationToken.None
);
Assert.True(result.IsSuccess);
await db.SaveChangesAsync(CancellationToken.None);
await using var verify = fixture.New();
var stored = await verify
.Channels.Include(c => c.BumperTemplates)
.ThenInclude(t => t.Variants)
.FirstAsync(c => c.Id == channel.Id);
var variants = stored.BumperTemplates[0].Variants;
Assert.Equal(2, variants.Count);
Assert.Contains(variants, v => v.Name == "Текст 2");
}
[Fact]
public async Task AddVariant_UnknownTemplate_ReturnsNotFound()
{
var fixture = new TestDb();
var channel = Channel.Create("c", "c", T0);
await using (var seed = fixture.New())
{
seed.Channels.Add(channel);
await seed.SaveChangesAsync(CancellationToken.None);
}
await using var db = fixture.New();
var result = await new AddBumperTextVariantCommandHandler(db).Handle(
new AddBumperTextVariantCommand(channel.Id, Guid.NewGuid(), "x"),
CancellationToken.None
);
Assert.Equal(ChannelErrors.BumperTemplateNotFound, result.Error);
}
[Fact]
public async Task UpdateVariant_ChangesFields()
{
var fixture = new TestDb();
var channel = Channel.Create("c", "c", T0);
var template = channel.BumperTemplates[0];
var variant = template.Variants[0];
await using (var seed = fixture.New())
{
seed.Channels.Add(channel);
await seed.SaveChangesAsync(CancellationToken.None);
}
await using var db = fixture.New();
var result = await new UpdateBumperTextVariantCommandHandler(db).Handle(
new UpdateBumperTextVariantCommand(
channel.Id,
template.Id,
variant.Id,
"Custom",
BumperTextKind.Free,
"NOW",
"NEXT",
"line1",
"line2",
BumperTrigger.Both,
7
),
CancellationToken.None
);
Assert.True(result.IsSuccess);
await db.SaveChangesAsync(CancellationToken.None);
await using var verify = fixture.New();
var stored = await verify
.Channels.Include(c => c.BumperTemplates)
.ThenInclude(t => t.Variants)
.FirstAsync(c => c.Id == channel.Id);
var v = stored.BumperTemplates[0].Variants[0];
Assert.Equal("Custom", v.Name);
Assert.Equal(BumperTextKind.Free, v.Kind);
Assert.Equal(7, v.Weight);
Assert.Equal(BumperTrigger.Both, v.Trigger);
}
[Fact]
public async Task RemoveVariant_CannotRemoveLast_ButRemovesExtra()
{
var fixture = new TestDb();
var channel = Channel.Create("c", "c", T0);
var template = channel.BumperTemplates[0];
var only = template.Variants[0];
var extra = template.AddVariant("Text 2");
await using (var seed = fixture.New())
{
seed.Channels.Add(channel);
await seed.SaveChangesAsync(CancellationToken.None);
}
await using var db = fixture.New();
var handler = new RemoveBumperTextVariantCommandHandler(db);
var okRemove = await handler.Handle(
new RemoveBumperTextVariantCommand(channel.Id, template.Id, extra.Id),
CancellationToken.None
);
Assert.True(okRemove.IsSuccess);
await db.SaveChangesAsync(CancellationToken.None);
await using var db2 = fixture.New();
var lastGuard = await new RemoveBumperTextVariantCommandHandler(db2).Handle(
new RemoveBumperTextVariantCommand(channel.Id, template.Id, only.Id),
CancellationToken.None
);
Assert.Equal(ChannelErrors.CannotRemoveLastBumperTextVariant, lastGuard.Error);
}
}