import { renderInAppContext } from '@theorchard/suite-testing';
import { createEditFormDictionaries } from 'lib/tests/mock-data';
import React from 'react';
import * as features from 'shared/features';
import InfoTable from '../info-table';
import type { LabelInfoProps } from 'src/types';

const baseData: LabelInfoProps = {
    name: 'Test Label',
    uuid: 'test-uuid',
    isDistributor: false,
    vendorId: 123,
    defaultSalesSheetTemplate: { id: '1' },
};

describe('<InfoTable>', () => {
    test('InfoTable toBeDefined', () => {
        expect(InfoTable).toBeDefined();
    });

    describe('productManagerUser display', () => {
        const dictionaries = createEditFormDictionaries();

        beforeEach(() => {
            jest.spyOn(
                features,
                'useIsEmployeeShouldSeeSupportContactEmail'
            ).mockReturnValue(false);
        });

        afterAll(jest.resetAllMocks);

        test('displays active product manager name', () => {
            const { getByText } = renderInAppContext(
                <InfoTable
                    data={{
                        ...baseData,
                        productManagerUser: {
                            id: '706',
                            firstName: 'Adam',
                            lastName: 'Saunders',
                            active: true,
                        },
                    }}
                    dictionaries={dictionaries}
                />
            );
            expect(getByText('Adam Saunders')).toBeInTheDocument();
        });

        test('appends (inactive) for inactive product manager', () => {
            const { getByText } = renderInAppContext(
                <InfoTable
                    data={{
                        ...baseData,
                        productManagerUser: {
                            id: '706',
                            firstName: 'Adam',
                            lastName: 'Saunders',
                            active: false,
                        },
                    }}
                    dictionaries={dictionaries}
                />
            );
            expect(getByText('Adam Saunders (inactive)')).toBeInTheDocument();
        });

        test('shows - when productManagerUser is not set', () => {
            const { queryByText } = renderInAppContext(
                <InfoTable data={baseData} dictionaries={dictionaries} />
            );
            expect(queryByText('Adam Saunders')).not.toBeInTheDocument();
        });
    });
});
