From 35473f9107d351d3ca946caf1742944ec5875bba Mon Sep 17 00:00:00 2001 From: LDLenka <82710276+LDLenka@users.noreply.github.com> Date: Sat, 28 Dec 2024 20:07:41 +0100 Subject: [PATCH] domaci ukol 1 --- package-lock.json | 23 +++++++- package.json | 5 +- src/tests/example.spec.js | 6 -- src/tests/homework.spec.js | 116 +++++++++++++++++++++++++++++++++++++ 4 files changed, 140 insertions(+), 10 deletions(-) delete mode 100644 src/tests/example.spec.js create mode 100644 src/tests/homework.spec.js diff --git a/package-lock.json b/package-lock.json index a081b50..f0487cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,9 @@ "": { "name": "automation-playwright", "version": "1.0.0", + "dependencies": { + "uuid": "^11.0.3" + }, "devDependencies": { "@playwright/test": "^1.47.2", "@types/node": "^20.14.11", @@ -324,10 +327,11 @@ "dev": true }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1096,6 +1100,19 @@ "punycode": "^2.1.0" } }, + "node_modules/uuid": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.3.tgz", + "integrity": "sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index d2e57f0..471130c 100644 --- a/package.json +++ b/package.json @@ -7,5 +7,8 @@ "dotenv": "^16.4.5", "eslint": "^9.9.1" }, - "scripts": {} + "scripts": {}, + "dependencies": { + "uuid": "^11.0.3" + } } diff --git a/src/tests/example.spec.js b/src/tests/example.spec.js deleted file mode 100644 index 4d2f244..0000000 --- a/src/tests/example.spec.js +++ /dev/null @@ -1,6 +0,0 @@ -import { test } from "@playwright/test"; - -test("should open login page", async ({ page }) => { - await page.goto("/prihlaseni"); - console.log(await page.title()); -}); diff --git a/src/tests/homework.spec.js b/src/tests/homework.spec.js new file mode 100644 index 0000000..b5326fb --- /dev/null +++ b/src/tests/homework.spec.js @@ -0,0 +1,116 @@ +import { test, expect } from '@playwright/test'; +const { v4: uuidv4 } = require('uuid'); + + +function getUniqueEmail() { + const guid = uuidv4(); + const email = `lenka.nova${guid}@gmail123.com`; + return email +} + +test('1 formular registrace', async ({ page }) => { + await test.step('navigace do formulare registrace', async () => { + await page.goto('/prihlaseni'); + await page.getByRole('link', { name: 'Zaregistrujte se' }).click(); + await page.locator('.col-md-10').click(); + await page.locator('form div').filter({ hasText: 'Zaregistrovat' }).nth(1).click(); + }); + + await test.step('kontrola spravneho zobrazeni', async () => { + await test.step('overeni zobrazeni vstupních poli', async () => { + await expect(page.getByLabel('Jméno a příjmení')).toBeVisible() + await expect(page.getByLabel('Email')).toBeVisible() + await expect(page.getByLabel('Heslo')).toBeVisible() + await expect(page.getByLabel('Kontrola hesla')).toBeVisible() + }); + + await test.step('kontrola zobrazeni oproti screenshotu', async () => { + await page.setViewportSize({ width: 800, height: 600 }); + await page.screenshot({ path: "login_page_800_600.png" }); + + await expect(page).toHaveScreenshot({ path: "login_page_800_600.png" }); + }); + }); +}); + +test('2 validni registrace uzivatele ', async ({ page }) => { + const email = getUniqueEmail(); + const fullname = 'Lenka Nová'; + const password = 'Lenka123'; + + await test.step('registrace uzivatele', async () => { + await page.goto('/registrace'); + await page.getByLabel('Jméno a příjmení').fill(fullname); + await page.getByLabel('Email').fill(email); + await page.getByLabel('Heslo').fill(password); + await page.getByLabel('Kontrola hesla').fill(password); + await page.getByRole('button', { name: 'Zaregistrovat' }).click(); + }); + + await test.step('kontrola uspesne registrace', async () => { + await expect(page.locator('#navbarSupportedContent')).toContainText(fullname); + await page.getByText('Přihlášen').click(); + await expect(page.getByText('Přihlášen')).toBeVisible(); + await expect(page.locator('#navbarSupportedContent .navbar-right div.nav-item')).toContainText('Přihlášen'); + await expect(page.locator(`#navbarSupportedContent a[title="${fullname}"]`)).toContainText(fullname); + }); +}); + +test.describe('test registracniho formulare', () => { + test.beforeEach(async ({ page }) => { + await page.goto('/registrace'); + const fullname = 'Lenka Nová' + + await page.getByLabel('Jméno a příjmení').fill(fullname); + }); + + test('3 registrace uzivatele s existujicim mailem', async ({ page }) => { + + const existingEmail = `existujicimail@gmail123.com`; + const password = 'LenkaNova123' + + await page.getByLabel('Email').fill(existingEmail); + await page.getByLabel('Heslo').fill(password); + await page.getByLabel('Kontrola hesla').fill(password); + await page.getByRole('button', { name: 'Zaregistrovat' }).click(); + + await test.step('kongtrola stavu formulare', async () => { + const emailErrorMessage = page.locator('form span.invalid-feedback'); + const count = await emailErrorMessage.count(); + + await expect(count).toBe(1); + await expect(emailErrorMessage).toContainText('Účet s tímto emailem již existuje'); + }); + + await test.step('kontrola ze registrace neprobehla', async () => { + const elementLoggedIn = page.locator('div.nav-item span', { hasText: 'Přihlášen' }); + await expect(elementLoggedIn).toHaveCount(0); + }); + }); + + + test('4 registrace uzivatele s nevalidnim heslem (obsahujici pouze cisla)', async ({ page }) => { + + const email = getUniqueEmail(); + const password = '1234567890123'; + + await page.getByLabel('Email').fill(email); + await page.getByLabel('Heslo').fill(password); + await page.getByLabel('Kontrola hesla').fill(password); + await page.getByRole('button', { name: 'Zaregistrovat' }).click(); + + await test.step('kongtrola stavu formulare', async () => { + const passwordErrorMessage = page.locator('form span.invalid-feedback'); + const count = await passwordErrorMessage.count(); + + await expect(count).toBe(1); + await expect(passwordErrorMessage).toContainText('Heslo musí obsahovat minimálně 6 znaků, velké i malé písmeno a číslici'); + }); + + await test.step('kontrola ze registrace neprobehla', async () => { + const elementLoggedIn = page.locator('div.nav-item span', { hasText: 'Přihlášen' }); + await expect(elementLoggedIn).toHaveCount(0); + }); + }); +}); +