Files
LehrerApp/LehrerApp.TemplateDesigner.Tests/ProjectLifecycleTests.cs
T
admin 527c186090
CI / build-and-test (push) Canceled after 0s
Add constant rich text placeholders
2026-08-30 23:23:48 +02:00

97 lines
3.8 KiB
C#

using LehrerApp.TemplateDesigner;
using Xunit;
namespace LehrerApp.TemplateDesigner.Tests;
public sealed class ProjectLifecycleTests
{
[Fact]
public void Reset_ErzeugtEinVollstaendigLeeresUnabhaengigesProjekt()
{
var viewModel = new DesignerViewModel();
viewModel.ImportAsset("logo.png", OnePixelPng);
viewModel.Placeholders.Add(new("Test", LehrerApp.Templating.PlaceholderType.Text, false, "Wert"));
viewModel.NewElementType = "IMG";
viewModel.NewContent = "logo.png";
viewModel.Reset();
Assert.Equal("neue-vorlage", viewModel.TemplateId);
Assert.Equal("PAGE 210 297 mm\n", viewModel.LayoutSource);
Assert.Empty(viewModel.Placeholders);
Assert.Empty(viewModel.Assets);
Assert.Empty(viewModel.AssetItems);
Assert.Equal("de-DE", viewModel.MetadataItems.Single(x => x.Name == "language").Value);
Assert.Equal("letter", viewModel.MetadataItems.Single(x => x.Name == "report-type").Value);
Assert.Null(viewModel.SelectedAsset);
Assert.Null(viewModel.PreviewImage);
Assert.Equal("TEXT", viewModel.NewElementType);
Assert.Equal("$Brieftext", viewModel.NewContent);
Assert.False(viewModel.CanExport);
}
[Fact]
public void FreieMetadaten_WerdenInDasManifestUebernommen()
{
var viewModel = new DesignerViewModel();
viewModel.MetadataItems.Add(new("school-year", "2026/27"));
var manifest = viewModel.BuildManifest();
Assert.Equal("de-DE", manifest.Metadata["language"]);
Assert.Equal("2026/27", manifest.Metadata["school-year"]);
}
[Fact]
public void PlatzhalterAnlegen_WaehltIhnAusUndUebernimmtBearbeiteteDefinition()
{
var viewModel = new DesignerViewModel();
viewModel.Placeholders.Clear();
var placeholder = viewModel.AddPlaceholder();
placeholder.Name = "Sprache";
placeholder.Type = LehrerApp.Templating.PlaceholderType.Text;
placeholder.Required = true;
placeholder.Sample = "Deutsch";
placeholder.IsConstant = true;
placeholder.Bold = true;
placeholder.Italic = true;
placeholder.Underline = true;
Assert.Same(placeholder, viewModel.SelectedPlaceholder);
Assert.True(viewModel.HasSelectedPlaceholder);
Assert.False(viewModel.HasNoSelectedPlaceholder);
var definition = Assert.Single(viewModel.BuildManifest().Placeholders);
Assert.Equal("Sprache", definition.Name);
Assert.Equal(LehrerApp.Templating.PlaceholderType.Text, definition.Type);
Assert.True(definition.Required);
Assert.True(definition.IsConstant);
Assert.Equal("Deutsch", definition.ConstantValue);
Assert.True(definition.Bold);
Assert.True(definition.Italic);
Assert.True(definition.Underline);
viewModel.RemoveSelectedPlaceholder();
Assert.Empty(viewModel.Placeholders);
Assert.Null(viewModel.SelectedPlaceholder);
Assert.False(viewModel.HasSelectedPlaceholder);
Assert.True(viewModel.HasNoSelectedPlaceholder);
}
[Fact]
public void DoppeltePlatzhalternamen_WerdenVerstaendlichAbgelehnt()
{
var viewModel = new DesignerViewModel();
viewModel.Placeholders.Clear();
viewModel.Placeholders.Add(new("Name", LehrerApp.Templating.PlaceholderType.Text, false, "A"));
viewModel.Placeholders.Add(new("Name", LehrerApp.Templating.PlaceholderType.Text, false, "B"));
var exception = Assert.Throws<InvalidDataException>(() => viewModel.BuildManifest());
Assert.Contains("mehrfach", exception.Message);
}
private static readonly byte[] OnePixelPng = Convert.FromBase64String(
"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=");
}