Skip to content
Snippets Groups Projects
Commit f60e7ba2 authored by Chris Beer's avatar Chris Beer
Browse files

Address UnhandledPromiseRejectionWarning deprecation warnings from OSD tests

parent 7ec54f22
No related branches found
No related tags found
No related merge requests found
...@@ -10,15 +10,11 @@ const canvases = Utils.parseManifest(fixture).getSequences()[0].getCanvases(); ...@@ -10,15 +10,11 @@ const canvases = Utils.parseManifest(fixture).getSequences()[0].getCanvases();
jest.mock('openseadragon'); jest.mock('openseadragon');
describe('OpenSeadragonViewer', () => { /**
let wrapper; * Helper function to create a shallow wrapper around OpenSeadragonViewer
let updateViewport; */
beforeEach(() => { function createWrapper(props) {
OpenSeadragon.mockClear(); return shallow(
updateViewport = jest.fn();
wrapper = shallow(
<OpenSeadragonViewer <OpenSeadragonViewer
classes={{}} classes={{}}
infoResponses={[{ infoResponses={[{
...@@ -42,14 +38,24 @@ describe('OpenSeadragonViewer', () => { ...@@ -42,14 +38,24 @@ describe('OpenSeadragonViewer', () => {
}]} }]}
windowId="base" windowId="base"
config={{}} config={{}}
updateViewport={updateViewport} updateViewport={jest.fn()}
t={k => k} t={k => k}
canvasWorld={new CanvasWorld(canvases)} canvasWorld={new CanvasWorld(canvases)}
{...props}
> >
<div className="foo" /> <div className="foo" />
<div className="bar" /> <div className="bar" />
</OpenSeadragonViewer>, </OpenSeadragonViewer>,
); );
}
describe('OpenSeadragonViewer', () => {
let wrapper;
let updateViewport;
beforeEach(() => {
OpenSeadragon.mockClear();
wrapper = createWrapper({});
updateViewport = wrapper.instance().props.updateViewport;
}); });
it('renders the component', () => { it('renders the component', () => {
expect(wrapper.find('.mirador-osd-container').length).toBe(1); expect(wrapper.find('.mirador-osd-container').length).toBe(1);
...@@ -70,10 +76,7 @@ describe('OpenSeadragonViewer', () => { ...@@ -70,10 +76,7 @@ describe('OpenSeadragonViewer', () => {
expect(wrapper.instance().infoResponsesMatch([])).toBe(false); expect(wrapper.instance().infoResponsesMatch([])).toBe(false);
}); });
it('with an empty array', () => { it('with an empty array', () => {
wrapper.instance().viewer = { wrapper = createWrapper({ infoResponses: [] });
close: () => {},
};
wrapper.setProps({ infoResponses: [] });
expect(wrapper.instance().infoResponsesMatch([])).toBe(true); expect(wrapper.instance().infoResponsesMatch([])).toBe(true);
}); });
it('when the @ids do match', () => { it('when the @ids do match', () => {
...@@ -87,7 +90,7 @@ describe('OpenSeadragonViewer', () => { ...@@ -87,7 +90,7 @@ describe('OpenSeadragonViewer', () => {
expect(wrapper.instance().infoResponsesMatch([{ id: 'a', json: { '@id': 'http://foo-degraded' } }])).toBe(false); expect(wrapper.instance().infoResponsesMatch([{ id: 'a', json: { '@id': 'http://foo-degraded' } }])).toBe(false);
}); });
it('when the id props match', () => { it('when the id props match', () => {
wrapper.setProps({ wrapper = createWrapper({
infoResponses: [{ infoResponses: [{
id: 'a', id: 'a',
json: { json: {
...@@ -106,10 +109,7 @@ describe('OpenSeadragonViewer', () => { ...@@ -106,10 +109,7 @@ describe('OpenSeadragonViewer', () => {
expect(wrapper.instance().nonTiledImagedMatch([])).toBe(false); expect(wrapper.instance().nonTiledImagedMatch([])).toBe(false);
}); });
it('with an empty array', () => { it('with an empty array', () => {
wrapper.instance().viewer = { wrapper = createWrapper({ nonTiledImages: [] });
close: () => {},
};
wrapper.setProps({ nonTiledImages: [] });
expect(wrapper.instance().nonTiledImagedMatch([])).toBe(true); expect(wrapper.instance().nonTiledImagedMatch([])).toBe(true);
}); });
it('when the ids do match', () => { it('when the ids do match', () => {
...@@ -118,21 +118,17 @@ describe('OpenSeadragonViewer', () => { ...@@ -118,21 +118,17 @@ describe('OpenSeadragonViewer', () => {
}); });
describe('addAllImageSources', () => { describe('addAllImageSources', () => {
it('calls addTileSource for every tileSources and then zoomsToWorld', () => { it('calls addTileSource for every tileSources and then zoomsToWorld', async () => {
wrapper.instance().viewer = { wrapper = createWrapper({ infoResponses: [1, 2, 3, 4] });
close: () => {}, wrapper.setState({ viewer: { viewport: { fitBounds: () => {} }, world: { getItemCount: () => 0 } } });
};
wrapper.setProps({ infoResponses: [1, 2, 3, 4] });
const mockAddTileSource = jest.fn(); const mockAddTileSource = jest.fn();
wrapper.instance().addTileSource = mockAddTileSource; wrapper.instance().addTileSource = mockAddTileSource;
wrapper.instance().addAllImageSources(); await wrapper.instance().addAllImageSources();
expect(mockAddTileSource).toHaveBeenCalledTimes(4); expect(mockAddTileSource).toHaveBeenCalledTimes(4);
}); });
it('calls addNonTileSource for every nonTiledImage and then zoomsToWorld', () => {
wrapper.instance().viewer = { it('calls addNonTileSource for every nonTiledImage and then zoomsToWorld', async () => {
close: () => {}, wrapper = createWrapper({
};
wrapper.setProps({
nonTiledImages: [ nonTiledImages: [
{ getProperty: () => 'Image' }, { getProperty: () => 'Image' },
{ getProperty: () => 'Image' }, { getProperty: () => 'Image' },
...@@ -140,22 +136,18 @@ describe('OpenSeadragonViewer', () => { ...@@ -140,22 +136,18 @@ describe('OpenSeadragonViewer', () => {
{ getProperty: () => 'Image' }, { getProperty: () => 'Image' },
], ],
}); });
const instance = wrapper.instance();
const mockAddNonTiledImage = jest.fn(); const mockAddNonTiledImage = jest.fn();
wrapper.instance().addNonTiledImage = mockAddNonTiledImage; wrapper.instance().addNonTiledImage = mockAddNonTiledImage;
wrapper.instance().addAllImageSources(); await instance.addAllImageSources();
expect(mockAddNonTiledImage).toHaveBeenCalledTimes(4); expect(mockAddNonTiledImage).toHaveBeenCalledTimes(4);
}); });
}); });
describe('addTileSource', () => { describe('addTileSource', () => {
it('calls addTiledImage asynchronously on the OSD viewer', async () => { it('when a viewer is not available, returns an unresolved Promise', () => (
wrapper.instance().addTileSource({}).then((event) => { expect(wrapper.instance().addTileSource({})).rejects.toBeUndefined()
expect(event).toBe('event'); ));
});
});
it('when a viewer is not available, returns an unresolved Promise', () => {
expect(wrapper.instance().addTileSource({})).toEqual(expect.any(Promise));
});
}); });
describe('addNonTiledImage', () => { describe('addNonTiledImage', () => {
...@@ -189,17 +181,15 @@ describe('OpenSeadragonViewer', () => { ...@@ -189,17 +181,15 @@ describe('OpenSeadragonViewer', () => {
layerIndexOfImageResource: i => 1 - i, layerIndexOfImageResource: i => 1 - i,
layerOpacityOfImageResource: i => 0.5, layerOpacityOfImageResource: i => 0.5,
}; };
wrapper.setProps({ canvasWorld }); wrapper = createWrapper({ canvasWorld });
wrapper.instance().loaded = true; wrapper.instance().loaded = true;
wrapper.setState({ wrapper.instance().state.viewer = {
viewer: {
world: { world: {
getItemAt: i => ({ setOpacity, source: { id: i } }), getItemAt: i => ({ setOpacity, source: { id: i } }),
getItemCount: () => 2, getItemCount: () => 2,
setItemIndex, setItemIndex,
}, },
}, };
});
wrapper.instance().refreshTileProperties(); wrapper.instance().refreshTileProperties();
......
...@@ -167,10 +167,11 @@ export class OpenSeadragonViewer extends Component { ...@@ -167,10 +167,11 @@ export class OpenSeadragonViewer extends Component {
/** */ /** */
addAllImageSources(zoomAfterAdd = true) { addAllImageSources(zoomAfterAdd = true) {
const { nonTiledImages, infoResponses } = this.props; const { nonTiledImages, infoResponses } = this.props;
Promise.all(
infoResponses.map(infoResponse => this.addTileSource(infoResponse)), return Promise.allSettled([
nonTiledImages.map(image => this.addNonTiledImage(image)), ...infoResponses.map(infoResponse => this.addTileSource(infoResponse)),
).then(() => { ...nonTiledImages.map(image => this.addNonTiledImage(image)),
]).then(() => {
if (infoResponses[0] || nonTiledImages[0]) { if (infoResponses[0] || nonTiledImages[0]) {
if (zoomAfterAdd) this.zoomToWorld(); if (zoomAfterAdd) this.zoomToWorld();
this.refreshTileProperties(); this.refreshTileProperties();
...@@ -193,7 +194,7 @@ export class OpenSeadragonViewer extends Component { ...@@ -193,7 +194,7 @@ export class OpenSeadragonViewer extends Component {
reject(); reject();
} }
viewer.addSimpleImage({ resolve(viewer.addSimpleImage({
error: event => reject(event), error: event => reject(event),
fitBounds: new OpenSeadragon.Rect( fitBounds: new OpenSeadragon.Rect(
...canvasWorld.contentResourceToWorldCoordinates(contentResource), ...canvasWorld.contentResourceToWorldCoordinates(contentResource),
...@@ -202,7 +203,7 @@ export class OpenSeadragonViewer extends Component { ...@@ -202,7 +203,7 @@ export class OpenSeadragonViewer extends Component {
opacity: canvasWorld.layerOpacityOfImageResource(contentResource), opacity: canvasWorld.layerOpacityOfImageResource(contentResource),
success: event => resolve(event), success: event => resolve(event),
url: contentResource.id, url: contentResource.id,
}); }));
}); });
} }
...@@ -238,7 +239,11 @@ export class OpenSeadragonViewer extends Component { ...@@ -238,7 +239,11 @@ export class OpenSeadragonViewer extends Component {
/** */ /** */
refreshTileProperties() { refreshTileProperties() {
const { canvasWorld } = this.props; const { canvasWorld } = this.props;
const { viewer: { world } } = this.state; const { viewer } = this.state;
if (!viewer) return;
const { world } = viewer;
const items = []; const items = [];
for (let i = 0; i < world.getItemCount(); i += 1) { for (let i = 0; i < world.getItemCount(); i += 1) {
...@@ -259,7 +264,7 @@ export class OpenSeadragonViewer extends Component { ...@@ -259,7 +264,7 @@ export class OpenSeadragonViewer extends Component {
fitBounds(x, y, w, h, immediately = true) { fitBounds(x, y, w, h, immediately = true) {
const { viewer } = this.state; const { viewer } = this.state;
viewer.viewport.fitBounds( viewer && viewer.viewport && viewer.viewport.fitBounds(
new OpenSeadragon.Rect(x, y, w, h), new OpenSeadragon.Rect(x, y, w, h),
immediately, immediately,
); );
......
...@@ -136,7 +136,7 @@ export default class CanvasWorld { ...@@ -136,7 +136,7 @@ export default class CanvasWorld {
/** Get the IIIF content resource for an image */ /** Get the IIIF content resource for an image */
contentResource(infoResponseId) { contentResource(infoResponseId) {
const miradorCanvas = this.canvases.find(c => c.imageServiceIds.some(id => ( const miradorCanvas = this.canvases.find(c => c.imageServiceIds.some(id => (
normalizeUrl(id, { stripAuthentication: false }) id && infoResponseId && normalizeUrl(id, { stripAuthentication: false })
=== normalizeUrl(infoResponseId, { stripAuthentication: false })))); === normalizeUrl(infoResponseId, { stripAuthentication: false }))));
if (!miradorCanvas) return undefined; if (!miradorCanvas) return undefined;
return miradorCanvas.imageResources return miradorCanvas.imageResources
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment