Skip to content

Commit

Permalink
Move UserController#delete to UsersController#destroy
Browse files Browse the repository at this point in the history
- Adapt controller
- Adapt views
- Adapt specs
  • Loading branch information
vpereira committed Sep 12, 2019
1 parent bbfe4a8 commit 0998220
Show file tree
Hide file tree
Showing 7 changed files with 50 additions and 50 deletions.
10 changes: 0 additions & 10 deletions src/api/app/controllers/webui/user_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -62,16 +62,6 @@ def update
redirect_back(fallback_location: user_path(other_user))
end

def delete
other_user = User.find_by(login: user_params[:login])
if other_user.delete
flash[:success] = "Marked user '#{other_user}' as deleted."
else
flash[:error] = "Marking user '#{other_user}' as deleted failed: #{other_user.errors.full_messages.to_sentence}"
end
redirect_to(users_path)
end

def save_dialog
render_dialog
end
Expand Down
14 changes: 12 additions & 2 deletions src/api/app/controllers/webui/users_controller.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
class Webui::UsersController < Webui::WebuiController
before_action :require_login, only: [:index]
before_action :require_admin, only: [:index]
before_action :require_login, only: [:index, :destroy]
before_action :require_admin, only: [:index, :destroy]
before_action :get_displayed_user, only: [:show]

def index
Expand Down Expand Up @@ -61,6 +61,16 @@ def new
switch_to_webui2
end

def destroy
user = User.find_by(login: params[:user])
if user.delete
flash[:success] = "Marked user '#{user}' as deleted."
else
flash[:error] = "Marking user '#{user}' as deleted failed: #{user.errors.full_messages.to_sentence}"
end
redirect_to(users_path)
end

private

def opts
Expand Down
2 changes: 1 addition & 1 deletion src/api/app/helpers/webui/user_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ def user_actions(user)
mail_to(user.email) do
content_tag(:i, nil, class: 'fas fa-envelope text-secondary pr-1', title: 'Send Email to User')
end,
link_to(user_delete_path(user: { login: user.login }), method: :delete, data: { confirm: 'Are you sure?' }) do
link_to(user_path(user.login), method: :delete, data: { confirm: 'Are you sure?' }) do
content_tag(:i, nil, class: 'fas fa-times-circle text-danger pr-1', title: 'Delete User')
end
]
Expand Down
4 changes: 2 additions & 2 deletions src/api/config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -377,7 +377,6 @@ def self.public_or_about_path?(request)
get 'user/password_dialog' => :password_dialog

patch 'user' => :update, as: 'user_update'
delete 'user' => :delete, as: 'user_delete'

get 'user/autocomplete' => :autocomplete, as: 'autocomplete_users'
get 'user/tokens' => :tokens
Expand All @@ -395,7 +394,8 @@ def self.public_or_about_path?(request)
post 'users/announcements/:id' => :create, as: 'user_announcements'
end

resources :users, only: [:index, :new, :create, :show], controller: 'webui/users', param: :user
resources :users, only: [:index, :new, :create, :show, :destroy], controller: 'webui/users',
param: :user

get 'signup', to: 'webui/users#new', as: :signup

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
within(find('td', text: /#{user.realname}/).ancestor('tr')) do
expect(page).to have_css("a[href='#{user_edit_path(user)}']")
expect(page).to have_css("a[href='mailto:#{user.email}']")
expect(page).to have_css("a[href='#{user_delete_path(user: { login: user.login })}']")
expect(page).to have_css("a[href='#{user_path(user.login)}']")
end
end

Expand Down
34 changes: 0 additions & 34 deletions src/api/spec/controllers/webui/user_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -245,40 +245,6 @@
end
end

describe 'DELETE #delete' do
context 'called by an admin user' do
before do
login(admin_user)
end

it "changes the state to 'deleted'" do
delete :delete, params: { user: { login: user.login } }
expect(user.reload.state).to eq('deleted')
end

it 'handles validation errors' do
user.update_attributes(email: 'invalid')
user.save!(validate: false)
delete :delete, params: { user: { login: user.login } }
expect(user.reload.state).to eq('confirmed')
expect(flash[:error]).to eq("Marking user '#{user.login}' as deleted failed: Email must be a valid email address")
end
end

context 'called by a user that is not admin' do
let(:non_admin_user) { create(:confirmed_user) }

before do
login(non_admin_user)
end

it "does not changes the state to 'deleted'" do
delete :delete, params: { user: { login: user.login } }
expect(user.reload.state).to eq('confirmed')
end
end
end

describe 'GET #save_dialog' do
skip
end
Expand Down
34 changes: 34 additions & 0 deletions src/api/spec/controllers/webui/users_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -113,4 +113,38 @@
it { expect(response).to redirect_to root_path }
end
end

describe 'DELETE #destroy' do
context 'called by an admin user' do
before do
login(admin_user)
end

it "changes the state to 'deleted'" do
delete :destroy, params: { user: user.login }
expect(user.reload.state).to eq('deleted')
end

it 'handles validation errors' do
user.update_attributes(email: 'invalid')
user.save!(validate: false)
delete :destroy, params: { user: user.login }
expect(user.reload.state).to eq('confirmed')
expect(flash[:error]).to eq("Marking user '#{user.login}' as deleted failed: Email must be a valid email address")
end
end

context 'called by a user that is not admin' do
let(:non_admin_user) { create(:confirmed_user) }

before do
login(non_admin_user)
end

it "does not change the state to 'deleted'" do
delete :destroy, params: { user: user.login }
expect(user.reload.state).to eq('confirmed')
end
end
end
end

0 comments on commit 0998220

Please sign in to comment.