using LehrerApp.Core.Models; using LehrerApp.Core.Services; using LehrerApp.Desktop.ViewModels.Groups; using Xunit; namespace LehrerApp.Desktop.Tests; public sealed class CompetencyOverviewViewModelTests { [Fact] public void Initialize_ZeigtAbdeckungGruppenmittelUndVorausgewaehltesSchuelerprofil() { var subjectId = Guid.NewGuid(); var group = new LearningGroup { SubjectId = subjectId, GradeLevel = 8 }; var student = new Student { FirstName = "Ada", LastName = "Lovelace" }; var units = new FakeUnits(); units.Add(new Unit { GroupId = group.Id, Status = UnitStatus.Completed, Competencies = ["K1"], }); var exam = new Exam { GroupId = group.Id, Status = ExamStatus.Graded, Tasks = [new ExamTask { MaxPoints = 10, CompetencyCodes = ["K1"] }], }; var results = new FakeResults(); results.Add(new ExamResult { ExamId = exam.Id, StudentId = student.Id, Points = [5] }); var catalog = new FakeCompetencyDomains(); catalog.Add(new CompetencyDomain { SubjectId = subjectId, GradeLevel = 8, Name = "Bereich", Items = [new CompetencyItem { Code = "K1", Description = "Kompetenz" }], }); var vm = new CompetencyOverviewTabViewModel(units, new FakeExams([exam]), results, catalog, new FakeStudents([student]), new CompetencyAnalysisService()); vm.Initialize(group); var row = Assert.Single(vm.Rows); Assert.Equal("1× behandelt", row.InstructionCoverage); Assert.Equal("1× geprüft", row.ExamCoverage); Assert.Contains("50 %", row.GroupResult); Assert.Contains("50 %", row.StudentResult); Assert.Equal("Wiederholungsbedarf", row.Recommendation); Assert.Equal(student.Id, vm.SelectedStudent?.Id); } [Fact] public void ReviewThreshold_Aendern_AktualisiertHinweis() { var item = new CompetencyAnalysisItem { DomainName = "Bereich", DomainCode = "B", Code = "K1", Description = "Kompetenz", GroupScore = new CompetencyScore(5, 10, 1, 1), }; var row = new CompetencyOverviewRow(item, null, 60); row.SetThreshold(40); Assert.Equal("Stand solide", row.Recommendation); } }