From e291f98a461de50fdf250d6800a724af60bed230 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Xavier=20Juli=C3=A1n?= Date: Fri, 19 Aug 2016 10:29:27 +0200 Subject: [PATCH] Add e2e tests for epics --- .../assigned-to-selector.jade | 4 +- .../components/assigned-to/assigned-to.jade | 12 +- .../epics/dashboard/epic-row/epic-row.jade | 10 +- .../dashboard/epics-table/epics-table.jade | 10 +- conf.e2e.js | 1 + e2e/helpers/epics-helper.js | 176 ++++++++++++++++++ e2e/suites/epics/epic-dashboard.e2e.js | 67 +++++++ e2e/utils/nav.js | 9 + 8 files changed, 271 insertions(+), 18 deletions(-) create mode 100644 e2e/helpers/epics-helper.js create mode 100644 e2e/suites/epics/epic-dashboard.e2e.js diff --git a/app/modules/components/assigned-to/assigned-to-selector/assigned-to-selector.jade b/app/modules/components/assigned-to/assigned-to-selector/assigned-to-selector.jade index e74b5bb3..435a7979 100644 --- a/app/modules/components/assigned-to/assigned-to-selector/assigned-to-selector.jade +++ b/app/modules/components/assigned-to/assigned-to-selector/assigned-to-selector.jade @@ -15,12 +15,12 @@ tg-lightbox-close ng-if="vm.assigned" ) tg-assigned-item(member="member") - tg-svg.unassign-epic( + tg-svg.unassign-epic.e2e-unassign( svg-icon="icon-close" svg-title-translate="COMMON.ASSIGNED_TO.REMOVE_ASSIGNED" ng-click="vm.onRemoveAssigned()" ) - li(ng-repeat="member in vm.nonAssignedMembers | filter: vm.assignToMember.name | limitTo:6") + li.e2e-assigned-to-selector(ng-repeat="member in vm.nonAssignedMembers | filter: vm.assignToMember.name | limitTo:6") tg-assigned-item.assigned-members-option( member="member" ng-click="vm.onAssignTo({'member': member})" diff --git a/app/modules/components/assigned-to/assigned-to.jade b/app/modules/components/assigned-to/assigned-to.jade index 3eb7fe76..a03af5a3 100644 --- a/app/modules/components/assigned-to/assigned-to.jade +++ b/app/modules/components/assigned-to/assigned-to.jade @@ -1,24 +1,24 @@ -img.assigned-to( +img.assigned-to.e2e-assigned-to-image( ng-if="vm.assignedTo && vm.has_permissions" tg-avatar="vm.assignedTo" alt="{{vm.assignedTo.get('full_name_display')}}" title="{{vm.assignedTo.get('full_name_display')}}" ng-click="vm.onSelectAssignedTo(vm.assignedTo, vm.project)" ) -img.assigned-to( +img.assigned-to.e2e-assigned-to-image( ng-if="vm.assignedTo && !vm.has_permissions" tg-avatar="vm.assignedTo" alt="{{vm.assignedTo.get('full_name_display')}}" title="{{vm.assignedTo.get('full_name_display')}}" ) -img.assigned-to( +img.assigned-to.e2e-assigned-to-image( ng-if="!vm.assignedTo && vm.has_permissions" src="/#{v}/images/unnamed.png" - alt="{{EPICS.DASHBOARD.UNASSIGNED | translate}}" + alt="{{'EPICS.DASHBOARD.UNASSIGNED' | translate}}" ng-click="vm.onSelectAssignedTo(vm.assignedTo, vm.project)" ) -img.assigned-to( +img.assigned-to.e2e-assigned-to-image( ng-if="!vm.assignedTo && !vm.has_permissions" src="/#{v}/images/unnamed.png" - alt="{{EPICS.DASHBOARD.UNASSIGNED | translate}}" + alt="{{'EPICS.DASHBOARD.UNASSIGNED' | translate}}" ) diff --git a/app/modules/epics/dashboard/epic-row/epic-row.jade b/app/modules/epics/dashboard/epic-row/epic-row.jade index 1644ab12..452d928a 100644 --- a/app/modules/epics/dashboard/epic-row/epic-row.jade +++ b/app/modules/epics/dashboard/epic-row/epic-row.jade @@ -1,4 +1,4 @@ -.epic-row( +.epic-row.e2e-epic-row( ng-class="{'is-blocked': vm.epic.get('is_blocked'), 'is-closed': vm.epic.get('is_closed'), 'unfold': vm.displayUserStories}" ng-click="vm.requestUserStories(vm.epic)" ) @@ -31,7 +31,7 @@ .sprint( ng-if="vm.column.sprint" ) - .assigned + .assigned.e2e-assigned-to tg-assigned-to-component( assigned-to="vm.epic.get('assigned_to_extra_info')" project="vm.project" @@ -51,13 +51,13 @@ ng-style="{'color': vm.epic.getIn(['status_extra_info', 'color'])}" tg-loading="vm.loadingStatus" ) - span {{vm.epic.getIn(['status_extra_info', 'name'])}} + span.e2e-epic-status {{vm.epic.getIn(['status_extra_info', 'name'])}} tg-svg( svg-icon="icon-arrow-down" ) ul.epic-statuses(ng-if="vm.displayStatusList") - li( + li.e2e-edit-epic-status( ng-repeat="status in vm.project.epic_statuses | orderBy:'order'" ng-click="vm.updateEpicStatus(status.id)" ) {{status.name}} @@ -70,7 +70,7 @@ .epic-stories-wrapper(ng-if="vm.displayUserStories && vm.epicStories") .epic-story(tg-repeat="story in vm.epicStories track by story.get('id')") - tg-story-row( + tg-story-row.e2e-story( epic="vm.epic" story="story" project="vm.project" diff --git a/app/modules/epics/dashboard/epics-table/epics-table.jade b/app/modules/epics/dashboard/epics-table/epics-table.jade index e82bdab0..1056460c 100644 --- a/app/modules/epics/dashboard/epics-table/epics-table.jade +++ b/app/modules/epics/dashboard/epics-table/epics-table.jade @@ -11,8 +11,8 @@ mixin epicSwitch(name, model) span.check-text.check-yes(translate="COMMON.YES") span.check-text.check-no(translate="COMMON.NO") -.epics-table - .epics-table-header +.epics-table.e2e-epic-table + .epics-table-header.e2e-epics-table-header .vote( translate="EPICS.TABLE.VOTES" ng-if="vm.column.votes" @@ -42,10 +42,10 @@ mixin epicSwitch(name, model) ng-if="vm.column.progress" ) .epics-table-options-wrapper(ng-mouseleave="vm.displayOptions = false") - button.epics-table-option-button(ng-click="vm.displayOptions = true") + button.epics-table-option-button.e2e-epics-column-button(ng-click="vm.displayOptions = true") span(translate="EPICS.TABLE.VIEW_OPTIONS") tg-svg(svg-icon="icon-arrow-down") - form.epics-table-dropdown(ng-show="vm.displayOptions") + form.epics-table-dropdown.e2e-epics-column-dropdown(ng-show="vm.displayOptions") .fieldset label.epics-table-options-vote( translate="EPICS.TABLE.VOTES" @@ -90,7 +90,7 @@ mixin epicSwitch(name, model) +epicSwitch('switch-progress', 'vm.column.progress') .epics-table-body(tg-epic-sortable) .epics-table-body-row(tg-repeat="epic in vm.epics track by epic.get('id')") - tg-epic-row( + tg-epic-row.e2e-epic( epic="epic" project="vm.project" column="vm.column" diff --git a/conf.e2e.js b/conf.e2e.js index a88f4a79..d7ca0a01 100644 --- a/conf.e2e.js +++ b/conf.e2e.js @@ -38,6 +38,7 @@ var config = { issues: "e2e/suites/issues/*.e2e.js", tasks: "e2e/suites/tasks/*.e2e.js", userProfile: "e2e/suites/user-profile/*.e2e.js", + epics: "e2e/suites/epics/*.e2e.js", userStories: "e2e/suites/user-stories/*.e2e.js", backlog: "e2e/suites/backlog.e2e.js", home: "e2e/suites/home.e2e.js", diff --git a/e2e/helpers/epics-helper.js b/e2e/helpers/epics-helper.js new file mode 100644 index 00000000..4985b757 --- /dev/null +++ b/e2e/helpers/epics-helper.js @@ -0,0 +1,176 @@ +var utils = require('../utils'); + +var helper = module.exports; + +helper.epic = function() { + let el = $$('.e2e-epic'); + + let obj = { + el: el, + displayUserStoriesinEpic: async function() { + await utils.common.takeScreenshot("epics", "epics-child-closed"); + let storiesCount = await el.count(); + let epicChildren; + for (var i = 0; i < storiesCount; i++) { + let story = await el.get(i); + story.click(); + epicChildren = await story.$$('.e2e-story').count(); + if (epicChildren > 0) { + await utils.common.takeScreenshot("epics", "epics-child-open"); + break; + } + } + return epicChildren; + }, + getAssignedTo: async function() { + return await el.get(0).$('.e2e-assigned-to-image').getAttribute("title"); + }, + resetAssignedTo: async function() { + el.get(0).$('.e2e-assigned-to-image').click(); + $$('.e2e-assigned-to-selector').get(0).click(); + }, + editAssignedTo: async function() { + el.get(0).$('.e2e-assigned-to-image').click(); + $$('.e2e-assigned-to-selector').last().click(); + }, + removeAssignedTo: async function() { + el.get(0).$('.e2e-assigned-to-image').click(); + $$('.e2e-unassign').click(); + return el.get(0).$('.e2e-assigned-to-image').getAttribute("alt"); + }, + resetStatus: function() { + el.get(0).$('.e2e-epic-status').click(); + el.get(0).$$('.e2e-edit-epic-status').get(0).click(); + }, + getStatus: function() { + return el.get(0).$('.e2e-epic-status').getText(); + }, + editStatus: function() { + el.get(0).$('.e2e-epic-status').click(); + el.get(0).$$('.e2e-edit-epic-status').last().click(); + }, + getColumns: function() { + return $$('.e2e-epics-table-header > div').count(); + }, + removeColumns: function() { + $('.e2e-epics-column-button').click(); + $$('.e2e-epics-column-dropdown .check').first().click(); + } + } + + return obj; +} + +// helper.title = function() { +// let el = $('.e2e-story-header'); +// +// let obj = { +// el: el, +// +// getTitle: function() { +// return el.$('.e2e-title-subject').getText(); +// }, +// +// setTitle: function(title) { +// el.$('.e2e-detail-edit').click(); +// el.$('.e2e-title-input').clear().sendKeys(title); +// }, +// +// save: async function() { +// el.$('.e2e-title-button').click(); +// await browser.waitForAngular(); +// } +// }; +// +// return obj; +// }; + +// +// helper.getCreateIssueLightbox = function() { +// let el = $('div[tg-lb-create-issue]'); +// +// let obj = { +// el: el, +// waitOpen: function() { +// return utils.lightbox.open(el); +// }, +// waitClose: function() { +// return utils.lightbox.close(el); +// }, +// subject: function() { +// return el.$$('input').first(); +// }, +// tags: function() { +// return el.$('.tag-input'); +// }, +// submit: function() { +// el.$('button[type="submit"]').click(); +// } +// }; +// +// return obj; +// }; +// +// helper.getBulkCreateLightbox = function() { +// let el = $('div[tg-lb-create-bulk-issues]'); +// +// let obj = { +// el: el, +// waitOpen: function() { +// return utils.lightbox.open(el); +// }, +// textarea: function() { +// return el.$('textarea'); +// }, +// submit: function() { +// el.$('button[type="submit"]').click(); +// }, +// waitClose: function() { +// return utils.lightbox.close(el); +// } +// }; +// +// return obj; +// }; +// +// helper.openNewIssueLb = function() { +// $('.new-issue .button-green').click(); +// }; +// +// helper.openBulk = function() { +// $('.new-issue .button-bulk').click(); +// }; +// +// helper.clickColumn = function(index) { +// $$('.row.title > div').get(index).click(); +// }; +// +// helper.getTable = function() { +// return $('.basic-table'); +// }; +// +// helper.openAssignTo = function(index) { +// $$('.issue-assignedto').get(index).click(); +// }; +// +// helper.getAssignTo = function(index) { +// return $$('.assigned-field figcaption').get(index).getText(); +// }; +// +// helper.clickPagination = function(index) { +// $$('.paginator li').get(index).click(); +// }; +// +// helper.getIssues = function() { +// return $$('.row.table-main'); +// }; +// +// helper.parseIssue = async function(elm) { +// let obj = {}; +// +// obj.ref = await elm.$$('.subject span').get(0).getText(); +// obj.ref = obj.ref.replace('#', ''); +// obj.subject = await elm.$$('.subject span').get(1).getText(); +// +// return obj; +// }; diff --git a/e2e/suites/epics/epic-dashboard.e2e.js b/e2e/suites/epics/epic-dashboard.e2e.js new file mode 100644 index 00000000..369a906a --- /dev/null +++ b/e2e/suites/epics/epic-dashboard.e2e.js @@ -0,0 +1,67 @@ +var utils = require('../../utils'); +var epicsHelper = require('../../helpers/epics-helper'); + +var chai = require('chai'); +var chaiAsPromised = require('chai-as-promised'); + +chai.use(chaiAsPromised); +var expect = chai.expect; + +describe('Epics Dashboard', function(){ + let usUrl = ''; + + before(async function(){ + await utils.nav + .init() + .project('Project Example 0') + .epics() + .go(); + + usUrl = await browser.getCurrentUrl(); + }); + + it('screenshot', async function() { + await utils.common.takeScreenshot("epics", "dashboard"); + }); + + it('display child stories', async function() { + let epic = epicsHelper.epic(); + let childStoriesNum = await epic.displayUserStoriesinEpic(); + expect(childStoriesNum).to.be.above(0); + }); + + it('change epic assigned from dashboard', async function() { + let epic = epicsHelper.epic(); + await epic.resetAssignedTo(); + let currentAssigned = await epic.getAssignedTo(); + await epic.editAssignedTo(); + let newAssigned = await epic.getAssignedTo(); + expect(currentAssigned).to.be.not.equal(newAssigned); + }); + + it('remove assigned from dashboard', async function() { + let epic = epicsHelper.epic(); + await epic.resetAssignedTo(); + let unAssigned = await epic.removeAssignedTo(); + console.log(unAssigned); + expect(unAssigned).to.be.equal('Unassigned'); + }); + + it('change status from dashboard', async function() { + let epic = epicsHelper.epic(); + await epic.resetStatus(); + let currentStatus = await epic.getStatus(); + await epic.editStatus(); + let newStatus = await epic.getStatus(); + expect(currentStatus).to.be.not.equal(newStatus); + }); + + it('remove columns from dashboard', async function() { + let epic = epicsHelper.epic(); + let currentColumns = await epic.getColumns(); + await epic.removeColumns(); + let newColumns = await epic.getColumns(); + expect(currentColumns).to.be.above(newColumns); + }); + +}) diff --git a/e2e/utils/nav.js b/e2e/utils/nav.js index 3712f716..17710dbe 100644 --- a/e2e/utils/nav.js +++ b/e2e/utils/nav.js @@ -46,6 +46,11 @@ var actions = { return common.waitLoader(); }, + epics: async function() { + await common.link($('#nav-epics a')); + + return common.waitLoader(); + }, backlog: async function() { await common.link($$('#nav-backlog a').first()); @@ -101,6 +106,10 @@ var nav = { this.actions.push(actions.issue.bind(null, index)); return this; }, + epics: function(index) { + this.actions.push(actions.epics.bind(null, index)); + return this; + }, backlog: function(index) { this.actions.push(actions.backlog.bind(null, index)); return this;