From 6338ddfdca64d908824f3868e9994b8f8997c1d7 Mon Sep 17 00:00:00 2001 From: kankys Date: Sun, 26 Jul 2026 22:25:12 +0200 Subject: [PATCH] =?UTF-8?q?Zm=C4=9Bny=20v=20textac=C3=ADch=20a=20testech?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/assets/pages/HomePage.ts | 20 +++++++++ test/package.json | 4 ++ test/playwright.config.ts | 76 +++++---------------------------- test/tests/example.spec.ts | 20 --------- test/tests/homePage.test.ts | 19 +++++++++ web/README.md | 10 ++--- web/about.html | 27 ++++++------ web/index.html | 80 +++++++++++++++-------------------- web/script.js | 4 +- 9 files changed, 107 insertions(+), 153 deletions(-) create mode 100644 test/assets/pages/HomePage.ts delete mode 100644 test/tests/example.spec.ts create mode 100644 test/tests/homePage.test.ts diff --git a/test/assets/pages/HomePage.ts b/test/assets/pages/HomePage.ts new file mode 100644 index 0000000..81b8c23 --- /dev/null +++ b/test/assets/pages/HomePage.ts @@ -0,0 +1,20 @@ +import { expect, type Locator, type Page } from '@playwright/test'; + +export class HomePage { + readonly page: Page; + + constructor(page: Page) { + this.page = page; + } + + // Přidej metodu pro navigaci na konkrétní soubor + async navigate(file: string = 'index.html') { + // Pokud jsme na lokálu, přidáme složku /web/ + // Pokud jsme na produkci, předpokládáme root / + const prefix = process.env.BASE_URL?.includes('music.lukan.cz') ? '' : 'web/'; + await this.page.goto(`${prefix}${file}`); + } + + + +} diff --git a/test/package.json b/test/package.json index c4fb59c..c456214 100644 --- a/test/package.json +++ b/test/package.json @@ -15,5 +15,9 @@ "devDependencies": { "@playwright/test": "^1.60.0", "@types/node": "^25.6.0" + }, + "scripts": { + "test": "playwright test", + "test:prod": "BASE_URL=https://music.lukan.cz playwright test homePage.test.ts" } } diff --git a/test/playwright.config.ts b/test/playwright.config.ts index dfe72ab..f07db51 100644 --- a/test/playwright.config.ts +++ b/test/playwright.config.ts @@ -1,79 +1,25 @@ import { defineConfig, devices } from '@playwright/test'; -/** - * Read environment variables from file. - * https://github.com/motdotla/dotenv - */ -// import dotenv from 'dotenv'; -// import path from 'path'; -// dotenv.config({ path: path.resolve(__dirname, '.env') }); - -/** - * See https://playwright.dev/docs/test-configuration. - */ export default defineConfig({ - testDir: './e2e', - /* Run tests in files in parallel */ + testDir: './tests', fullyParallel: true, - /* Fail the build on CI if you accidentally left test.only in the source code. */ - forbidOnly: !!process.env.CI, - /* Retry on CI only */ - retries: process.env.CI ? 2 : 0, - /* Opt out of parallel tests on CI. */ - workers: process.env.CI ? 1 : undefined, - /* Reporter to use. See https://playwright.dev/docs/test-reporters */ reporter: 'html', - /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ use: { - /* Base URL to use in actions like `await page.goto('')`. */ - // baseURL: 'http://localhost:3000', - - /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + // Pokud v terminálu nastavíš BASE_URL, použije ho. Jinak použije localhost. + baseURL: process.env.BASE_URL || 'http://localhost:8080', trace: 'on-first-retry', }, - - /* Configure projects for major browsers */ + webServer: { + // WebServer se spustí pouze tehdy, pokud NENÍ nastavena jiná BASE_URL + // (nechceme spouštět lokální server, když testujeme produkci) + command: process.env.BASE_URL ? undefined : 'npx http-server ../../ -p 8080', + url: process.env.BASE_URL || 'http://localhost:8080', + reuseExistingServer: !process.env.CI, + }, projects: [ { name: 'chromium', use: { ...devices['Desktop Chrome'] }, }, - - { - name: 'firefox', - use: { ...devices['Desktop Firefox'] }, - }, - - { - name: 'webkit', - use: { ...devices['Desktop Safari'] }, - }, - - /* Test against mobile viewports. */ - // { - // name: 'Mobile Chrome', - // use: { ...devices['Pixel 5'] }, - // }, - // { - // name: 'Mobile Safari', - // use: { ...devices['iPhone 12'] }, - // }, - - /* Test against branded browsers. */ - // { - // name: 'Microsoft Edge', - // use: { ...devices['Desktop Edge'], channel: 'msedge' }, - // }, - // { - // name: 'Google Chrome', - // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, - // }, ], - - /* Run your local dev server before starting the tests */ - // webServer: { - // command: 'npm run start', - // url: 'http://localhost:3000', - // reuseExistingServer: !process.env.CI, - // }, -}); +}); \ No newline at end of file diff --git a/test/tests/example.spec.ts b/test/tests/example.spec.ts deleted file mode 100644 index 42fc63e..0000000 --- a/test/tests/example.spec.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { test, expect } from '@playwright/test'; - -test('has title', async ({ page }) => { - await page.goto('https://music.lukan.cz'); - - // Expect a title "to contain" a substring. - await expect(page).toHaveTitle(/Zažij numetal a grunge každý den, po celý rok./); -}); - -test('get started link', async ({ page }) => { - await page.goto('https://music.lukan.cz'); - - - -// // Click the get started link. -// await page.getByRole('link', { name: 'O projektu' }).click(); - -// // Expects page to have a heading with the name of Installation. -// await expect(page.getByRole('heading', { name: 'Installation' })).toBeVisible(); -}); diff --git a/test/tests/homePage.test.ts b/test/tests/homePage.test.ts new file mode 100644 index 0000000..72cdf08 --- /dev/null +++ b/test/tests/homePage.test.ts @@ -0,0 +1,19 @@ +import { test, expect } from '@playwright/test'; +import { HomePage } from '../assets/pages/HomePage'; + + let homePage: HomePage; + +test.describe('Home page', () => { + + // Před každým testem vytvoříme novou instanci stránky + test.beforeEach(async ({ page }) => { + homePage = new HomePage(page); + await homePage.navigate(); + }); + + test('has title', async ({ page }) => { + await homePage.navigate('index.html'); + await expect(homePage.page).toHaveURL(/\/index\.html$/); // Odolné testování URL + await expect(page).toHaveTitle('Zažij numetal a grunge každý den, po celý rok.'); + }); +}); \ No newline at end of file diff --git a/web/README.md b/web/README.md index 41b8f3f..6d939f1 100644 --- a/web/README.md +++ b/web/README.md @@ -1,9 +1,9 @@ -# 💿 Každý den jedno album. 🎸 Zažíj numetal a grunge každý den. -## 💪 Zvládneš tuto výzvu v roce 2026? -## 🤟 Ukaž že na to máš . -Odkaz na [výzvu](https://music.lukan.cz) - +# 💿 Každý den jedno album. 🎸 Denní hudební doporučení. +## 🎵 365 alb na celý rok +## 🤟 Prozkoumej historii rockové hudby. +Odkaz na [Denní Hudební Doporučení](https://music.lukan.cz) +**Co je nového:** 🎸 **Glitch animace** na nadpisu - 📺 **Scanlines overlay** (jako starý TV) diff --git a/web/about.html b/web/about.html index 8510a68..e291836 100644 --- a/web/about.html +++ b/web/about.html @@ -8,11 +8,11 @@ @@ -100,7 +100,7 @@
-

🎸 Zažij numetal a grunge každý den, po celý rok. 💿

+

🎸 Denní hudební doporučení: 365 alb na celý rok. 💿

💿 Každý den jedno album. 💿

@@ -160,15 +160,14 @@


- Vytvořil jsem jednoduchou webovou aplikaci, která mi (a teď - i vám) každý den servíruje jedno zásadní album z této éry. + Vytvořil jsem jednoduchou webovou aplikaci, která vám + každý den servíruje jedno zásadní album z této éry. Někdy je to depresivní grungeová balada, jindy agresivní nu-metalová smršť.


- Zvu vás, abyste do toho šli se mnou. Nemusíte hledat, co si - pustit. Stačí otevřít aplikaci a nechat se vést. + Nemusíte hledat, co si pustit. Stačí otevřít aplikaci a nechat se vést.


@@ -220,11 +219,11 @@

Ochrana soukromí a jiné žvásty (GDPR)Ochrana soukromí a další informace (GDPR)

@@ -232,7 +231,7 @@ id="vyzva" class="zoom" src="./img/vyzva-EDIT.jpg" - alt="Výzva" + alt="Denní Hudební Doporučení" />