using System.IO.Compression; using LehrerApp.Templating; using Xunit; namespace LehrerApp.Templating.Tests; public sealed class TemplateMetadataTests : IDisposable { private readonly string _directory = Path.Combine(Path.GetTempPath(), $"template-metadata-{Guid.NewGuid():N}"); public TemplateMetadataTests() => Directory.CreateDirectory(_directory); [Fact] public void Paket_SchreibtLesbareMetadatendateiUndLaedtWerteInsManifest() { var path = Path.Combine(_directory, "metadata.lavorlage"); var manifest = new TemplateManifest { Id = "metadata", Name = "Metadaten", Metadata = new(StringComparer.OrdinalIgnoreCase) { ["language"] = "de-DE", ["report-type"] = "parent-letter", ["filter"] = "class=7a", }, }; TemplatePackage.Create(path, manifest, "PAGE 210 297 mm", new Dictionary()); using (var archive = ZipFile.OpenRead(path)) using (var reader = new StreamReader(archive.GetEntry("metadata.txt")!.Open())) { var text = reader.ReadToEnd(); Assert.Contains("language=de-DE", text); Assert.Contains("report-type=parent-letter", text); } var loaded = new TemplateLoader().LoadFromPackage(path); Assert.Equal("de-DE", loaded.Manifest.Metadata["language"]); Assert.Equal("parent-letter", loaded.Manifest.Metadata["REPORT-TYPE"]); Assert.Equal("class=7a", loaded.Manifest.Metadata["filter"]); Assert.DoesNotContain("metadata.txt", loaded.Assets.Keys); } [Fact] public void Textformat_IgnoriertKommentareUndLehntDoppelteSchluesselAb() { var parsed = TemplateMetadataText.Parse("# Kommentar\nlanguage = de-DE\nreport-type=letter\n"); Assert.Equal("de-DE", parsed["language"]); var exception = Assert.Throws(() => TemplateMetadataText.Parse("language=de-DE\nLANGUAGE=en-US")); Assert.Contains("mehrfach", exception.Message); } public void Dispose() { if (Directory.Exists(_directory)) Directory.Delete(_directory, true); } }