Skip to content
7 changes: 7 additions & 0 deletions app/controllers/manage/questionnaires_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,13 @@ def check_in
end

def destroy
if @questionnaire.is_bus_captain
admins = User.where(role: :admin)
admins.each do |user|
AdminMailer.bus_captain_left(@questionnaire.bus_list_id, @questionnaire.user_id, user.id).deliver_later
end
end

@questionnaire.destroy
respond_with(:manage, @questionnaire)
end
Expand Down
8 changes: 7 additions & 1 deletion app/controllers/questionnaires_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -94,8 +94,14 @@ def update
# DELETE /apply
# DELETE /apply.json
def destroy
@questionnaire.destroy
if @questionnaire.is_bus_captain
admins = User.where(role: :admin)
admins.each do |user|
AdminMailer.bus_captain_left(@questionnaire.bus_list_id, @questionnaire.user_id, user.id).deliver_later
end
end

@questionnaire.destroy
respond_to do |format|
format.html { redirect_to questionnaires_url }
format.json { head :no_content }
Expand Down
15 changes: 15 additions & 0 deletions app/controllers/rsvps_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@ def deny
# rubocop:disable CyclomaticComplexity
# rubocop:disable PerceivedComplexity
def update
# save to check if bus status changes after rsvp
bus = @questionnaire.bus_list_id
acc_status = @questionnaire.acc_status

unless @questionnaire.update_attributes(params.require(:questionnaire).permit(:agreement_accepted, :phone))
flash[:alert] = @questionnaire.errors.full_messages.join(", ")
redirect_to rsvp_path
Expand All @@ -58,6 +62,17 @@ def update
update_acc_status
update_bus_list

bus_after_rsvp = @questionnaire.bus_list_id
acc_status_after_rsvp = @questionnaire.acc_status

if bus != nil && (acc_status != acc_status_after_rsvp || bus != bus_after_rsvp) && @questionnaire.is_bus_captain == true
@questionnaire.is_bus_captain = false
admins = User.where(role: :admin)
admins.each do |user|
AdminMailer.bus_captain_left(@questionnaire.bus_list_id, @questionnaire.user_id, user.id).deliver_later
end
end

unless @questionnaire.save
flash[:alert] = @questionnaire.errors.full_message.join(", ")
redirect_to rsvp_path
Expand Down
11 changes: 11 additions & 0 deletions app/mailers/admin_mailer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,17 @@ def weekly_report(user_id)
)
end

def bus_captain_left(bus_list_id, former_captain_id, user_id)
@bus_route = BusList.find_by_id(bus_list_id)
@former_captain = User.find_by_id(former_captain_id)
@user = User.find_by_id(user_id)

mail(
to: pretty_email(@user.full_name, @user.email),
subject: "Bus Captain Left Bus Route: " + @bus_route.name,
)
end

private

def report_metric(query_base, new_query_field)
Expand Down
1 change: 1 addition & 0 deletions app/views/admin_mailer/bus_captain_left.html.haml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
%p Alert #{@former_captain.full_name} (#{@former_captain.email}) is no longer a bus captain for #{@bus_route.name}
18 changes: 14 additions & 4 deletions test/controllers/manage/questionnaires_controller_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -281,11 +281,21 @@ class Manage::QuestionnairesControllerTest < ActionController::TestCase
assert_redirected_to manage_questionnaire_path(assigns(:questionnaire))
end

should "destroy questionnaire" do
assert_difference("Questionnaire.count", -1) do
delete :destroy, params: { id: @questionnaire }
context "destroy questionnaire" do
should "if bus captain, notify admins that bus captain has been removed" do
@user = create(:admin)
@questionnaire.update_attribute(:is_bus_captain, true)
assert_difference('enqueued_jobs.size', User.where(role: :admin).size) do
delete :destroy, params: { id: @questionnaire }
end
end

should "user destroy questionnaire" do
assert_difference('Questionnaire.count', -1) do
delete :destroy, params: { id: @questionnaire }
end
assert_redirected_to manage_questionnaires_path
end
assert_redirected_to manage_questionnaires_path
end

should "check in the questionnaire" do
Expand Down
18 changes: 14 additions & 4 deletions test/controllers/questionnaires_controller_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -165,12 +165,22 @@ class QuestionnairesControllerTest < ActionController::TestCase
assert_redirected_to questionnaires_path
end

should "destroy questionnaire" do
assert_difference('Questionnaire.count', -1) do
delete :destroy
context "destroy questionnaire" do
should "if bus captain, notify admins that bus captain has been removed" do
@admin = create(:admin)
@questionnaire.update_attribute(:is_bus_captain, true)
assert_difference('enqueued_jobs.size', User.where(role: :admin).size) do
delete :destroy
end
end

assert_redirected_to questionnaires_path
should "user destroy questionnaire" do
assert_difference('Questionnaire.count', -1) do
delete :destroy
end

assert_redirected_to questionnaires_path
end
end

context "with invalid questionnaire params" do
Expand Down
33 changes: 33 additions & 0 deletions test/controllers/rsvps_controller_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -243,5 +243,38 @@ class RsvpsControllerTest < ActionController::TestCase
assert_match /select a RSVP status/, flash[:alert]
assert_redirected_to rsvp_path
end

should "if bus captain leaves a bus, notify admins that bus captain has been removed" do
@admin = create(:admin)
@questionnaire.update_attribute(:is_bus_captain, true)
@questionnaire.update_attribute(:acc_status, "rsvp_confirmed")

bus_list1 = create(:bus_list, capacity: 1)
bus_list2 = create(:bus_list, capacity: 2)
patch :update, params: {
questionnaire: {
acc_status: "rsvp_confirmed",
phone: "(123) 456-7890",
bus_list_id: bus_list1.id
}
}

assert_difference('enqueued_jobs.size', User.where(role: :admin).size) do
patch :update, params: {
questionnaire: {
acc_status: "rsvp_confirmed",
phone: "(123) 456-7890",
bus_list_id: bus_list2.id
}
}
end
end

should "not queue bus_captain_left email if questionnaire is not a bus captain" do
@questionnaire.update_attribute(:is_bus_captain, false)
assert_difference('enqueued_jobs.size', 0) do
patch :update, params: { questionnaire: { acc_status: "rsvp_confirmed" } }
end
end
end
end