diff --git a/e2e/full/team.e2e.js b/e2e/full/team.e2e.js index 85b50f23..2394f3d2 100644 --- a/e2e/full/team.e2e.js +++ b/e2e/full/team.e2e.js @@ -18,7 +18,7 @@ describe('leaving project', function(){ await utils.lightbox.confirm.ok(); await utils.common.takeScreenshot("team", "after-leaving"); }); -}) +}); describe('team', function() { before(async function(){ @@ -54,4 +54,4 @@ describe('team', function() { expect(newTotal).to.be.least(1); await utils.common.takeScreenshot("team", "filtering-by-role"); }); -}) +}); diff --git a/e2e/full/wiki.e2e.js b/e2e/full/wiki.e2e.js new file mode 100644 index 00000000..72f9d5ae --- /dev/null +++ b/e2e/full/wiki.e2e.js @@ -0,0 +1,88 @@ +var utils = require('../utils'); +var wikiHelper = require('../helpers').wiki; + +var chai = require('chai'); +var chaiAsPromised = require('chai-as-promised'); + +chai.use(chaiAsPromised); +var expect = chai.expect; + +describe('wiki', function() { + before(async function(){ + browser.get('http://localhost:9001/project/project-0/wiki/home'); + await utils.common.waitLoader(); + }); + + it('screenshot', async function() { + await utils.common.takeScreenshot("wiki", "empty"); + }); + + it('add link, follow it, edit and remove everything', async function(){ + // creation + let timestamp = new Date().getTime(); + let linkText = "Test link" + timestamp; + let slug = "test-link" + timestamp; + let newLink = await wikiHelper.links().addLink(linkText); + + //Following + newLink.click(); + expect(browser.getCurrentUrl()).to.be.eventually.equal('http://localhost:9001/project/project-0/wiki/' + slug); + await utils.common.waitLoader(); + await utils.common.takeScreenshot("wiki", "new-link-created-with-empty-wiki-page"); + + //Removing link + wikiHelper.links().deleteLink(newLink); + await utils.common.takeScreenshot("wiki", "deleting-the-created-link"); + + // Edition + let timesEdited = wikiHelper.editor().getTimesEdited(); + let lastEditionDatetime = wikiHelper.editor().getLastEditionDateTime(); + wikiHelper.editor().enabledEditionMode(); + let settingText = "This is the new text" + new Date().getTime() + wikiHelper.editor().setText(settingText); + + // Checking preview + wikiHelper.editor().preview(); + await utils.common.takeScreenshot("wiki", "home-edition-preview"); + + // Saving + wikiHelper.editor().save(); + let newHtml = await wikiHelper.editor().getInnerHtml(); + let newTimesEdited = wikiHelper.editor().getTimesEdited(); + let newLastEditionDatetime = wikiHelper.editor().getLastEditionDateTime(); + expect(newHtml).to.be.equal("

" + settingText + "

"); + expect(newTimesEdited).to.be.eventually.equal(timesEdited+1); + expect(newLastEditionDatetime).to.be.not.equal(lastEditionDatetime); + await utils.common.takeScreenshot("wiki", "home-edition"); + + // Delete + await wikiHelper.editor().delete(); + expect(browser.getCurrentUrl()).to.be.eventually.equal('http://localhost:9001/project/project-0/wiki/home'); + }) + + it('Custom keyboard actions', async function(){ + wikiHelper.editor().enabledEditionMode(); + + wikiHelper.editor().setText("- aa"); + browser.actions().sendKeys(protractor.Key.ENTER).perform(); + let text = await wikiHelper.editor().getText(); + expect(text).to.be.equal("- aa\n- "); + + wikiHelper.editor().setText("- "); + browser.actions().sendKeys(protractor.Key.ENTER).perform(); + text = await wikiHelper.editor().getText(); + expect(text).to.be.equal("\n"); + + wikiHelper.editor().setText("- bbcc"); + browser.actions().sendKeys(protractor.Key.ARROW_LEFT).sendKeys(protractor.Key.ARROW_LEFT).sendKeys(protractor.Key.ENTER).perform(); + text = await wikiHelper.editor().getText(); + expect(text).to.be.equal("- bb\n- cc"); + + wikiHelper.editor().setText("- aa"); + browser.actions().sendKeys(protractor.Key.HOME).sendKeys(protractor.Key.ENTER).perform(); + text = await wikiHelper.editor().getText(); + expect(text).to.be.equal("\n- aa"); + }); + + //TODO attachments +}); diff --git a/e2e/helpers/index.js b/e2e/helpers/index.js index 0acefa66..02f9e949 100644 --- a/e2e/helpers/index.js +++ b/e2e/helpers/index.js @@ -1,3 +1,4 @@ module.exports.backlog = require("./backlog-helper"); module.exports.taskboard = require("./taskboard-helper"); module.exports.team = require("./team-helper"); +module.exports.wiki = require("./wiki-helper"); diff --git a/e2e/helpers/wiki-helper.js b/e2e/helpers/wiki-helper.js new file mode 100644 index 00000000..1824501e --- /dev/null +++ b/e2e/helpers/wiki-helper.js @@ -0,0 +1,89 @@ +var utils = require('../utils'); + +var helper = module.exports; + +helper.links = function() { + let el = $('section[tg-wiki-nav]'); + + let obj = { + el: el, + + addLink: async function(pageTitle){ + el.$(".add-button").click(); + el.$(".new input").sendKeys(pageTitle); + browser.actions().sendKeys(protractor.Key.ENTER).perform(); + await browser.waitForAngular(); + let newLink = await el.$$(".wiki-link a").last(); + return newLink; + }, + + deleteLink: async function(link){ + link.$(".icon-delete").click(); + await utils.lightbox.confirm.ok(); + await browser.waitForAngular(); + } + + }; + + return obj; +}; + +helper.editor = function(){ + let el = $('.main.wiki'); + + let obj = { + el: el, + + enabledEditionMode: async function(){ + await el.$("section[tg-editable-wiki-content]").click(); + }, + + getTimesEdited: async function(){ + let total = await el.$(".wiki-times-edited .number").getText(); + return total; + }, + + getLastEditionDateTime: async function(){ + let date = await el.$(".wiki-last-modified .number").getText(); + return date; + }, + + getLastEditor: async function(){ + let editor = await el.$(".wiki-user-modification .username").getText(); + return editor; + }, + + getInnerHtml: async function(text){ + let wikiText = await el.$(".content").getInnerHtml(); + return wikiText; + }, + + getText: async function(text){ + let wikiText = await el.$("textarea").getAttribute('value'); + return wikiText; + }, + + setText: async function(text){ + await el.$("textarea").clear().sendKeys(text); + }, + + preview: async function(){ + await el.$(".preview-icon a").click(); + await browser.waitForAngular(); + }, + + save: async function(){ + await el.$(".save").click(); + await browser.waitForAngular(); + }, + + delete: async function(){ + await el.$('.remove').click(); + await utils.lightbox.confirm.ok(); + await browser.waitForAngular(); + } + + }; + + return obj; +};