diff --git a/__tests__/fixtures/version-2/collection.json b/__tests__/fixtures/version-2/collection.json new file mode 100644 index 0000000000000000000000000000000000000000..3ad3559df4581cc7d2cf1a3e9fdcff5651339825 --- /dev/null +++ b/__tests__/fixtures/version-2/collection.json @@ -0,0 +1,292 @@ +{ + "@context": "http://iiif.io/api/presentation/2/context.json", + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/collection.json", + "@type": "sc:Collection", + "label": "Collection of Test Cases", + "manifests": [ + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/1/manifest.json", + "@type": "sc:Manifest", + "label": "Test 1 Manifest: Minimum Required Fields" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/2/manifest.json", + "@type": "sc:Manifest", + "label": "Test 2 Manifest: Metadata Pairs" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/3/manifest.json", + "@type": "sc:Manifest", + "label": "Test 3 Manifest: Metadata Pairs with Languages" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/4/manifest.json", + "@type": "sc:Manifest", + "label": "Test 4 Manifest: Metadata Pairs with Multiple Values in same Language" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/5/manifest.json", + "@type": "sc:Manifest", + "label": "Test 5 Manifest: Description field" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/6/manifest.json", + "@type": "sc:Manifest", + "label": "Test 6 Manifest: Multiple Descriptions" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/7/manifest.json", + "@type": "sc:Manifest", + "label": "Test 7 Manifest: Rights Metadata" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/8/manifest.json", + "@type": "sc:Manifest", + "label": "Test 8 Manifest: SeeAlso link / Manifest" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/9/manifest.json", + "@type": "sc:Manifest", + "label": "Test 9 Manifest: Service link / Manifest" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/10/manifest.json", + "@type": "sc:Manifest", + "label": "Test 10 Manifest: Service link as Object" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/11/manifest.json", + "@type": "sc:Manifest", + "label": "Test 11 Manifest: ViewingDirection: l-t-r" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/12/manifest.json", + "@type": "sc:Manifest", + "label": "Test 12 Manifest: ViewingDirection: r-t-l" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/13/manifest.json", + "@type": "sc:Manifest", + "label": "Test 13 Manifest: ViewingDirection: t-t-b" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/14/manifest.json", + "@type": "sc:Manifest", + "label": "Test 14 Manifest: ViewingDirection: b-t-t" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/15/manifest.json", + "@type": "sc:Manifest", + "label": "Test 15 Manifest: ViewingHint: paged" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/16/manifest.json", + "@type": "sc:Manifest", + "label": "Test 16 Manifest: ViewingHint: continuous" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/17/manifest.json", + "@type": "sc:Manifest", + "label": "Test 17 Manifest: ViewingHint: individuals" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/18/manifest.json", + "@type": "sc:Manifest", + "label": "Test 18 Manifest: Non Standard Keys" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/19/manifest.json", + "@type": "sc:Manifest", + "label": "Test 19 Manifest: Multiple Canvases" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/20/manifest.json", + "@type": "sc:Manifest", + "label": "Test 20 Manifest: Multiple Sequences" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/21/manifest.json", + "@type": "sc:Manifest", + "label": "Test 21 Manifest: Sequence with Metadata" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/22/manifest.json", + "@type": "sc:Manifest", + "label": "Test 22 Manifest: /Sequence/ with non l-t-r viewingDirection" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/23/manifest.json", + "@type": "sc:Manifest", + "label": "Test 23 Manifest: /Sequence/ with non paged viewingHint" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/24/manifest.json", + "@type": "sc:Manifest", + "label": "Test 24 Manifest: Image with IIIF Service" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/25/manifest.json", + "@type": "sc:Manifest", + "label": "Test 25 Manifest: Image with IIIF Service, embedded info" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/26/manifest.json", + "@type": "sc:Manifest", + "label": "Test 26 Manifest: Image different size to Canvas" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/27/manifest.json", + "@type": "sc:Manifest", + "label": "Test 27 Manifest: No Image" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/28/manifest.json", + "@type": "sc:Manifest", + "label": "Test 28 Manifest: Choice of Image" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/29/manifest.json", + "@type": "sc:Manifest", + "label": "Test 29 Manifest: Choice of Image with IIIF Service" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/30/manifest.json", + "@type": "sc:Manifest", + "label": "Test 30 Manifest: Main + Detail Image" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/31/manifest.json", + "@type": "sc:Manifest", + "label": "Test 31 Manifest: Detail with IIIF Service" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/32/manifest.json", + "@type": "sc:Manifest", + "label": "Test 32 Manifest: Multiple Detail Images" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/33/manifest.json", + "@type": "sc:Manifest", + "label": "Test 33 Manifest: Detail Image with Choice" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/34/manifest.json", + "@type": "sc:Manifest", + "label": "Test 34 Manifest: Detail Image with Choice, and 'no image' as option" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/35/manifest.json", + "@type": "sc:Manifest", + "label": "Test 35 Manifest: Partial Image as Main Image" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/36/manifest.json", + "@type": "sc:Manifest", + "label": "Test 36 Manifest: Partial Image as Main Image with IIIF Service" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/37/manifest.json", + "@type": "sc:Manifest", + "label": "Test 37 Manifest: Partial Image as Detail Image" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/38/manifest.json", + "@type": "sc:Manifest", + "label": "Test 38 Manifest: Partial Image as Detail Image with IIIF Service" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/39/manifest.json", + "@type": "sc:Manifest", + "label": "Test 39 Manifest: Image with CSS Rotation" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/40/manifest.json", + "@type": "sc:Manifest", + "label": "Test 40 Manifest: Multiple Languages for Metadata Labels" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/41/manifest.json", + "@type": "sc:Manifest", + "label": "Test 41 Manifest: Main Image with Server side Rotation" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/43/manifest.json", + "@type": "sc:Manifest", + "label": "Test 43 Manifest: Embedded Transcription on Canvas" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/44/manifest.json", + "@type": "sc:Manifest", + "label": "Test 44 Manifest: Embedded Transcription on Fragment Segment" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/45/manifest.json", + "@type": "sc:Manifest", + "label": "Test 45 Manifest: External text/plain Transcription on Canvas" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/46/manifest.json", + "@type": "sc:Manifest", + "label": "Test 46 Manifest: External text/plain Transcription on Segment" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/47/manifest.json", + "@type": "sc:Manifest", + "label": "Test 47 Manifest: Embedded HTML Transcription on Canvas" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/48/manifest.json", + "@type": "sc:Manifest", + "label": "Test 48 Manifest: Embedded HTML Transcription on Segment" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/51/manifest.json", + "@type": "sc:Manifest", + "label": "Test 51 Manifest: Embedded Comment on a Canvas" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/52/manifest.json", + "@type": "sc:Manifest", + "label": "Test 52 Manifest: Embedded Comment on a Segment" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/54/manifest.json", + "@type": "sc:Manifest", + "label": "Test 54 Manifest: Comment in HTML" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/61/manifest.json", + "@type": "sc:Manifest", + "label": "Test 61 Manifest: Embedded Transcription on Selector Segment" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/62/manifest.json", + "@type": "sc:Manifest", + "label": [ + { + "@value": "62: quelque titre", + "@language": "fr" + }, + { + "@value": "62: some title", + "@language": "en" + } + ] + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/63/manifest.json", + "@type": "sc:Manifest", + "label": "Test 63 Manifest: Description in Multiple Languages" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/64/manifest.json", + "@type": "sc:Manifest", + "label": "Test 64 Manifest: Description in HTML" + }, + { + "@id": "http://iiif.io/api/presentation/2.1/example/fixtures/65/manifest.json", + "@type": "sc:Manifest", + "label": "Test 65 Manifest: Sequence with startCanvas" + } + ] +} diff --git a/__tests__/src/components/CollectionDialog.test.js b/__tests__/src/components/CollectionDialog.test.js new file mode 100644 index 0000000000000000000000000000000000000000..64928539f0aa225405a7bae2e02aadba52dbc90d --- /dev/null +++ b/__tests__/src/components/CollectionDialog.test.js @@ -0,0 +1,44 @@ +import React from 'react'; +import { shallow } from 'enzyme'; +import Dialog from '@material-ui/core/Dialog'; +import DialogActions from '@material-ui/core/DialogActions'; +import Button from '@material-ui/core/Button'; +import MenuItem from '@material-ui/core/MenuItem'; +import Skeleton from '@material-ui/lab/Skeleton'; +import { Utils } from 'manifesto.js/dist-esmodule/Utils'; +import { CollectionDialog } from '../../../src/components/CollectionDialog'; +import collection from '../../fixtures/version-2/collection.json'; + +/** */ +function createWrapper(props) { + const manifest = Utils.parseManifest(props.manifest ? props.manifest : collection); + return shallow( + <CollectionDialog + addWindow={() => {}} + classes={{}} + ready + manifest={manifest} + t={(key) => key} + {...props} + />, + ); +} + +describe('CollectionDialog', () => { + it('renders a dialog with collection menu items', () => { + const wrapper = createWrapper({}); + expect(wrapper.find(Dialog).length).toEqual(1); + expect(wrapper.find(MenuItem).length).toEqual(55); + expect(wrapper.find(MenuItem).first().text()).toEqual('Test 1 Manifest: Minimum Required Fields'); + }); + it('when not ready returns placeholder skeleton', () => { + const wrapper = createWrapper({ ready: false }); + expect(wrapper.find(Skeleton).length).toEqual(3); + }); + it('clicking the hide button fires hideCollectionDialog', () => { + const hideCollectionDialog = jest.fn(); + const wrapper = createWrapper({ hideCollectionDialog }); + expect(wrapper.find(DialogActions).find(Button).first().simulate('click')); + expect(hideCollectionDialog).toHaveBeenCalled(); + }); +});