Fix visibility of existing documentation links in cases
CI / build-and-test (push) Canceled after 0s
CI / build-and-test (push) Canceled after 0s
This commit is contained in:
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;
|
||||
|
||||
Reference in new issue
Block a user