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