CI / Generate TypeScript types (push) Successful in 21s
CI / Build server (push) Successful in 25s
CI / Server unit tests (push) Successful in 55s
CI / Build client (push) Successful in 33s
CI / Playwright E2E tests (push) Successful in 1m20s
CI / Build and push Docker image (push) Successful in 35s
CI / Notify (push) Successful in 2s
39 lines
1.5 KiB
TypeScript
39 lines
1.5 KiB
TypeScript
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<typeof axios>;
|
|
|
|
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);
|
|
});
|