/**
* @jest-environment jsdom
*/
import React from 'react';
import theme from '../../themes/hero';
import { fireEvent, render, waitFor } from '@testing-library/react-native';
import RichTextEditor__Toolbar from '../RichTextEditor/Toolbar';
import * as Events from '../../bindings/Events';
import * as RichTextEditor__Event from '../RichTextEditor/Event';
jest.mock('../heroEditorApp');
describe('RichTextEditor__Toolbar', () => {
describe('when text editor is not focused', () => {
it('should not render toolbar', () => {
const wrapper = render();
expect(wrapper.toJSON()).toBeNull();
});
});
describe('when text editor is focused', () => {
let wrapper = null;
beforeEach(async () => {
wrapper = render();
RichTextEditor__Event.emitter.emit('toolbar/editor-focus');
await waitFor(() => wrapper.getByTestId('toolbar'));
});
it('should render toolbar', async () => {
expect(wrapper.toJSON()).toMatchSnapshot();
[
'format_bold',
'format_italic',
'format_underlined',
'format_list_bulleted',
'format_list_numbered',
'looks_one',
'looks_two',
].forEach(testId => {
expect(wrapper.queryAllByTestId(testId)).toHaveLength(1);
});
});
describe('when blur', () => {
it('should hide toolbar', async () => {
RichTextEditor__Event.emitter.emit('toolbar/editor-blur');
await waitFor(() => wrapper.queryAllByTestId('toolbar').length == 0);
expect(wrapper.queryAllByTestId('toolbar')).toHaveLength(0);
});
});
describe('onPress bar button', () => {
it('should send event and highlight bar button', () => {
const eventsEmmited = [];
const eventNameAndTestIDArray = [
{
eventName: 'toolbar/bold',
testID: 'format_bold',
},
{
eventName: 'toolbar/italic',
testID: 'format_italic',
},
{
eventName: 'toolbar/underline',
testID: 'format_underlined',
},
{
eventName: 'toolbar/bulleted-list',
testID: 'format_list_bulleted',
},
{
eventName: 'toolbar/numbered-list',
testID: 'format_list_numbered',
},
{
eventName: 'toolbar/heading-one',
testID: 'looks_one',
},
{
eventName: 'toolbar/heading-two',
testID: 'looks_two',
},
];
eventNameAndTestIDArray.forEach(({ eventName, testID }) => {
Events.on(RichTextEditor__Event.emitter, eventName, () => {
eventsEmmited.push(testID);
});
expect(wrapper.getByTestId(testID)).toHaveStyle(theme.richTextEditor.toolbarButton);
fireEvent(wrapper.getByTestId(testID), 'press');
expect(wrapper.getByTestId(testID)).toHaveStyle(theme.richTextEditor.selectedToolbarButton);
});
expect(eventsEmmited).toMatchObject([
'format_bold',
'format_italic',
'format_underlined',
'format_list_bulleted',
'format_list_numbered',
'looks_one',
'looks_two',
]);
});
});
});
});