import { describe, it, expect, beforeAll, vi } from 'vitest';
import { axios } from 'app/test/vitest/helper';
import parsePhone from 'src/filters/parsePhone';

describe('parsePhone filter', () => {
    beforeAll(async () => {
        vi.spyOn(axios, 'get').mockReturnValue({ data: { prefix: '34' } });
    });

    it('no phone', async () => {
        const phone = await parsePhone(null, '34');
        expect(phone).toBe(undefined);
    });

    it("adds prefix +34 if it doesn't have one", async () => {
        const phone = await parsePhone('123456789', '34');
        expect(phone).toBe('34123456789');
    });

    it('maintains prefix +34 if it is already correct', async () => {
        const phone = await parsePhone('+34123456789', '34');
        expect(phone).toBe('34123456789');
    });

    it('converts prefix 0034 to +34', async () => {
        const phone = await parsePhone('0034123456789', '34');
        expect(phone).toBe('34123456789');
    });

    it('converts prefix 34 without symbol to +34', async () => {
        const phone = await parsePhone('34123456789', '34');
        expect(phone).toBe('34123456789');
    });

    it('replaces incorrect prefix with the correct one', async () => {
        const phone = await parsePhone('+44123456789', '34');
        expect(phone).toBe('44123456789');
    });

    it('adds default prefix on error', async () => {
        vi.spyOn(axios, 'get').mockImplementation((url) => {
            if (url.includes('Prefixes'))
                return Promise.reject(new Error('Network error'));
            else if (url.includes('PbxConfigs'))
                return Promise.resolve({ data: { defaultPrefix: '39' } });
        });
        const phone = await parsePhone('123456789', '34');
        expect(phone).toBe('39123456789');
    });
});