45 lines
2.1 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|