Změny v textacích a testech

This commit is contained in:
kankys committed 2026-07-26 22:25:12 +02:00
1 parent c815d8ca86
commit 6338ddfdca
9 files changed
+94 -140

No files matched your search

+20
View File
@@ -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}`);
}
}
+4
View File
@@ -15,5 +15,9 @@
"devDependencies": { "devDependencies": {
"@playwright/test": "^1.60.0", "@playwright/test": "^1.60.0",
"@types/node": "^25.6.0" "@types/node": "^25.6.0"
},
"scripts": {
"test": "playwright test",
"test:prod": "BASE_URL=https://music.lukan.cz playwright test homePage.test.ts"
} }
} }
+10 -64
View File
@@ -1,79 +1,25 @@
import { defineConfig, devices } from '@playwright/test'; 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({ export default defineConfig({
testDir: './e2e', testDir: './tests',
/* Run tests in files in parallel */
fullyParallel: true, 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', reporter: 'html',
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
use: { use: {
/* Base URL to use in actions like `await page.goto('')`. */ // Pokud v terminálu nastavíš BASE_URL, použije ho. Jinak použije localhost.
// baseURL: 'http://localhost:3000', baseURL: process.env.BASE_URL || 'http://localhost:8080',
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
trace: 'on-first-retry', trace: 'on-first-retry',
}, },
webServer: {
/* Configure projects for major browsers */ // 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: [ projects: [
{ {
name: 'chromium', name: 'chromium',
use: { ...devices['Desktop Chrome'] }, 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,
// },
}); });
-20
View File
@@ -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();
});
+19
View File
@@ -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.');
});
});
+5 -5
View File
@@ -1,9 +1,9 @@
# 💿 Každý den jedno album. 🎸 Zažíj numetal a grunge každý den. # 💿 Každý den jedno album. 🎸 Denní hudební doporučení.
## 💪 Zvládneš tuto výzvu v roce 2026? ## 🎵 365 alb na celý rok
## 🤟 Ukaž že na to máš . ## 🤟 Prozkoumej historii rockové hudby.
Odkaz na [výzvu](https://music.lukan.cz) Odkaz na [Denní Hudební Doporučení](https://music.lukan.cz)
**Co je nového:**
🎸 **Glitch animace** na nadpisu 🎸 **Glitch animace** na nadpisu
- 📺 **Scanlines overlay** (jako starý TV) - 📺 **Scanlines overlay** (jako starý TV)
+13 -14
View File
@@ -8,11 +8,11 @@
<meta property="og:url" content="https://music.lukan.cz/" /> <meta property="og:url" content="https://music.lukan.cz/" />
<meta <meta
property="og:title" property="og:title"
content="Hudební Výzva 2026: Grunge & Nu-Metal" content="Denní Hudební Doporučení: 365 Alb na Celý Rok"
/> />
<meta <meta
property="og:description" property="og:description"
content="Každý den jedno zásadní album. Zvládneš to se mnou? 365 dní, 365 desek." content="Každý den jedno zásadní album. Prozkoumejte historii rockové hudby s 365 doporučeními na celý rok."
/> />
<meta <meta
property="og:image" property="og:image"
@@ -22,11 +22,11 @@
<meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:card" content="summary_large_image" />
<meta <meta
name="twitter:title" name="twitter:title"
content="Hudební Výzva 2026: Grunge & Nu-Metal" content="Denní Hudební Doporučení: 365 Alb na Celý Rok"
/> />
<meta <meta
name="twitter:description" name="twitter:description"
content="Každý den jedno zásadní album. Přidej se!" content="Každý den jedno zásadní album. Prozkoumejte historii rockové hudby s 365 doporučeními."
/> />
<meta <meta
name="twitter:image" name="twitter:image"
@@ -34,7 +34,7 @@
/> />
<meta <meta
name="Hudební kalendář" name="Hudební kalendář"
content="Každý den jedno album. Zažíj numetal a grunge každý den." content="Každý den jedno album. Denní hudební doporučení."
/> />
<link rel="stylesheet" href="styleabout.css" /> <link rel="stylesheet" href="styleabout.css" />
<link rel="shortcut icon" href="img/electric-guitar_12494348.png" /> <link rel="shortcut icon" href="img/electric-guitar_12494348.png" />
@@ -100,7 +100,7 @@
</head> </head>
<body> <body>
<div class="about-container"> <div class="about-container">
<h1>🎸 Zažij numetal a grunge každý den, po celý rok. 💿</h1> <h1>🎸 Denní hudební doporučení: 365 alb na celý rok. 💿</h1>
<p class="subtitle"> <p class="subtitle">
<strong <strong
>💿 Každý den jedno album. 💿</strong >💿 Každý den jedno album. 💿</strong
@@ -114,7 +114,7 @@
hudebních stream služeb neustále točí v kruhu? Nabízejí nám hudebních stream služeb neustále točí v kruhu? Nabízejí nám
pořád to samé, co už známe. Řekl jsem si to není pro mne. pořád to samé, co už známe. Řekl jsem si to není pro mne.
Chtěl jsem se vrátit k poslechu – od první do poslední Chtěl jsem se vrátit k poslechu – od první do poslední
skladby. A tak vznikl můj projekt: Hudební výzva 2026. skladby. A tak vznikl můj projekt: Denní hudební doporučení.
</p> </p>
<br /> <br />
<p> <p>
@@ -160,15 +160,14 @@
</p> </p>
<br /> <br />
<p> <p>
Vytvořil jsem jednoduchou webovou aplikaci, která mi (a teď Vytvořil jsem jednoduchou webovou aplikaci, která vám
i vám) každý den servíruje jedno zásadní album z této éry. každý den servíruje jedno zásadní album z této éry.
Někdy je to depresivní grungeová balada, jindy agresivní Někdy je to depresivní grungeová balada, jindy agresivní
nu-metalová smršť. nu-metalová smršť.
</p> </p>
<br /> <br />
<p> <p>
Zvu vás, abyste do toho šli se mnou. Nemusíte hledat, co si Nemusíte hledat, co si pustit. Stačí otevřít aplikaci a nechat se vést.
pustit. Stačí otevřít aplikaci a nechat se vést.
</p> </p>
<br /> <br />
<p> <p>
@@ -220,11 +219,11 @@
</p> </p>
</div> </div>
<p class="copyright"> <p class="copyright">
&copy; 2025 - 2026 Tvůj Hudební Kurátor Kankys &copy; 2025 - 2026 Denní Hudební Doporučení
</p> </p>
<p style="font-size: 0.8em; margin-top: 10px"> <p style="font-size: 0.8em; margin-top: 10px">
<a href="gdpr.html" class="links" <a href="gdpr.html" class="links"
>Ochrana soukromí a jiné žvásty (GDPR)</a >Ochrana soukromí a další informace (GDPR)</a
> >
</p> </p>
<section class="photo"> <section class="photo">
@@ -232,7 +231,7 @@
id="vyzva" id="vyzva"
class="zoom" class="zoom"
src="./img/vyzva-EDIT.jpg" src="./img/vyzva-EDIT.jpg"
alt="Výzva" alt="Denní Hudební Doporučení"
/> />
</section> </section>
<!--<a <!--<a
+21 -35
View File
@@ -1,46 +1,32 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="cs"> <html lang="cs">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<title>Zažij numetal a grunge každý den, po celý rok.</title> <title>Zažij numetal a grunge každý den, po celý rok.</title>
<meta property="og:type" content="website" /> <meta property="og:type" content="website" />
<meta property="og:url" content="https://music.lukan.cz/" /> <meta property="og:url" content="https://music.lukan.cz/" />
<meta property="og:title" content="Každý den jedno album: Grunge & Nu-Metal" /> <meta property="og:title" content="🎸 Denní Hudební Doporučení: 365 Alb na Celý Rok" />
<meta <meta property="og:description"
property="og:description" content="Každý den jedno ikonické grunge nebo nu-metal album. Prozkoumejte historii rockové hudby s 365 doporučeními na celý rok." />
content="Každý den jedno zásadní album. Zvládneš to se mnou? 365 dní, 365 desek." <meta property="og:image" content="https://music.lukan.cz/img/vyzva-EDIT.jpg" />
/>
<meta
property="og:image"
content="https://music.lukan.cz/img/vyzva-EDIT.jpg"
/>
<meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:card" content="summary_large_image" />
<meta <meta name="twitter:title" content="🎸 Denní Hudební Doporučení: 365 Alb na Celý Rok" />
name="twitter:title" <meta name="twitter:description"
content="Každý den jedno album: Grunge & Nu-Metal" content="Každý den jedno ikonické grunge nebo nu-metal album. Prozkoumejte historii rockové hudby s 365 doporučeními na celý rok." />
/> <meta name="twitter:image" content="https://music.lukan.cz/img/vyzva-EDIT.jpg" />
<meta <meta name="description"
name="twitter:description" content="Každý den jedno ikonické grunge nebo nu-metal album. Prozkoumejte historii rockové hudby s 365 doporučeními na celý rok." />
content="Každý den jedno zásadní album. Přidej se!"
/>
<meta
name="twitter:image"
content="https://music.lukan.cz/img/vyzva-EDIT.jpg"
/>
<meta
name="Hudební kalendář"
content="Každý den jedno album. Zažíj numetal a grunge každý den."
/>
<link rel="stylesheet" href="style.css" /> <link rel="stylesheet" href="style.css" />
<link rel="shortcut icon" href="img/electric-guitar_12494348.png" /> <link rel="shortcut icon" href="img/electric-guitar_12494348.png" />
<script defer src="https://analytics.lukan.cz/script.js" data-website-id="380320b5-153c-4d12-a6c6-49f28e0daa86"></script> <script defer src="https://analytics.lukan.cz/script.js"
data-website-id="380320b5-153c-4d12-a6c6-49f28e0daa86"></script>
</head> </head>
<body> <body>
<h1>🎸 Zažij numetal a grunge každý den, po celý rok. 💿</h1> <h1>🎸 Denní Hudební Doporučení: 365 Alb na Celý Rok 💿</h1>
<p> <p>
<strong <strong>💿 Každý den jedno ikonické grunge nebo nu-metal album. Prozkoumejte historii rockové hudby s 365 doporučeními! 💿</strong>
>💿 Každý den jedno album. 💿</strong
>
</p> </p>
<div id="zobrazeni-alba"></div> <div id="zobrazeni-alba"></div>
<div style="margin-top: 30px; margin-bottom: 20px"> <div style="margin-top: 30px; margin-bottom: 20px">
@@ -51,17 +37,17 @@
<div id="archiv-container" class="archiv-grid"></div> <div id="archiv-container" class="archiv-grid"></div>
<div style="margin-top: 30px; margin-bottom: 20px"> <div style="margin-top: 30px; margin-bottom: 20px">
<button id="btn-footer" class="btn-footer"><br /> <button id="btn-footer" class="btn-footer"><br />
<a href="gdpr.html" class="link-footer" <a href="gdpr.html" class="link-footer">Ochrana soukromí a další informace (GDPR)
>Ochrana soukromí a jiné žvásty (GDPR) <p class="copyright">&copy; 2025 - 2026 Denní Hudební Doporučení</p>
<p class="copyright">&copy; 2025 - 2026 Tvůj Hudební Kurátor Kankys</p></a </a>
>
</button> </button>
</div> </div>
<section class="photo"> <section class="photo">
<img id="vyzva" class="zoom" src="./img/vyzva-EDIT.jpg" alt="Výzva" /> <img id="vyzva" class="zoom" src="./img/vyzva-EDIT.jpg" alt="Grunge a Nu-Metal Hudební Výzva - 365 Alb" />
</section> </section>
<script src="musicData.js"></script> <script src="musicData.js"></script>
<script src="script.js"></script> <script src="script.js"></script>
</body> </body>
</html> </html>
+2 -2
View File
@@ -45,7 +45,7 @@ if (dnesniAlbum) {
// Alert bez alba // Alert bez alba
vystup.innerHTML = ` vystup.innerHTML = `
<div class="album-card"> <div class="album-card">
<h3>Dnes není v plánu žádné album 🎵</h3> <h3>Dnes není žádné doporučení 🎵</h3>
<p>Zkus se podívat zítra!</p> <p>Zkus se podívat zítra!</p>
</div> </div>
`; `;
@@ -74,7 +74,7 @@ btnArchiv.addEventListener("click", () => {
// D. Pokud žádná minulá alba nejsou // D. Pokud žádná minulá alba nejsou
if (minulaAlba.length === 0) { if (minulaAlba.length === 0) {
divArchiv.innerHTML = divArchiv.innerHTML =
"<p>Zatím tu žádná historie není. Přijď zítra! ⏳</p>"; "<p>Zatím tu žádná doporučení nejsou. Přijď zítra! ⏳</p>";
return; return;
} }