Files
Ludarium release export df869819ce
Public source validation / source (push) Successful in 2m16s
Publish Ludarium source
2026-09-03 02:08:58 +02:00

45 lines
2.1 KiB
C#

using Ludarium.Infrastructure;
using Ludarium.Domain;
namespace Ludarium.IntegrationTests;
public sealed class GameArtworkStoreTests
{
[Fact]
public async Task StoresValidatedArtworkAndRejectsUnknownPayloads()
{
var root = Path.Combine(Path.GetTempPath(), "ludarium-artwork-tests", Guid.NewGuid().ToString("N"));
try
{
var store = new GameArtworkStore(root);
var gameId = Guid.NewGuid();
var png = new byte[] { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 1, 2, 3, 4 };
await using var content = new MemoryStream(png);
Assert.Equal("image/png", await store.SaveAsync(gameId, content, png.Length, CancellationToken.None, "Libretro"));
Assert.Equal("Libretro", store.GetSource(gameId));
var described = Assert.IsType<GameArtwork>(await store.DescribeAsync(gameId, "Libretro", "exact-test", Confidence.High, CancellationToken.None));
var jpeg = new byte[] { 0xff, 0xd8, 0xff, 1, 2, 3, 4 };
await using (var replacement = new MemoryStream(jpeg))
await store.SaveAsync(gameId, replacement, jpeg.Length, CancellationToken.None, "Uploaded");
var preserved = Assert.IsType<StoredGameArtwork>(await store.OpenAsync(gameId, CancellationToken.None, described.Id, false));
Assert.Equal("image/png", preserved.ContentType);
await preserved.Content.DisposeAsync();
var saved = await store.OpenAsync(gameId, CancellationToken.None);
Assert.NotNull(saved);
Assert.Equal("image/jpeg", saved.ContentType);
Assert.Equal(jpeg.Length, saved.Length);
await saved.Content.DisposeAsync();
Assert.True(store.Delete(gameId));
Assert.False(store.Delete(gameId));
await using var invalid = new MemoryStream("not-an-image"u8.ToArray());
await Assert.ThrowsAsync<ArtworkValidationException>(() =>
store.SaveAsync(Guid.NewGuid(), invalid, invalid.Length, CancellationToken.None));
}
finally
{
if (Directory.Exists(root)) Directory.Delete(root, true);
}
}
}