114 lines
4.7 KiB
C#
114 lines
4.7 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.Contains("#pragma page-template first", viewModel.LayoutSource);
|
|
Assert.Contains("#pragma page-template continuation", viewModel.LayoutSource);
|
|
Assert.Contains("#pragma content-flow body", 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);
|
|
}
|
|
|
|
[Fact]
|
|
public void AlteAbsoluteLayouts_WerdenBeimOeffnenVerlustfreiInSeitentypEingebettet()
|
|
{
|
|
const string source = "PAGE 210 297 mm\nTEXT 20 30 \"Altbestand\" size=12\n";
|
|
var layout = new LehrerApp.Templating.LayoutParser().Parse(source);
|
|
|
|
var migrated = DesignerViewModel.MigrateLegacyLayout(source, layout);
|
|
var parsed = new LehrerApp.Templating.LayoutParser().Parse(migrated);
|
|
|
|
Assert.True(parsed.UsesPageTemplates);
|
|
Assert.Equal("Altbestand", Assert.IsType<LehrerApp.Templating.TextElement>(
|
|
parsed.PageTemplates.Single(x => x.Name == "first").Elements.Single()).Content);
|
|
Assert.Empty(parsed.ContentFlows.Single().Elements);
|
|
}
|
|
|
|
private static readonly byte[] OnePixelPng = Convert.FromBase64String(
|
|
"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=");
|
|
}
|