Select Git revision
CanvasLayers.test.js
CanvasLayers.test.js 5.17 KiB
import { shallow } from 'enzyme';
import Input from '@material-ui/core/Input';
import Slider from '@material-ui/core/Slider';
import Typography from '@material-ui/core/Typography';
import { DragDropContext, Droppable, Draggable } from '@hello-pangea/dnd';
import { CanvasLayers } from '../../../src/components/CanvasLayers';
import IIIFThumbnail from '../../../src/containers/IIIFThumbnail';
/** Utility function to wrap CanvasAnnotations */
function createWrapper(props) {
return shallow(
<CanvasLayers
canvasId="foo"
classes={{}}
index={0}
label="A Canvas Label"
layerMetadata={{}}
layers={[]}
t={t => t}
totalSize={1}
updateLayers={() => {}}
windowId="abc"
{...props}
/>,
);
}
describe('CanvasLayers', () => {
describe('with multiple canvases', () => {
it('displays the canvas label', () => {
const wrapper = createWrapper({ totalSize: 2 });
expect(wrapper.find(Typography).text()).toEqual('annotationCanvasLabel');
});
});
it('renders canvas layers in a list', () => {
const wrapper = createWrapper({
canvasId: 'https://prtd.app/hamilton/canvas/p1.json',
layers: [
{ id: 'https://prtd.app/image/iiif/2/hamilton%2fHL_524_1r_00_PSC/full/862,1024/0/default.jpg' },
{ id: 'https://prtd.app/image/iiif/2/hamilton%2fHL_524_1r_00_TS_Blue/full/862,1024/0/default.png' },
],
});
const inner = shallow(
wrapper.find(Droppable).prop('children')({}, {}),
);
expect(inner.find(Draggable).length).toEqual(2);
expect(inner.find(Draggable).at(0).prop('draggableId')).toEqual('https://prtd.app/image/iiif/2/hamilton%2fHL_524_1r_00_PSC/full/862,1024/0/default.jpg');
expect(inner.find(Draggable).at(1).prop('draggableId')).toEqual('https://prtd.app/image/iiif/2/hamilton%2fHL_524_1r_00_TS_Blue/full/862,1024/0/default.png');
const layer = shallow(
inner.find(Draggable).at(0).prop('children')({}, {}),
);
expect(layer.find(IIIFThumbnail).prop('resource').id).toEqual('https://prtd.app/image/iiif/2/hamilton%2fHL_524_1r_00_PSC/full/862,1024/0/default.jpg');
expect(layer.find(Typography).text()).toEqual('1');
expect(layer.find('[aria-label="layer_hide"]').length).toEqual(1);
expect(layer.find('[aria-label="layer_moveToTop"]').length).toEqual(1);
expect(layer.find('[title="layer_opacity"]').length).toEqual(1);
});
it('handles drag + drop of layers', () => {
const updateLayers = jest.fn();
const wrapper = createWrapper({
layers: [
{ id: 'a' },
{ id: 'b' },
],
updateLayers,
});
const { droppableId } = wrapper.instance();
wrapper.find(DragDropContext).simulate('dragEnd', {
destination: { droppableId, index: 0 },
source: { droppableId, index: 1 },
});
expect(updateLayers).toHaveBeenCalledWith('abc', 'foo', {
a: { index: 1 },
b: { index: 0 },
});
});
describe('actions', () => {
let layer;
let updateLayers;
beforeEach(() => {
updateLayers = jest.fn();
const wrapper = createWrapper({
canvasId: 'https://prtd.app/hamilton/canvas/p1.json',
layers: [
{ id: 'https://prtd.app/image/iiif/2/hamilton%2fHL_524_1r_00_PSC/full/862,1024/0/default.jpg' },
{ id: 'https://prtd.app/image/iiif/2/hamilton%2fHL_524_1r_00_TS_Blue/full/862,1024/0/default.png' },
],
updateLayers,
});
layer = shallow(wrapper.instance().renderLayer({ id: 'https://prtd.app/image/iiif/2/hamilton%2fHL_524_1r_00_TS_Blue/full/862,1024/0/default.png' }, 1));
});
it('has a button for moving a layer to the top', () => {
layer.find('[aria-label="layer_moveToTop"]').simulate('click');
expect(updateLayers).toHaveBeenCalledWith('abc', 'https://prtd.app/hamilton/canvas/p1.json', {
'https://prtd.app/image/iiif/2/hamilton%2fHL_524_1r_00_PSC/full/862,1024/0/default.jpg': {
index: 1,
},
'https://prtd.app/image/iiif/2/hamilton%2fHL_524_1r_00_TS_Blue/full/862,1024/0/default.png': {
index: 0,
},
});
});
it('has a button for toggling visibility', () => {
layer.find('[aria-label="layer_hide"]').simulate('click');
expect(updateLayers).toHaveBeenCalledWith('abc', 'https://prtd.app/hamilton/canvas/p1.json', {
'https://prtd.app/image/iiif/2/hamilton%2fHL_524_1r_00_TS_Blue/full/862,1024/0/default.png': {
visibility: false,
},
});
});
it('has a slider to changing layer opacity', () => {
layer.find(Slider).simulate('change', {}, 50);
expect(updateLayers).toHaveBeenCalledWith('abc', 'https://prtd.app/hamilton/canvas/p1.json', {
'https://prtd.app/image/iiif/2/hamilton%2fHL_524_1r_00_TS_Blue/full/862,1024/0/default.png': {
opacity: 0.5,
},
});
});
it('has a text input to changing layer opacity', () => {
layer.find(Input).simulate('change', { target: { value: 70 } });
expect(updateLayers).toHaveBeenCalledWith('abc', 'https://prtd.app/hamilton/canvas/p1.json', {
'https://prtd.app/image/iiif/2/hamilton%2fHL_524_1r_00_TS_Blue/full/862,1024/0/default.png': {
opacity: 0.7,
},
});
});
});
});