using Xunit; namespace LehrerApp.Data.Tests; public sealed class LiteAttachmentStorageTests { private static LiteDbContext NewInMemoryContext() => new(new MemoryStream()); [Fact] public void Upload_OpenRead_RoundtripLiefertDenGespeichertenInhalt() { using var db = NewInMemoryContext(); var storage = new LiteAttachmentStorage(db); var bytes = "Elternbrief-Inhalt äöü"u8.ToArray(); string id; using (var ms = new MemoryStream(bytes)) id = storage.Upload("Brief.pdf", ms); using var result = storage.OpenRead(id); Assert.NotNull(result); using var reader = new MemoryStream(); result!.CopyTo(reader); Assert.Equal(bytes, reader.ToArray()); } [Fact] public void Upload_GroessereDateiAlsDasLimit_WirftException() { using var db = NewInMemoryContext(); var storage = new LiteAttachmentStorage(db); using var ms = new MemoryStream(new byte[LehrerApp.Core.Interfaces.IAttachmentStorage.MaxSizeBytes + 1]); Assert.Throws(() => storage.Upload("zu-gross.bin", ms)); } [Fact] public void OpenRead_UnbekannteId_GibtNullZurueck() { using var db = NewInMemoryContext(); var storage = new LiteAttachmentStorage(db); Assert.Null(storage.OpenRead("fehlt")); } [Fact] public void Delete_EntferntDenAnhangEndgueltig() { using var db = NewInMemoryContext(); var storage = new LiteAttachmentStorage(db); string id; using (var ms = new MemoryStream([1, 2, 3])) id = storage.Upload("a.bin", ms); storage.Delete(id); Assert.Null(storage.OpenRead(id)); } }