Files
LehrerApp/LehrerApp.Templating.Tests/TemplateMetadataTests.cs
T
admin 6468596bf3
CI / build-and-test (push) Canceled after 0s
Add designer file menu and package metadata
2026-08-30 20:49:13 +02:00

60 lines
2.2 KiB
C#

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<string, byte[]>());
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<InvalidDataException>(() =>
TemplateMetadataText.Parse("language=de-DE\nLANGUAGE=en-US"));
Assert.Contains("mehrfach", exception.Message);
}
public void Dispose()
{
if (Directory.Exists(_directory)) Directory.Delete(_directory, true);
}
}