import { mount } from 'enzyme';
import * as React from 'react';
import { PeriodicContext } from './periodic-table-state/periodic-selection-context';
import { SelectableTable } from './table-state';
const enabled = ['H', 'Li'];
describe('', () => {
fit('should be rendered', () => {
const mockCallback = jest.fn();
const wrapper = renderElement([], [...enabled], [], mockCallback);
expect(wrapper.find('.table-container').length).toBe(1);
expect(wrapper.find('.mat-element').length).toBe(120);
expect(mockCallback).toHaveBeenCalledTimes(1);
expect(mockCallback).toBeCalledWith({ disabledElements: [], enabledElements: enabled });
});
it('callback sgould be correctly called', () => {
const mockCallback = jest.fn();
const wrapper = renderElement([], [], [], mockCallback);
expect(mockCallback).toHaveBeenCalledTimes(1);
expect(mockCallback).toBeCalledWith({ disabledElements: [], enabledElements: [] });
});
it('clicking on an element should call the callback', () => {
const mockCallback = jest.fn();
const wrapper = renderElement([], [...enabled], [], mockCallback);
wrapper.find('.mat-element').at(1).simulate('click'); // click on he
expect(mockCallback).toHaveBeenCalledTimes(2);
expect(mockCallback).toBeCalledWith({
disabledElements: [],
enabledElements: ['H', 'Li', 'He']
});
});
//TODO(layout/callback/detailed)
it('should respect the max number of element selected', () => {
const mockCallback = jest.fn();
const wrapper = renderElement([], [], [], mockCallback, 1);
expect(mockCallback).toHaveBeenCalledTimes(1);
expect(mockCallback).toBeCalledWith({ disabledElements: [], enabledElements: [] });
wrapper.find('.mat-element').at(1).simulate('click'); // click on he
expect(mockCallback).toHaveBeenCalledTimes(2);
expect(mockCallback).toBeCalledWith({ disabledElements: [], enabledElements: ['He'] });
wrapper.find('.mat-element').at(2).simulate('click'); // click on li
expect(mockCallback).toHaveBeenCalledTimes(3);
expect(mockCallback).toBeCalledWith({ disabledElements: [], enabledElements: ['Li'] });
});
//TODO(chab) changing the props should RENDER the table
xit('it should rerender correctly when the hidden/enabled/selected props are updated', () => {});
//TODO(chab) check what happens if the number of enabled elements > maximum allowed
xit('', () => {});
xit('it should integrates with filter correctly', () => {});
it('it should display hovered element', () => {
const mockCallback = jest.fn();
const wrapper = renderElement([], [], [], mockCallback, 1);
wrapper.find('.mat-element').at(1).simulate('mouseover');
expect(wrapper.find('.element-description').length).toBe(1);
expect(wrapper.find('.element-description .mat-name').text()).toEqual('Helium');
expect(wrapper.find('.element-description .mat-symbol').text().trim()).toEqual('He'); // why the spaces ?
expect(wrapper.find('.element-description .mat-number').text()).toEqual('2');
});
});
function renderElement(
disabled = [] as string[],
enabled = [] as string[],
hidden = [] as string[],
onStateChange = (c: string[]) => {
console.log('>>>>>>>>>>>>>>>>>>>>', c);
},
maxNumber = 5
) {
// we use mount to test the rendering of the underlying elements
//TODO(chab) onStateChange actually belongs to the context :(
return mount(
);
}