124 lines
4.9 KiB
C#
124 lines
4.9 KiB
C#
using LehrerApp.Core.Models;
|
|
using LehrerApp.Desktop.ViewModels.Groups;
|
|
using Xunit;
|
|
|
|
namespace LehrerApp.Desktop.Tests;
|
|
|
|
public sealed class SeatingPlanViewModelTests
|
|
{
|
|
[Fact]
|
|
public void AuswahlEinesBereitsZugeordnetenSchuelers_VerschiebtIhnAufDenNeuenPlatz()
|
|
{
|
|
var groupId = Guid.NewGuid();
|
|
var student = new Student { FirstName = "Anna", LastName = "Beispiel" };
|
|
var students = new FakeStudents([student]);
|
|
var memberships = new FakeMemberships([
|
|
new GroupMembership { GroupId = groupId, StudentId = student.Id },
|
|
]);
|
|
var plan = new SeatingPlan
|
|
{
|
|
GroupId = groupId,
|
|
Name = "Standard",
|
|
Rows = 1,
|
|
Columns = 2,
|
|
Assignments = [new SeatAssignment { Row = 0, Column = 0, StudentId = student.Id }],
|
|
};
|
|
var plans = new FakeSeatingPlans([plan]);
|
|
var vm = new SeatingPlanTabViewModel(plans, students, memberships,
|
|
new FakeSessions([]), new FakeEntries(), new FakeAspects());
|
|
vm.Initialize(groupId, isReadOnly: false);
|
|
|
|
vm.Seats[1].SelectedOption = vm.StudentOptions.Single(o => o.StudentId == student.Id);
|
|
|
|
Assert.Null(vm.Seats[0].SelectedOption.StudentId);
|
|
var assignment = Assert.Single(plans.GetById(plan.Id)!.Assignments);
|
|
Assert.Equal((0, 1, student.Id), (assignment.Row, assignment.Column, assignment.StudentId));
|
|
}
|
|
|
|
[Fact]
|
|
public void ArchivierteGruppe_DeaktiviertSitzplatzbearbeitung()
|
|
{
|
|
var groupId = Guid.NewGuid();
|
|
var plan = new SeatingPlan { GroupId = groupId, Name = "Standard", Rows = 1, Columns = 1 };
|
|
var vm = new SeatingPlanTabViewModel(
|
|
new FakeSeatingPlans([plan]), new FakeStudents([]), new FakeMemberships([]),
|
|
new FakeSessions([]), new FakeEntries(), new FakeAspects());
|
|
|
|
vm.Initialize(groupId, isReadOnly: true);
|
|
|
|
Assert.False(vm.IsEditable);
|
|
Assert.False(vm.Seats.Single().CanEdit);
|
|
Assert.False(vm.AddPlanCommand.CanExecute(null));
|
|
}
|
|
|
|
[Fact]
|
|
public void DragDrop_ZwischenBelegtenPlaetzen_TauschtDieSchueler()
|
|
{
|
|
var groupId = Guid.NewGuid();
|
|
var anna = new Student { FirstName = "Anna", LastName = "A" };
|
|
var ben = new Student { FirstName = "Ben", LastName = "B" };
|
|
var students = new FakeStudents([anna, ben]);
|
|
var memberships = new FakeMemberships([
|
|
new GroupMembership { GroupId = groupId, StudentId = anna.Id },
|
|
new GroupMembership { GroupId = groupId, StudentId = ben.Id },
|
|
]);
|
|
var plan = new SeatingPlan
|
|
{
|
|
GroupId = groupId, Name = "Standard", Rows = 1, Columns = 2,
|
|
Assignments =
|
|
[
|
|
new SeatAssignment { Row = 0, Column = 0, StudentId = anna.Id },
|
|
new SeatAssignment { Row = 0, Column = 1, StudentId = ben.Id },
|
|
],
|
|
};
|
|
var plans = new FakeSeatingPlans([plan]);
|
|
var vm = new SeatingPlanTabViewModel(plans, students, memberships,
|
|
new FakeSessions([]), new FakeEntries(), new FakeAspects());
|
|
vm.Initialize(groupId, isReadOnly: false);
|
|
|
|
vm.MoveSeat(vm.Seats[0], vm.Seats[1]);
|
|
|
|
Assert.Equal(ben.Id, vm.Seats[0].SelectedOption.StudentId);
|
|
Assert.Equal(anna.Id, vm.Seats[1].SelectedOption.StudentId);
|
|
Assert.Equal(2, plans.GetById(plan.Id)!.Assignments.Count);
|
|
}
|
|
|
|
[Fact]
|
|
public void SitzplatzBewertung_ErstelltHeutigeSitzungUndSpeichertAlleDreiBereiche()
|
|
{
|
|
var groupId = Guid.NewGuid();
|
|
var studentId = Guid.NewGuid();
|
|
var sessions = new FakeSessions([]);
|
|
var entries = new FakeEntries();
|
|
var vm = new SeatAssessmentViewModel(sessions, entries, new FakeAspects(),
|
|
groupId, studentId, "Beispiel, Anna", canEdit: true);
|
|
|
|
vm.SetRatingByNumber(5);
|
|
vm.ApplyAttendanceShortcut(1, clear: false);
|
|
vm.ApplyHomeworkShortcut(7, clear: false);
|
|
|
|
var session = Assert.Single(sessions.GetByGroup(groupId));
|
|
Assert.Equal(DateOnly.FromDateTime(DateTime.Today), session.Date);
|
|
Assert.Equal("Sitzplan", session.Comment);
|
|
var entry = entries.GetBySessionAndStudent(session.Id, studentId)!;
|
|
Assert.Equal(2, entry.Ratings.Single(r => r.Key == "quality").Value);
|
|
Assert.Equal(AttendanceStatus.Present, entry.Attendance);
|
|
Assert.Equal(HomeworkStatus.MissingOpen, entry.Homework);
|
|
Assert.True(entry.HomeworkMissing);
|
|
}
|
|
|
|
[Fact]
|
|
public void SitzplatzBewertung_ArchiviertOhneSitzung_LegtKeineNeueSitzungAn()
|
|
{
|
|
var groupId = Guid.NewGuid();
|
|
var sessions = new FakeSessions([]);
|
|
|
|
var vm = new SeatAssessmentViewModel(sessions, new FakeEntries(), new FakeAspects(),
|
|
groupId, Guid.NewGuid(), "Beispiel, Anna", canEdit: false);
|
|
vm.SetRatingByNumber(5);
|
|
|
|
Assert.False(vm.CanEdit);
|
|
Assert.Empty(sessions.GetByGroup(groupId));
|
|
}
|
|
}
|