From 99fea9303534330fed7e66282d1550ef555453ec Mon Sep 17 00:00:00 2001 From: Clare Constantine Date: Fri, 11 Jan 2019 11:27:15 -0800 Subject: [PATCH 1/3] log changes to summer ws and fit weekend --- .../controllers/api/v1/pd/applications_controller.rb | 10 ++++++++++ .../app/models/pd/application/application_base.rb | 4 ++-- .../pd/application/facilitator_application_base.rb | 4 ++++ .../application/workshop_autoenrolled_application.rb | 4 ++++ .../api/v1/pd/applications_controller_test.rb | 3 +++ 5 files changed, 23 insertions(+), 2 deletions(-) diff --git a/dashboard/app/controllers/api/v1/pd/applications_controller.rb b/dashboard/app/controllers/api/v1/pd/applications_controller.rb index 825b50dcf7667..af137ed74dd14 100644 --- a/dashboard/app/controllers/api/v1/pd/applications_controller.rb +++ b/dashboard/app/controllers/api/v1/pd/applications_controller.rb @@ -172,6 +172,14 @@ def update status_changed = true end + if application_data[:fit_workshop_id] != @application.try(:fit_workshop_id) + fit_workshop_changed = true + end + + if application_data[:pd_workshop_id] != @application.pd_workshop_id + summer_workshop_changed = true + end + if application_data[:response_scores] application_data[:response_scores] = JSON.parse(application_data[:response_scores]).transform_keys {|x| x.to_s.underscore}.to_json end @@ -209,6 +217,8 @@ def update end @application.update_status_timestamp_change_log(current_user) if status_changed + @application.log_fit_workshop_change(current_user) if fit_workshop_changed + @application.log_summer_workshop_change(current_user) if summer_workshop_changed render json: @application, serializer: ApplicationSerializer end diff --git a/dashboard/app/models/pd/application/application_base.rb b/dashboard/app/models/pd/application/application_base.rb index b7ea1e04972e1..b768fe24ba107 100644 --- a/dashboard/app/models/pd/application/application_base.rb +++ b/dashboard/app/models/pd/application/application_base.rb @@ -393,9 +393,9 @@ def sanitize_status_timestamp_change_log # Record when the status changes and who changed it # Ideally we'd implement this as an after_save action, but since we want the current # user to be included, this needs to be explicitly passed in in the controller - def update_status_timestamp_change_log(user) + def update_status_timestamp_change_log(user, title = status) log_entry = { - title: status, + title: title, changing_user_id: user.try(:id), changing_user_name: user.try(:name) || user.try(:email), time: Time.zone.now diff --git a/dashboard/app/models/pd/application/facilitator_application_base.rb b/dashboard/app/models/pd/application/facilitator_application_base.rb index 8980c3c792c5b..87172bdb286d1 100644 --- a/dashboard/app/models/pd/application/facilitator_application_base.rb +++ b/dashboard/app/models/pd/application/facilitator_application_base.rb @@ -96,6 +96,10 @@ def fit_workshop_date_and_location fit_workshop.try(&:date_and_location_name) end + def log_fit_workshop_change(user) + update_status_timestamp_change_log(user, "Fit Workshop: #{fit_workshop_date_and_location || 'Unassigned'}") + end + def registered_fit_workshop? # inspect the cached fit_workshop.enrollments rather than querying the DB fit_workshop.enrollments.any? {|e| e.user_id == user.id} if fit_workshop_id diff --git a/dashboard/app/models/pd/application/workshop_autoenrolled_application.rb b/dashboard/app/models/pd/application/workshop_autoenrolled_application.rb index ac863efb116fb..ca8ce185b527b 100644 --- a/dashboard/app/models/pd/application/workshop_autoenrolled_application.rb +++ b/dashboard/app/models/pd/application/workshop_autoenrolled_application.rb @@ -95,6 +95,10 @@ def workshop_date_and_location workshop.try(&:date_and_location_name) end + def log_summer_workshop_change(user) + update_status_timestamp_change_log(user, "Summer Workshop: #{workshop_date_and_location || 'Unassigned'}") + end + # override def lock! return if locked? diff --git a/dashboard/test/controllers/api/v1/pd/applications_controller_test.rb b/dashboard/test/controllers/api/v1/pd/applications_controller_test.rb index 86af8dbac966c..475d69c869b46 100644 --- a/dashboard/test/controllers/api/v1/pd/applications_controller_test.rb +++ b/dashboard/test/controllers/api/v1/pd/applications_controller_test.rb @@ -52,6 +52,9 @@ class ApplicationsControllerTest < ::ActionController::TestCase ) ) + @summer_workshop = create :pd_workshop, :local_summer_workshop, num_sessions: 5, sessions_from: Date.new(2019, 6, 1), processed_location: {city: 'Orchard Park', state: 'NY'}.to_json + @fit_workshop = create :pd_workshop, :fit, num_sessions: 3, sessions_from: Date.new(2019, 6, 1), processed_location: {city: 'Orchard Park', state: 'NY'}.to_json + @markdown = Redcarpet::Markdown.new(Redcarpet::Render::StripDown) end From feb2ebbf165119acb9e02dc8194da0ad6673ad13 Mon Sep 17 00:00:00 2001 From: Clare Constantine Date: Fri, 11 Jan 2019 15:45:43 -0800 Subject: [PATCH 2/3] add tests --- .../facilitator_applications_controller.rb | 1 + .../api/v1/pd/applications_controller_test.rb | 46 +++++++++++++++++-- dashboard/test/factories/pd_factories.rb | 1 + 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/dashboard/app/controllers/api/v1/pd/application/facilitator_applications_controller.rb b/dashboard/app/controllers/api/v1/pd/application/facilitator_applications_controller.rb index c43f52824c667..0c78708a58e19 100644 --- a/dashboard/app/controllers/api/v1/pd/application/facilitator_applications_controller.rb +++ b/dashboard/app/controllers/api/v1/pd/application/facilitator_applications_controller.rb @@ -13,6 +13,7 @@ def new_form def on_successful_create @application.queue_email :confirmation, deliver_now: true + @application.update_status_timestamp_change_log(current_user) end end end diff --git a/dashboard/test/controllers/api/v1/pd/applications_controller_test.rb b/dashboard/test/controllers/api/v1/pd/applications_controller_test.rb index 475d69c869b46..341c536b069ea 100644 --- a/dashboard/test/controllers/api/v1/pd/applications_controller_test.rb +++ b/dashboard/test/controllers/api/v1/pd/applications_controller_test.rb @@ -39,7 +39,7 @@ class ApplicationsControllerTest < ::ActionController::TestCase @csd_teacher_application = create TEACHER_APPLICATION_FACTORY, course: 'csd' @csd_teacher_application_with_partner = create TEACHER_APPLICATION_FACTORY, course: 'csd', regional_partner: @regional_partner @csp_teacher_application = create TEACHER_APPLICATION_FACTORY, course: 'csp' - @csp_facilitator_application = create FACILITATOR_APPLICATION_FACTORY, course: 'csp' + @csp_facilitator_application = create FACILITATOR_APPLICATION_FACTORY, course: 'csp', regional_partner: @regional_partner @serializing_teacher = create(:teacher, email: 'minerva@hogwarts.edu', @@ -301,7 +301,7 @@ class ApplicationsControllerTest < ::ActionController::TestCase assert_equal({regional_partner_name: 'Yes'}, application.response_scores_hash) end - test 'update appends to the status changed log if status is changed' do + test 'update appends to the timestamp log if status is changed' do sign_in @program_manager assert_equal [], @csd_teacher_application_with_partner.sanitize_status_timestamp_change_log @@ -319,7 +319,7 @@ class ApplicationsControllerTest < ::ActionController::TestCase ], @csd_teacher_application_with_partner.sanitize_status_timestamp_change_log end - test 'update does not append to the status changed log if status is unchanged' do + test 'update does not append to the timestamp log if status is unchanged' do sign_in @program_manager @csd_teacher_application_with_partner.update(status_timestamp_change_log: '[]') @csd_teacher_application_with_partner.reload @@ -332,6 +332,46 @@ class ApplicationsControllerTest < ::ActionController::TestCase assert_equal [], @csd_teacher_application_with_partner.sanitize_status_timestamp_change_log end + test 'update appends to the timestamp log if fit workshop is changed' do + sign_in @program_manager + @csp_facilitator_application.update(status_timestamp_change_log: '[]') + @csp_facilitator_application.reload + + assert_equal [], @csp_facilitator_application.sanitize_status_timestamp_change_log + + post :update, params: {id: @csp_facilitator_application.id, application: {fit_workshop_id: @fit_workshop.id, status: @csp_facilitator_application.status}} + @csp_facilitator_application.reload + + assert_equal [ + { + title: "Fit Workshop: #{@csp_facilitator_application.fit_workshop_date_and_location}", + changing_user_id: @program_manager.id, + changing_user_name: @program_manager.name, + time: Time.zone.now + } + ], @csp_facilitator_application.sanitize_status_timestamp_change_log + end + + test 'update appends to the timestamp log if summer workshop is changed' do + sign_in @program_manager + @csp_facilitator_application.update(status_timestamp_change_log: '[]') + @csp_facilitator_application.reload + + assert_equal [], @csp_facilitator_application.sanitize_status_timestamp_change_log + + post :update, params: {id: @csp_facilitator_application.id, application: {pd_workshop_id: @summer_workshop.id, status: @csp_facilitator_application.status}} + @csp_facilitator_application.reload + + assert_equal [ + { + title: "Summer Workshop: #{@csp_facilitator_application.workshop_date_and_location}", + changing_user_id: @program_manager.id, + changing_user_name: @program_manager.name, + time: Time.zone.now + } + ], @csp_facilitator_application.sanitize_status_timestamp_change_log + end + test 'workshop admins can lock and unlock applications' do sign_in @workshop_admin put :update, params: {id: @csf_facilitator_application_no_partner, application: {status: 'accepted', locked: 'true'}} diff --git a/dashboard/test/factories/pd_factories.rb b/dashboard/test/factories/pd_factories.rb index d253dff8da7a3..97f93970ef549 100644 --- a/dashboard/test/factories/pd_factories.rb +++ b/dashboard/test/factories/pd_factories.rb @@ -5,6 +5,7 @@ association :organizer, factory: :workshop_organizer funded false on_map true + location_name 'Hogwarts School of Witchcraft and Wizardry' course Pd::Workshop::COURSES.first subject {Pd::Workshop::SUBJECTS[course].try(&:first)} trait :teachercon do From 0ddf1eb0b6b31d2bf81fb1a855eecbac3fe9b5dd Mon Sep 17 00:00:00 2001 From: Clare Constantine Date: Mon, 14 Jan 2019 22:18:31 -0800 Subject: [PATCH 3/3] add test and fix bug --- .../facilitator_application_base.rb | 2 +- .../workshop_autoenrolled_application.rb | 2 +- .../api/v1/pd/applications_controller_test.rb | 31 +++++++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/dashboard/app/models/pd/application/facilitator_application_base.rb b/dashboard/app/models/pd/application/facilitator_application_base.rb index 87172bdb286d1..60271138400e6 100644 --- a/dashboard/app/models/pd/application/facilitator_application_base.rb +++ b/dashboard/app/models/pd/application/facilitator_application_base.rb @@ -97,7 +97,7 @@ def fit_workshop_date_and_location end def log_fit_workshop_change(user) - update_status_timestamp_change_log(user, "Fit Workshop: #{fit_workshop_date_and_location || 'Unassigned'}") + update_status_timestamp_change_log(user, "Fit Workshop: #{fit_workshop_id ? fit_workshop_date_and_location : 'Unassigned'}") end def registered_fit_workshop? diff --git a/dashboard/app/models/pd/application/workshop_autoenrolled_application.rb b/dashboard/app/models/pd/application/workshop_autoenrolled_application.rb index ca8ce185b527b..b768456e162bf 100644 --- a/dashboard/app/models/pd/application/workshop_autoenrolled_application.rb +++ b/dashboard/app/models/pd/application/workshop_autoenrolled_application.rb @@ -96,7 +96,7 @@ def workshop_date_and_location end def log_summer_workshop_change(user) - update_status_timestamp_change_log(user, "Summer Workshop: #{workshop_date_and_location || 'Unassigned'}") + update_status_timestamp_change_log(user, "Summer Workshop: #{pd_workshop_id ? workshop_date_and_location : 'Unassigned'}") end # override diff --git a/dashboard/test/controllers/api/v1/pd/applications_controller_test.rb b/dashboard/test/controllers/api/v1/pd/applications_controller_test.rb index 341c536b069ea..1ba580feca8a8 100644 --- a/dashboard/test/controllers/api/v1/pd/applications_controller_test.rb +++ b/dashboard/test/controllers/api/v1/pd/applications_controller_test.rb @@ -372,6 +372,37 @@ class ApplicationsControllerTest < ::ActionController::TestCase ], @csp_facilitator_application.sanitize_status_timestamp_change_log end + test 'update does not append to the timestamp log if fit and summer workshop are not changed' do + sign_in @program_manager + @csp_facilitator_application.update(status_timestamp_change_log: '[]') + @csp_facilitator_application.reload + + assert_equal [], @csp_facilitator_application.sanitize_status_timestamp_change_log + + post :update, params: {id: @csp_facilitator_application.id, application: {fit_workshop_id: @fit_workshop.id, pd_workshop_id: @summer_workshop.id, status: @csp_facilitator_application.status}} + @csp_facilitator_application.reload + + expected_log = [ + { + title: "Fit Workshop: #{@csp_facilitator_application.fit_workshop_date_and_location}", + changing_user_id: @program_manager.id, + changing_user_name: @program_manager.name, + time: Time.zone.now + }, { + title: "Summer Workshop: #{@csp_facilitator_application.workshop_date_and_location}", + changing_user_id: @program_manager.id, + changing_user_name: @program_manager.name, + time: Time.zone.now + } + ] + + assert_equal expected_log, @csp_facilitator_application.sanitize_status_timestamp_change_log + + post :update, params: {id: @csp_facilitator_application.id, application: {fit_workshop_id: @fit_workshop.id, pd_workshop_id: @summer_workshop.id, status: @csp_facilitator_application.status}} + + assert_equal expected_log, @csp_facilitator_application.sanitize_status_timestamp_change_log + end + test 'workshop admins can lock and unlock applications' do sign_in @workshop_admin put :update, params: {id: @csf_facilitator_application_no_partner, application: {status: 'accepted', locked: 'true'}}