The WIP GET /api/filler-presets, /api/watermarks, and /api/graphics-elements endpoints omitted the Name= route attribute used by the other API GET actions (e.g. FFmpegProfileController). Add Name = "GetFillerPresets" / "GetWatermarks" / "GetGraphicsElements" for consistency. Also add handler tests (FillerPresetHandlerTests, WatermarkHandlerTests, GraphicsElementHandlerTests) covering the GetAll*ForApi handlers using the InMemoryTvContext harness: multi-row projection to (Id, Name) DTOs, the empty-DB case, and the graphics-element ordering rule (named elements sort before elements whose projected Name equals FileName).
78 lines
2.5 KiB
C#
78 lines
2.5 KiB
C#
using ErsatzTV.Application.Graphics;
|
|
using ErsatzTV.Core.Api.Graphics;
|
|
using ErsatzTV.Core.Domain;
|
|
using ErsatzTV.Infrastructure.Data;
|
|
using ErsatzTV.Tests.Support;
|
|
using NUnit.Framework;
|
|
using Shouldly;
|
|
|
|
namespace ErsatzTV.Tests.Application.Graphics;
|
|
|
|
[TestFixture]
|
|
public class GraphicsElementHandlerTests
|
|
{
|
|
private InMemoryTvContext _db = null!;
|
|
|
|
[SetUp]
|
|
public async Task SetUp() => _db = await InMemoryTvContext.CreateAsync();
|
|
|
|
[TearDown]
|
|
public async Task TearDown() => await _db.DisposeAsync();
|
|
|
|
[Test]
|
|
public async Task GetAllGraphicsElementsForApi_Should_Return_All_Elements()
|
|
{
|
|
await SeedElement(1, "watermark.png", GraphicsElementKind.Image, "Custom Watermark");
|
|
await SeedElement(2, "clock.png", GraphicsElementKind.Image, string.Empty);
|
|
|
|
var handler = new GetAllGraphicsElementsForApiHandler(_db.Factory);
|
|
|
|
List<GraphicsElementResponseModel> result =
|
|
await handler.Handle(new GetAllGraphicsElementsForApi(), CancellationToken.None);
|
|
|
|
result.Count.ShouldBe(2);
|
|
result.Select(e => e.Id).ShouldBe([1, 2]);
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetAllGraphicsElementsForApi_Should_Order_Named_Elements_Before_Unnamed()
|
|
{
|
|
// unnamed element's projected Name equals its FileName -> should sort after named elements
|
|
await SeedElement(1, "aaa.png", GraphicsElementKind.Image, string.Empty);
|
|
await SeedElement(2, "zzz.png", GraphicsElementKind.Image, "A Custom Name");
|
|
|
|
var handler = new GetAllGraphicsElementsForApiHandler(_db.Factory);
|
|
|
|
List<GraphicsElementResponseModel> result =
|
|
await handler.Handle(new GetAllGraphicsElementsForApi(), CancellationToken.None);
|
|
|
|
result.Count.ShouldBe(2);
|
|
result[0].Id.ShouldBe(2);
|
|
result[1].Id.ShouldBe(1);
|
|
}
|
|
|
|
[Test]
|
|
public async Task GetAllGraphicsElementsForApi_Should_Return_Empty_List_When_None_Exist()
|
|
{
|
|
var handler = new GetAllGraphicsElementsForApiHandler(_db.Factory);
|
|
|
|
List<GraphicsElementResponseModel> result =
|
|
await handler.Handle(new GetAllGraphicsElementsForApi(), CancellationToken.None);
|
|
|
|
result.ShouldBeEmpty();
|
|
}
|
|
|
|
private async Task SeedElement(int id, string path, GraphicsElementKind kind, string name)
|
|
{
|
|
await using TvContext context = _db.CreateContext();
|
|
context.GraphicsElements.Add(new GraphicsElement
|
|
{
|
|
Id = id,
|
|
Path = path,
|
|
Name = name,
|
|
Kind = kind
|
|
});
|
|
await context.SaveChangesAsync();
|
|
}
|
|
}
|