From de8a70f1be2392d0ac795b0c2d3eb03d36518691 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juhani=20Krekel=C3=A4?= Date: Fri, 11 Aug 2023 20:07:19 +0300 Subject: [PATCH] Toteuta tuntien muokkaamiseen tarvittavat tapahtumat --- tietomalli.js | 88 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 76 insertions(+), 12 deletions(-) diff --git a/tietomalli.js b/tietomalli.js index 0ccbbbf..8369c5f 100644 --- a/tietomalli.js +++ b/tietomalli.js @@ -15,6 +15,13 @@ const tapahtumaTyypit = { lisääTunti: 'lisääTunti', poistaTunti: 'poistaTunti', + + lisääTuntiLuokka: 'lisääTuntiLuokka', + poistaTuntiLuokka: 'poistaTuntiLuokka', + lisääTuntiOpettaja: 'lisääTuntiOpettaja', + poistaTuntiOpettaja: 'poistaTuntiOpettaja', + lisääTuntiTila: 'lisääTuntiTila', + poistaTuntiTila: 'poistaTuntiTila', }; class Tapahtuma { @@ -41,11 +48,11 @@ function suorita(tyyppi, ...argumentit) { let paluuarvo = undefined; switch (tyyppi) { case tapahtumaTyypit.lisääAste: - assertRange('lisääAste argumentit määrä', argumentit.length, 0, 1); + assertRange('lisääAste argumentit', argumentit.length, 0, 1); paluuarvo = luokkaAsteet.lisää(...argumentit) break; case tapahtumaTyypit.poistaAste: - assertEq('poistaAste argumentit määrä', argumentit.length, 1); + assertEq('poistaAste argumentit', argumentit.length, 1); let [poistettuAste] = argumentit; luokkaAsteet.poista(poistettuAste); // Poista poistettujen luokka-asteiden luokat tunneista @@ -59,7 +66,7 @@ function suorita(tyyppi, ...argumentit) { } break; case tapahtumaTyypit.muutaAste: - assertEq('muutaAste argumentit määrä', argumentit.length, 2); + assertEq('muutaAste argumentit', argumentit.length, 2); let [vanhaAste, uusiAste] = argumentit; luokkaAsteet.muuta(vanhaAste, uusiAste); // Muuta muutetut luokka-asteet tunneissa @@ -76,11 +83,11 @@ function suorita(tyyppi, ...argumentit) { break; case tapahtumaTyypit.lisääLuokka: - assertEq('lisääLuokka argumentit määrä', argumentit.length, 1); + assertEq('lisääLuokka argumentit', argumentit.length, 1); luokkaAsteet.asteet[argumentit[0]].lisää(); break; case tapahtumaTyypit.poistaLuokka: - assertEq('poistaLuokka argumentit määrä', argumentit.length, 1); + assertEq('poistaLuokka argumentit', argumentit.length, 1); let [aste] = argumentit; luokkaAsteet.asteet[aste].poista(); // Poista luokka jota ei enää ole asteella tunneista @@ -94,11 +101,11 @@ function suorita(tyyppi, ...argumentit) { break; case tapahtumaTyypit.lisääOpettaja: - assertEq('lisääOpettaja argumentit määrä', argumentit.length, 2); + assertEq('lisääOpettaja argumentit', argumentit.length, 2); opettajat.lisää(...argumentit); break; case tapahtumaTyypit.poistaOpettaja: - assertEq('poistaOpettaja argumentit määrä', argumentit.length, 1); + assertEq('poistaOpettaja argumentit', argumentit.length, 1); let [poistettuOpettaja] = argumentit; opettajat.poista(poistettuOpettaja); // Poista opettaja joita ei enää ole tunneista @@ -108,11 +115,11 @@ function suorita(tyyppi, ...argumentit) { break; case tapahtumaTyypit.lisääTila: - assertEq('lisääTila argumentit määrä', argumentit.length, 1); + assertEq('lisääTila argumentit', argumentit.length, 1); paluuarvo = tilat.lisää(...argumentit); break; case tapahtumaTyypit.poistaTila: - assertEq('poistaTila argumentit määrä', argumentit.length, 1); + assertEq('poistaTila argumentit', argumentit.length, 1); let [poistettuTila] = argumentit; tilat.poista(poistettuTila); for (let [_, tunti] of tunnit.tunnit) { @@ -121,14 +128,39 @@ function suorita(tyyppi, ...argumentit) { break; case tapahtumaTyypit.lisääTunti: - assertEq('lisääTunti argumentit määrä', argumentit.length, 4); + assertEq('lisääTunti argumentit', argumentit.length, 4); paluuarvo = tunnit.lisää(...argumentit); break; case tapahtumaTyypit.poistaTunti: - assertEq('poistaTunti argumentit määrä', argumentit.length, 1); + assertEq('poistaTunti argumentit', argumentit.length, 1); tunnit.poista(...argumentit); break; + case tapahtumaTyypit.lisääTuntiLuokka: + assertEq('lisääTuntiLuokka argumentit', argumentit.length, 2); + tunnit.tunnit.get(argumentit[0]).luokat.lisää(argumentit[1]); + break; + case tapahtumaTyypit.poistaTuntiLuokka: + assertEq('poistaTuntiLuokka argumentit', argumentit.length, 2); + tunnit.tunnit.get(argumentit[0]).luokat.poista(argumentit[1]); + break; + case tapahtumaTyypit.lisääTuntiOpettaja: + assertEq('lisääTuntiOpettaja argumentit', argumentit.length, 2); + tunnit.tunnit.get(argumentit[0]).opettajaLyhenteet.lisää(argumentit[1]); + break; + case tapahtumaTyypit.poistaTuntiOpettaja: + assertEq('poistaTuntiOpettajat argumentit', argumentit.length, 2); + tunnit.tunnit.get(argumentit[0]).opettajaLyhenteet.poista(argumentit[1]); + break; + case tapahtumaTyypit.lisääTuntiTila: + assertEq('lisääTuntiTila argumentit', argumentit.length, 2); + tunnit.tunnit.get(argumentit[0]).tilat.lisää(argumentit[1]); + break; + case tapahtumaTyypit.poistaTuntiTila: + assertEq('poistaTuntiTila argumentit', argumentit.length, 2); + tunnit.tunnit.get(argumentit[0]).tilat.poista(argumentit[1]); + break; + default: throw new Error(`tuntematon tapahtumatyyppi ${tyyppi}`); } @@ -294,14 +326,17 @@ testi('tilojen käsittely', () => { testi('tuntien käsittely', () => { alustaMalli(); suorita(tapahtumaTyypit.lisääAste); + suorita(tapahtumaTyypit.lisääAste); suorita(tapahtumaTyypit.lisääAste, 5); suorita(tapahtumaTyypit.lisääLuokka, 5); suorita(tapahtumaTyypit.lisääOpettaja, 'KV', 'Kari Virtanen'); suorita(tapahtumaTyypit.lisääOpettaja, 'AS', 'Aili Savolainen'); suorita(tapahtumaTyypit.lisääOpettaja, 'MM', 'Maija Meikäläinen'); + suorita(tapahtumaTyypit.lisääOpettaja, 'MaM', 'Matti Meikäläinen'); suorita(tapahtumaTyypit.lisääTila, '1A'); suorita(tapahtumaTyypit.lisääTila, '5B'); suorita(tapahtumaTyypit.lisääTila, 'Käsityöluokka'); + suorita(tapahtumaTyypit.lisääTila, '5A'); assertEq('aluksi', tunnit.järjestyksessä(), []); assertEq('historia', @@ -343,9 +378,38 @@ testi('tuntien käsittely', () => { assertEq('tila poistettua 1', tunnit.järjestyksessä()[1][1].tilat.alkiot(), [2]); assertEq('tila poistettua 2', tunnit.järjestyksessä()[2][1].tilat.alkiot(), [0]); + suorita(tapahtumaTyypit.lisääTuntiLuokka, 0, '2A'); + assertEq('luokka lisättyä tunnille 0', tunnit.järjestyksessä()[0][1].luokat.alkiot(), ['2A']); + assertEq('luokka lisättyä tunnille 1', tunnit.järjestyksessä()[1][1].luokat.alkiot(), ['6A']); + assertEq('luokka lisättyä tunnille 2', tunnit.järjestyksessä()[2][1].luokat.alkiot(), []); + + suorita(tapahtumaTyypit.poistaTuntiLuokka, 2, '6A'); + assertEq('luokka poistettua tunnilta 0', tunnit.järjestyksessä()[0][1].luokat.alkiot(), ['2A']); + assertEq('luokka poistettua tunnilta 1', tunnit.järjestyksessä()[1][1].luokat.alkiot(), []); + assertEq('luokka poistettua tunnilta 2', tunnit.järjestyksessä()[2][1].luokat.alkiot(), []); + + suorita(tapahtumaTyypit.lisääTuntiOpettaja, 0, 'MaM'); + assertEq('opettaja lisättyä tunnille 0', tunnit.järjestyksessä()[0][1].opettajaLyhenteet.alkiot(), ['MaM']); + assertEq('opettaja lisättyä tunnille 1', tunnit.järjestyksessä()[1][1].opettajaLyhenteet.alkiot(), ['MM']); + assertEq('opettaja lisättyä tunnille 2', tunnit.järjestyksessä()[2][1].opettajaLyhenteet.alkiot(), ['AS']); + + suorita(tapahtumaTyypit.poistaTuntiOpettaja, 2, 'MM'); + assertEq('opettaja poistettua tunnilta 0', tunnit.järjestyksessä()[0][1].opettajaLyhenteet.alkiot(), ['MaM']); + assertEq('opettaja poistettua tunnilta 1', tunnit.järjestyksessä()[1][1].opettajaLyhenteet.alkiot(), []); + assertEq('opettaja poistettua tunnilta 2', tunnit.järjestyksessä()[2][1].opettajaLyhenteet.alkiot(), ['AS']); + + suorita(tapahtumaTyypit.lisääTuntiTila, 0, 3); + assertEq('tila lisäätyä tunnille 0', tunnit.järjestyksessä()[0][1].tilat.alkiot(), [3]); + assertEq('tila lisäätyä tunnille 1', tunnit.järjestyksessä()[1][1].tilat.alkiot(), [2]); + assertEq('tila lisäätyä tunnille 2', tunnit.järjestyksessä()[2][1].tilat.alkiot(), [0]); + + suorita(tapahtumaTyypit.poistaTuntiTila, 1, 0); + assertEq('tila poistettua tunnilta 0', tunnit.järjestyksessä()[0][1].tilat.alkiot(), [3]); + assertEq('tila poistettua tunnilta 1', tunnit.järjestyksessä()[1][1].tilat.alkiot(), [2]); + assertEq('tila poistettua tunnilta 2', tunnit.järjestyksessä()[2][1].tilat.alkiot(), []); + suorita(tapahtumaTyypit.poistaTunti, 0); assertEq('poistettua pituus', tunnit.järjestyksessä().length, 2); alustaMalli(); - // TODO: Luokkien ja opettajien listojen päivitys });