Skip to content

Commit 28913f7

Browse files
JeremyRudmancbaudouinjrpeterkos
authored
fix(bus_captain): Alerts admins if a bus captain is removed (#270)
* fix(bus_captain): alerts admins if a bus captain is removed if a bus captain changes bus or declinces a rsvp he is removed as a bus captain. All admins are alerted to the removal of a bus captain by email * fix: corrected houndci formating errors * Refactor var names; remove auto captain interest * On questnnre destroy, email admins if bus captain * Don’t send email remove_captain on first bus assignment * Tests! * bark bark Co-authored-by: Chris Baudouin, Jr <[email protected]> Co-authored-by: Peter Kos <[email protected]>
1 parent d87269d commit 28913f7

File tree

8 files changed

+102
-9
lines changed

8 files changed

+102
-9
lines changed

app/controllers/manage/questionnaires_controller.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,13 @@ def check_in
9696
end
9797

9898
def destroy
99+
if @questionnaire.is_bus_captain
100+
admins = User.where(role: :admin)
101+
admins.each do |user|
102+
AdminMailer.bus_captain_left(@questionnaire.bus_list_id, @questionnaire.user_id, user.id).deliver_later
103+
end
104+
end
105+
99106
@questionnaire.destroy
100107
respond_with(:manage, @questionnaire)
101108
end

app/controllers/questionnaires_controller.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,14 @@ def update
9494
# DELETE /apply
9595
# DELETE /apply.json
9696
def destroy
97-
@questionnaire.destroy
97+
if @questionnaire.is_bus_captain
98+
admins = User.where(role: :admin)
99+
admins.each do |user|
100+
AdminMailer.bus_captain_left(@questionnaire.bus_list_id, @questionnaire.user_id, user.id).deliver_later
101+
end
102+
end
98103

104+
@questionnaire.destroy
99105
respond_to do |format|
100106
format.html { redirect_to questionnaires_url }
101107
format.json { head :no_content }

app/controllers/rsvps_controller.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ def deny
4343
# rubocop:disable CyclomaticComplexity
4444
# rubocop:disable PerceivedComplexity
4545
def update
46+
# save to check if bus status changes after rsvp
47+
bus = @questionnaire.bus_list_id
48+
acc_status = @questionnaire.acc_status
49+
4650
unless @questionnaire.update_attributes(params.require(:questionnaire).permit(:agreement_accepted, :phone))
4751
flash[:alert] = @questionnaire.errors.full_messages.join(", ")
4852
redirect_to rsvp_path
@@ -58,6 +62,17 @@ def update
5862
update_acc_status
5963
update_bus_list
6064

65+
bus_after_rsvp = @questionnaire.bus_list_id
66+
acc_status_after_rsvp = @questionnaire.acc_status
67+
68+
if bus != nil && (acc_status != acc_status_after_rsvp || bus != bus_after_rsvp) && @questionnaire.is_bus_captain == true
69+
@questionnaire.is_bus_captain = false
70+
admins = User.where(role: :admin)
71+
admins.each do |user|
72+
AdminMailer.bus_captain_left(@questionnaire.bus_list_id, @questionnaire.user_id, user.id).deliver_later
73+
end
74+
end
75+
6176
unless @questionnaire.save
6277
flash[:alert] = @questionnaire.errors.full_message.join(", ")
6378
redirect_to rsvp_path

app/mailers/admin_mailer.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,17 @@ def weekly_report(user_id)
4242
)
4343
end
4444

45+
def bus_captain_left(bus_list_id, former_captain_id, user_id)
46+
@bus_route = BusList.find_by_id(bus_list_id)
47+
@former_captain = User.find_by_id(former_captain_id)
48+
@user = User.find_by_id(user_id)
49+
50+
mail(
51+
to: pretty_email(@user.full_name, @user.email),
52+
subject: "Bus Captain Left Bus Route: " + @bus_route.name,
53+
)
54+
end
55+
4556
private
4657

4758
def report_metric(query_base, new_query_field)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
%p Alert #{@former_captain.full_name} (#{@former_captain.email}) is no longer a bus captain for #{@bus_route.name}

test/controllers/manage/questionnaires_controller_test.rb

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -281,11 +281,21 @@ class Manage::QuestionnairesControllerTest < ActionController::TestCase
281281
assert_redirected_to manage_questionnaire_path(assigns(:questionnaire))
282282
end
283283

284-
should "destroy questionnaire" do
285-
assert_difference("Questionnaire.count", -1) do
286-
delete :destroy, params: { id: @questionnaire }
284+
context "destroy questionnaire" do
285+
should "if bus captain, notify admins that bus captain has been removed" do
286+
@user = create(:admin)
287+
@questionnaire.update_attribute(:is_bus_captain, true)
288+
assert_difference('enqueued_jobs.size', User.where(role: :admin).size) do
289+
delete :destroy, params: { id: @questionnaire }
290+
end
291+
end
292+
293+
should "user destroy questionnaire" do
294+
assert_difference('Questionnaire.count', -1) do
295+
delete :destroy, params: { id: @questionnaire }
296+
end
297+
assert_redirected_to manage_questionnaires_path
287298
end
288-
assert_redirected_to manage_questionnaires_path
289299
end
290300

291301
should "check in the questionnaire" do

test/controllers/questionnaires_controller_test.rb

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -165,12 +165,22 @@ class QuestionnairesControllerTest < ActionController::TestCase
165165
assert_redirected_to questionnaires_path
166166
end
167167

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

173-
assert_redirected_to questionnaires_path
177+
should "user destroy questionnaire" do
178+
assert_difference('Questionnaire.count', -1) do
179+
delete :destroy
180+
end
181+
182+
assert_redirected_to questionnaires_path
183+
end
174184
end
175185

176186
context "with invalid questionnaire params" do

test/controllers/rsvps_controller_test.rb

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,5 +243,38 @@ class RsvpsControllerTest < ActionController::TestCase
243243
assert_match /select a RSVP status/, flash[:alert]
244244
assert_redirected_to rsvp_path
245245
end
246+
247+
should "if bus captain leaves a bus, notify admins that bus captain has been removed" do
248+
@admin = create(:admin)
249+
@questionnaire.update_attribute(:is_bus_captain, true)
250+
@questionnaire.update_attribute(:acc_status, "rsvp_confirmed")
251+
252+
bus_list1 = create(:bus_list, capacity: 1)
253+
bus_list2 = create(:bus_list, capacity: 2)
254+
patch :update, params: {
255+
questionnaire: {
256+
acc_status: "rsvp_confirmed",
257+
phone: "(123) 456-7890",
258+
bus_list_id: bus_list1.id
259+
}
260+
}
261+
262+
assert_difference('enqueued_jobs.size', User.where(role: :admin).size) do
263+
patch :update, params: {
264+
questionnaire: {
265+
acc_status: "rsvp_confirmed",
266+
phone: "(123) 456-7890",
267+
bus_list_id: bus_list2.id
268+
}
269+
}
270+
end
271+
end
272+
273+
should "not queue bus_captain_left email if questionnaire is not a bus captain" do
274+
@questionnaire.update_attribute(:is_bus_captain, false)
275+
assert_difference('enqueued_jobs.size', 0) do
276+
patch :update, params: { questionnaire: { acc_status: "rsvp_confirmed" } }
277+
end
278+
end
246279
end
247280
end

0 commit comments

Comments
 (0)