Skip to content

Commit

Permalink
Ajouter des liens, sur la fiche d'un utilisateur, pour que les admins…
Browse files Browse the repository at this point in the history
… puissent retirer les rôles d'un utilisateur
  • Loading branch information
Yalaeddin committed Jun 19, 2024
1 parent 1d58266 commit b262e65
Show file tree
Hide file tree
Showing 10 changed files with 93 additions and 32 deletions.
10 changes: 9 additions & 1 deletion app/controllers/organizations/managers_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,15 @@ def create
end

def destroy
@organization.managers.delete(User.find(params[:manager_id]))
user = User.find(params[:manager_id])
@organization.managers.delete(user)

if params[:page].present? && params[:page] == "user"
respond_to do |format|
format.js { render js: "window.location.reload();" }
end
end

respond_to do |format|
format.html { redirect_to edit_organization_path(@organization.identifier, tab: 'managers') }
format.js
Expand Down
11 changes: 10 additions & 1 deletion app/controllers/organizations/team_leaders_controller.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
class Organizations::TeamLeadersController < ApplicationController

before_action :find_organization_by_id, only: [:update]
before_action :find_organization_by_id, only: [:update, :destroy]
before_action :require_admin_or_manager

def assign_to_team_projects
Expand Down Expand Up @@ -37,6 +37,15 @@ def assign_to_team_projects
end
end

def destroy
user = User.find(params[:team_leader_id])
@organization.team_leaders.delete(user)

respond_to do |format|
format.js { render js: "window.location.reload();" }
end
end

def update
team_leaders = User.where(id: params[:team_leader_ids])
team_leaders_ids = team_leaders.map(&:id)
Expand Down
2 changes: 2 additions & 0 deletions app/views/users/_organization_informations.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
<% managed_organizations.each do |organization| %>
<li>
<%= link_to_organization organization %>
<%= link_to l(:button_delete), organizations_manager_path(:id => organization.id, :manager_id => @user.id, :page => "user"), :method => :delete, :remote => true, :class => 'icon icon-del' %>
</li>
<% end %>
</ul>
Expand All @@ -70,6 +71,7 @@
<% team_leader_organizations.each do |organization| %>
<li>
<%= link_to_organization organization %>
<%= link_to l(:button_delete), organizations_team_leader_path(:id => organization.id, :team_leader_id => @user.id), :method => :delete, :remote => true, :class => 'icon icon-del' %>
</li>
<% end %>
</ul>
Expand Down
2 changes: 1 addition & 1 deletion config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
get :autocomplete_for_manager
end
end
resources :team_leaders, only: [:update] do
resources :team_leaders, only: [:update, :destroy] do
collection do
put :assign_to_team_projects
end
Expand Down
14 changes: 0 additions & 14 deletions lib/redmine_organizations/patches/users_controller_patch.rb
Original file line number Diff line number Diff line change
Expand Up @@ -56,14 +56,10 @@ class UsersController < ApplicationController
before_action :require_admin, :except => [:show, :new, :create]
before_action :require_admin_or_manager, :only => [:new, :create]
after_action :update_memberships_according_to_new_orga, only: [:update]
before_action :get_old_orga, only: [:update]

private

def update_memberships_according_to_new_orga
if @user.present? && @old_orga.present? && @old_orga!= @user.organization
remove_old_organization_roles
end

if @user.present? &&
@user.errors.empty? &&
Expand Down Expand Up @@ -92,14 +88,4 @@ def update_memberships_according_to_new_orga
end
end
end

def get_old_orga
@old_orga = @user.organization if @user.present?
end

def remove_old_organization_roles
filtered_managers =@user.organization_managers.where(organization_id: @old_orga.id)
filtered_managers.destroy_all
@user.organization_team_leaders.destroy_all
end
end
11 changes: 11 additions & 0 deletions spec/controllers/managers_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,17 @@
expect(organization.managers).to include(User.find(7))
end

it "should delete manager from an organization" do
@request.session[:user_id] = 1
expect do
delete :destroy, :params => {
:manager_id => 2,
:page => "user",
:id => 2
}, format: :js
end.to change { OrganizationManager.count }.by(-1)
end

if Redmine::VERSION::MAJOR >= 5
it "should forbid users from sub-organization to modify managers in parents of their organization" do
@request.session[:user_id] = 2 # Not Admin, member of organization #2
Expand Down
9 changes: 9 additions & 0 deletions spec/controllers/team_leaders_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -157,4 +157,13 @@
expect(Project.find(5).users).to_not include User.find(4)
end

it "should delete team leader from an organization" do
@request.session[:user_id] = 1 # Admin
expect do
delete :destroy, :params => {
:team_leader_id => 2,
:id => 2
}, format: :js
end.to change { OrganizationTeamLeader.count }.by(-1)
end
end
15 changes: 0 additions & 15 deletions spec/controllers/users_controller_patch_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -62,20 +62,5 @@

expect(response).to have_http_status(:redirect)
end

it "removes the Organization Manager or Team Leader roles when the user leaves their organization" do
user_test = User.find(2)
user_test.organization = Organization.find(2)
user_test.save
expect {
put :update,
params:
{:id => 2,
:user => {:organization_id => '1',
:orga_update_method => 'keep'}}

}.to change{OrganizationTeamLeader.count}.by(-1)
.and change{OrganizationManager.count}.by(-1)
end
end
end
15 changes: 15 additions & 0 deletions spec/support/login_user_spec_helpers.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
require "spec_helper"

def log_user(login, password)
visit '/my/page'
expect(current_path).to eq '/login'

click_on("ou s'authentifier par login / mot de passe")

within('#login-form form') do
fill_in 'username', with: login
fill_in 'password', with: password
find('input[name=login]').click
end
expect(current_path).to eq '/my/page'
end
36 changes: 36 additions & 0 deletions spec/system/user_system_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
require "spec_helper"
require "active_support/testing/assertions"
require_relative "../support/login_user_spec_helpers"

RSpec.describe "/issue/id/edit", type: :system do
include ActiveSupport::Testing::Assertions

include ApplicationHelper
include OrganizationsHelper
include ActionView::Helpers::UrlHelper

fixtures :organizations, :users, :roles, :projects, :members, :member_roles,
:organization_managers, :organization_team_leaders
before do
log_user('admin', 'admin')
end

it "Should display delete links for member and team leader in profile page" do
user = User.find(2)
user.organization = Organization.find(2)
user.save

visit "/users/#{user.id}"

organization_manager = user.organization_managers.map(&:organization).compact
team_leader_organizations = user.organization_team_leaders.map(&:organization).compact

organization_manager.each do |organization|
expect(page).to have_link(nil, href: organizations_manager_path(id: organization.id, manager_id: user.id, page: "user"))
end

team_leader_organizations.each do |organization|
expect(page).to have_link(nil, href: organizations_team_leader_path(id: organization.id, team_leader_id: user.id))
end
end
end

0 comments on commit b262e65

Please sign in to comment.