QuestPDF-Vorlagensystem und Designer hinzufügen
CI / build-and-test (push) Canceled after 0s

This commit is contained in:
2026-08-30 15:37:22 +02:00
parent a088823b30
commit 2f2761caf8
40 changed files with 2177 additions and 738 deletions
@@ -0,0 +1,76 @@
using LehrerApp.TemplateDesigner;
using Xunit;
namespace LehrerApp.TemplateDesigner.Tests;
public sealed class AssetManagementTests
{
private static readonly byte[] OnePixelPng = Convert.FromBase64String(
"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=");
[Fact]
public void Import_ZeigtMetadatenUndBenenntKollisionenUm()
{
var viewModel = new DesignerViewModel();
var first = viewModel.ImportAsset("mein logo.png", OnePixelPng);
var second = viewModel.ImportAsset("mein logo.png", OnePixelPng);
Assert.Equal("mein-logo.png", first.Name);
Assert.Equal("mein-logo-2.png", second.Name);
Assert.Equal("1 × 1 px", first.Dimensions);
Assert.Equal(2, viewModel.AssetItems.Count);
}
[Fact]
public void AlsImageEinfuegen_VerwendetKoordinatenUndAktualisiertReferenzzaehler()
{
var viewModel = new DesignerViewModel
{ NewX = "15", NewY = "18", NewWidth = "32", NewHeight = "14" };
viewModel.ImportAsset("logo.png", OnePixelPng);
viewModel.InsertSelectedAssetAsImage();
Assert.Contains("IMG logo.png 15 18 32 14 scale=100%", viewModel.LayoutSource);
Assert.Equal(1, viewModel.SelectedAsset!.UsageCount);
}
[Fact]
public void AlsImageEinfuegen_SchreibtProzentualeSkalierung()
{
var viewModel = new DesignerViewModel { NewImageScale = "37,5" };
viewModel.ImportAsset("logo.png", OnePixelPng);
viewModel.InsertSelectedAssetAsImage();
Assert.Contains("scale=37.5%", viewModel.LayoutSource);
}
[Fact]
public void Entfernen_LoeschtAssetUndAlleLayoutReferenzen()
{
var viewModel = new DesignerViewModel();
viewModel.ImportAsset("logo.png", OnePixelPng);
viewModel.InsertSelectedAssetAsImage();
viewModel.RemoveSelectedAsset();
Assert.Empty(viewModel.AssetItems);
Assert.Empty(viewModel.Assets);
Assert.DoesNotContain("IMG logo.png", viewModel.LayoutSource);
}
[Fact]
public void Ersetzen_BehältDateinamenUndLayoutReferenzen()
{
var viewModel = new DesignerViewModel();
viewModel.ImportAsset("logo.png", OnePixelPng);
viewModel.InsertSelectedAssetAsImage();
viewModel.ReplaceSelectedAsset(OnePixelPng);
Assert.Equal("logo.png", Assert.Single(viewModel.AssetItems).Name);
Assert.Contains("IMG logo.png", viewModel.LayoutSource);
Assert.Equal(1, viewModel.SelectedAsset!.UsageCount);
}
}