UNPKG

prismic.io

Version:

JavaScript development kit for prismic.io

158 lines (135 loc) 7.77 kB
/*eslint-env node, mocha */ /*eslint no-unused-vars: 0 */ var Prismic = require('../lib/prismic.js'); var chai = require('chai'); var assert = chai.assert; var structuredText = { type: 'StructuredText', value: [{ type: 'paragraph', text: 'Hi everyone, I am an awesome text!', spans: [{ start: 0, end: 11, type: 'strong' },{ start: 3, end: 11, type: 'em' },{ start: 13, end: 17, type: 'strong' },{ start: 17, end: 28, type: 'em' }] }] }; function getLinkResolver(ref) { return function(doc, isBroken) { if (isBroken) return '#broken'; return "/testing_url/" + doc.id + "/" + doc.slug + (ref ? ('?ref=' + ref) : ''); }; } describe("Unit tests", function() { it('should init and render StructuredText', function () { var html = '<p><strong>Hi <em>everyone</em></strong>, <strong>I am</strong><em> an awesome</em> text!</p>'; var fragment = Prismic.Fragments.initField(structuredText); assert.equal(html, fragment.asHtml()); }); it('should init Timestamp without value', function () { assert.doesNotThrow(function() { var field = Prismic.Fragments.initField({"type" : "Timestamp", "value" : null }); assert.equal(field.value, null); }); }); it('should init Timestamp with valid date string', function () { var dateString = '1970-11-23T00:00:00.000'; var field = Prismic.Fragments.initField({"type" : "Timestamp", "value" : dateString }); assert.deepEqual(field.value, new Date(dateString)); }); }); describe("HTML content", function() { it('2 spans on the same text - one bigger 1', function() { var text = 'abcdefghijklmnopqrstuvwxyz'; var spans = [{ "type": "em", "start": 2, "end": 6 }, { "type": "strong", "start": 2, "end": 4 }]; var html = Prismic.Fragments.insertSpans(text, spans, {}); assert.equal(html, 'ab<em><strong>cd</strong>ef</em>ghijklmnopqrstuvwxyz'); }); it('2 spans on the same text - one bigger 2', function() { var text = 'abcdefghijklmnopqrstuvwxyz'; var spans = [{ "type": "em", "start": 2, "end": 4 }, { "type": "strong", "start": 2, "end": 6 }]; var html = Prismic.Fragments.insertSpans(text, spans, {}); assert.equal(html, 'ab<strong><em>cd</em>ef</strong>ghijklmnopqrstuvwxyz'); }); it ("with span labels", function() { var text = 'abcdefghijklmnopqrstuvwxyz'; var spans = [{ "type": "label", "start": 2, "end": 6, "data": { "label": "tip" } }]; var html = Prismic.Fragments.insertSpans(text, spans, {}); assert.equal(html, 'ab<span class="tip">cdef</span>ghijklmnopqrstuvwxyz'); }); }); it('List items are correctly grouped', function() { var jsonString = '{ "type":"StructuredText", "value":[ { "spans":[], "text":"Here is some introductory text.", "type":"paragraph" }, { "spans":[], "text":"first item", "type":"list-item" }, { "spans":[], "text":"second item", "type":"list-item" }, { "spans":[], "text":"The following image is linked.", "type":"paragraph" }, { "spans":[], "text":"first item 2", "type":"list-item" }, { "spans":[], "text":"second item 2", "type":"list-item" } ] }'; var jsonObject = JSON.parse(jsonString); var text = Prismic.Fragments.initField(jsonObject); assert.equal(text.asHtml(getLinkResolver()), '<p>Here is some introductory text.</p><ul><li>first item</li><li>second item</li></ul><p>The following image is linked.</p><ul><li>first item 2</li><li>second item 2</li></ul>'); }); it('Dates are well retrieved', function() { var timestampHtml = Prismic.Fragments.initField({"type" : "Date", "value" : "2014-04-01"}).asHtml(); assert.equal( (new RegExp('<time>... ... \\d\\d 2014 \\d\\d:00:00 GMT[-+]\\d\\d00 \\(.+\\)</time>')).test(timestampHtml), true ); }); it('Timestamps are well retrieved', function() { var timestampHtml = Prismic.Fragments.initField({"type" : "Timestamp", "value" : "2014-06-18T15:30:00+0000"}).asHtml(); assert.equal( (new RegExp('<time>... ... \\d\\d 2014 \\d\\d:30:00 GMT[-+]\\d\\d00 \\(.+\\)</time>')).test(timestampHtml), true, timestampHtml ); }); it('Link in images are parsed', function() { var jsonString = '{ "type": "StructuredText", "value": [ { "spans": [], "text": "Here is some introductory text.", "type": "paragraph" }, { "spans": [], "text": "The following image is linked.", "type": "paragraph" }, { "alt": "", "copyright": "", "dimensions": { "height": 129, "width": 260 }, "linkTo": { "type": "Link.web", "value": { "url": "http://google.com/", "target": "_blank" } }, "type": "image", "url": "http://fpoimg.com/129x260" }, { "spans": [ { "end": 20, "start": 0, "type": "strong" } ], "text": "More important stuff", "type": "paragraph" }, { "spans": [], "text": "The next is linked to a valid document:", "type": "paragraph" }, { "alt": "", "copyright": "", "dimensions": { "height": 400, "width": 400 }, "linkTo": { "type": "Link.document", "value": { "document": { "id": "UxCQFFFFFFFaaYAH", "slug": "something-fantastic", "type": "lovely-thing" }, "isBroken": false } }, "type": "image", "url": "http://fpoimg.com/400x400" }, { "spans": [], "text": "The next is linked to a broken document:", "type": "paragraph" }, { "alt": "", "copyright": "", "dimensions": { "height": 250, "width": 250 }, "linkTo": { "type": "Link.document", "value": { "document": { "id": "UxERPAEAAHQcsBUH", "slug": "-", "type": "event-calendar" }, "isBroken": true } }, "type": "image", "url": "http://fpoimg.com/250x250" }, { "spans": [], "text": "One more image, this one is not linked:", "type": "paragraph" }, { "alt": "", "copyright": "", "dimensions": { "height": 199, "width": 300 }, "type": "image", "url": "http://fpoimg.com/199x300" } ] }'; var jsonObject = JSON.parse(jsonString); var text = Prismic.Fragments.initField(jsonObject); assert.equal(text.asHtml(getLinkResolver()), '<p>Here is some introductory text.</p><p>The following image is linked.</p><p class=\"block-img\"><a target="_blank" rel="noopener" href=\"http://google.com/\"><img src=\"http://fpoimg.com/129x260\" alt=\"\" copyright=\"\"></a></p><p><strong>More important stuff</strong></p><p>The next is linked to a valid document:</p><p class=\"block-img\"><a href=\"/testing_url/UxCQFFFFFFFaaYAH/something-fantastic\"><img src=\"http://fpoimg.com/400x400\" alt=\"\" copyright=\"\"></a></p><p>The next is linked to a broken document:</p><p class=\"block-img\"><a href=\"#broken\"><img src=\"http://fpoimg.com/250x250\" alt=\"\" copyright=\"\"></a></p><p>One more image, this one is not linked:</p><p class=\"block-img\"><img src=\"http://fpoimg.com/199x300\" alt=\"\" copyright=\"\"></p>'); }); it('Link should support target', function() { var jsonString = '{ "type": "Link.web", "value": { "url": "https://prismic.io", "target": "_blank" }}'; var jsonObject = JSON.parse(jsonString); var text = Prismic.Fragments.initField(jsonObject); assert.equal(text.asHtml(getLinkResolver()), '<a target="_blank" rel="noopener" href="https://prismic.io">https://prismic.io</a>'); }); it('Link in StructuredText should support target', function() { var jsonString = '{ "type": "StructuredText", "value": [{ "type": "paragraph", "text": "description link description", "spans": [{ "start": 12, "end": 16, "type": "hyperlink", "data": {"type": "Link.web", "value": { "url": "https://google.com", "target": "_blank" }}}]}]}'; var jsonObject = JSON.parse(jsonString); var text = Prismic.Fragments.initField(jsonObject); assert.equal(text.asHtml(getLinkResolver()), '<p>description <a target="_blank" rel="noopener" href="https://google.com">link</a> description</p>'); });