120 lines
4.9 KiB
C#
120 lines
4.9 KiB
C#
using LehrerApp.TemplateDesigner;
|
|
using LehrerApp.Templating;
|
|
using Xunit;
|
|
|
|
namespace LehrerApp.TemplateDesigner.Tests;
|
|
|
|
public sealed class ExamCoverDesignerTests
|
|
{
|
|
[Fact]
|
|
public void Schuelerbericht_EinrichtenUndSonderinhalte_RendernMitBeispieldaten()
|
|
{
|
|
var vm = new DesignerViewModel();
|
|
vm.Reset();
|
|
vm.SetUpStudentReport();
|
|
vm.SetUpStudentReport();
|
|
vm.LayoutSource = StudentReportTemplate.Layout;
|
|
Assert.Equal(TemplateReportTypes.StudentReport, vm.BuildLoaded().Manifest.Metadata[TemplateMetadataKeys.ReportType]);
|
|
Assert.Equal(StudentReportTemplate.Create().Manifest.Placeholders.Count, vm.Placeholders.Count);
|
|
using var pdf = UglyToad.PdfPig.PdfDocument.Open(vm.RenderCurrentPdf());
|
|
var text = string.Concat(pdf.GetPages().Select(p => p.Text)).Replace(" ", "");
|
|
Assert.Contains("GewichteteMitarbeit", text);
|
|
Assert.Contains("Hausaufgaben", text);
|
|
Assert.Contains("VorläufigeZeugnisnote", text);
|
|
}
|
|
|
|
[Fact]
|
|
public void SetUpExamCover_SetztVorlagentypUndErgaenztFehlendePlatzhalter()
|
|
{
|
|
var viewModel = new DesignerViewModel();
|
|
viewModel.Reset();
|
|
viewModel.Placeholders.Add(new("Exam.Title", PlaceholderType.Text, true, "Mein Titel"));
|
|
|
|
viewModel.SetUpExamCover();
|
|
viewModel.SetUpExamCover();
|
|
|
|
Assert.True(viewModel.IsExamCover);
|
|
Assert.Single(viewModel.MetadataItems, x => x.Name == TemplateMetadataKeys.ReportType);
|
|
Assert.Equal(ExamCoverPlaceholders.All.Count, viewModel.Placeholders.Count);
|
|
// Vorhandene Platzhalter bleiben samt Beispielwert erhalten.
|
|
Assert.Equal("Mein Titel", viewModel.Placeholders.Single(x => x.Name == "Exam.Title").Sample);
|
|
Assert.Equal("G-Kurs", viewModel.Placeholders.Single(x => x.Name == "Exam.Course").Sample);
|
|
Assert.Equal(PlaceholderType.Date, viewModel.Placeholders.Single(x => x.Name == "Exam.Date").Type);
|
|
Assert.Equal(TemplateReportTypes.ExamCover,
|
|
viewModel.BuildLoaded().Manifest.Metadata[TemplateMetadataKeys.ReportType]);
|
|
}
|
|
|
|
[Fact]
|
|
public void SetUpExamCover_AbweichenderTyp_WirdGemeldetStattUeberschrieben()
|
|
{
|
|
var viewModel = new DesignerViewModel();
|
|
viewModel.Reset();
|
|
viewModel.Placeholders.Add(new("Exam.Date", PlaceholderType.Text, false, "18.12."));
|
|
|
|
viewModel.SetUpExamCover();
|
|
|
|
Assert.Equal(PlaceholderType.Text, viewModel.Placeholders.Single(x => x.Name == "Exam.Date").Type);
|
|
Assert.Contains("Exam.Date", viewModel.Status);
|
|
}
|
|
|
|
[Fact]
|
|
public void Punktetabelle_WirdAlsFlowDrawBoxMitFitContentInDenContentFlowVorbereitet()
|
|
{
|
|
var viewModel = new DesignerViewModel();
|
|
viewModel.Reset();
|
|
viewModel.SelectedSpecialContent = viewModel.SpecialContents.Single(x =>
|
|
x.PlaceholderName == ExamPointsTableDrawing.PlaceholderName);
|
|
|
|
viewModel.PrepareSelectedSpecialContent();
|
|
viewModel.AddElement();
|
|
|
|
Assert.Contains("FLOWDRAWBOX $Exam.PointsTable w=165 h=150 fit=content", viewModel.LayoutSource);
|
|
var layout = viewModel.BuildLoaded().Layout;
|
|
Assert.IsType<FlowDrawBoxElement>(layout.ContentFlows.Single().Elements.Single());
|
|
}
|
|
|
|
[Fact]
|
|
public void Vorschau_ZeigtDieEchtePunktetabelleUndSprechendeBeispielwerte()
|
|
{
|
|
var viewModel = new DesignerViewModel();
|
|
viewModel.Reset();
|
|
viewModel.SetUpExamCover();
|
|
viewModel.LayoutSource = """
|
|
PAGE 210 297 mm
|
|
#pragma format-version 3
|
|
#pragma page-template first
|
|
TEXT 20 20 "Fach: $Subject.Name $Exam.Course $Teacher.Abbreviation" size=12
|
|
#pragma flow-slot body x=20 y=40 w=170 h=230
|
|
#pragma end-page-template
|
|
#pragma content-flow body
|
|
FLOWDRAWBOX $Exam.PointsTable w=100 h=150 fit=content
|
|
TEXT "Gesamtpunkte: $Result.Points von $Exam.MaxPoints Punkte" size=11 gap=8
|
|
#pragma end-content-flow
|
|
""";
|
|
|
|
using var document = UglyToad.PdfPig.PdfDocument.Open(viewModel.RenderCurrentPdf());
|
|
var text = document.GetPage(1).Text.Replace(" ", "");
|
|
|
|
Assert.Contains("Fach:ChemieG-KursHED", text);
|
|
Assert.Contains("Gesamtpunkte:52,5von62Punkte", text);
|
|
Assert.Contains("+3", text);
|
|
// 100 mm Boxbreite: drei Aufgaben je Block, also drei Blöcke für neun Spalten.
|
|
Assert.Equal(3, System.Text.RegularExpressions.Regex.Matches(text, "Max.Punktzahl").Count);
|
|
}
|
|
|
|
[Fact]
|
|
public void Laden_EinerDeckblattVorlage_VerwendetSprechendeBeispielwerte()
|
|
{
|
|
var source = new DesignerViewModel();
|
|
source.Reset();
|
|
source.SetUpExamCover();
|
|
var loaded = source.BuildLoaded();
|
|
|
|
var viewModel = new DesignerViewModel();
|
|
viewModel.Load(loaded, source.LayoutSource);
|
|
|
|
Assert.True(viewModel.IsExamCover);
|
|
Assert.Equal("Atombau und PSE", viewModel.Placeholders.Single(x => x.Name == "Exam.Title").Sample);
|
|
}
|
|
}
|