From a6aabb2149f8102464f6b5d42db941e4ecf4e27e Mon Sep 17 00:00:00 2001 From: Julianna Tetreault <32834804+juliannatetreault@users.noreply.github.com> Date: Tue, 20 Oct 2020 10:07:36 -0600 Subject: [PATCH] Give Admins Ability to Delete Invitations (#10959) * WIP: Gives Admins the ability to delete invitations from /admin/invitations * Refactors #destroy to properly delete invites, redirect, & display messages * Adds additional flash message and makes existing messages more explicit * Adds spec to test the deletion of invitations in admin/invitations --- app/controllers/admin/invitations_controller.rb | 11 +++++++++++ app/views/admin/invitations/index.html.erb | 3 +++ config/routes.rb | 2 +- spec/requests/admin/invitations_spec.rb | 15 +++++++++++++++ 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/app/controllers/admin/invitations_controller.rb b/app/controllers/admin/invitations_controller.rb index b7d8a1525..055255c8d 100644 --- a/app/controllers/admin/invitations_controller.rb +++ b/app/controllers/admin/invitations_controller.rb @@ -19,6 +19,17 @@ module Admin saw_onboarding: false, editor_version: :v2, registered: false) + flash[:success] = "The invite has been sent to the user's email." + redirect_to admin_invitations_path + end + + def destroy + @invitation = User.where(registered: false).find(params[:id]) + if @invitation.destroy + flash[:success] = "The invitation has been deleted." + else + flash[:danger] = @invitation.errors_as_sentence + end redirect_to admin_invitations_path end end diff --git a/app/views/admin/invitations/index.html.erb b/app/views/admin/invitations/index.html.erb index aec719a89..837fa37b7 100644 --- a/app/views/admin/invitations/index.html.erb +++ b/app/views/admin/invitations/index.html.erb @@ -25,6 +25,9 @@ <%= user.id %> <%= user.name %> <%= user.email %> +
+ <%= link_to "Delete", url_for(action: :destroy, id: user.id), method: :delete, data: { confirm: "Are you sure you want to delete this pending invite?" }, class: "btn btn-danger" %> +
<% end %> diff --git a/config/routes.rb b/config/routes.rb index 92674f38c..5fc0d71ae 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -68,7 +68,7 @@ Rails.application.routes.draw do resources :comments, only: [:index] resources :events, only: %i[index create update] resources :feedback_messages, only: %i[index show] - resources :invitations, only: %i[index new create] + resources :invitations, only: %i[index new create destroy] resources :pages, only: %i[index new create edit update destroy] resources :mods, only: %i[index update] resources :moderator_actions, only: %i[index] diff --git a/spec/requests/admin/invitations_spec.rb b/spec/requests/admin/invitations_spec.rb index 9c2c01c44..14737ca34 100644 --- a/spec/requests/admin/invitations_spec.rb +++ b/spec/requests/admin/invitations_spec.rb @@ -30,4 +30,19 @@ RSpec.describe "/admin/invitations", type: :request do expect(User.last.registered).to be false end end + + describe "DELETE /admin/invitations" do + let!(:invitation) { create(:user, registered: false) } + + before do + sign_in admin + end + + it "deletes the invitation" do + expect do + delete "/admin/invitations/#{invitation.id}" + end.to change { User.all.count }.by(-1) + expect(response.body).to redirect_to "/admin/invitations" + end + end end