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
+107 -153

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": {
"@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"
}
}
+11 -65
View File
@@ -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,
// },
});
});
-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.
## 💪 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)
+13 -14
View File
@@ -8,11 +8,11 @@
<meta property="og:url" content="https://music.lukan.cz/" />
<meta
property="og:title"
content="Hudební Výzva 2026: Grunge & Nu-Metal"
content="Denní Hudební Doporučení: 365 Alb na Celý Rok"
/>
<meta
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
property="og:image"
@@ -22,11 +22,11 @@
<meta name="twitter:card" content="summary_large_image" />
<meta
name="twitter:title"
content="Hudební Výzva 2026: Grunge & Nu-Metal"
content="Denní Hudební Doporučení: 365 Alb na Celý Rok"
/>
<meta
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
name="twitter:image"
@@ -34,7 +34,7 @@
/>
<meta
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="shortcut icon" href="img/electric-guitar_12494348.png" />
@@ -100,7 +100,7 @@
</head>
<body>
<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">
<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
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í
skladby. A tak vznikl můj projekt: Hudební výzva 2026.
skladby. A tak vznikl můj projekt: Denní hudební doporučení.
</p>
<br />
<p>
@@ -160,15 +160,14 @@
</p>
<br />
<p>
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šť.
</p>
<br />
<p>
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.
</p>
<br />
<p>
@@ -220,11 +219,11 @@
</p>
</div>
<p class="copyright">
&copy; 2025 - 2026 Tvůj Hudební Kurátor Kankys
&copy; 2025 - 2026 Denní Hudební Doporučení
</p>
<p style="font-size: 0.8em; margin-top: 10px">
<a href="gdpr.html" class="links"
>Ochrana soukromí a jiné žvásty (GDPR)</a
>Ochrana soukromí a další informace (GDPR)</a
>
</p>
<section class="photo">
@@ -232,7 +231,7 @@
id="vyzva"
class="zoom"
src="./img/vyzva-EDIT.jpg"
alt="Výzva"
alt="Denní Hudební Doporučení"
/>
</section>
<!--<a
+33 -47
View File
@@ -1,67 +1,53 @@
<!DOCTYPE html>
<html lang="cs">
<head>
<head>
<meta charset="UTF-8" />
<title>Zažij numetal a grunge každý den, po celý rok.</title>
<meta property="og:type" content="website" />
<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:description"
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:title" content="🎸 Denní Hudební Doporučení: 365 Alb na Celý Rok" />
<meta 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." />
<meta property="og:image" content="https://music.lukan.cz/img/vyzva-EDIT.jpg" />
<meta name="twitter:card" content="summary_large_image" />
<meta
name="twitter:title"
content="Každý den jedno album: Grunge & Nu-Metal"
/>
<meta
name="twitter:description"
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."
/>
<meta name="twitter:title" content="🎸 Denní Hudební Doporučení: 365 Alb na Celý Rok" />
<meta 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." />
<meta name="twitter:image" content="https://music.lukan.cz/img/vyzva-EDIT.jpg" />
<meta name="description"
content="Každý den jedno ikonické grunge nebo nu-metal album. Prozkoumejte historii rockové hudby s 365 doporučeními na celý rok." />
<link rel="stylesheet" href="style.css" />
<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>
</head>
<body>
<h1>🎸 Zažij numetal a grunge každý den, po celý rok. 💿</h1>
<p>
<strong
>💿 Každý den jedno album. 💿</strong
>
</p>
<script defer src="https://analytics.lukan.cz/script.js"
data-website-id="380320b5-153c-4d12-a6c6-49f28e0daa86"></script>
</head>
<body>
<h1>🎸 Denní Hudební Doporučení: 365 Alb na Celý Rok 💿</h1>
<p>
<strong>💿 Každý den jedno ikonické grunge nebo nu-metal album. Prozkoumejte historii rockové hudby s 365 doporučeními! 💿</strong>
</p>
<div id="zobrazeni-alba"></div>
<div style="margin-top: 30px; margin-bottom: 20px">
<button id="btn-archiv" class="btn-main">
📂 Zobrazit předchozí alba
</button>
<button id="btn-archiv" class="btn-main">
📂 Zobrazit předchozí alba
</button>
</div>
<div id="archiv-container" class="archiv-grid"></div>
<div style="margin-top: 30px; margin-bottom: 20px">
<button id="btn-footer" class="btn-footer"><br/>
<a href="gdpr.html" class="link-footer"
>Ochrana soukromí a jiné žvásty (GDPR)
<p class="copyright">&copy; 2025 - 2026 Tvůj Hudební Kurátor Kankys</p></a
>
</button>
<button id="btn-footer" class="btn-footer"><br />
<a href="gdpr.html" class="link-footer">Ochrana soukromí a další informace (GDPR)
<p class="copyright">&copy; 2025 - 2026 Denní Hudební Doporučení</p>
</a>
</button>
</div>
<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>
<script src="musicData.js"></script>
<script src="script.js"></script>
</body>
</body>
</html>
+2 -2
View File
@@ -45,7 +45,7 @@ if (dnesniAlbum) {
// Alert bez alba
vystup.innerHTML = `
<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>
</div>
`;
@@ -74,7 +74,7 @@ btnArchiv.addEventListener("click", () => {
// D. Pokud žádná minulá alba nejsou
if (minulaAlba.length === 0) {
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;
}