import * as fs from 'fs'; import * as path from 'path'; import axios from 'axios'; import { downloadSalaty } from '../chefie'; jest.mock('axios'); const mockedAxios = axios as jest.Mocked; const fixturesDir = path.join(__dirname, 'fixtures'); const loadFixture = (name: string) => fs.readFileSync(path.join(fixturesDir, name), 'utf-8'); beforeEach(() => { jest.resetAllMocks(); // První volání = stránka se seznamem salátů, následující volání = jednotlivé stránky salátů mockedAxios.get = jest.fn() .mockResolvedValueOnce({ data: loadFixture('chefie-salaty.html') }) .mockResolvedValueOnce({ data: loadFixture('chefie-salat-caesar.html') }) .mockResolvedValueOnce({ data: loadFixture('chefie-salat-recky.html') }); }); test('downloadSalaty vrátí seznam salátů', async () => { const salaty = await downloadSalaty(false); expect(salaty).toHaveLength(2); }); test('saláty mají name a ingredients', async () => { const salaty = await downloadSalaty(false); expect(salaty[0].name).toBe('Caesar salát'); expect(salaty[0].ingredients).toContain('Kuřecí maso'); }); test('cena salátu zahrnuje pevný příplatek 13 Kč za obal', async () => { const salaty = await downloadSalaty(false); // Caesar sticker price = 129, box = 13 → (129 + 13) * 100 haléřů expect(salaty[0].price).toBe((129 + 13) * 100); // Řecký sticker price = 119, box = 13 → (119 + 13) * 100 haléřů expect(salaty[1].price).toBe((119 + 13) * 100); });