import { describe, expect, it } from 'vitest';
import {
    EMPTY_DISPLAY,
    VALIDATION_FIXTURE_ES0022,
    countMatchingValidationFields,
    formatSuministroValue,
    mapSuministroToViewModel,
    resolveSuministroValue,
} from './suministroMappers';

describe('suministroMappers', () => {
    it('resolves postal code fallback', () => {
        const field = {
            id: 'sips-cp-suministro',
            label: 'C.P. suministro',
            keys: ['Cod_Postal_Suministro', 'CodigoPostal_Suministro'],
            format: 'text' as const,
        };

        expect(
            resolveSuministroValue({ CodigoPostal_Suministro: '19002' }, field),
        ).toBe('19002');
    });

    it('formats iso dates as DD/MM/YYYY', () => {
        expect(formatSuministroValue('2024-04-17T00:00:00+0000', 'date')).toBe('17/04/2024');
    });

    it('formats power with es-ES locale', () => {
        expect(formatSuministroValue(5.75, 'power')).toBe('5,75');
    });

    it('maps empty values to em dash', () => {
        expect(formatSuministroValue('', 'text')).toBe(EMPTY_DISPLAY);
        expect(formatSuministroValue(null, 'text')).toBe(EMPTY_DISPLAY);
    });

    it('validates fixture with at least 20 control values', () => {
        const viewModel = mapSuministroToViewModel(VALIDATION_FIXTURE_ES0022);
        expect(countMatchingValidationFields(viewModel)).toBeGreaterThanOrEqual(20);
    });
});
