From b77cf71a51686c0a585a5766df8ef23c2cce769b Mon Sep 17 00:00:00 2001 From: Olli-Pekka Lehtokallio Date: Mon, 30 Dec 2024 16:32:36 +0200 Subject: [PATCH] perusopetus-tests --- playwright.config.ts | 2 +- tests/perusopetusSisalto.ts | 100 +++++++ tests/perusteSisalto.ts | 10 + tests/perusteestaOpsPutki.spec.ts | 420 ++++++++++++++++-------------- tests/varhaiskasvatusSisalto.ts | 10 + utils/commonmethods.ts | 4 +- utils/defaultvalues.ts | 2 +- 7 files changed, 354 insertions(+), 194 deletions(-) create mode 100644 tests/perusopetusSisalto.ts create mode 100644 tests/perusteSisalto.ts create mode 100644 tests/varhaiskasvatusSisalto.ts diff --git a/playwright.config.ts b/playwright.config.ts index 7b58d82..5c999bc 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -30,7 +30,7 @@ export default defineConfig({ trace: 'on-first-retry', }, - timeout: 60_000 * 5, + timeout: 60_000 * 10, expect: { timeout: 60_000 * 3, }, diff --git a/tests/perusopetusSisalto.ts b/tests/perusopetusSisalto.ts new file mode 100644 index 0000000..775a319 --- /dev/null +++ b/tests/perusopetusSisalto.ts @@ -0,0 +1,100 @@ +import { expect, Page } from "@playwright/test"; +import { waitMedium, waitSmall } from "../utils/commonmethods"; +import { perusteenTekstikappale } from "./perusteSisalto"; + +export async function perusopetuksenSisallot(page: Page, url: string) { + await perusteenTekstikappale(page); + await perusopetusLaajaAlaisetOsaamiset(page, url); + await perusopetusVuosiluokkakokonaisuus(page, url); + await perusopetusOppiaine(page, url); +} + +export async function perusopetusLaajaAlaisetOsaamiset(page: Page, url) { + await page.goto(url + 'perusopetus/laajaalaisetosaamiset'); + await page.getByRole('button', { name: 'Uusi laaja-alainen osaaminen' }).click(); + await page.getByRole('textbox').click(); + await page.getByRole('textbox').fill('Laaja-alainen osaaminen 1'); + await page.locator('.ProseMirror').fill("Laaja-alainen osaaminen 1 Kuvausteksti"); + await page.getByRole('button', { name: 'Tallenna' }).click(); + await waitMedium(page); + await page.goto(url + 'perusopetus/laajaalaisetosaamiset'); + await expect(page.locator('body')).toContainText('Laaja-alainen osaaminen 1'); + await page.getByRole('link', { name: 'Yleisnäkymä' }).click(); +} + +export async function perusopetusVuosiluokkakokonaisuus(page: Page, url: string) { + await page.goto(url + 'perusopetus/vuosiluokkakokonaisuudet'); + await expect(page.locator('body')).toContainText('Uusi vuosiluokkakokonaisuus'); + await page.getByRole('button', { name: 'Uusi vuosiluokkakokonaisuus' }).click(); + + await page.getByText('Vuosiluokka 1').click(); + await page.getByRole('textbox').click(); + await page.getByRole('textbox').fill('Vuosiluokkakokonaisuus 1'); + + await page.locator('.ProseMirror').nth(0).fill("vlk1 lao 1 teksti"); + await page.locator('.ProseMirror').nth(1).fill("vlk1 paikallinen teksti"); + await page.getByRole('button', { name: 'Tallenna' }).click(); + await waitMedium(page); + await page.goto(url + 'perusopetus/vuosiluokkakokonaisuudet'); + await expect(page.locator('body')).toContainText('Vuosiluokkakokonaisuus 1'); + await page.getByRole('link', { name: 'Yleisnäkymä' }).click(); +} + +export async function perusopetusOppiaine(page: Page, url: string) { + await page.goto(url + 'perusopetus/oppiaineet'); + await page.getByRole('button', { name: 'Uusi oppiaine' }).nth(1).click(); + await page.getByRole('button', { name: 'Hae koodistosta' }).click(); + await waitMedium(page); + await page.getByText('A1-kieli').first().click(); + + await page.getByRole('button', { name: 'Muokkaa tavoitealueita' }).click(); + await page.locator('.modal-content').getByRole('button', { name: 'Lisää tavoitealue' }).click(); + await page.locator('.modal-content').getByRole('textbox').fill('tavoitealue 1'); + await page.locator('.modal-content').getByRole('button', { name: 'Tallenna' }).click(); + await waitSmall(page); + + await page.getByText('Vuosiluokat 1-1').click(); + + await page.getByRole('button', { name: 'Muokkaa sisältöalueita' }).click(); + await page.locator('.modal-content').getByRole('textbox').fill('sisältöalueet otsikko'); + await page.locator('.modal-content').locator('.ProseMirror').fill("sisältöalueet kuvaus"); + await page.locator('.modal-content').getByRole('button', { name: 'Lisää sisältöalue' }).click(); + await page.locator('.modal-content').getByRole('textbox').nth(1).fill('sisältöalue 1'); + await page.locator('.modal-content').locator('.ProseMirror').nth(1).fill("sisältöalueen kuvaus"); + await page.locator('.modal-content').getByRole('button', { name: 'Tallenna' }).click(); + await waitSmall(page); + + await page.getByRole('button', { name: 'Lisää tavoite' }).click(); + await page.locator('.tavoite').getByRole('textbox').first().fill('tavoite 1'); + await page.locator('.tavoite').locator('select').selectOption({ label: 'tavoitealue 1' }); + await page.locator('.tavoite').getByRole('button', { name: 'Lisää laaja-alainen osaaminen' }).click(); + await page.locator('.tavoite').getByRole('menuitem', { name: 'Laaja-alainen osaaminen' }).click(); + await page.locator('.tavoite').getByRole('button', { name: 'Lisää sisältöalue' }).click(); + await page.locator('.tavoite').getByRole('menuitem', { name: 'sisältöalue' }).click(); + + await page.getByRole('button', { name: 'Tallenna' }).click(); + await waitMedium(page); + await page.goto(url + 'perusopetus/oppiaineet'); + await expect(page.locator('body')).toContainText('A1-kieli (A12)'); + await page.getByRole('link', { name: 'Yleisnäkymä' }).click(); +} + +export async function perusopetusOpsLuonti(page: Page) { + await page.getByText('Vuosiluokkakokonaisuus 1').click(); +} + +export async function perusopetusOpsSisallot(page: Page) { + await page.getByRole('link', { name: 'Vuosiluokkakokonaisuus 1' }).click(); + await page.getByRole('link', { name: 'A1-kieli' }).click(); + await page.getByRole('button', { name: 'Vuosiluokkaista tavoitteet' }).click(); + await page.getByRole('button', { name: 'Tuo kaikki' }).click(); + await page.getByRole('button', { name: 'Tallenna' }).click(); + await waitMedium(page); +} + +export async function perusopetusJulkinenOpsTarkistukset(page: Page) { + await expect(page.locator('.navigation-tree')).toContainText('Vuosiluokkakokonaisuus 1'); + await expect(page.locator('.navigation-tree')).toContainText('Oppiaineet'); + page.locator('.navigation-tree').getByText('Oppiaineet').click(); + await expect(page.locator('.navigation-tree')).toContainText('A1-kieli'); +} diff --git a/tests/perusteSisalto.ts b/tests/perusteSisalto.ts new file mode 100644 index 0000000..4e6a6a4 --- /dev/null +++ b/tests/perusteSisalto.ts @@ -0,0 +1,10 @@ +import { expect, Page } from "@playwright/test"; +import { waitSmall } from "../utils/commonmethods"; + +export async function perusteenTekstikappale(page: Page) { + await page.getByRole('button', { name: 'Uusi tekstikappale' }).first().click(); + await page.locator('.modal-content').getByRole('textbox').fill('tekstikappale 1'); + await page.getByRole('button', { name: 'Lisää tekstikappale' }).click(); + await waitSmall(page); + await expect(page.locator('body')).toContainText('tekstikappale 1'); +} diff --git a/tests/perusteestaOpsPutki.spec.ts b/tests/perusteestaOpsPutki.spec.ts index bf64f67..a8aeb04 100644 --- a/tests/perusteestaOpsPutki.spec.ts +++ b/tests/perusteestaOpsPutki.spec.ts @@ -1,212 +1,252 @@ import { test, expect, Page } from '@playwright/test'; import {DEFAULT_VALUES} from "../utils/defaultvalues"; import {createNimi, login, waitMedium, waitSmall} from "../utils/commonmethods"; +import { perusopetuksenSisallot, perusopetusJulkinenOpsTarkistukset, perusopetusOpsLuonti, perusopetusOpsSisallot } from './perusopetusSisalto'; +import { varhaiskasvatusJulkinenOpsTarkistukset, varhaiskasvatusSisallot } from './varhaiskasvatusSisalto'; test.describe.configure({ mode: 'serial', retries: 0 }); test.describe('Uusi peruste ja perusteesta OPS', async () => { let page: Page; - let perusteProjektiUrl; - let opetussuunnitelmaUrl; - let opsPohjaUrl; - let opsNimi; + let perusteProjektiUrls: string[] = []; + let opetussuunnitelmaUrls: string[] = []; + let opsPohjaUrls: string[] = []; + let perusteProjektit = {}; - let perusteProjektiNimi = 'TestAutomation'; - let pohjaNimi; - let projektiNimi; - let perusteDiaari = '111/111/1111'; + test.afterEach(async () => { + await page.close(); + }); test.beforeEach(async ({ browser }) => { page = await browser.newPage(); }); - test('Luo uusi peruste', async ({ page }) => { - await login(page, DEFAULT_VALUES.basePerusteetUrl) - await page.goto(DEFAULT_VALUES.uusiPerusteUrl); - await page.getByText('Seuraava').click(); - projektiNimi = await createNimi(perusteProjektiNimi); - await page.getByPlaceholder('Kirjoita projektin nimi').fill(projektiNimi); - await page.locator('.multiselect').first().click(); - await page.getByText('Varhaiskasvatus').click(); - await page.getByText('Seuraava').click(); - await page.getByText('Seuraava').click(); - await page.getByRole('button', { name: 'Luo perusteprojekti' }).click(); - await expect(page.locator('h1').locator('span').first()).toHaveText(projektiNimi); - perusteProjektiUrl = page.url(); - }); - - test('Päivitä peruste', async ({ page }) => { - await login(page, DEFAULT_VALUES.basePerusteetUrl) - await page.goto(perusteProjektiUrl); - await page.getByText('Lisätoiminnot').click(); - await page.getByRole('menuitem', { name: 'Perusteen tiedot' }).click(); - await page.getByRole('button', { name: 'Muokkaa' }).click(); - await page.getByRole('group', { name: 'Perusteen nimi*' }).getByRole('textbox').click(); - await page.getByRole('group', { name: 'Perusteen nimi*' }).getByRole('textbox').fill(projektiNimi); - await page.getByRole('group', { name: 'Diaarinumero' }).getByRole('textbox').click(); - await page.getByRole('group', { name: 'Diaarinumero' }).getByRole('textbox').fill(perusteDiaari); - await page.getByRole('group', { name: 'Määräyksen päätöspäivämäärä' }).click(); - await page.getByRole('button', { name: '2' }).first().click(); - // Alku ja loppupäivä samassa groupissa, joten pitää kaivaa syvemmältä, jotta voi asettaa päivämäärän - await page.getByRole('group', { name: 'Voimassaolo' }).getByRole('button', { name: 'Valitse päivämäärä' }).first().click(); - await page.getByRole('dialog').getByRole('group').getByRole('button', { name: '2' }).first().click(); - await page.locator('li').filter({ hasText: 'Liitteet ja määräykset' }).click(); - await page.locator('.ProseMirror').fill("Kuvausteksti"); - await page.setInputFiles('input[type="file"]', './files/testpdf.pdf'); - // odotetaan, että pdf ladataan selaimeen - await waitMedium(page); - await page.getByRole('button', { name: 'Tallenna' }).click(); - await expect(page.locator('body')).toContainText('Tallennus onnistui'); + [ + { + koulutustyyppi: 'Varhaiskasvatus', + perusteDiaari: `${Math.floor(100 + Math.random() * 900)}/${Math.floor(100 + Math.random() * 900)}/${Math.floor(1000 + Math.random() * 9000)}`, + projektiNimi: createNimi('TestAutomation Varhaiskasvatus'), + sisallot: async (page: Page, url: string) => await varhaiskasvatusSisallot(page), + }, + { + koulutustyyppi: 'Perusopetus', + perusteDiaari: `${Math.floor(100 + Math.random() * 900)}/${Math.floor(100 + Math.random() * 900)}/${Math.floor(1000 + Math.random() * 9000)}`, + projektiNimi: createNimi('TestAutomation Perusopetus'), + sisallot: async (page: Page, url: string) => await perusopetuksenSisallot(page, url), + }, + ].forEach(({ koulutustyyppi, projektiNimi, perusteDiaari, sisallot }) => { + perusteProjektit[koulutustyyppi] = { + nimi: projektiNimi + ' (' + perusteDiaari + ')', + diaari: perusteDiaari, + }; + + test(`Luo, päivitä ja julkaise peruste ${koulutustyyppi}`, async ({ page }) => { + await login(page, DEFAULT_VALUES.basePerusteetUrl) + await page.goto(DEFAULT_VALUES.uusiPerusteUrl); + await page.getByText('Seuraava').click(); + await page.getByPlaceholder('Kirjoita projektin nimi').fill(projektiNimi); + await page.locator('.multiselect').first().click(); + await page.getByText(koulutustyyppi, { exact: true }).click(); + await page.getByText('Seuraava').click(); + await page.getByText('Seuraava').click(); + await page.getByRole('button', { name: 'Luo perusteprojekti' }).click(); + await expect(page.locator('h1').locator('span').first()).toHaveText(projektiNimi); + const perusteProjektiUrl = page.url(); + perusteProjektiUrls.push(perusteProjektiUrl); + + await page.goto(perusteProjektiUrl); + await page.getByText('Lisätoiminnot').click(); + await page.getByRole('menuitem', { name: 'Perusteen tiedot' }).click(); + await page.getByRole('button', { name: 'Muokkaa' }).click(); + await page.getByRole('group', { name: 'Perusteen nimi*' }).getByRole('textbox').click(); + await page.getByRole('group', { name: 'Perusteen nimi*' }).getByRole('textbox').fill(projektiNimi); + await page.getByRole('group', { name: 'Diaarinumero' }).getByRole('textbox').click(); + await page.getByRole('group', { name: 'Diaarinumero' }).getByRole('textbox').fill(perusteDiaari); + await page.getByRole('group', { name: 'Määräyksen päätöspäivämäärä' }).click(); + await page.getByRole('button', { name: '2' }).first().click(); + // Alku ja loppupäivä samassa groupissa, joten pitää kaivaa syvemmältä, jotta voi asettaa päivämäärän + await page.getByRole('group', { name: 'Voimassaolo' }).getByRole('button', { name: 'Valitse päivämäärä' }).first().click(); + await page.getByRole('dialog').getByRole('group').getByRole('button', { name: '2' }).first().click(); + await page.locator('li').filter({ hasText: 'Liitteet ja määräykset' }).click(); + await page.locator('.ProseMirror').fill("Kuvausteksti"); + await page.setInputFiles('input[type="file"]', './files/testpdf.pdf'); + // odotetaan, että pdf ladataan selaimeen + await waitMedium(page); + await page.getByRole('button', { name: 'Tallenna' }).click(); + await expect(page.locator('body')).toContainText('Tallennus onnistui'); + + await sisallot(page, perusteProjektiUrl); + + await page.goto(perusteProjektiUrl); + await expect(page.locator('body')).toContainText('Siirry julkaisunäkymään'); + await page.hover('.ep-valid-popover') + await page.getByRole('tooltip', { name: 'Siirry julkaisunäkymään' }).getByRole('link').click(); + await expect(page.locator('.validation')).toContainText('Ei julkaisua estäviä virheitä'); + await page.getByRole('button', { name: 'Julkaise' }).click(); + await page.getByLabel('Vahvista julkaisu').getByRole('button', { name: 'Julkaise' }).click(); + await expect(page.locator('.julkaisu')).toContainText('Uusin versio'); + + await page.goto(DEFAULT_VALUES.julkinenMaarayksetUrl); + await waitSmall(page); + await page.getByPlaceholder('Hae määräyksiä').fill(projektiNimi); + await waitSmall(page); + await expect(page.locator('.maarays')).toHaveCount(1); + await page.getByRole('link', { name: projektiNimi }).click(); + await expect(page.locator('.url')).toContainText('Avaa määräys'); + + await page.goto(perusteProjektiUrl); + await page.getByText('Lisätoiminnot').click(); + await page.getByRole('menuitem', { name: 'Luo PDF' }).click(); + await expect(page.locator('.sisalto')).toContainText('Julkaistu'); + await page.getByRole('button', { name: 'Luo PDF-tiedosto' }).click(); + await expect(page.locator('.sisalto')).toContainText('Työversio'); + + await page.goto(DEFAULT_VALUES.julkinenKoosteUrlUrl + koulutustyyppi.toLowerCase()); + await expect(page.locator('body')).toContainText(projektiNimi); + await page.getByRole('link', { name: projektiNimi }).click(); + await waitMedium(page); + await expect(page.locator('.content')).toContainText(projektiNimi); + }); }); - test('Julkaise peruste', async ({ page }) => { - await login(page, DEFAULT_VALUES.basePerusteetUrl) - await page.goto(perusteProjektiUrl); - await expect(page.locator('body')).toContainText('Siirry julkaisunäkymään'); - await page.hover('.ep-valid-popover') - await page.getByRole('tooltip', { name: 'Siirry julkaisunäkymään' }).getByRole('link').click(); - await expect(page.locator('.validation')).toContainText('Ei julkaisua estäviä virheitä'); - await page.getByRole('button', { name: 'Julkaise' }).click(); - await page.getByLabel('Vahvista julkaisu').getByRole('button', { name: 'Julkaise' }).click(); - await expect(page.locator('.julkaisu')).toContainText('Uusin versio'); - }); - - test('Hae määräys määräyskokoelmasta', async ({ page }) => { - await page.goto(DEFAULT_VALUES.julkinenMaarayksetUrl); - await waitSmall(page); - await page.getByPlaceholder('Hae määräyksiä').fill(projektiNimi); - await waitSmall(page); - await expect(page.locator('.maarays')).toHaveCount(1); - await page.getByRole('link', { name: projektiNimi }).click(); - await expect(page.locator('.url')).toContainText('Avaa määräys'); - }); + [ + { + koulutustyyppi: 'Varhaiskasvatus', + pohjaNimi: createNimi('Testautomation varhaiskasvatus pohja'), + opsNimi: createNimi('Testautomation varhaiskasvatus ops'), + opsLuonti: async (page: Page) => {}, + opsSisallot: async (page: Page) => {}, + julkinenOpsTarkistukset: async (page: Page) => varhaiskasvatusJulkinenOpsTarkistukset(page), + }, + { + koulutustyyppi: 'Perusopetus', + pohjaNimi: createNimi('Testautomation perusopetus pohja'), + opsNimi: createNimi('Testautomation perusopetus ops'), + opsLuonti: async (page: Page) => await perusopetusOpsLuonti(page), + opsSisallot: async (page: Page) => await perusopetusOpsSisallot(page), + julkinenOpsTarkistukset: async (page: Page) => await perusopetusJulkinenOpsTarkistukset(page), + }, + ].forEach(({ koulutustyyppi, pohjaNimi, opsNimi, opsLuonti, opsSisallot, julkinenOpsTarkistukset }) => { + test(`Luo, päivitä ja julkaise opetussuunnitelma ${koulutustyyppi}`, async ({ page }) => { + await login(page, DEFAULT_VALUES.baseYlopsUrl) + await page.goto(DEFAULT_VALUES.opsPohjatUrl); + await expect(page.locator('.uusi')).toContainText('Luo uusi'); + await page.getByRole('link', { name: 'Luo uusi' }).click(); + // odotetaan, että perustelistaus ladataan + await waitMedium(page); + await page.getByRole('textbox').click(); + await page.getByRole('textbox').fill(pohjaNimi); + await page.getByRole('combobox').selectOption({ label: perusteProjektit[koulutustyyppi].nimi }); + await page.getByRole('button', { name: 'Luo pohja' }).click(); + await expect(page.locator('.done-icon')).toHaveCount(1); + await page.hover('.ep-valid-popover') + await page.getByRole('tooltip', { name: 'Aseta valmiiksi' }).click(); + await page.locator('.modal-content').getByRole('button', { name: 'Aseta valmiiksi' }).click(); + await expect(page.locator('body')).toContainText('Tilan vaihto onnistui'); + // otetaan ops-pohjan url talteen arkistointia varten. + const opsPohjaUrl = page.url() + opsPohjaUrls.push(opsPohjaUrl); + + await page.goto(DEFAULT_VALUES.opsUrl); + await page.getByRole('link', { name: 'Luo uusi' }).click(); + await page.getByText('Kunnan tai koulutuksen järjestäjän opetussuunnitelman', { exact: true }).click(); + await page.getByText('Vain perustetta', { exact: true }).click(); + await expect(page.locator('.multiselect')).toHaveCount(1); + await page.locator('.multiselect').first().click(); + await page.getByText(pohjaNimi + ' (' + perusteProjektit[koulutustyyppi].diaari + ')').first().click(); + await page.locator('div').filter({ hasText: /^Opetussuunnitelman nimi \*Tähän opetussuunnitelman nimi$/ }).getByRole('textbox').fill(opsNimi); + await opsLuonti(page); + await page.getByText('Lisää kunta', { exact: true }).click(); + await page.getByRole('combobox').nth(1).click(); + await page.getByText('Jyväskylä').click(); + await waitSmall(page); + await page.getByText('Lisää koulutuksen järjestäjä', { exact: true }).click(); + await page.getByRole('combobox').nth(2).click(); + await page.getByText('Jyväskylän kaupunki').click(); + await page.getByRole('button', { name: 'Luo opetussuunnitelma' }).click(); + await expect(page.locator('body')).toContainText('Opetussuunnitelma luotu onnistuneesti'); + // otetaan opsin url talteen, jonka avulla testataan loput opsiin liittyvät. + const opetussuunnitelmaUrl = page.url(); + opetussuunnitelmaUrls.push(opetussuunnitelmaUrl); + + await page.goto(opetussuunnitelmaUrl); + await page.getByText('Lisätoiminnot').click(); + await page.getByRole('menuitem', { name: 'Tiedot' }).click(); + await page.getByRole('button', { name: 'Muokkaa' }).click(); + await page.getByRole('textbox').nth(1).fill('test'); + await page.getByText('Suomi').nth(3).click(); + await page.getByText('Valitse päivämäärä').click(); + await page.getByRole('button', { name: '1' }).first().click(); + await page.getByRole('button', { name: 'Tallenna' }).click(); + await expect(page.locator('body')).toContainText('Tallennus onnistui'); + + await opsSisallot(page); + + await page.goto(opetussuunnitelmaUrl); + await expect(page.locator('body')).toContainText('Siirry julkaisunäkymään'); + await page.hover('.ep-valid-popover') + await page.getByRole('tooltip', { name: 'Siirry julkaisunäkymään' }).getByRole('link').click(); + await expect(page.locator('.validation')).toContainText('Ei julkaisua estäviä virheitä'); + await page.getByRole('button', { name: 'Julkaise' }).click(); + await page.getByLabel('Vahvista julkaisu').getByRole('button', { name: 'Julkaise' }).click(); + await expect(page.locator('.julkaisu').first()).toContainText('Julkaistu versio'); + + await page.goto(opetussuunnitelmaUrl); + await page.getByText('Lisätoiminnot').click(); + await page.getByRole('menuitem', { name: 'Luo PDF' }).click(); + await expect(page.locator('.sisalto')).toContainText('Julkaistu'); + await page.getByRole('button', { name: 'Luo PDF-tiedosto' }).click(); + await expect(page.locator('.sisalto').first()).toContainText('Työversio'); + + await page.goto(DEFAULT_VALUES.julkinenKoosteUrlUrl + koulutustyyppi.toLowerCase()); + await page.getByPlaceholder('Hae opetussuunnitelmaa').fill(opsNimi); + await expect(page.locator('body')).toContainText(opsNimi); + await page.getByRole('link', { name: opsNimi }).click(); + await expect(page.locator('h1')).toContainText(opsNimi); + + await julkinenOpsTarkistukset(page); + }); - test('Tarkista perusteen PDF ja luo uusi PDF', async ({ page }) => { - await login(page, DEFAULT_VALUES.basePerusteetUrl) - await page.goto(perusteProjektiUrl); - await page.getByText('Lisätoiminnot').click(); - await page.getByRole('menuitem', { name: 'Luo PDF' }).click(); - await expect(page.locator('.sisalto')).toContainText('Julkaistu'); - await page.getByRole('button', { name: 'Luo PDF-tiedosto' }).click(); - await expect(page.locator('.sisalto')).toContainText('Työversio'); - }); - - test('Avaa julkinen peruste', async ({ page }) => { - await page.goto(DEFAULT_VALUES.julkinenVarhaiskasvatusUrl); - await expect(page.locator('body')).toContainText(projektiNimi); - await page.getByRole('link', { name: projektiNimi }).click(); - await waitMedium(page); - await expect(page.locator('.content')).toContainText(projektiNimi); - }); - - test('Luo OPS-pohja', async ({ page }) => { - await login(page, DEFAULT_VALUES.baseYlopsUrl) - await page.goto(DEFAULT_VALUES.opsPohjatUrl); - await expect(page.locator('.uusi')).toContainText('Luo uusi'); - await page.getByRole('link', { name: 'Luo uusi' }).click(); - // odotetaan, että perustelistaus ladataan - await waitMedium(page); - await page.getByRole('combobox').selectOption({ label: projektiNimi + ' (' + perusteDiaari + ')' }); - await page.getByRole('textbox').click(); - pohjaNimi = await createNimi(perusteProjektiNimi + ' pohja'); - await page.getByRole('textbox').fill(pohjaNimi); - await page.getByRole('button', { name: 'Luo pohja' }).click(); - await expect(page.locator('.done-icon')).toHaveCount(1); - await page.hover('.ep-valid-popover') - await page.getByRole('tooltip', { name: 'Aseta valmiiksi' }).click(); - await page.locator('.modal-content').getByRole('button', { name: 'Aseta valmiiksi' }).click(); - await expect(page.locator('body')).toContainText('Tilan vaihto onnistui'); - // otetaan ops-pohjan url talteen arkistointia varten. - opsPohjaUrl = page.url() - }); - - test('Luo OPS pohjasta', async ({ page }) => { - await login(page, DEFAULT_VALUES.baseYlopsUrl) - await page.goto(DEFAULT_VALUES.opsUrl); - await page.getByRole('link', { name: 'Luo uusi' }).click(); - await page.getByText('Kunnan tai koulutuksen järjestäjän opetussuunnitelman', { exact: true }).click(); - await page.getByText('Vain perustetta', { exact: true }).click(); - await expect(page.locator('.multiselect')).toHaveCount(1); - await page.locator('.multiselect').first().click(); - await page.getByText(pohjaNimi + ' (' + perusteDiaari + ')').first().click(); - opsNimi = await createNimi(perusteProjektiNimi + ' ops'); - await page.locator('div').filter({ hasText: /^Opetussuunnitelman nimi \*Tähän opetussuunnitelman nimi$/ }).getByRole('textbox').fill(opsNimi); - await page.getByText('Lisää kunta', { exact: true }).click(); - await page.getByRole('combobox').nth(1).click(); - await page.getByText('Jyväskylä').click(); - await waitSmall(page); - await page.getByText('Lisää koulutuksen järjestäjä', { exact: true }).click(); - await page.getByRole('combobox').nth(2).click(); - await page.getByText('Jyväskylän kaupunki').click(); - await page.getByRole('button', { name: 'Luo opetussuunnitelma' }).click(); - await expect(page.locator('body')).toContainText('Opetussuunnitelma luotu onnistuneesti'); - // otetaan opsin url talteen, jonka avulla testataan loput opsiin liittyvät. - opetussuunnitelmaUrl = page.url() - }); - - test('Päivitä OPS', async ({ page }) => { - await login(page, DEFAULT_VALUES.baseYlopsUrl) - await page.goto(opetussuunnitelmaUrl); - await page.getByText('Lisätoiminnot').click(); - await page.getByRole('menuitem', { name: 'Tiedot' }).click(); - await page.getByRole('button', { name: 'Muokkaa' }).click(); - await page.getByRole('textbox').nth(1).fill('test'); - await page.getByLabel('Suomi', { exact: true }).check({ force: true }); - await page.getByText('Valitse päivämäärä').click(); - await page.getByRole('button', { name: '1' }).first().click(); - await page.getByRole('button', { name: 'Tallenna' }).click(); - await expect(page.locator('body')).toContainText('Tallennus onnistui'); - }); - - test('Julkaise OPS', async ({ page }) => { - await login(page, DEFAULT_VALUES.baseYlopsUrl) - await page.goto(opetussuunnitelmaUrl); - await expect(page.locator('body')).toContainText('Siirry julkaisunäkymään'); - await page.hover('.ep-valid-popover') - await page.getByRole('tooltip', { name: 'Siirry julkaisunäkymään' }).getByRole('link').click(); - await expect(page.locator('.validation')).toContainText('Ei julkaisua estäviä virheitä'); - await page.getByRole('button', { name: 'Julkaise' }).click(); - await page.getByLabel('Vahvista julkaisu').getByRole('button', { name: 'Julkaise' }).click(); - await expect(page.locator('.julkaisu').first()).toContainText('Julkaistu versio'); - }); - - test('Tarkista opsin PDF ja luo uusi PDF', async ({ page }) => { - await login(page, DEFAULT_VALUES.baseYlopsUrl) - await page.goto(opetussuunnitelmaUrl); - await page.getByText('Lisätoiminnot').click(); - await page.getByRole('menuitem', { name: 'Luo PDF' }).click(); - await expect(page.locator('.sisalto')).toContainText('Julkaistu'); - await page.getByRole('button', { name: 'Luo PDF-tiedosto' }).click(); - await expect(page.locator('.sisalto').first()).toContainText('Työversio'); - }); - - test('Avaa julkinen ops', async ({ page }) => { - await page.goto(DEFAULT_VALUES.julkinenVarhaiskasvatusUrl); - await page.getByPlaceholder('Hae opetussuunnitelmaa').fill(opsNimi); - await expect(page.locator('body')).toContainText(opsNimi); - await page.getByRole('link', { name: opsNimi }).click(); - await expect(page.locator('h1')).toContainText(opsNimi); }); test.afterAll(async ({ browser }) => { - const page = await browser.newPage(); - await login(page, DEFAULT_VALUES.basePerusteetUrl) - await page.goto(perusteProjektiUrl); - await page.getByText('Lisätoiminnot').click(); - await page.getByRole('menuitem', { name: 'Arkistoi peruste' }).click(); - await page.getByRole('button', { name: 'Kyllä' }).click(); - await expect(page.locator('body').first()).toContainText('Arkistoitu onnistuneesti'); - - await page.goto(opsPohjaUrl); - await page.getByText('Lisätoiminnot').click(); - await page.getByRole('menuitem', { name: 'Arkistoi pohja' }).click(); - await page.getByRole('button', { name: 'Kyllä' }).click(); - await expect(page.locator('body').first()).toContainText('Arkistoitu onnistuneesti'); - - await page.goto(opetussuunnitelmaUrl); - await page.getByText('Lisätoiminnot').click(); - await page.getByRole('menuitem', { name: 'Arkistoi opetussuunnitelma' }).click(); - await page.getByRole('button', { name: 'Kyllä' }).click(); - await expect(page.locator('body').first()).toContainText('Arkistoitu onnistuneesti'); + let page = await browser.newPage(); + + await login(page, DEFAULT_VALUES.basePerusteetUrl); + for await (const perusteProjektiUrl of perusteProjektiUrls) { + await page.goto(perusteProjektiUrl); + await expect(page.locator('body')).toContainText('Lisätoiminnot'); + await page.getByText('Lisätoiminnot').click(); + await page.getByRole('menuitem', { name: 'Arkistoi peruste' }).click(); + await page.getByRole('button', { name: 'Kyllä' }).click(); + await expect(page.locator('body')).toContainText('Arkistoitu onnistuneesti'); + await waitMedium(page); + } + + await page.close(); + page = await browser.newPage(); + await login(page, DEFAULT_VALUES.baseYlopsUrl); + + for await (const opetussuunnitelmaUrl of opetussuunnitelmaUrls) { + await page.goto(opetussuunnitelmaUrl); + await expect(page.locator('body')).toContainText('Lisätoiminnot'); + await page.getByText('Lisätoiminnot').click(); + await page.getByRole('menuitem', { name: 'Arkistoi opetussuunnitelma' }).click(); + await page.getByRole('button', { name: 'Kyllä' }).click(); + await expect(page.locator('body')).toContainText('Arkistoitu onnistuneesti'); + await waitMedium(page); + } + + for await (const opsPohjaUrl of opsPohjaUrls) { + await page.goto(opsPohjaUrl); + await expect(page.locator('body')).toContainText('Lisätoiminnot'); + await page.getByText('Lisätoiminnot').click(); + await page.getByRole('menuitem', { name: 'Arkistoi pohja' }).click(); + await page.getByRole('button', { name: 'Kyllä' }).click(); + await expect(page.locator('body')).toContainText('Arkistoitu onnistuneesti'); + await waitMedium(page); + } + + await page.close(); }); }); diff --git a/tests/varhaiskasvatusSisalto.ts b/tests/varhaiskasvatusSisalto.ts new file mode 100644 index 0000000..98b538d --- /dev/null +++ b/tests/varhaiskasvatusSisalto.ts @@ -0,0 +1,10 @@ +import { expect, Page } from "@playwright/test"; +import { perusteenTekstikappale } from "./perusteSisalto"; + +export async function varhaiskasvatusSisallot(page: Page) { + await perusteenTekstikappale(page); +} + +export async function varhaiskasvatusJulkinenOpsTarkistukset(page: Page) { + await expect(page.locator('.navigation-tree')).toContainText('tekstikappale 1'); +} diff --git a/utils/commonmethods.ts b/utils/commonmethods.ts index ef58dc3..c423dc3 100644 --- a/utils/commonmethods.ts +++ b/utils/commonmethods.ts @@ -11,7 +11,7 @@ export const login = async (page: Page, url) => { } }; -export const createNimi = async (nimi: string) => { +export const createNimi = (nimi: string) => { // korjataan timezonea const currentDate = new Date(new Date().getTime() - new Date().getTimezoneOffset() * 60000); return nimi + ' ' + currentDate.toISOString().slice(0, 16).replace(/[T]/g, ' '); @@ -22,7 +22,7 @@ export const waitSmall = async (page) => { } export const waitMedium = async (page) => { - await page.waitForTimeout(15_000); + await page.waitForTimeout(10_000); } export const waitLong = async (page) => { diff --git a/utils/defaultvalues.ts b/utils/defaultvalues.ts index 203c91d..58b3417 100644 --- a/utils/defaultvalues.ts +++ b/utils/defaultvalues.ts @@ -39,5 +39,5 @@ export const DEFAULT_VALUES = { totsuUrl: `${ENVIRONMENT_VALUES.amosaaUrl}/#/ammatillinen/fi/koulutustoimija/${koulutustoimija}/toteutussuunnitelmat`, julkinenUrl: `${ENVIRONMENT_VALUES.baseJulkinenUrl}`, julkinenAmmatillinenUrl: `${ENVIRONMENT_VALUES.baseJulkinenUrl}#/fi/selaus/ammatillinen`, - julkinenVarhaiskasvatusUrl: `${ENVIRONMENT_VALUES.baseJulkinenUrl}#/fi/kooste/varhaiskasvatus`, + julkinenKoosteUrlUrl: `${ENVIRONMENT_VALUES.baseJulkinenUrl}#/fi/kooste/`, }