Skip to content

Create new order files #7

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

100 changes: 100 additions & 0 deletions src/helpers/functions.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
export function jdiNaRegistraci(page) {
return page.goto('/registrace')
}

export function jmenoAPrijmeni(page) {
return page.getByLabel("Jméno a příjmení")
}

export function emailPole(page) {
return page.getByLabel("Email")
}

export function hesloPole(page) {
return page.getByLabel("Heslo")
}

export function kontrolaHeslaPole(page) {
return page.getByLabel("Kontrola hesla")
}

export function tlacitkoZaregistrovat(page) {
return page.getByRole("button", { name: "Zaregistrovat" })
}

export function prihlasen(page) {
return page.getByRole("button", { name: "Iv Jindrová" })
}

export function neprihlasen(page) {
return page.getByRole('link', { name: ' Přihlásit' })
}

export function generujNáhodneIco() {
return String(Math.floor(Math.random() * 90000000) + 10000000)
}

export function generujNazevSkoly() {
const krajskáMěsta = [
"Praha", "Brno", "Ostrava", "Plzeň", "Liberec",
"Hradec Králové", "Olomouc", "Pardubice", "Ústí nad Labem",
"Zlín", "České Budějovice"
];

const typSkoly = Math.random() < 0.5 ? "ZŠ" : "MŠ";

const randomIndex = Math.floor(Math.random() * krajskáMěsta.length);
const mesto = krajskáMěsta[randomIndex];

const cisloSkoly = Math.floor(Math.random() * 100) + 1;

return `${typSkoly} ${mesto} ${cisloSkoly}`;
}

export function generujZastupce() {
const jmena = [
"Alena", "Andrea", "Barbora", "Cecílie", "Daniela",
"Evžénie", "Gabriela", "Ivana", "Jitka",
"Karolína", "Lucie"
];

const prijmeni = [
"Nová", "Stará", "Zelená", "Červená", "Fialová",
"Novotná", "Nováková", "Müllerová", "Zemanová",
"Grosmanová", "Dvořáková"
];

const titul = Math.random() < 0.5 ? "Ing." : "Mgr.";

const nahodneJmeno = jmena[Math.floor(Math.random() * jmena.length)];
const nahodnePrijmeni = prijmeni[Math.floor(Math.random() * prijmeni.length)];

return `${titul} ${nahodneJmeno} ${nahodnePrijmeni}`;
}

export function generujDnesniDen() {
const dnes = new Date();
const rok = dnes.getFullYear();
const mesic = dnes.getMonth() + 1;
const den = dnes.getDate();
const datumJakoRetezec = `${den}.${mesic}.${rok}`;
console.log(datumJakoRetezec);
return datumJakoRetezec
}

export function pridejNahodneDnyKDatu(datum) {
function generujNahodneCislo() {
return Math.floor(Math.random() * 11) + 4;
}

const nahodnyPocetDni = generujNahodneCislo();

datum.setDate(datum.getDate() + nahodnyPocetDni);

return datum.toLocaleDateString('cs-CZ');
}

export async function ziskejPlaceholderText(selector, page) {
const element = await page.$(selector);
return await element.evaluate(element => element.placeholder);
}
93 changes: 93 additions & 0 deletions src/tests/cistykod.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
import { expect, test } from "@playwright/test";

test("Zobrazení formuláře registrace", async ({ page }) => {
await page.goto("/registrace");

const jmenoAPrijmeni = page.getByLabel("Jméno a příjmení");
const emailPole = page.getByLabel("Email");
const hesloPole = page.getByLabel("Heslo");
const kontrolaHeslaPole = page.getByLabel("Kontrola hesla");
const tlacitkoZaregistrovat = page.getByRole("button", { name: "Zaregistrovat" });

await expect(jmenoAPrijmeni).toBeVisible();
await expect(emailPole).toBeVisible();
await expect(hesloPole).toBeVisible();
await expect(kontrolaHeslaPole).toBeVisible();

await expect(tlacitkoZaregistrovat).toBeVisible();
await expect(tlacitkoZaregistrovat).toHaveText("Zaregistrovat");
})

test("Validní registrace uživatele", async ({ page }) => {
await page.goto("/registrace");

// Proměnné k jednotlivým objektům
const jmenoAPrijmeni = page.getByLabel("Jméno a příjmení");
const emailPole = page.getByLabel("Email");
const hesloPole = page.getByLabel("Heslo");
const kontrolaHeslaPole = page.getByLabel("Kontrola hesla");
const tlacitkoZaregistrovat = page.getByRole("button", { name: "Zaregistrovat" });
const prihlasen = page.getByRole("button", { name: "Iv Jindrová" })
const prihlasen1 = page.locator('strong:has-text("Iv Jindrová")');

await jmenoAPrijmeni.fill("Iv Jindrová");
await emailPole.fill("[email protected]");
await hesloPole.fill("Zima2024!");
await kontrolaHeslaPole.fill("Zima2024!");
await tlacitkoZaregistrovat.click();

await expect(prihlasen).toHaveText("Iv Jindrová")

})

