Files
TeleWave/backend/tests/TeleWave.Application.Tests/Broadcast/BumperVariantHandlersTests.cs
T
Leonid Pershin ba3721eb92
ci / build-backend (push) Successful in 1m39s
ci / build-frontend (push) Failing after 26s
ci / tests (push) Skipped
ci / sonar (push) Skipped
Implement BumperEndpoints and remove deprecated bumper-related functionality
Added new BumperEndpoints to the API for managing bumper templates and variants, enhancing the channel management capabilities. Removed outdated bumper-related commands and handlers from the application, streamlining the codebase and improving maintainability. Updated ChannelEndpoints to reflect these changes and ensure proper routing for the new endpoints.
2026-07-27 22:01:56 +03:00

171 lines
6.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Microsoft.EntityFrameworkCore;
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 BumperTemplate NewTemplate() => BumperTemplate.Create("Блок", "Текст 1");
private static BumperLineDto Line(string text) =>
new(BumperLineStyle.Title, BumperLineColor.Text, text);
[Fact]
public async Task AddVariant_StartsFromDefaultPreset()
{
var fixture = new TestDb();
var template = NewTemplate();
await using (var seed = fixture.New())
{
seed.BumperTemplates.Add(template);
await seed.SaveChangesAsync(CancellationToken.None);
}
await using var db = fixture.New();
var result = await new AddBumperVariantCommandHandler(db).Handle(
new AddBumperVariantCommand(template.Id, "Текст 2"),
CancellationToken.None
);
Assert.True(result.IsSuccess);
await db.SaveChangesAsync(CancellationToken.None);
await using var verify = fixture.New();
var stored = await verify
.BumperTemplates.Include(t => t.Variants)
.FirstAsync(t => t.Id == template.Id);
Assert.Equal(2, stored.Variants.Count);
var added = stored.Variants.First(v => v.Name == "Текст 2");
// Пустой подблок в редакторе выглядит поломанным — новый начинается с «Сейчас/Далее».
Assert.Equal(4, added.Lines.Count);
Assert.Contains(added.Lines, l => l.Text == "{next.title}");
}
[Fact]
public async Task AddVariant_UnknownTemplate_ReturnsNotFound()
{
var fixture = new TestDb();
await using var db = fixture.New();
var result = await new AddBumperVariantCommandHandler(db).Handle(
new AddBumperVariantCommand(Guid.NewGuid(), "x"),
CancellationToken.None
);
Assert.Equal(BumperErrors.TemplateNotFound, result.Error);
}
[Fact]
public async Task UpdateVariant_ReplacesLinesAndFields()
{
var fixture = new TestDb();
var template = NewTemplate();
var variant = template.Variants[0];
await using (var seed = fixture.New())
{
seed.BumperTemplates.Add(template);
await seed.SaveChangesAsync(CancellationToken.None);
}
await using var db = fixture.New();
var result = await new UpdateBumperVariantCommandHandler(db).Handle(
new UpdateBumperVariantCommand(
template.Id,
variant.Id,
new BumperVariantInput(
"Custom",
BumperTrigger.Both,
BumperBackground.Template,
7,
[
new BumperLineDto(
BumperLineStyle.Label,
BumperLineColor.Accent,
"ДАЛЕЕ В {next.time}"
),
Line("{next.title}"),
]
)
),
CancellationToken.None
);
Assert.True(result.IsSuccess);
await db.SaveChangesAsync(CancellationToken.None);
await using var verify = fixture.New();
var stored = await verify
.BumperTemplates.Include(t => t.Variants)
.FirstAsync(t => t.Id == template.Id);
var v = stored.Variants[0];
Assert.Equal("Custom", v.Name);
Assert.Equal(BumperTrigger.Both, v.Trigger);
Assert.Equal(BumperBackground.Template, v.Background);
Assert.Equal(7, v.Weight);
Assert.Equal(2, v.Lines.Count);
Assert.Equal("ДАЛЕЕ В {next.time}", v.Lines[0].Text);
}
[Fact]
public async Task UpdateVariant_UnknownPlaceholder_IsRejected()
{
var fixture = new TestDb();
var template = NewTemplate();
var variant = template.Variants[0];
await using (var seed = fixture.New())
{
seed.BumperTemplates.Add(template);
await seed.SaveChangesAsync(CancellationToken.None);
}
await using var db = fixture.New();
var result = await new UpdateBumperVariantCommandHandler(db).Handle(
new UpdateBumperVariantCommand(
template.Id,
variant.Id,
new BumperVariantInput(
"Custom",
BumperTrigger.Both,
BumperBackground.Template,
1,
[Line("Далее {next.tittle}")]
)
),
CancellationToken.None
);
// В эфире опечатка превратилась бы в пустоту, и заметить это было бы уже некому.
Assert.Equal("Bumpers.UnknownPlaceholders", result.Error.Code);
}
[Fact]
public async Task RemoveVariant_CannotRemoveLast_ButRemovesExtra()
{
var fixture = new TestDb();
var template = NewTemplate();
var only = template.Variants[0];
var extra = template.AddVariant("Текст 2");
await using (var seed = fixture.New())
{
seed.BumperTemplates.Add(template);
await seed.SaveChangesAsync(CancellationToken.None);
}
await using var db = fixture.New();
var okRemove = await new RemoveBumperVariantCommandHandler(db).Handle(
new RemoveBumperVariantCommand(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 RemoveBumperVariantCommandHandler(db2).Handle(
new RemoveBumperVariantCommand(template.Id, only.Id),
CancellationToken.None
);
Assert.Equal(BumperErrors.CannotRemoveLastVariant, lastGuard.Error);
}
}