60 lines
2.2 KiB
C#
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);
|
|
}
|
|
}
|