test("Nevalidní registrace uživatele - stejný email", async ({ page }) => {
await page.goto("/registrace");

const jmenoAPrijmeni = page.getByLabel("Jméno a příjmení");
const emailPole = page.getByLabel("Email");
const hesloPole = page.getByLabel("Heslo");
const kontrolaHeslaPole = page.getByLabel("Kontrola hesla");
const tlacitkoZaregistrovat = page.getByRole("button", { name: "Zaregistrovat" });

const textovaChybaEmail = page.locator("span.invalid-feedback");
const chybaSkakaci = page.locator(".toast.toast-error");

await jmenoAPrijmeni.fill("Ivan Jindrová");
await emailPole.fill("[email protected]");
await hesloPole.fill("Zima2024!");
await kontrolaHeslaPole.fill("Zima2024!");
await tlacitkoZaregistrovat.click();

await textovaChybaEmail.isVisible();
await chybaSkakaci.isVisible();

await expect(textovaChybaEmail).toHaveText("Účet s tímto emailem již existuje");
await expect(chybaSkakaci).toHaveText("׊patně zadané poleNěkteré pole obsahuje špatně zadanou hodnotu")

})

test("Nevalidní registrace uživatele - heslo jen s čísly", async ({ page }) => {
await page.goto("/registrace");

const jmenoAPrijmeni = page.getByLabel("Jméno a příjmení");
const emailPole = page.getByLabel("Email");
const hesloPole = page.getByLabel("Heslo");
const kontrolaHeslaPole = page.getByLabel("Kontrola hesla");
const tlacitkoZaregistrovat = page.getByRole("button", { name: "Zaregistrovat" });

const textovaChybaEmailCisla = page.getByText('Heslo musí obsahovat minimálně 6 znaků, velké i malé písmeno a číslici')
const chybaSkakaci = page.locator(".toast.toast-error");

await jmenoAPrijmeni.fill("Iva Jindrová");
await emailPole.fill("[email protected]");
await hesloPole.fill("123456");
await kontrolaHeslaPole.fill("123456");
await tlacitkoZaregistrovat.click();

await textovaChybaEmailCisla.isVisible();
await chybaSkakaci.isVisible();

await expect(textovaChybaEmailCisla).toHaveText("Heslo musí obsahovat minimálně 6 znaků, velké i malé písmeno a číslici");
await expect(chybaSkakaci).toHaveText("׊patně zadaná poleVíce polí obsahuje špatně zadanou hodnotu")

})
6 changes: 0 additions & 6 deletions src/tests/example.spec.js

This file was deleted.

119 changes: 119 additions & 0 deletions src/tests/forTeachers/novaObjednavka.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
import { expect, test } from "@playwright/test";
import { StrankaNoveObjednavky } from "./pages/novaObjednavka.page";
import { generujDnesniDen, generujNazevSkoly, generujNáhodneIco, generujZastupce, neprihlasen, pridejNahodneDnyKDatu, ziskejPlaceholderText } from "../../helpers/functions";

test.describe("Zobrazení formuláře objednávky", async () => {
test.beforeEach(async ({page}) => {
const strankaNoveObjednavky = new StrankaNoveObjednavky(page);
await strankaNoveObjednavky.otevrit();

const neprihlaseni = await neprihlasen(page);
await expect(neprihlaseni).toHaveText("Přihlásit");
});

test("Lze zobrazit objednávkový formulář", async ({ page }) => {
const strankaNoveObjednavky = new StrankaNoveObjednavky(page);
await strankaNoveObjednavky.otevrit();
await expect(strankaNoveObjednavky.heading).toBeVisible();
})

test("Lze prokliknout na stránku s objednávkou", async ({ page }) => {
await page.goto("https://team8-2022brno.herokuapp.com");

const proklikProUcitele = new StrankaNoveObjednavky(page);
await expect(proklikProUcitele.proUcitele).toBeVisible();
await proklikProUcitele.proUcitele.click();

const proklikObjednavkaMSZS = new StrankaNoveObjednavky(page);
await proklikObjednavkaMSZS.objednavkaMSZS.click();

await page.getByRole('button', { name: 'Pro učitelé' }).click();
await page.locator('.dropdown-item').filter({ hasText: 'Objednávka pro MŠ/ZŠ' }).click();
})

test("Lze vyplnit IČO a dojde k hledání v Ares", async ({ page }) => {
const strankaNoveObjednavky = new StrankaNoveObjednavky(page);
const icoNahodne = await generujNáhodneIco();
await strankaNoveObjednavky.ico.fill(icoNahodne);
console.log(icoNahodne);
await expect(strankaNoveObjednavky.ico).toHaveValue(icoNahodne);

await strankaNoveObjednavky.page.locator('#ico').press('Enter');

await expect(strankaNoveObjednavky.odberatel).not.toBeEditable();
await expect(strankaNoveObjednavky.celaAdresa).not.toBeEditable();

const selektorOdberatel = '#client';
const placeHoldTextOdb = await ziskejPlaceholderText(selektorOdberatel, strankaNoveObjednavky.page);
console.log('Text z placeholderu na poli Odběratel:', placeHoldTextOdb);

const selektorAdresa = '#address';
const placeHoldTextAdr = await ziskejPlaceholderText(selektorAdresa, strankaNoveObjednavky.page);
console.log('Text z placeholderu na poli Úplná adresa:', placeHoldTextAdr);

await expect(strankaNoveObjednavky.toggle).toBeVisible();
});
})

