Skip to content
Snippets Groups Projects
Commit 3065bbb9 authored by Jack Reed's avatar Jack Reed Committed by Chris Beer
Browse files

Backfill tests on implementation for Audio/Video Viewers

parent e9d4bece
No related branches found
No related tags found
No related merge requests found
{
"@context": "http://iiif.io/api/presentation/3/context.json",
"id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json",
"type": "Manifest",
"label": {
"en": [
"Simplest Audio Example 1"
]
},
"items": [
{
"id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas",
"type": "Canvas",
"duration": 1985.024,
"items": [
{
"id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page",
"type": "AnnotationPage",
"items": [
{
"id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page/annotation",
"type": "Annotation",
"motivation": "painting",
"body": {
"id": "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4",
"type": "Sound",
"format": "audio/mp4",
"duration": 1985.024
},
"target": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page"
}
]
}
]
}
]
}
{
"@context": "http://iiif.io/api/presentation/3/context.json",
"id": "https://iiif.io/api/cookbook/recipe/0015-start/manifest.json",
"type": "Manifest",
"label": {
"en": [
"Video of a 30-minute digital clock"
]
},
"start": {
"id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas-start/segment1",
"type": "SpecificResource",
"source": "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1",
"selector": {
"type": "PointSelector",
"t": 120.5
}
},
"items": [
{
"id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1",
"type": "Canvas",
"duration": 1801.055,
"items": [
{
"id": "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1/page",
"type": "AnnotationPage",
"items": [
{
"id": "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1-video",
"type": "Annotation",
"motivation": "painting",
"body": [
{
"id": "https://fixtures.iiif.io/video/indiana/30-minute-clock/medium/30-minute-clock.mp4",
"type": "Video",
"duration": 1801.055,
"format": "video/mp4"
},
{
"id": "https://example.com/file.vtt",
"format": "text/vtt"
}
],
"target": "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1"
}
]
}
]
}
]
}
import React from 'react';
import { shallow } from 'enzyme';
import { AudioViewer } from '../../../src/components/AudioViewer';
/** create wrapper */
function createWrapper(props, suspenseFallback) {
return shallow(
<AudioViewer
classes={{}}
{...props}
/>,
);
}
describe('AudioViewer', () => {
let wrapper;
describe('render', () => {
it('audioResources', () => {
wrapper = createWrapper({
audioResources: [
{ getFormat: () => 'video/mp4', id: 1 },
{ getFormat: () => 'video/mp4', id: 2 },
],
}, true);
expect(wrapper.contains(<source src="1" type="video/mp4" />));
expect(wrapper.contains(<source src="2" type="video/mp4" />));
});
it('captions', () => {
wrapper = createWrapper({
audioResources: [
{ getFormat: () => 'video/mp4', id: 1 },
],
captions: [
{ getLabel: () => 'English', getProperty: () => 'en', id: 1 },
{ getLabel: () => 'French', getProperty: () => 'fr', id: 2 },
],
}, true);
expect(wrapper.contains(<track src="1" label="English" srcLang="en" />));
expect(wrapper.contains(<track src="2" label="French" srcLang="fr" />));
});
});
});
import React from 'react';
import { shallow } from 'enzyme';
import { VideoViewer } from '../../../src/components/VideoViewer';
/** create wrapper */
function createWrapper(props, suspenseFallback) {
return shallow(
<VideoViewer
classes={{}}
{...props}
/>,
);
}
describe('VideoViewer', () => {
let wrapper;
describe('render', () => {
it('videoResources', () => {
wrapper = createWrapper({
videoResources: [
{ getFormat: () => 'video/mp4', id: 1 },
{ getFormat: () => 'video/mp4', id: 2 },
],
}, true);
expect(wrapper.contains(<source src="1" type="video/mp4" />));
expect(wrapper.contains(<source src="2" type="video/mp4" />));
});
it('captions', () => {
wrapper = createWrapper({
captions: [
{ getLabel: () => 'English', getProperty: () => 'en', id: 1 },
{ getLabel: () => 'French', getProperty: () => 'fr', id: 2 },
],
videoResources: [
{ getFormat: () => 'video/mp4', id: 1 },
],
}, true);
expect(wrapper.contains(<track src="1" label="English" srcLang="en" />));
expect(wrapper.contains(<track src="2" label="French" srcLang="fr" />));
});
});
});
...@@ -6,6 +6,8 @@ import otherContentFixture from '../../fixtures/version-2/299843.json'; ...@@ -6,6 +6,8 @@ import otherContentFixture from '../../fixtures/version-2/299843.json';
import otherContentStringsFixture from '../../fixtures/version-2/BibliographicResource_3000126341277.json'; import otherContentStringsFixture from '../../fixtures/version-2/BibliographicResource_3000126341277.json';
import fragmentFixture from '../../fixtures/version-2/hamilton.json'; import fragmentFixture from '../../fixtures/version-2/hamilton.json';
import fragmentFixtureV3 from '../../fixtures/version-3/hamilton.json'; import fragmentFixtureV3 from '../../fixtures/version-3/hamilton.json';
import audioFixture from '../../fixtures/version-3/0002-mvm-audio.json';
import videoFixture from '../../fixtures/version-3/0015-start.json';
describe('MiradorCanvas', () => { describe('MiradorCanvas', () => {
let instance; let instance;
...@@ -100,4 +102,28 @@ describe('MiradorCanvas', () => { ...@@ -100,4 +102,28 @@ describe('MiradorCanvas', () => {
).toEqual([552, 1584, 3360, 2368]); ).toEqual([552, 1584, 3360, 2368]);
}); });
}); });
describe('videoResources', () => {
it('returns video', () => {
instance = new MiradorCanvas(
Utils.parseManifest(videoFixture).getSequences()[0].getCanvases()[0],
);
expect(instance.videoResources.length).toEqual(1);
});
});
describe('audioResources', () => {
it('returns audio', () => {
instance = new MiradorCanvas(
Utils.parseManifest(audioFixture).getSequences()[0].getCanvases()[0],
);
expect(instance.audioResources.length).toEqual(1);
});
});
describe('vttContent', () => {
it('returns vttContent', () => {
instance = new MiradorCanvas(
Utils.parseManifest(videoFixture).getSequences()[0].getCanvases()[0],
);
expect(instance.vttContent.length).toEqual(1);
});
});
}); });
...@@ -2,6 +2,8 @@ import manifestFixture001 from '../../fixtures/version-2/001.json'; ...@@ -2,6 +2,8 @@ import manifestFixture001 from '../../fixtures/version-2/001.json';
import manifestFixture019 from '../../fixtures/version-2/019.json'; import manifestFixture019 from '../../fixtures/version-2/019.json';
import minimumRequired from '../../fixtures/version-2/minimumRequired.json'; import minimumRequired from '../../fixtures/version-2/minimumRequired.json';
import minimumRequired3 from '../../fixtures/version-3/minimumRequired.json'; import minimumRequired3 from '../../fixtures/version-3/minimumRequired.json';
import audioFixture from '../../fixtures/version-3/0002-mvm-audio.json';
import videoFixture from '../../fixtures/version-3/0015-start.json';
import settings from '../../../src/config/settings'; import settings from '../../../src/config/settings';
import { import {
...@@ -12,6 +14,9 @@ import { ...@@ -12,6 +14,9 @@ import {
getCanvasLabel, getCanvasLabel,
selectInfoResponse, selectInfoResponse,
getVisibleCanvasNonTiledResources, getVisibleCanvasNonTiledResources,
getVisibleCanvasVideoResources,
getVisibleCanvasAudioResources,
getVisibleCanvasCaptions,
getVisibleCanvasIds, getVisibleCanvasIds,
} from '../../../src/state/selectors/canvases'; } from '../../../src/state/selectors/canvases';
...@@ -375,4 +380,76 @@ describe('getVisibleCanvasNonTiledResources', () => { ...@@ -375,4 +380,76 @@ describe('getVisibleCanvasNonTiledResources', () => {
state, { windowId: 'a' }, state, { windowId: 'a' },
)[0].id).toBe('http://iiif.io/api/presentation/2.1/example/fixtures/resources/page1-full.png'); )[0].id).toBe('http://iiif.io/api/presentation/2.1/example/fixtures/resources/page1-full.png');
}); });
describe('getVisibleCanvasVideoResources', () => {
it('returns canvases resources', () => {
const state = {
manifests: {
'https://iiif.io/api/cookbook/recipe/0015-start/manifest.json': {
id: 'https://iiif.io/api/cookbook/recipe/0015-start/manifest.json',
json: videoFixture,
},
},
windows: {
a: {
manifestId: 'https://iiif.io/api/cookbook/recipe/0015-start/manifest.json',
visibleCanvases: [
'https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1',
],
},
},
};
expect(getVisibleCanvasVideoResources(
state, { windowId: 'a' },
)[0].id).toBe('https://fixtures.iiif.io/video/indiana/30-minute-clock/medium/30-minute-clock.mp4');
});
});
describe('getVisibleCanvasCaptions', () => {
it('returns canvases resources', () => {
const state = {
manifests: {
'https://iiif.io/api/cookbook/recipe/0015-start/manifest.json': {
id: 'https://iiif.io/api/cookbook/recipe/0015-start/manifest.json',
json: videoFixture,
},
},
windows: {
a: {
manifestId: 'https://iiif.io/api/cookbook/recipe/0015-start/manifest.json',
visibleCanvases: [
'https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1',
],
},
},
};
expect(getVisibleCanvasCaptions(
state, { windowId: 'a' },
)[0].id).toBe('https://example.com/file.vtt');
});
});
describe('getVisibleCanvasAudioResources', () => {
it('returns canvases resources', () => {
const state = {
manifests: {
'https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json': {
id: 'https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json',
json: audioFixture,
},
},
windows: {
a: {
manifestId: 'https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json',
visibleCanvases: [
'https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas',
],
},
},
};
expect(getVisibleCanvasAudioResources(
state, { windowId: 'a' },
)[0].id).toBe('https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4');
});
});
}); });
...@@ -28,7 +28,8 @@ export class PrimaryWindow extends Component { ...@@ -28,7 +28,8 @@ export class PrimaryWindow extends Component {
*/ */
renderViewer() { renderViewer() {
const { const {
audioResources, isCollection, isCollectionDialogVisible, isFetching, videoResources, view, windowId, audioResources, isCollection, isCollectionDialogVisible,
isFetching, videoResources, view, windowId,
} = this.props; } = this.props;
if (isCollection) { if (isCollection) {
return ( return (
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment