import { render } from '@testing-library/react';
import React from 'react';
import FingerprintRestrictionsTable from 'src/components/fingerprintRestrictionsOAPanel/fingerprint-restrictions-table';
import type { Props as FingerprintRestrictionsTableProps } from 'src/components/fingerprintRestrictionsOAPanel/fingerprint-restrictions-table';

describe('<FingerprintRestrictionsTable>', () => {
    const mockData = {
        productId: 3273722,
        numberOfTracks: 37,
        vendorRules: [
            {
                active: true,
                policy: 'monetize',
                service: 'tiktok',
                territory: 'FR',
                startDate: '2023-01-02T00:00:00.000Z',
                endDate: undefined,
                createdDate: '2023-01-01T00:00:00.000Z',
                lastModifiedDate: '2023-01-01T00:00:00.000Z',
                createdBy: {
                    profileId: '123',
                    profileType: 'ContentProfile',
                    profileName: 'Name',
                },
                lastModifiedBy: {
                    profileId: '123',
                    profileType: 'ContentProfile',
                    profileName: 'Name',
                },
            },
        ],
        subaccountRules: [],
        tracks: [
            {
                tuid: '34453311',
                trackName: 'Lady Di',
                isrc: 'USJE62102015',
                rules: [],
                __typename: 'Track',
            },
            {
                tuid: '34453312',
                trackName: 'Florencio Pelón',
                isrc: 'USJE62102016',
                rules: [],
                __typename: 'Track',
            },
            {
                tuid: '34453313',
                trackName: 'Tribu del Comanche',
                isrc: 'USJE62102017',
                rules: [],
                __typename: 'Track',
            },
            {
                tuid: '34453314',
                trackName: 'Españolita',
                isrc: 'USJE62102018',
                rules: [],
                __typename: 'Track',
            },
            {
                tuid: '34453315',
                trackName: 'Jamona y Fina',
                isrc: 'USJE62102019',
                rules: [],
                __typename: 'Track',
            },
            {
                tuid: '34453316',
                trackName: 'Ponti Country la Pared',
                isrc: 'USJE62102020',
                rules: [],
                __typename: 'Track',
            },
            {
                tuid: '34453317',
                trackName: 'El Pompis',
                isrc: 'USJE62102021',
                rules: [],
                __typename: 'Track',
            },
            {
                tuid: '34453318',
                trackName: 'Noche de Amor',
                isrc: 'USJE62102022',
                rules: [],
                __typename: 'Track',
            },
            {
                tuid: '34453319',
                trackName: 'Sabrossona',
                isrc: 'USJE62102023',
                rules: [],
                __typename: 'Track',
            },
            {
                tuid: '34453320',
                trackName: 'Woman Mona',
                isrc: 'USJE62102024',
                rules: [],
                __typename: 'Track',
            },
        ],
    };

    const defaultProps: FingerprintRestrictionsTableProps = {
        page: 0,
        setPage: jest.fn(),
        pageSize: 10,
        setPageSize: jest.fn(),
        loading: false,
    };

    const renderWrapper = (
        props: Partial<FingerprintRestrictionsTableProps> = {}
    ) => render(<FingerprintRestrictionsTable {...defaultProps} {...props} />);

    test('renders empty table', () => {
        const { container } = renderWrapper();
        expect(container).toMatchSnapshot();
    });

    test('renders loading table', () => {
        const { container } = renderWrapper({ loading: true });
        expect(container).toMatchSnapshot();
    });

    test('renders table with data', () => {
        const { container } = renderWrapper({ loading: false, data: mockData });
        expect(container).toMatchSnapshot();
    });
});