test.describe("Vytvoření objednávky", async () => {
test.beforeEach(async ({page}) => {
const strankaNoveObjednavky = new StrankaNoveObjednavky(page);
await strankaNoveObjednavky.otevrit();

const neprihlaseni = await neprihlasen(page);
await expect(neprihlaseni).toHaveText("Přihlásit");
});

test("Validní vyplnění a odeslání objednávky", async ({ page }) => {
const strankaNoveObjednavky = new StrankaNoveObjednavky(page);

//Nejprve chci vyplnit název odběratele
const odberatelNahodne = await generujNazevSkoly();
await strankaNoveObjednavky.odberatel.fill(odberatelNahodne);
console.log(odberatelNahodne);
await expect(strankaNoveObjednavky.odberatel).toHaveValue(odberatelNahodne);

//Pak až IČO
const icoNahodne = await generujNáhodneIco();
await strankaNoveObjednavky.ico.fill(icoNahodne);
console.log(icoNahodne);
await expect(strankaNoveObjednavky.ico).toHaveValue(icoNahodne);

await strankaNoveObjednavky.celaAdresa.fill("Nová ulice 1685/8, 140 00 Praha");

const zastupceNahodne = await generujZastupce();
await strankaNoveObjednavky.zastupce.fill(zastupceNahodne);
console.log(zastupceNahodne);
await expect(strankaNoveObjednavky.zastupce).toHaveValue(zastupceNahodne);

await strankaNoveObjednavky.kontaktniOsoba.fill(zastupceNahodne);
await strankaNoveObjednavky.telefon.fill("796852147");
await strankaNoveObjednavky.email.fill("[email protected]");

const dnesek = await generujDnesniDen();
await strankaNoveObjednavky.startDate.fill(dnesek);

const mojeDatum = new Date();
const noveDatum = pridejNahodneDnyKDatu(mojeDatum);
await strankaNoveObjednavky.endDate.fill(noveDatum);

await strankaNoveObjednavky.primestkyTabor.click();
await strankaNoveObjednavky.pocetDeti.fill("12");
await strankaNoveObjednavky.vekDeti.fill("7");
await strankaNoveObjednavky.doprovod.fill("4");
await strankaNoveObjednavky.ulozitObjednavku.click();
//await page.pause(50000)

//await expect(page.locator('Děkujeme za objednávku')).toHaveText("Děkujeme za objednávku");

})

test("Nelze odeslat prázdnou objednávku", async ({ page }) => {
const strankaNoveObjednavky = new StrankaNoveObjednavky(page);

await strankaNoveObjednavky.primestkyTabor.click();
await strankaNoveObjednavky.ulozitObjednavku.click();

await expect(strankaNoveObjednavky.heading).toBeVisible();
})
})
32 changes: 32 additions & 0 deletions src/tests/forTeachers/pages/novaObjednavka.page.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
export class StrankaNoveObjednavky {
constructor(page) {
this.page = page;
this.heading = this.page.getByRole("heading", { level: 3 });
this.proUcitele = this.page.getByRole('button', { name: 'Pro učitelé' });
this.objednavkaMSZS = this.page.getByRole('link', { name: 'Objednávka pro MŠ/ZŠ' })
this.ico = this.page.getByLabel('IČO')
this.odberatel = this.page.getByLabel('Odběratel')
this.celaAdresa = this.page.getByLabel('Úplná adresa')
this.toggle = this.page.getByText('Data z ARESu se nepodařilo načíst, vyplňte je prosím ručně')
this.primestkyTabor = this.page.getByRole('tab', { name: 'Příměstský tábor' })
this.ulozitObjednavku = this.page.getByRole('button', { name: 'Uložit objednávku' })

this.zastupce = this.page.getByLabel('Zastoupena - ředitel(ka) školy')
this.kontaktniOsoba = this.page.getByLabel('Jméno a příjmení')
this.telefon = this.page.getByLabel('Telefon')
this.email = this.page.getByLabel('Email')
this.startDate = this.page.getByLabel('Upřednostňovaný termín 1')
this.endDate = this.page.locator('#end_date_1')
this.pocetDeti = this.page.getByRole('spinbutton', { name: 'Počet dětí' })
this.vekDeti = this.page.getByRole('textbox', { name: 've věku' })
this.doprovod = this.page.getByRole('spinbutton', { name: 'Počet pedagogického doprovodu' })
}

async otevrit() {
await this.page.goto("/objednavka/pridat")
}




}
Loading