Skip to content
Snippets Groups Projects
Commit 48baab94 authored by Lutz Helm's avatar Lutz Helm
Browse files

Add tests for localstorage annotation export

parent 72f01a46
No related branches found
No related tags found
No related merge requests found
import React from 'react';
import { shallow } from 'enzyme';
import MenuItem from '@material-ui/core/MenuItem';
import AnnotationExportDialog from '../src/AnnotationExportDialog';
window.URL.createObjectURL = jest.fn((data) => ('downloadurl'));
const adapter = jest.fn(() => (
{
all: jest.fn().mockResolvedValue(
{
id: 'pageId/3',
items: [
{ id: 'anno/2' },
],
type: 'AnnotationPage',
},
),
annotationPageId: 'pageId/3',
}
));
/** */
function createWrapper(props) {
return shallow(
<AnnotationExportDialog
canvases={[]}
config={{ annotation: { adapter } }}
handleClose={jest.fn()}
open
{...props}
/>,
);
}
describe('AnnotationExportDialog', () => {
it('renders download link for every annotation page', async () => {
let wrapper = createWrapper({
canvases: [
{ id: 'canvas/1' },
{ id: 'canvas/2' },
],
}).dive();
expect(wrapper.text()).toEqual(expect.stringContaining('No annotations stored yet.'));
wrapper.instance().componentDidUpdate({ open: false });
await new Promise((resolve) => setTimeout(resolve, 50));
wrapper = wrapper.update();
expect(wrapper.text()).toEqual(expect.not.stringContaining('No annotations stored yet.'));
expect(wrapper.find(MenuItem).some({ 'aria-label': 'Export annotations for canvas/1' })).toBe(true);
expect(wrapper.find(MenuItem).some({ 'aria-label': 'Export annotations for canvas/2' })).toBe(true);
});
});
import React from 'react';
import { shallow } from 'enzyme';
import { MiradorMenuButton } from 'mirador/dist/es/src/components/MiradorMenuButton';
import LocalStorageAdapter from '../src/LocalStorageAdapter';
import miradorAnnotationPlugin from '../src/plugins/miradorAnnotationPlugin';
/** */
......@@ -39,4 +40,38 @@ describe('MiradorAnnotation', () => {
},
);
});
it('renders no export button if export or LocalStorageAdapter are not configured', () => {
wrapper = createWrapper();
expect(wrapper.find(MiradorMenuButton).some({ 'aria-label': 'Export local annotations for visible items' })).toBe(false);
wrapper = createWrapper({
config: {
annotation: {
adapter: () => () => {},
exportLocalStorageAnnotations: true,
},
},
});
expect(wrapper.find(MiradorMenuButton).some({ 'aria-label': 'Export local annotations for visible items' })).toBe(false);
wrapper = createWrapper({
config: {
annotation: {
adapter: (canvasId) => new LocalStorageAdapter(`test://?canvasId=${canvasId}`),
},
},
});
expect(wrapper.find(MiradorMenuButton).some({ 'aria-label': 'Export local annotations for visible items' })).toBe(false);
});
it('renders export button if export and LocalStorageAdapter are configured', () => {
wrapper = createWrapper({
config: {
annotation: {
adapter: (canvasId) => new LocalStorageAdapter(`test://?canvasId=${canvasId}`),
exportLocalStorageAnnotations: true,
},
},
});
expect(wrapper.find(MiradorMenuButton).some({ 'aria-label': 'Export local annotations for visible items' })).toBe(true);
});
});
......@@ -46,7 +46,7 @@ class AnnotationExportDialog extends Component {
const content = await store.all();
if (content) {
// eslint-disable-next-line no-underscore-dangle
const label = canvas.__jsonld.label || canvas.id;
const label = (canvas.__jsonld && canvas.__jsonld.label) || canvas.id;
const data = new Blob([JSON.stringify(content)], { type: 'application/json' });
const url = window.URL.createObjectURL(data);
return [...resolvedAcc, {
......@@ -121,7 +121,7 @@ class AnnotationExportDialog extends Component {
AnnotationExportDialog.propTypes = {
canvases: PropTypes.arrayOf(
PropTypes.shape({ id: PropTypes.string, index: PropTypes.number }),
PropTypes.shape({ id: PropTypes.string }),
).isRequired,
classes: PropTypes.objectOf(PropTypes.string),
config: PropTypes.shape({
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment