import { parseAllergens, isTextSoupName, sanitizeText, capitalize } from '../restaurants';

// parseAllergens
test('parseAllergens rozpozná alergeny na konci názvu', () => {
    const result = parseAllergens('Svíčková na smetaně 1, 3, 7');
    expect(result.cleanName).toBe('Svíčková na smetaně');
    expect(result.allergens).toEqual([1, 3, 7]);
});

test('parseAllergens vrátí prázdné pole alergenů, pokud žádné nejsou', () => {
    const result = parseAllergens('Svíčková na smetaně');
    expect(result.cleanName).toBe('Svíčková na smetaně');
    expect(result.allergens).toEqual([]);
});

test('parseAllergens zpracuje jednočíselný alergen', () => {
    const result = parseAllergens('Polévka dne 1');
    expect(result.cleanName).toBe('Polévka dne');
    expect(result.allergens).toEqual([1]);
});

test('parseAllergens neodstraní čísla uvnitř názvu', () => {
    const result = parseAllergens('Pizza č. 4 Quattro formaggi 1, 7');
    expect(result.allergens).toEqual([1, 7]);
    expect(result.cleanName).toContain('4');
});

// isTextSoupName
test('isTextSoupName vrátí true pro "polévka"', () => {
    expect(isTextSoupName('Polévka dne')).toBe(true);
});

test('isTextSoupName vrátí true pro "česnečka"', () => {
    expect(isTextSoupName('Česnečka se sýrem')).toBe(true);
});

test('isTextSoupName vrátí true pro "vývar"', () => {
    expect(isTextSoupName('Hovězí vývar s nudlemi')).toBe(true);
});

test('isTextSoupName vrátí false pro hlavní jídlo', () => {
    expect(isTextSoupName('Svíčková na smetaně s knedlíkem')).toBe(false);
});

test('isTextSoupName není case-sensitive', () => {
    expect(isTextSoupName('POLÉVKA DNE')).toBe(true);
});

// sanitizeText
test('sanitizeText odstraní tabulátor (nenahradí mezerou)', () => {
    expect(sanitizeText('\ttext')).toBe('text');
});

test('sanitizeText opraví mezery kolem čárky', () => {
    expect(sanitizeText('jídlo , příloha')).toBe('jídlo, příloha');
});

test('sanitizeText ořeže mezery ze začátku a konce', () => {
    expect(sanitizeText('  text  ')).toBe('text');
});

// capitalize
test('capitalize převede první písmeno na velké', () => {
    expect(capitalize('pondělí')).toBe('Pondělí');
});

test('capitalize nezmění zbytek řetězce', () => {
    expect(capitalize('pÁTEK')).toBe('PÁTEK');
});

test('capitalize vrátí prázdný řetězec pro prázdný vstup', () => {
    expect(capitalize('')).toBe('');
});
