UNPKG

getty-embeddy

Version:

Embed Gettyimages photos (iFrame) using Oembed.

152 lines (135 loc) 5.89 kB
/*jshint -W020 */ var expect = require('chai').expect; var GettyEmbeddy = require('../src/getty-embeddy.js'); var jsdom = require('jsdom'); function xmlReqGen(options) { options = options || {}; var _XMLHttpRequest = function () {}; // _XMLHttpRequest(); _XMLHttpRequest.prototype.open = function () {}; _XMLHttpRequest.prototype.send = function () { this.status = options.status || 200; this.readyState = options.readyState || 4; this.responseText = options.responseText || '{"html":"<div>works</div>"}'; if (options.delay) { setTimeout(function () { this.onreadystatechange(); }, options.delay); } else { this.onreadystatechange(); } }; return _XMLHttpRequest; } beforeEach(function () { global.XMLHttpRequest = xmlReqGen(); }); describe('GettyEmbeddy', function () { it('has valid default options', function (done) { document = jsdom.jsdom(); var gettyEmbeddy = new GettyEmbeddy(); expect(gettyEmbeddy.embeds).to.be.empty; // jshint ignore:line expect(gettyEmbeddy.options.loaderImgSrc).to.be.a('string'); expect(gettyEmbeddy.options.dataAttr).to.eql('getty-embeddy-id'); expect(gettyEmbeddy.options.selectorClass).to.eql('js-getty-embeddy-el'); expect(gettyEmbeddy.options.parentEl).to.deep.equal(document); done(); }); }); describe('GettyEmbeddy embedAll()', function () { it('works with default options', function (done) { document = jsdom.jsdom('<div id="test" class="js-getty-embeddy-el" data-getty-embeddy-id="83454805">Holder...</div>'); var gettyEmbeddy = new GettyEmbeddy(); gettyEmbeddy.embedAll(); setTimeout(function () { console.log(document.getElementById("test").innerHTML); expect(document.getElementById("test").innerHTML).to.contain('<div>works</div>'); done(); }, 10); }); it('fails if no embed id', function (done) { document = jsdom.jsdom('<div id="test" class="js-getty-embeddy-el">Holder...</div>'); var gettyEmbeddy = new GettyEmbeddy(); gettyEmbeddy.embedAll(); setTimeout(function () { console.log(document.getElementById("test").innerHTML); expect(document.getElementById("test").innerHTML).to.contain('<span>embedding failed reason:no_image_id</span>'); done(); }, 10); }); it('doesnt break if no elements', function (done) { document = jsdom.jsdom('<div id="test">Holder...</div>'); var gettyEmbeddy = new GettyEmbeddy(); gettyEmbeddy.embedAll(); setTimeout(function () { console.log(document.getElementById("test").innerHTML); expect(document.getElementById("test").innerHTML).to.contain('Holder...'); done(); }, 10); }); it('testing different options', function (done) { document = jsdom.jsdom( '<div id="parent">' + ' <div id="id1" class="cls1" data-g="83454805">x</div>' + ' <div id="id3" class="cls1" >no id</div>' + ' <div id="id4" class="cls1" data-g="603705212">x</div>' + ' <div id="id5" class="cls2" data-g="603563138">x</div>' + '</div>' + '<div id="id6" class="cls1" data-g="603557788">no parent</div>' + '<div id="id7" class="cls1" data-g="511550168">no parent</div>' + '<div id="id8" class="cls1">nothing</div>'); var gettyEmbeddy = new GettyEmbeddy({ parentEl: document.getElementById('parent'), selectorClass: 'cls1', dataAttr: 'g', }); gettyEmbeddy.embedAll(); setTimeout(function () { expect(document.getElementById("id1").innerHTML).to.contain('<div>works</div>'); expect(document.getElementById("id3").innerHTML).to.contain('<span>embedding failed reason:no_image_id</span>'); expect(document.getElementById("id4").innerHTML).to.contain('<div>works</div>'); expect(document.getElementById("id5").innerHTML).to.contain('x'); expect(document.getElementById("id6").innerHTML).to.contain('no parent'); expect(document.getElementById("id7").innerHTML).to.contain('no parent'); expect(document.getElementById("id8").innerHTML).to.contain('nothing'); done(); }, 1000); }); it('should fail on 404', function (done) { document = jsdom.jsdom('<div id="id1" class="js-getty-embeddy-el" data-getty-embeddy-id="83454805">x</div>'); global.XMLHttpRequest = xmlReqGen({ status: 404 }); var gettyEmbeddy = new GettyEmbeddy(); gettyEmbeddy.embedAll(); setTimeout(function () { expect(document.getElementById("id1").innerHTML).to.contain('<span>embedding failed reason:connection_error</span>'); done(); }, 1000); }); }); describe('GettyEmbeddy embed()', function () { it('shows loader', function (done) { document = jsdom.jsdom( ' <div id="id1" class="js-getty-embeddy-el" data-getty-embeddy-id="83454805">x</div>' + ' <div id="id3" class="cls1" >no id</div>'); global.XMLHttpRequest = xmlReqGen({ delay: 200 }); var gettyEmbeddy = new GettyEmbeddy(); gettyEmbeddy.embed(document.getElementById("id1")); expect(document.getElementById("id1").innerHTML).to.contain('<img style="margin:auto;display:block;top:50%;position:rel'); expect(document.getElementById("id3").innerHTML).to.contain('no id'); done(); }); it('embeds', function (done) { document = jsdom.jsdom( ' <div id="id1" class="js-getty-embeddy-el" data-getty-embeddy-id="83454805">x</div>' + ' <div id="id3" class="cls1" >no id</div>'); var gettyEmbeddy = new GettyEmbeddy(); gettyEmbeddy.embed(document.getElementById("id1")); expect(document.getElementById("id1").innerHTML).to.contain('works'); expect(document.getElementById("id3").innerHTML).to.contain('no id'); done(); }); });