Select Git revision
-
David Beniamine authored
See #2
David Beniamine authoredSee #2
WebAnnotation.test.js 4.29 KiB
import WebAnnotation from '../src/WebAnnotation';
/** */
function createSubject(args = {}) {
return new WebAnnotation({
body: {
value: 'body',
},
canvasId: 'canvasId',
fragsel: { t: '5,10', xywh: 'xywh' },
id: 'id',
svg: 'svg',
tags: ['tags'],
...args,
});
}
describe('WebAnnotation', () => {
let subject = createSubject();
describe('constructor', () => {
it('sets instance accessors', () => {
['canvasId', 'id', 'svg'].forEach((prop) => {
expect(subject[prop]).toBe(prop);
});
expect(subject.fragsel).toStrictEqual({ t: '5,10', xywh: 'xywh' });
});
it('sets instance accessors for body', () => {
['body'].forEach((prop) => {
expect(subject[prop].value).toBe(prop);
});
});
});
describe('target', () => {
it('with svg and xywh', () => {
expect(subject.target()).toEqual({
selector: [
{
type: 'SvgSelector',
value: 'svg',
},
{
type: 'FragmentSelector',
value: 't=5,10&xywh=xywh',
},
],
source: 'canvasId',
});
});
it('with svg only', () => {
subject = createSubject({ fragsel: null });
expect(subject.target()).toEqual({
selector: {
type: 'SvgSelector',
value: 'svg',
},
source: 'canvasId',
});
});
it('with time interval only', () => {
subject = createSubject({ fragsel: { t: '5,10' }, svg: null });
expect(subject.target()).toEqual({
selector: {
type: 'FragmentSelector',
value: 't=5,10',
},
source: 'canvasId',
});
});
it('with time interval only - xywh present but null', () => {
subject = createSubject({ fragsel: { t: '5,10', xywh: null }, svg: null });
expect(subject.target()).toEqual({
selector: {
type: 'FragmentSelector',
value: 't=5,10',
},
source: 'canvasId',
});
});
it('with xywh only', () => {
subject = createSubject({ fragsel: { xywh: 'xywh' }, svg: null });
expect(subject.target()).toEqual({
selector: {
type: 'FragmentSelector',
value: 'xywh=xywh',
},
source: 'canvasId',
});
});
it('with xywh only - time interval present but null', () => {
subject = createSubject({ fragsel: { t: null, xywh: 'xywh' }, svg: null });
expect(subject.target()).toEqual({
selector: {
type: 'FragmentSelector',
value: 'xywh=xywh',
},
source: 'canvasId',
});
});
it('with no xywh or svg', () => {
subject = createSubject({ fragsel: null, svg: null });
expect(subject.target()).toBe('canvasId');
});
});
describe('body', () => {
it('with text and tags', () => {
expect(subject.createBody()).toEqual([
{
type: 'TextualBody',
value: 'body',
},
{
purpose: 'tagging',
type: 'TextualBody',
value: 'tags',
},
]);
});
it('with text only', () => {
subject = createSubject({ image: null, tags: null });
expect(subject.createBody()).toEqual({
type: 'TextualBody',
value: 'body',
});
});
it('with tags only', () => {
subject = createSubject({ body: null, image: null });
expect(subject.createBody()).toEqual({
purpose: 'tagging',
type: 'TextualBody',
value: 'tags',
});
});
it('with image and text', () => {
subject = createSubject({ body: { value: 'hello' }, image: { id: 'http://example.photo/pic.jpg' }, tags: null });
expect(subject.createBody()).toEqual([
{
type: 'TextualBody',
value: 'hello',
},
{
id: 'http://example.photo/pic.jpg',
type: 'Image',
},
]);
});
it('with image only', () => {
subject = createSubject({ body: null, image: { id: 'http://example.photo/pic.jpg' }, tags: null });
expect(subject.createBody()).toEqual({
id: 'http://example.photo/pic.jpg',
type: 'Image',
});
});
});
describe('toJson', () => {
it('generates a WebAnnotation', () => {
expect(subject.toJson().type).toBe('Annotation');
});
});
});