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();