describe('embed links', function () { const objectify = function (str) { const hash = {}; const parts = str.split('&'); for (let i = 0; i < parts.length; i++) { const keyValue = parts[i].split('='); hash[keyValue[0]] = keyValue[1]; } return hash; }; const checkiFrameCode = function (embedCode, readonly) { // turn the code into an html element const $embediFrame = $(embedCode); // read and check the frame attributes const width = $embediFrame.attr('width'); const height = $embediFrame.attr('height'); const name = $embediFrame.attr('name'); expect(width).to.be('100%'); expect(height).to.be('600'); expect(name).to.be(readonly ? 'embed_readonly' : 'embed_readwrite'); // parse the url const src = $embediFrame.attr('src'); const questionMark = src.indexOf('?'); const url = src.substr(0, questionMark); const paramsStr = src.substr(questionMark + 1); const params = objectify(paramsStr); const expectedParams = { showControls: 'true', showChat: 'true', showLineNumbers: 'true', useMonospaceFont: 'false', }; // check the url if (readonly) { expect(url.indexOf('r.') > 0).to.be(true); } else { expect(url).to.be(helper.padChrome$.window.location.href); } // check if all parts of the url are like expected expect(params).to.eql(expectedParams); }; describe('read and write', function () { // create a new pad before each test run beforeEach(function (cb) { helper.newPad(cb); this.timeout(60000); }); describe('the share link', function () { it('is the actual pad url', function (done) { const chrome$ = helper.padChrome$; // open share dropdown chrome$('.buttonicon-embed').click(); // get the link of the share field + the actual pad url and compare them const shareLink = chrome$('#linkinput').val(); const padURL = chrome$.window.location.href; expect(shareLink).to.be(padURL); done(); }); }); describe('the embed as iframe code', function () { it('is an iframe with the the correct url parameters and correct size', function (done) { const chrome$ = helper.padChrome$; // open share dropdown chrome$('.buttonicon-embed').click(); // get the link of the share field + the actual pad url and compare them const embedCode = chrome$('#embedinput').val(); checkiFrameCode(embedCode, false); done(); }); }); }); describe('when read only option is set', function () { beforeEach(function (cb) { helper.newPad(cb); this.timeout(60000); }); describe('the share link', function () { it('shows a read only url', function (done) { const chrome$ = helper.padChrome$; // open share dropdown chrome$('.buttonicon-embed').click(); chrome$('#readonlyinput').click(); chrome$('#readonlyinput:checkbox:not(:checked)').attr('checked', 'checked'); // get the link of the share field + the actual pad url and compare them const shareLink = chrome$('#linkinput').val(); const containsReadOnlyLink = shareLink.indexOf('r.') > 0; expect(containsReadOnlyLink).to.be(true); done(); }); }); describe('the embed as iframe code', function () { it('is an iframe with the the correct url parameters and correct size', function (done) { const chrome$ = helper.padChrome$; // open share dropdown chrome$('.buttonicon-embed').click(); // check read only checkbox, a bit hacky chrome$('#readonlyinput').click(); chrome$('#readonlyinput:checkbox:not(:checked)').attr('checked', 'checked'); // get the link of the share field + the actual pad url and compare them const embedCode = chrome$('#embedinput').val(); checkiFrameCode(embedCode, true); done(); }); }); }); });