import React from 'react'; import { render, screen, act, fireEvent } from '@testing-library/react'; import SourceList from './SourceList'; import { mockSource } from '../__mocks__/MockModels'; import GenericBrowserLib from '@squiz/generic-browser-lib'; // Import Functional Component jest.mock('@squiz/generic-browser-lib', () => { return { ...jest.requireActual('@squiz/generic-browser-lib'), }; }); describe('SourceList', () => { it('should render
  • for each provided source', () => { const sources = [mockSource(), mockSource({ id: '2' })]; const onSourceSelect = jest.fn(); render(); expect(screen.getByLabelText('environment list')).toBeInTheDocument(); expect(screen.getByLabelText('environment list').children.length).toEqual(2); }); it('should render Icon based on source type', () => { jest.spyOn(GenericBrowserLib, 'Icon'); const sources = [mockSource({ type: 'dam' })]; const onSourceSelect = jest.fn(); render(); expect(GenericBrowserLib.Icon).toHaveBeenCalledWith(expect.objectContaining({ icon: 'dam' }), {}); }); it('should render using source name', () => { const sources = [mockSource({ type: 'dam', name: 'mySource' })]; const onSourceSelect = jest.fn(); render(); expect(screen.getByText('mySource')).toBeInTheDocument(); }); it('should render using source id if name not provided', () => { const sources = [mockSource({ type: 'dam', name: undefined, id: '1115544' })]; const onSourceSelect = jest.fn(); render(); expect(screen.getByText('1115544')).toBeInTheDocument(); expect(screen.queryByText('mySource')).not.toBeInTheDocument(); }); it('should call onSourceSelect with source object when clicked', async () => { const sources = [mockSource(), mockSource({ type: 'dam', name: 'mySource', id: '1115544' })]; const onSourceSelect = jest.fn(); render(); await act(() => fireEvent.click(screen.getByRole('button', { name: 'mySource' }))); expect(onSourceSelect).toHaveBeenCalledWith(sources[1]); }); });