diff --git a/app/coffee/modules/admin/memberships.coffee b/app/coffee/modules/admin/memberships.coffee index f5a30619..e36d8f92 100644 --- a/app/coffee/modules/admin/memberships.coffee +++ b/app/coffee/modules/admin/memberships.coffee @@ -366,7 +366,7 @@ module.directive("tgMembershipsRowRoleSelector", ["$log", "$tgRepo", "$tgConfirm ## Member Actions Directive ############################################################################# -MembershipsRowActionsDirective = ($log, $repo, $rs, $confirm, $compile, $translate) -> +MembershipsRowActionsDirective = ($log, $repo, $rs, $confirm, $compile, $translate, currentUserService, lightboxFactory) -> activedTemplate = """
@@ -421,9 +421,7 @@ MembershipsRowActionsDirective = ($log, $repo, $rs, $confirm, $compile, $transla $rs.memberships.resendInvitation($scope.member.id).then(onSuccess, onError) - $el.on "click", ".delete", (event) -> - event.preventDefault() - + leaveConfirm = () -> title = $translate.instant("ADMIN.MEMBERSHIP.DELETE_MEMBER") defaultMsg = $translate.instant("ADMIN.MEMBERSHIP.DEFAULT_DELETE_MESSAGE", {email: member.email}) message = if member.user then member.full_name else defaultMsg @@ -448,6 +446,22 @@ MembershipsRowActionsDirective = ($log, $repo, $rs, $confirm, $compile, $transla $repo.remove(member).then(onSuccess, onError) + $el.on "click", ".delete", (event) -> + event.preventDefault() + + if $scope.project.owner.id == member.user + currentUser = currentUserService.getUser() + isCurrentUser = currentUser.get('id') == member.user + + lightboxFactory.create("tg-lightbox-leave-project-warning", { + class: "lightbox lightbox-leave-project-warning" + }, { + currentUser: isCurrentUser, + project: $scope.project + }) + else + leaveConfirm() + $scope.$on "$destroy", -> $el.off() @@ -455,4 +469,4 @@ MembershipsRowActionsDirective = ($log, $repo, $rs, $confirm, $compile, $transla module.directive("tgMembershipsRowActions", ["$log", "$tgRepo", "$tgResources", "$tgConfirm", "$compile", - "$translate", MembershipsRowActionsDirective]) + "$translate", "tgCurrentUserService", "tgLightboxFactory", MembershipsRowActionsDirective]) diff --git a/app/coffee/modules/team/main.coffee b/app/coffee/modules/team/main.coffee index 68e3858d..40b08514 100644 --- a/app/coffee/modules/team/main.coffee +++ b/app/coffee/modules/team/main.coffee @@ -225,7 +225,7 @@ module.directive("tgTeamMembers", TeamMembersDirective) ## Leave project Directive ############################################################################# -LeaveProjectDirective = ($repo, $confirm, $location, $rs, $navurls, $translate, lightboxFactory, currentUserService) -> +LeaveProjectDirective = ($repo, $confirm, $location, $rs, $navurls, $translate, lightboxFactory) -> link = ($scope, $el, $attrs) -> leaveConfirm = () -> leave_project_text = $translate.instant("TEAM.ACTION_LEAVE_PROJECT") @@ -245,8 +245,6 @@ LeaveProjectDirective = ($repo, $confirm, $location, $rs, $navurls, $translate, $scope.leave = () -> if $scope.project.owner.id == $scope.user.id - currentUser = currentUserService.getUser() - lightboxFactory.create("tg-lightbox-leave-project-warning", { class: "lightbox lightbox-leave-project-warning" }, { @@ -265,7 +263,7 @@ LeaveProjectDirective = ($repo, $confirm, $location, $rs, $navurls, $translate, link: link } -module.directive("tgLeaveProject", ["$tgRepo", "$tgConfirm", "$tgLocation", "$tgResources", "$tgNavUrls", "$translate", "tgLightboxFactory", "tgCurrentUserService", +module.directive("tgLeaveProject", ["$tgRepo", "$tgConfirm", "$tgLocation", "$tgResources", "$tgNavUrls", "$translate", "tgLightboxFactory", LeaveProjectDirective]) diff --git a/e2e/helpers/admin-memberships.js b/e2e/helpers/admin-memberships.js index 5fbe7c34..cb420c35 100644 --- a/e2e/helpers/admin-memberships.js +++ b/e2e/helpers/admin-memberships.js @@ -35,10 +35,30 @@ helper.getNewMemberLightbox = function() { return obj; }; +helper.leavingProjectWarningLb = function() { + return $('div[tg-lightbox-leave-project-warning]'); +}; + +helper.isLeaveProjectWarningOpen = function() { + return helper.leavingProjectWarningLb().isPresent(); +}; + helper.getMembers = function() { return $$('.admin-membership-table .row'); }; +helper.getOwner = function() { + return helper.getMembers().filter(async (member) => { + return !!await member.$$('.icon-badge').count(); + }).first(); +}; + +helper.excludeOwner = function(members) { + return members.filter(async (member) => { + return !await member.$$('.icon-badge').count(); + }); +}; + helper.isActive = function(elm) { return utils.common.hasClass(elm, 'active'); }; diff --git a/e2e/suites/admin/members.e2e.js b/e2e/suites/admin/members.e2e.js index 9a024a12..02de904b 100644 --- a/e2e/suites/admin/members.e2e.js +++ b/e2e/suites/admin/members.e2e.js @@ -78,7 +78,7 @@ describe('admin - members', function() { it('delete member', async function() { let initMembersCount = await adminMembershipsHelper.getMembers().count(); - let member = adminMembershipsHelper.getMembers().last(); + let member = adminMembershipsHelper.excludeOwner(adminMembershipsHelper.getMembers()).last(); adminMembershipsHelper.delete(member); @@ -89,6 +89,25 @@ describe('admin - members', function() { let membersCount = await adminMembershipsHelper.getMembers().count(); expect(membersCount).to.be.equal(initMembersCount - 1); + + await utils.notifications.success.close(); + }); + + it('trying to delete owner', async function() { + let member = await adminMembershipsHelper.getOwner(); + + adminMembershipsHelper.delete(member); + + utils.common.takeScreenshot('memberships', 'delete-owner-lb'); + + let isLeaveProjectWarningOpen = await adminMembershipsHelper.isLeaveProjectWarningOpen(); + + expect(isLeaveProjectWarningOpen).to.be.equal(true); + + let lb = adminMembershipsHelper.leavingProjectWarningLb(); + + await utils.lightbox.exit(lb); + await utils.lightbox.close(lb); }); it('change role', async function() { diff --git a/e2e/utils/lightbox.js b/e2e/utils/lightbox.js index 0108b023..b4504568 100644 --- a/e2e/utils/lightbox.js +++ b/e2e/utils/lightbox.js @@ -3,6 +3,16 @@ var common = require('./common'); var lightbox = module.exports; var transition = 300; +lightbox.exit = function(el) { + var deferred = protractor.promise.defer(); + + if (typeof el === 'string' || el instanceof String) { + el = $(el); + } + + el.$('.icon-close').click(); +}; + lightbox.open = async function(el) { var deferred = protractor.promise.defer();