Files
LehrerApp/LehrerApp.Desktop.Tests/RatingCellTests.cs
T
adminandClaude Sonnet 5 455f7765e4
CI / build-and-test (push) Canceled after 0s
feat: Kompetenz-Bewertung je Schüler/Sitzung aus Mitarbeit-Durchschnitt schätzen
Manuelle Einzelerfassung je Kompetenz war im Alltag zu aufwendig (Nutzer-Feedback). Neue
ParticipationCompetencyEstimate mittelt die bereits erfassten Aspekt-Bewertungen der Sitzung
(normiert auf dieselbe -2..+2-Achse) und rundet auf den nächsten Schritt; die Tagesflagge wirkt
symmetrisch (Spitzentag hebt, Schlaftag/Schlechter Tag senken gleichermaßen).

Die Schätzung wird nie automatisch gespeichert - sie erscheint nur als abgeschwächt dargestellter
Zellenwert (RatingCell.IsEstimated), solange keine explizite Bewertung existiert. Ein Klick setzt
den Wert bewusst und persistiert ihn wie bisher.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-19 01:57:45 +02:00

94 lines
2.7 KiB
C#

using LehrerApp.Core.Models;
using LehrerApp.Desktop.ViewModels.Groups;
using Xunit;
namespace LehrerApp.Desktop.Tests;
/// Tests für 3.1.3: RatingCell muss je AspectValueType unterschiedliche gültige Rohwerte und
/// Schrittweiten für Hoch/Runter (Raster) durchsetzen, nicht mehr pauschal -2..+2 wie zuvor.
public sealed class RatingCellTests
{
[Fact]
public void CycleUp_Scale3_SpringtZwischenDenDreiStufen()
{
var cell = new RatingCell(Guid.NewGuid(), "k", null, AspectValueType.Scale3);
cell.CycleUpCommand.Execute(null);
Assert.Equal(-2, cell.Value);
cell.CycleUpCommand.Execute(null);
Assert.Equal(0, cell.Value);
cell.CycleUpCommand.Execute(null);
Assert.Equal(2, cell.Value);
cell.CycleUpCommand.Execute(null); // bleibt am oberen Ende
Assert.Equal(2, cell.Value);
}
[Fact]
public void CycleUp_Binary_ToggeltNurZwischenDenBeidenExtremwerten()
{
var cell = new RatingCell(Guid.NewGuid(), "k", null, AspectValueType.Binary);
cell.CycleUpCommand.Execute(null);
Assert.Equal(-2, cell.Value);
cell.CycleUpCommand.Execute(null);
Assert.Equal(2, cell.Value);
}
[Fact]
public void SetValue_Points_KapptAufMaxPoints()
{
var cell = new RatingCell(Guid.NewGuid(), "k", null, AspectValueType.Points, maxPoints: 4);
cell.SetValue(99);
Assert.Equal(4, cell.Value);
}
[Fact]
public void CycleUp_Points_ZaehltEinzelnHochBisMaxPoints()
{
var cell = new RatingCell(Guid.NewGuid(), "k", 3, AspectValueType.Points, maxPoints: 4);
cell.CycleUpCommand.Execute(null);
Assert.Equal(4, cell.Value);
cell.CycleUpCommand.Execute(null); // bleibt am Maximum
Assert.Equal(4, cell.Value);
}
[Fact]
public void CycleDown_Points_ZaehltEinzelnRunterBisNull()
{
var cell = new RatingCell(Guid.NewGuid(), "k", 1, AspectValueType.Points, maxPoints: 4);
cell.CycleDownCommand.Execute(null);
Assert.Equal(0, cell.Value);
cell.CycleDownCommand.Execute(null); // bleibt bei 0
Assert.Equal(0, cell.Value);
}
[Fact]
public void DisplayLabel_Scale5_UnveraendertGegenueberBisherigemVerhalten()
{
var cell = new RatingCell(Guid.NewGuid(), "k", 2);
Assert.Equal("++", cell.DisplayLabel);
}
[Fact]
public void SetValue_AufGeschaetzterZelle_MarkiertSieAlsBestaetigt()
{
var cell = new RatingCell(Guid.NewGuid(), "k", 1, isEstimated: true);
Assert.True(cell.IsEstimated);
cell.SetValue(1); // bestätigt zufällig denselben Wert wie die Schätzung
Assert.False(cell.IsEstimated);
Assert.Equal(1, cell.Value);
}
}