import React from 'react';
import { render, waitFor, screen, fireEvent } from '@testing-library/react';
import { ResourceBrowserInlineButton } from './ResourceBrowserInlineButton';
import * as ILES from './InlineLoadingErrorState/InlineLoadingErrorState';
jest.spyOn(ILES, 'InlineLoadingErrorState');
describe('ResourceBrowserInlineButton', () => {
const defaultProps = {
isLoading: false,
error: undefined,
useResource: () => {
return {
data: null,
error: null,
isLoading: false,
};
},
};
it('Render image icon if inline type is "image"', async () => {
//@ts-ignore
render();
await waitFor(() => {
expect(screen.getByLabelText('change image')).toBeTruthy();
});
});
it('Render link icon if inline type is "link"', async () => {
//@ts-ignore
render();
await waitFor(() => {
expect(screen.getByLabelText('change link')).toBeTruthy();
});
});
it('Render resource icon if inline type is "resource"', async () => {
//@ts-ignore
render();
await waitFor(() => {
expect(screen.getByLabelText('change resource')).toBeTruthy();
});
});
it('On trigger press render loading if still awaiting external data', async () => {
//@ts-ignore
render();
const button = screen.getByRole('button');
fireEvent.click(button);
await waitFor(() => {
expect(ILES.InlineLoadingErrorState).toHaveBeenCalledWith(expect.objectContaining({ isLoading: true }), {});
});
});
it('On trigger press render error if external error provided', async () => {
const error = new Error('test');
//@ts-ignore
render();
const button = screen.getByRole('button');
fireEvent.click(button);
await waitFor(() => {
expect(ILES.InlineLoadingErrorState).toHaveBeenCalledWith(expect.objectContaining({ error }), {});
});
});
it('On trigger press render loading if still awaiting resource data', async () => {
const useResource = () => {
return { data: null, isLoading: true };
};
//@ts-ignore
render();
const button = screen.getByRole('button');
fireEvent.click(button);
await waitFor(() => {
expect(ILES.InlineLoadingErrorState).toHaveBeenCalledWith(expect.objectContaining({ isLoading: true }), {});
});
});
});