fix: oprava parsování TechTower po změně HTML struktury
CI / Generate TypeScript types (push) Failing after 13m15s
CI / Server unit tests (push) Has been skipped
CI / Build server (push) Has been skipped
CI / Build client (push) Has been skipped
CI / Playwright E2E tests (push) Has been skipped
CI / Build and push Docker image (push) Has been skipped
CI / Notify (push) Successful in 2s
CI / Generate TypeScript types (push) Failing after 13m15s
CI / Server unit tests (push) Has been skipped
CI / Build server (push) Has been skipped
CI / Build client (push) Has been skipped
CI / Playwright E2E tests (push) Has been skipped
CI / Build and push Docker image (push) Has been skipped
CI / Notify (push) Successful in 2s
This commit is contained in:
@@ -87,6 +87,48 @@ describe('TechTower parser', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('TechTower parser – nový formát 07/2026', () => {
|
||||
// Pondělí 6.7.2026 (pondělí je svátek, hlavička začíná úterým "7. 7.-10. 7.")
|
||||
const MONDAY_2026 = new Date('2026-07-06');
|
||||
|
||||
beforeEach(() => {
|
||||
mockedAxios.get = jest.fn().mockResolvedValue({ data: loadFixture('techtower-2026-07.html') });
|
||||
});
|
||||
|
||||
test('vrátí pole o délce 5', async () => {
|
||||
const menu = await getMenuTechTower(MONDAY_2026);
|
||||
expect(menu).toHaveLength(5);
|
||||
});
|
||||
|
||||
test('středeční menu obsahuje polévku a hlavní jídla s cenou', async () => {
|
||||
const menu = await getMenuTechTower(MONDAY_2026);
|
||||
// index 2 = středa (Boršč + hlavní jídla)
|
||||
expect(menu[2].some(f => f.isSoup)).toBe(true);
|
||||
expect(menu[2].some(f => !f.isSoup && f.price.includes('Kč'))).toBe(true);
|
||||
});
|
||||
|
||||
test('cena i alergeny jsou správně odděleny od názvu jídla', async () => {
|
||||
const menu = await getMenuTechTower(MONDAY_2026);
|
||||
const polevka = menu[2].find(f => f.isSoup);
|
||||
expect(polevka).toBeDefined();
|
||||
// "Boršč 1,7,9 — 45 Kč" → název bez ceny a bez alergenů, cena a alergeny zvlášť
|
||||
expect(polevka!.name).not.toMatch(/Kč/);
|
||||
expect(polevka!.name).not.toMatch(/\d/);
|
||||
expect(polevka!.price).toContain('Kč');
|
||||
expect(Array.isArray(polevka!.allergens)).toBe(true);
|
||||
expect(polevka!.allergens!.length).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
test('nehodí StaleWeekError pro aktuální týden, i když pondělí je svátek', async () => {
|
||||
await expect(getMenuTechTower(MONDAY_2026)).resolves.toHaveLength(5);
|
||||
});
|
||||
|
||||
test('hodí StaleWeekError pro jiný týden', async () => {
|
||||
const jinyTyden = new Date('2026-06-01');
|
||||
await expect(getMenuTechTower(jinyTyden)).rejects.toBeInstanceOf(StaleWeekError);
|
||||
});
|
||||
});
|
||||
|
||||
describe('SenkSerikova parser', () => {
|
||||
beforeEach(() => {
|
||||
// SenkSerikova parsuje arraybuffer – musíme vrátit Buffer, ne string
|
||||
|
||||
Reference in New Issue
Block a user