7. Testgevallen en randgevallen
Dit hoofdstuk bundelt de minimale modulegerichte validatie voor Optellen & Aftrekken (simpel). De centrale teststrategie blijft vastgelegd in het Technisch Ontwerp; dit hoofdstuk vertaalt het modulegedrag naar concrete modulechecks.
7.1 Configuratievalidatie
| Testgebied | Minimale controle |
|---|---|
| Operation mode | AdditionOnly, SubtractionOnly en Both activeren alleen de relevante configuratiedelen. |
| Invoermodus per getal | Per getal wordt alleen de actieve modus verwerkt; niet-actieve waarden worden genegeerd. |
| Uitkomstgrenzen | Gegenereerde vragen vallen binnen de geconfigureerde uitkomstgrenzen. |
| Vraagcount | Minimum, standaard en maximum lopen logisch op en blijven binnen het platformmaximum van 100. |
| Geen genereerbare vragen | Ongeldige combinaties worden server-side geweigerd met een functionele foutmelding. |
7.2 Docent-randgevallen
| Situatie | Gedrag |
|---|---|
| Geen actieve modulebeschikbaarheid | De module mag niet in de generieke modulekeuze verschijnen voor reguliere docenten wanneer ExerciseModules.IsActive = false, tenzij de gebruiker via testcontext toegang heeft op basis van IsVisibleForTesting. |
| Geen bewerkrecht op niveau/categorie | De configuratie mag niet worden opgeslagen; server-side controle blokkeert de actie ook wanneer de frontendknop zichtbaar zou zijn. |
| Niet-actieve invoermodus | De niet-geselecteerde min/max- of exacte-waardenmodus wordt visueel gedimd en server-side genegeerd. |
OperationMode = AdditionOnly | Aftrekconfiguratie en balansvelden zijn functioneel niet actief en mogen niet als vereiste configuratie meetellen. |
OperationMode = SubtractionOnly | Optelconfiguratie en balansvelden zijn functioneel niet actief en mogen niet als vereiste configuratie meetellen. |
OperationMode = Both | Optelconfiguratie, aftrekconfiguratie en balansvalidatie zijn actief. |
| Geen genereerbare vragen | Opslaan wordt server-side geweigerd met een functionele foutmelding, omdat de combinatie van bereiken, exacte waarden en uitkomstgrenzen geen geldige vraag oplevert. |
| Ongeldige aantallen | Opslaan wordt geweigerd wanneer minimum, standaard en maximum niet logisch oplopen of wanneer het maximum boven het platformmaximum ligt. |
| Terug naar overzicht | De view sluit zonder opslag; onopgeslagen wijzigingen worden niet als configuratiepayload bewaard. |
7.3 Runtime-states
| State | Voorwaarde | Zichtbare gevolgen | Opslaggevolg |
|---|---|---|---|
| Inputstate | Vraag is getoond en nog niet bevestigd. | Antwoordveld toont ?; feedback ontbreekt. | FirstShownAtUtc is gevuld of wordt bij eerste tonen gevuld. |
| Correcte feedbackstate | Antwoord is bevestigd, modulevalidatie is correct en directe feedback is actief. | Gegeven antwoord wordt positief weergegeven met Goed gedaan!. | IsCorrect = true, IsCompleted = true, AnsweredAtUtc gevuld. |
| Foutieve feedbackstate | Antwoord is bevestigd, modulevalidatie is fout en directe feedback is actief. | Gegeven antwoord wordt negatief weergegeven met Helaas het antwoord was niet goed. | IsCorrect = false, IsCompleted = true, AnsweredAtUtc gevuld. |
| Geen-idee-state | Leerling gebruikt Geen idee. | Vraag wordt afgerond zonder correct antwoord; label of resultaatmarkering blijft herkenbaar. | IsDunno = true, IsCorrect = false, IsCompleted = true. |
| Volgende-vraagstate | Huidige vraag is verwerkt en er bestaat een volgende vraag. | Volgende vraag wordt geladen; voortgang wordt verhoogd. | Run- en progressietotalen zijn bijgewerkt. |
| Afrondingsstate | Laatste vraag is verwerkt. | Generieke resultatenflow wordt geopend. | ExerciseRuns.IsCompleted = true, CompletedAtUtc gevuld en definitieve statistieken berekend. |
| Hervatstate | Leerling verlaat de pagina vóór afronding en keert terug via Verder gaan. | Eerstvolgende open vraag of huidige niet-afgeronde vraag wordt opnieuw getoond. | Run blijft IsCompleted = false; progressie blijft server-side beschikbaar. |
7.4 Payload- en hervattests
| Testgebied | Minimale controle |
|---|---|
| Configuratiepayload | Opslaan en opnieuw openen levert dezelfde functionele configuratie op. |
| Vraagstate | Een gegenereerde vraag kan opnieuw gerenderd worden vanuit opgeslagen state zonder nieuwe randomgeneratie. |
| Antwoordvalidatie | Correcte, foutieve en niet-numerieke invoer worden consistent verwerkt. |
| Geen idee | Wanneer beschikbaar markeert de actie de vraag als afgerond met IsDunno = true en IsCorrect = false. |
| Hervatten | Een niet-afgeronde run toont de eerstvolgende open of huidige niet-afgeronde vraag. |
| History/PDF/live | Moduledata blijft bruikbaar voor resultaatdetail, PDF-context en live meekijken waar de generieke engine deze state toont. |