import { Element } from 'domhandler';
import React from 'react';
import { render, waitFor } from '@testing-library/react-native';
import debugMessage from '../debugMessages';
import RenderHTMLConfigProvider from '../RenderHTMLConfigProvider';
import RenderHTMLSource from '../RenderHTMLSource';
import RenderTTree from '../RenderTTree';
import { RenderHTMLSourceProps } from '../shared-types';
import TRenderEngineProvider from '../TRenderEngineProvider';
beforeAll(function () {
//@ts-expect-error __DEV__ defined by RN env
global.__DEV__ = true;
});
function renderSource(props: RenderHTMLSourceProps) {
return render(
);
}
describe('RenderHTMLSource', () => {
it('should warn when source has not been provided', () => {
console.warn = jest.fn();
//@ts-expect-error missing source
renderSource({ contentWidth: 10 });
expect(console.warn).toHaveBeenNthCalledWith(1, debugMessage.noSource);
});
it('should warn when contentWidth has not been provided', () => {
console.warn = jest.fn();
renderSource({ source: { html: 'hello' } });
expect(console.warn).toHaveBeenNthCalledWith(1, debugMessage.contentWidth);
});
it('should render html sources', () => {
renderSource({ source: { html: 'hello' }, contentWidth: 0 });
});
it('should render dom sources', () => {
renderSource({ source: { dom: new Element('div', {}) }, contentWidth: 0 });
});
describe('should render uri sources', () => {
it('should render content when remote resource is available', async () => {
global.fetch = jest.fn(() => {
return Promise.resolve({
ok: true,
text() {
return Promise.resolve('
Hello world!
UNSAFE_getByType(RenderTTree));
});
it('should render the error view when remote resource is unavailable', async () => {
global.fetch = jest.fn(() => {
return Promise.resolve({
ok: false
} as any);
});
const { findByTestId } = renderSource({
source: { uri: 'https://motherfuckingwebsite.com/' },
contentWidth: 0
});
await findByTestId('loader-error');
});
it('should render the error view when the fetch call throws', async () => {
global.fetch = jest.fn(() => {
return Promise.reject('Ooops!');
});
const { findByTestId } = renderSource({
source: { uri: 'https://motherfuckingwebsite.com/' },
contentWidth: 0
});
await findByTestId('loader-error');
});
});
});