Fix visibility of existing documentation links in cases
CI / build-and-test (push) Canceled after 0s

This commit is contained in:
admin committed 2026-10-28 14:46:34 +01:00
1 parent d61a97de1e
commit 3f7c055489
2 files changed
+43

No files matched your search

@@ -11,6 +11,46 @@ namespace LehrerApp.Desktop.Tests;
/// Roster-/WebUntis-Abhängigkeit, deshalb reine In-Memory-Fakes ohne Untis-Cache-Setup.
public sealed class StudentVorgaengeViewModelTests
{
[Fact]
public async Task BestehenderAkteneintrag_KannNachtraeglichVerknuepftUndWiederGeloestWerden()
{
var student = new Student { FirstName = "Anna", LastName = "Beispiel" };
var doc = new Documentation { StudentId = student.Id, Title = "Bericht" };
var documentation = new FakeDocumentation();
documentation.Add(doc);
var vorgaenge = new FakeVorgangRepository();
var vorgang = new Vorgang { Title = "Vorgang", StudentIds = [student.Id] };
vorgaenge.Add(vorgang);
var vm = BuildVm(vorgaenge, documentation, new FakeStudents([student]));
vm.Load(student.Id);
var item = Assert.Single(vm.Cases);
item.IsRevealed = true;
var available = Assert.Single(item.AvailableDocumentation);
var notifications = new List<string?>();
item.PropertyChanged += (_, e) => notifications.Add(e.PropertyName);
// Die View bindet schon vor dem Befuellen der Collections an diese Eigenschaften.
item.AvailableDocumentation.Clear();
Assert.Contains(nameof(VorgangItem.HasAvailableDocumentation), notifications);
Assert.False(item.HasAvailableDocumentation);
item.AvailableDocumentation.Add(available);
Assert.True(item.HasAvailableDocumentation);
await item.LinkCommand.ExecuteAsync(available);
var linked = Assert.Single(vm.Cases);
Assert.True(linked.IsRevealed);
Assert.True(linked.HasLinkedDocumentation);
Assert.False(linked.HasAvailableDocumentation);
Assert.Equal(doc.Id, Assert.Single(linked.LinkedDocumentation).Model.Id);
Assert.Contains(doc.Id, vorgaenge.GetById(vorgang.Id)!.DocumentationIds);
await linked.UnlinkCommand.ExecuteAsync(linked.LinkedDocumentation[0]);
var unlinked = Assert.Single(vm.Cases);
Assert.False(unlinked.HasLinkedDocumentation);
Assert.True(unlinked.HasAvailableDocumentation);
Assert.Empty(vorgaenge.GetById(vorgang.Id)!.DocumentationIds);
Assert.Equal(doc.Id, Assert.Single(documentation.GetByStudent(student.Id)).Id);
}
private static StudentVorgaengeViewModel BuildVm(FakeVorgangRepository? vorgaenge = null,
FakeDocumentation? documentation = null, FakeStudents? students = null) =>
new(vorgaenge ?? new FakeVorgangRepository(), documentation ?? new FakeDocumentation(),
@@ -90,6 +90,9 @@ public partial class VorgangItem : ObservableObject
_onUnlink = onUnlink;
_onRemoveClassRegisterEntry = onRemoveClassRegisterEntry;
_onEditDocumentation = onEditDocumentation;
LinkedDocumentation.CollectionChanged += (_, _) => OnPropertyChanged(nameof(HasLinkedDocumentation));
AvailableDocumentation.CollectionChanged += (_, _) => OnPropertyChanged(nameof(HasAvailableDocumentation));
ClassRegisterRows.CollectionChanged += (_, _) => OnPropertyChanged(nameof(HasClassRegisterRows));
}
[RelayCommand] private void Reveal() => IsRevealed = !IsRevealed;