Skip to content
Snippets Groups Projects
Select Git revision
  • 4277a99505c2fb9c26147c79b86d4b97d20fd905
  • mui5-annotation-on-video-stable default
  • get_setter_canvasSizeInformations
  • fix-error-div-into-p
  • annotation-on-video-v2
  • detached
  • annotation-on-video-r17
  • mui5
  • mui5-react-18
  • jacob-test
  • annotation-on-video protected
  • master
  • test-antoinev1
  • 20-fetch-thumbnail-on-annotation
  • add-research-field
  • Save
  • add-plugin
  • 14-wip-no-seek-to
  • 14-bug-on-video-time-control
  • 9_wip_videotests
  • _upgrade_material_ui
  • latest-tetras-16
  • v3.3.0
  • v3.2.0
  • v3.1.1
  • v3.1.0
  • v3.0.0
  • v3.0.0-rc.7
  • v3.0.0-rc.6
  • v3.0.0-rc.5
  • v3.0.0-rc.4
  • v3.0.0-rc.3
  • v3.0.0-rc.2
  • v3.0.0-rc.1
  • v3.0.0-beta.10
  • v3.0.0-beta.9
  • v3.0.0-beta.8
  • v3.0.0-beta.7
  • v3.0.0-beta.6
  • v3.0.0-beta.5
  • v3.0.0-beta.3
41 results

CanvasLayers.test.js

Blame
  • 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,
            },
          });
        });
      });
    });