From 724080bc3a7a05d3e00913f1248ef3940b977b62 Mon Sep 17 00:00:00 2001 From: Jeremy Rudman Date: Sat, 27 Jun 2020 16:26:02 -0400 Subject: [PATCH 1/7] 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 --- app/controllers/rsvps_controller.rb | 16 ++++++++++++++++ app/mailers/admin_mailer.rb | 12 ++++++++++++ .../admin_mailer/bus_captain_left.html.haml | 1 + 3 files changed, 29 insertions(+) create mode 100644 app/views/admin_mailer/bus_captain_left.html.haml diff --git a/app/controllers/rsvps_controller.rb b/app/controllers/rsvps_controller.rb index 82d9f0e2d..fbca349f6 100644 --- a/app/controllers/rsvps_controller.rb +++ b/app/controllers/rsvps_controller.rb @@ -43,6 +43,8 @@ def deny # rubocop:disable CyclomaticComplexity # rubocop:disable PerceivedComplexity def update + before_bus = @questionnaire.bus_list_id + before_account = @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 @@ -73,6 +75,20 @@ def update @questionnaire.bus_captain_interest = params[:questionnaire][:bus_captain_interest] end + after_bus = @questionnaire.bus_list_id + after_account = @questionnaire.acc_status + + if (before_account != after_account || before_bus != after_bus) && @questionnaire.is_bus_captain == true + @questionnaire.is_bus_captain = false + if before_bus != after_bus && after_bus != nil + @questionnaire.bus_captain_interest = true + end + users = User.where(role: 3) + users.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 diff --git a/app/mailers/admin_mailer.rb b/app/mailers/admin_mailer.rb index 2fd2d8bb6..62e69705f 100644 --- a/app/mailers/admin_mailer.rb +++ b/app/mailers/admin_mailer.rb @@ -42,6 +42,18 @@ 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) diff --git a/app/views/admin_mailer/bus_captain_left.html.haml b/app/views/admin_mailer/bus_captain_left.html.haml new file mode 100644 index 000000000..7df0d04e8 --- /dev/null +++ b/app/views/admin_mailer/bus_captain_left.html.haml @@ -0,0 +1 @@ +%p Alert #{@former_captain.full_name} (#{@former_captain.email}) is no longer a bus captain for #{@bus_route.name} From e4d68da059688ea8cfb7b0933357c8c4e1244793 Mon Sep 17 00:00:00 2001 From: Jeremy Rudman Date: Sat, 4 Jul 2020 12:14:19 -0400 Subject: [PATCH 2/7] fix: corrected houndci formating errors --- app/controllers/rsvps_controller.rb | 2 +- app/mailers/admin_mailer.rb | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/app/controllers/rsvps_controller.rb b/app/controllers/rsvps_controller.rb index fbca349f6..356510c83 100644 --- a/app/controllers/rsvps_controller.rb +++ b/app/controllers/rsvps_controller.rb @@ -80,7 +80,7 @@ def update if (before_account != after_account || before_bus != after_bus) && @questionnaire.is_bus_captain == true @questionnaire.is_bus_captain = false - if before_bus != after_bus && after_bus != nil + if before_bus != after_bus && !after_bus.nil? @questionnaire.bus_captain_interest = true end users = User.where(role: 3) diff --git a/app/mailers/admin_mailer.rb b/app/mailers/admin_mailer.rb index 62e69705f..df85345bb 100644 --- a/app/mailers/admin_mailer.rb +++ b/app/mailers/admin_mailer.rb @@ -47,11 +47,10 @@ def bus_captain_left(bus_list_id, former_captain_id, user_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, - ) + to: pretty_email(@user.full_name, @user.email), + subject: "Bus Captain Left Bus Route: " + @bus_route.name, + ) end private From 525bb70b58821eaa3e9c11e8d9ba8c0c3526c177 Mon Sep 17 00:00:00 2001 From: Peter Kos Date: Sat, 19 Sep 2020 22:31:28 -0400 Subject: [PATCH 3/7] Refactor var names; remove auto captain interest --- app/controllers/rsvps_controller.rb | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/app/controllers/rsvps_controller.rb b/app/controllers/rsvps_controller.rb index 4210ee268..437999617 100644 --- a/app/controllers/rsvps_controller.rb +++ b/app/controllers/rsvps_controller.rb @@ -43,8 +43,10 @@ def deny # rubocop:disable CyclomaticComplexity # rubocop:disable PerceivedComplexity def update - before_bus = @questionnaire.bus_list_id - before_account = @questionnaire.acc_status + # 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 @@ -60,16 +62,13 @@ def update update_acc_status update_bus_list - after_bus = @questionnaire.bus_list_id - after_account = @questionnaire.acc_status + bus_after_rsvp = @questionnaire.bus_list_id + acc_status_after_rsvp = @questionnaire.acc_status - if (before_account != after_account || before_bus != after_bus) && @questionnaire.is_bus_captain == true + if (acc_status != acc_status_after_rsvp || bus != bus_after_rsvp) && @questionnaire.is_bus_captain == true @questionnaire.is_bus_captain = false - if before_bus != after_bus && !after_bus.nil? - @questionnaire.bus_captain_interest = true - end - users = User.where(role: 3) - users.each do |user| + 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 From d1c3021a3a407284ae57f3a098ecd23ad93679bf Mon Sep 17 00:00:00 2001 From: Peter Kos Date: Sat, 19 Sep 2020 22:47:10 -0400 Subject: [PATCH 4/7] On questnnre destroy, email admins if bus captain --- app/controllers/manage/questionnaires_controller.rb | 7 +++++++ app/controllers/questionnaires_controller.rb | 8 +++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/controllers/manage/questionnaires_controller.rb b/app/controllers/manage/questionnaires_controller.rb index 4edb31cc0..5a8cdeca1 100644 --- a/app/controllers/manage/questionnaires_controller.rb +++ b/app/controllers/manage/questionnaires_controller.rb @@ -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 diff --git a/app/controllers/questionnaires_controller.rb b/app/controllers/questionnaires_controller.rb index 190acbac9..d1ffae79e 100644 --- a/app/controllers/questionnaires_controller.rb +++ b/app/controllers/questionnaires_controller.rb @@ -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 } From d3b2c7036511597285b5428762da879fcf2e0911 Mon Sep 17 00:00:00 2001 From: Peter Kos Date: Sun, 20 Sep 2020 01:46:29 -0400 Subject: [PATCH 5/7] =?UTF-8?q?Don=E2=80=99t=20send=20email=20remove=5Fcap?= =?UTF-8?q?tain=20on=20first=20bus=20assignment?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/rsvps_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/rsvps_controller.rb b/app/controllers/rsvps_controller.rb index 437999617..0fabed740 100644 --- a/app/controllers/rsvps_controller.rb +++ b/app/controllers/rsvps_controller.rb @@ -65,7 +65,7 @@ def update bus_after_rsvp = @questionnaire.bus_list_id acc_status_after_rsvp = @questionnaire.acc_status - if (acc_status != acc_status_after_rsvp || bus != bus_after_rsvp) && @questionnaire.is_bus_captain == true + 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| From cd680f1fdee8cd676c8b99855d00e66137612ccd Mon Sep 17 00:00:00 2001 From: Peter Kos Date: Sun, 20 Sep 2020 01:46:32 -0400 Subject: [PATCH 6/7] Tests! --- .../manage/questionnaires_controller_test.rb | 20 ++++++++--- .../questionnaires_controller_test.rb | 18 +++++++--- test/controllers/rsvps_controller_test.rb | 33 +++++++++++++++++++ 3 files changed, 63 insertions(+), 8 deletions(-) diff --git a/test/controllers/manage/questionnaires_controller_test.rb b/test/controllers/manage/questionnaires_controller_test.rb index 210c0dbc2..6ea1af040 100644 --- a/test/controllers/manage/questionnaires_controller_test.rb +++ b/test/controllers/manage/questionnaires_controller_test.rb @@ -281,11 +281,23 @@ 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 - assert_redirected_to manage_questionnaires_path + + should "user destroy questionnaire" do + assert_difference('Questionnaire.count', -1) do + delete :destroy, params: { id: @questionnaire } + end + + assert_redirected_to manage_questionnaires_path + end + end should "check in the questionnaire" do diff --git a/test/controllers/questionnaires_controller_test.rb b/test/controllers/questionnaires_controller_test.rb index 53260735c..4a02ce4eb 100644 --- a/test/controllers/questionnaires_controller_test.rb +++ b/test/controllers/questionnaires_controller_test.rb @@ -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 diff --git a/test/controllers/rsvps_controller_test.rb b/test/controllers/rsvps_controller_test.rb index 77a15dbe7..47f84a46b 100644 --- a/test/controllers/rsvps_controller_test.rb +++ b/test/controllers/rsvps_controller_test.rb @@ -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 From 7d22d8b3dbd6ac35f04d477a0447d74909795e7d Mon Sep 17 00:00:00 2001 From: Peter Kos Date: Sun, 20 Sep 2020 01:48:18 -0400 Subject: [PATCH 7/7] bark bark --- test/controllers/manage/questionnaires_controller_test.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/controllers/manage/questionnaires_controller_test.rb b/test/controllers/manage/questionnaires_controller_test.rb index 6ea1af040..9c1e2ac27 100644 --- a/test/controllers/manage/questionnaires_controller_test.rb +++ b/test/controllers/manage/questionnaires_controller_test.rb @@ -294,10 +294,8 @@ class Manage::QuestionnairesControllerTest < ActionController::TestCase assert_difference('Questionnaire.count', -1) do delete :destroy, params: { id: @questionnaire } end - assert_redirected_to manage_questionnaires_path end - end should "check in the questionnaire" do