fix: oprava parsování TechTower po změně jejich webu
CI / Generate TypeScript types (push) Successful in 11s
CI / Server unit tests (push) Successful in 30s
CI / Build server (push) Successful in 29s
CI / Build client (push) Successful in 41s
CI / Playwright E2E tests (push) Successful in 2m0s
CI / Build and push Docker image (push) Successful in 47s
CI / Notify (push) Successful in 2s

This commit is contained in:
mates committed 2026-10-09 14:37:09 +02:00
1 parent 7cda7cfdb6
commit 9fee4a1538
4 files changed
+370 -1

No files matched your search

+37
View File
@@ -129,6 +129,43 @@ describe('TechTower parser – nový formát 07/2026', () => {
});
});
describe('TechTower parser – nový formát 10/2026', () => {
// Pondělí 5.10.2026, stránka obsahuje i menu na následující týden
const MONDAY_2026_10 = new Date('2026-10-05');
beforeEach(() => {
mockedAxios.get = jest.fn().mockResolvedValue({ data: loadFixture('techtower-2026-10.html') });
});
test('vrátí pole o délce 5 s jídly pro každý den', async () => {
const menu = await getMenuTechTower(MONDAY_2026_10);
expect(menu).toHaveLength(5);
for (const den of menu) {
expect(den).toHaveLength(5);
}
});
test('nezahrne menu následujícího týdne', async () => {
const menu = await getMenuTechTower(MONDAY_2026_10);
expect(menu[0][0].name).toBe('Mexická fazolačka s kukuřicí a masem');
expect(menu.flat().some(f => f.name.startsWith('Hrášková'))).toBe(false);
});
test('každý den začíná polévkou s cenou a alergeny', async () => {
const menu = await getMenuTechTower(MONDAY_2026_10);
for (const den of menu) {
expect(den[0].isSoup).toBe(true);
expect(den[0].price).toBe('45\xA0Kč');
expect(den[0].allergens?.length).toBeGreaterThan(0);
expect(den.slice(1).some(f => f.isSoup)).toBe(false);
}
});
test('hodí StaleWeekError pro jiný týden', async () => {
await expect(getMenuTechTower(new Date('2026-10-12'))).rejects.toBeInstanceOf(StaleWeekError);
});
});
describe('SenkSerikova parser', () => {
beforeEach(() => {
// SenkSerikova parsuje arraybuffer – musíme vrátit Buffer, ne string