Skip to content
Snippets Groups Projects
Select Git revision
  • 1b883ec48c0d551b6cd7be71c1a5dbaca17a0b1b
  • 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

WindowViewer.test.js

Blame
  • user avatar
    Glenn Fischer authored
    1b883ec4
    History
    WindowViewer.test.js 5.89 KiB
    import React from 'react';
    import { shallow } from 'enzyme';
    import manifesto from 'manifesto.js';
    import { WindowViewer } from '../../../src/components/WindowViewer';
    import OSDViewer from '../../../src/containers/OpenSeadragonViewer';
    import WindowCanvasNavigationControls from '../../../src/containers/WindowCanvasNavigationControls';
    import fixture from '../../fixtures/version-2/019.json';
    import emptyCanvasFixture from '../../fixtures/version-2/emptyCanvas.json';
    import otherContentFixture from '../../fixtures/version-2/299843.json';
    
    let mockManifest = {
      id: 123,
      manifestation: manifesto.create(fixture),
    };
    
    let mockWindow = {
      canvasIndex: 0,
      view: 'single',
    };
    
    /** create wrapper */
    function createWrapper(props) {
      return shallow(
        <WindowViewer
          canvasLabel="label"
          infoResponses={{}}
          fetchInfoResponse={() => {}}
          fetchAnnotation={() => {}}
          manifest={mockManifest}
          window={mockWindow}
          {...props}
        />,
      );
    }
    
    describe('WindowViewer', () => {
      let wrapper;
      beforeEach(() => {
        wrapper = createWrapper();
      });
      it('renders properly', () => {
        expect(wrapper.matchesElement(
          <>
            <OSDViewer>
              <WindowCanvasNavigationControls />
            </OSDViewer>
          </>,
        )).toBe(true);
      });
      describe('currentCanvases', () => {
        it('by default returns a single canvas', () => {
          expect(wrapper.instance().currentCanvases().length).toEqual(1);
        });
        describe('book view', () => {
          it('when the first canvas is selected', () => {
            wrapper = createWrapper({ window: { view: 'book', canvasIndex: 0 } });
            expect(wrapper.instance().currentCanvases().length).toEqual(1);
          });
          it('when the second canvas is selected', () => {
            wrapper = createWrapper({ window: { view: 'book', canvasIndex: 1 } });
            expect(wrapper.instance().currentCanvases().length).toEqual(2);
          });
        });
      });
      describe('currentInfoResponses', () => {
        describe('returns only available infoResponses', () => {
          it('isFetching is false', () => {
            wrapper = createWrapper(
              {
                infoResponses: {
                  'https://stacks.stanford.edu/image/iiif/fr426cg9537%2FSC1094_s3_b14_f17_Cats_1976_0005/info.json': {
                    isFetching: false,
                  },
                  'https://stacks.stanford.edu/image/iiif/rz176rt6531%2FPC0170_s3_Tree_Calendar_20081101_152516_0410/info.json': {
                    isFetching: true,
                  },
                },
                window: { view: 'book', canvasIndex: 1 },
              },
            );
            expect(wrapper.instance().currentInfoResponses().length).toEqual(1);
          });
          it('infoResponse is undefined', () => {
            wrapper = createWrapper(
              {
                infoResponses: {
                  'https://stacks.stanford.edu/image/iiif/fr426cg9537%2FSC1094_s3_b14_f17_Cats_1976_0005/info.json': {
                    isFetching: false,
                  },
                  foo: {
                    isFetching: false,
                  },
                },
                window: { view: 'book', canvasIndex: 1 },
              },
            );
            expect(wrapper.instance().currentInfoResponses().length).toEqual(1);
          });
          it('error is not present', () => {
            wrapper = createWrapper(
              {
                infoResponses: {
                  'https://stacks.stanford.edu/image/iiif/fr426cg9537%2FSC1094_s3_b14_f17_Cats_1976_0005/info.json': {
                    isFetching: false,
                  },
                  'https://stacks.stanford.edu/image/iiif/rz176rt6531%2FPC0170_s3_Tree_Calendar_20081101_152516_0410/info.json': {
                    isFetching: false,
                    error: 'yikes!',
                  },
                },
                window: { view: 'book', canvasIndex: 1 },
              },
            );
            expect(wrapper.instance().currentInfoResponses().length).toEqual(1);
          });
        });
      });
      it('when view type changes', () => {
        expect(wrapper.instance().canvasGroupings.groupings().length).toEqual(3);
        wrapper.setProps({
          window: {
            canvasIndex: 0,
            view: 'book',
          },
        });
        expect(wrapper.instance().canvasGroupings.groupings().length).toEqual(2);
      });
    
      describe('componentDidMount', () => {
        it('does not call fetchInfoResponse for a canvas that has no images', () => {
          const mockFnCanvas0 = jest.fn();
          const mockFnCanvas2 = jest.fn();
          mockManifest = {
            id: 123,
            manifestation: manifesto.create(emptyCanvasFixture),
          };
          mockWindow = {
            canvasIndex: 0,
            view: 'single',
          };
          wrapper = createWrapper(
            { manifest: mockManifest, fetchInfoResponse: mockFnCanvas0, window: mockWindow },
          );
          expect(mockFnCanvas0).toHaveBeenCalledTimes(1);
    
          wrapper = createWrapper(
            {
              manifest: mockManifest,
              fetchInfoResponse: mockFnCanvas2,
              window: { canvasIndex: 2, view: 'single' },
            },
          );
          expect(mockFnCanvas2).toHaveBeenCalledTimes(0);
        });
        it('calls fetchAnnotation when otherContent is present', () => {
          const mockFnAnno = jest.fn();
          mockManifest = {
            id: 123,
            manifestation: manifesto.create(otherContentFixture),
          };
          wrapper = createWrapper(
            { manifest: mockManifest, fetchAnnotation: mockFnAnno },
          );
          expect(mockFnAnno).toHaveBeenCalledTimes(1);
        });
      });
    
      describe('componentDidUpdate', () => {
        it('does not call fetchInfoResponse for a canvas that has no images', () => {
          const mockFn = jest.fn();
          mockManifest = {
            id: 123,
            manifestation: manifesto.create(emptyCanvasFixture),
          };
          mockWindow = {
            canvasIndex: 2,
            view: 'single',
          };
          wrapper = createWrapper(
            { manifest: mockManifest, fetchInfoResponse: mockFn, window: mockWindow },
          );
    
          wrapper.setProps({ window: { canvasIndex: 3, view: 'single' } });
    
          expect(mockFn).toHaveBeenCalledTimes(0);
        });
      });
    });