From 201a394813e094b8eb8e9908c3df21ca8e9f6f80 Mon Sep 17 00:00:00 2001 From: Ahmad Farhat Date: Thu, 5 Sep 2019 12:55:23 -0400 Subject: [PATCH] Added the ability to invite multiple users at once (#778) --- app/controllers/admins_controller.rb | 10 +++++--- config/locales/en.yml | 2 +- spec/controllers/admins_controller_spec.rb | 29 ++++++++++++++++++++++ 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/app/controllers/admins_controller.rb b/app/controllers/admins_controller.rb index b5ea4e4d..b1c9d48b 100644 --- a/app/controllers/admins_controller.rb +++ b/app/controllers/admins_controller.rb @@ -90,17 +90,19 @@ class AdminsController < ApplicationController # POST /admins/invite def invite - email = params[:invite_user][:email] + emails = params[:invite_user][:email].split(",") begin - invitation = create_or_update_invite(email) + emails.each do |email| + invitation = create_or_update_invite(email) - send_invitation_email(current_user.name, email, invitation.invite_token) + send_invitation_email(current_user.name, email, invitation.invite_token) + end rescue => e logger.error "Support: Error in email delivery: #{e}" flash[:alert] = I18n.t(params[:message], default: I18n.t("delivery_error")) else - flash[:success] = I18n.t("administrator.flash.invite", email: email) + flash[:success] = I18n.t("administrator.flash.invite", email: emails.join(', ')) end redirect_to admins_path diff --git a/config/locales/en.yml b/config/locales/en.yml index 6bca4ec9..aab1e226 100755 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -316,7 +316,7 @@ en: warning: You will not be able to recover this room recording_warning: or any of its %{recordings_num} associated recordings. invite_user: - email_placeholder: Enter the user's email + email_placeholder: Enter the users' emails (seperated by commas) footer: The user will receive an email with instructions on how to sign up send: Send Invite title: Invite User diff --git a/spec/controllers/admins_controller_spec.rb b/spec/controllers/admins_controller_spec.rb index f76bf33f..8a9d73f9 100644 --- a/spec/controllers/admins_controller_spec.rb +++ b/spec/controllers/admins_controller_spec.rb @@ -114,6 +114,35 @@ describe AdminsController, type: :controller do params = { invite_user: { email: email } } expect { post :invite, params: params }.to change { ActionMailer::Base.deliveries.count }.by(1) end + + it "invites multiple users" do + @request.session[:user_id] = @admin.id + email = "#{Faker::Internet.email},#{Faker::Internet.email},#{Faker::Internet.email},#{Faker::Internet.email}" + post :invite, params: { invite_user: { email: email } } + + invite = Invitation.find_by(email: email.split(",")[0], provider: "provider1") + expect(invite.present?).to eq(true) + + invite1 = Invitation.find_by(email: email.split(",")[1], provider: "provider1") + expect(invite1.present?).to eq(true) + + invite2 = Invitation.find_by(email: email.split(",")[2], provider: "provider1") + expect(invite2.present?).to eq(true) + + invite3 = Invitation.find_by(email: email.split(",")[3], provider: "provider1") + expect(invite3.present?).to eq(true) + + expect(flash[:success]).to be_present + expect(response).to redirect_to(admins_path) + end + + it "sends multiple invitation emails" do + @request.session[:user_id] = @admin.id + email = "#{Faker::Internet.email},#{Faker::Internet.email},#{Faker::Internet.email},#{Faker::Internet.email}" + + params = { invite_user: { email: email } } + expect { post :invite, params: params }.to change { ActionMailer::Base.deliveries.count }.by(4) + end end context "POST #approve" do