using LehrerApp.Sync.Models; using Xunit; namespace LehrerApp.Api.Tests; public sealed class PlainEventStoreTests { [Theory] [InlineData("Grade")] [InlineData("ExamResult")] public void Push_PersonenbezogenerEntityTyp_WirdAbgelehnt(string entityType) { using var temp = new TempEventStore(); var evt = new PlainSyncEvent { EntityType = entityType, EntityId = "1", Operation = "Save" }; var result = temp.Plain.Push("user", [evt]); Assert.Contains(evt.EventId, result.RejectedEventIds); } [Theory] [InlineData("WorkTask")] [InlineData("Lesson")] public void Push_UnkritischerEntityTyp_WirdAngenommen(string entityType) { using var temp = new TempEventStore(); var evt = new PlainSyncEvent { EntityType = entityType, EntityId = "1", Operation = "Save" }; var result = temp.Plain.Push("user", [evt]); Assert.DoesNotContain(evt.EventId, result.RejectedEventIds); } private sealed class TempEventStore : IDisposable { private readonly string _directory = Path.Combine( Path.GetTempPath(), $"lehrerapp-api-tests-{Guid.NewGuid():N}"); private readonly EventStore _events; public PlainEventStore Plain { get; } public TempEventStore() { Directory.CreateDirectory(_directory); _events = new EventStore(_directory); Plain = new PlainEventStore(_events); } public void Dispose() { _events.Dispose(); if (Directory.Exists(_directory)) Directory.Delete(_directory, recursive: true); } } }