From b57577b45d32130deec46c4114055c17361529db Mon Sep 17 00:00:00 2001 From: racingspider Date: Tue, 25 Jul 2023 11:11:19 -0400 Subject: [PATCH 1/8] merge changes from other developers --- app/jobs/get_usps_proofing_results_job.rb | 5 +- app/models/in_person_enrollment.rb | 16 +++- ..._batch_claim_at_to_in_person_enrollment.rb | 5 ++ db/schema.rb | 3 +- .../get_usps_proofing_results_job_spec.rb | 89 +++++++++---------- spec/models/in_person_enrollment_spec.rb | 4 +- 6 files changed, 69 insertions(+), 53 deletions(-) create mode 100644 db/primary_migrate/20230725135906_add_last_batch_claim_at_to_in_person_enrollment.rb diff --git a/app/jobs/get_usps_proofing_results_job.rb b/app/jobs/get_usps_proofing_results_job.rb index c19e0fea8b2..618c5d382ce 100644 --- a/app/jobs/get_usps_proofing_results_job.rb +++ b/app/jobs/get_usps_proofing_results_job.rb @@ -33,7 +33,10 @@ def perform(_now) ) started_at = Time.zone.now - analytics.idv_in_person_usps_proofing_results_job_started( + enrollments.update(last_batch_claim_at: started_at) + enrollments = InPersonEnrollment.needs_usps_status_check_batch(started_at) if + enrollments.size > 0 + analytics.idv_in_person_usps_proofing_results_job_started( enrollments_count: enrollments.count, reprocess_delay_minutes: reprocess_delay_minutes, job_name: self.class.name, diff --git a/app/models/in_person_enrollment.rb b/app/models/in_person_enrollment.rb index 265cd342fff..dc2dd3acd7c 100644 --- a/app/models/in_person_enrollment.rb +++ b/app/models/in_person_enrollment.rb @@ -53,8 +53,16 @@ def self.needs_late_email_reminder(early_benchmark, late_benchmark) def self.needs_usps_status_check(check_interval) where(status: :pending). and( - where(status_check_attempted_at: check_interval). - or(where(status_check_attempted_at: nil)), + where(last_batch_claim_at: check_interval). + or(where(last_batch_claim_at: nil)), + ). + order(status_check_attempted_at: :asc) + end + + def self.needs_usps_status_check_batch(batch_at) + where(status: :pending). + and( + where(last_batch_claim_at: batch_at), ). order(status_check_attempted_at: :asc) end @@ -62,8 +70,8 @@ def self.needs_usps_status_check(check_interval) # Does this enrollment need a status check via the USPS API? def needs_usps_status_check?(check_interval) pending? && ( - status_check_attempted_at.nil? || - check_interval.cover?(status_check_attempted_at) + last_batch_claim_at.nil? || + check_interval.cover?(last_batch_claim_at) ) end diff --git a/db/primary_migrate/20230725135906_add_last_batch_claim_at_to_in_person_enrollment.rb b/db/primary_migrate/20230725135906_add_last_batch_claim_at_to_in_person_enrollment.rb new file mode 100644 index 00000000000..b88ac54e410 --- /dev/null +++ b/db/primary_migrate/20230725135906_add_last_batch_claim_at_to_in_person_enrollment.rb @@ -0,0 +1,5 @@ +class AddLastBatchClaimAtToInPersonEnrollment < ActiveRecord::Migration[7.0] + def change + add_column :in_person_enrollments, :last_batch_claim_at, :datetime + end +end diff --git a/db/schema.rb b/db/schema.rb index bcf0914a68b..8f4aba11240 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_07_07_144310) do +ActiveRecord::Schema[7.0].define(version: 2023_07_25_135906) do # These are extensions that must be enabled in order to support this database enable_extension "pg_stat_statements" enable_extension "pgcrypto" @@ -311,6 +311,7 @@ t.datetime "status_check_completed_at", comment: "The last time a status check was successfully completed" t.boolean "ready_for_status_check", default: false t.datetime "notification_sent_at", comment: "The time a notification was sent" + t.datetime "last_batch_claim_at" t.index ["profile_id"], name: "index_in_person_enrollments_on_profile_id" t.index ["ready_for_status_check"], name: "index_in_person_enrollments_on_ready_for_status_check", where: "(ready_for_status_check = true)" t.index ["status_check_attempted_at"], name: "index_in_person_enrollments_on_status_check_attempted_at", where: "(status = 1)" diff --git a/spec/jobs/get_usps_proofing_results_job_spec.rb b/spec/jobs/get_usps_proofing_results_job_spec.rb index 17b4ecfa25b..77c2f9122c2 100644 --- a/spec/jobs/get_usps_proofing_results_job_spec.rb +++ b/spec/jobs/get_usps_proofing_results_job_spec.rb @@ -149,7 +149,7 @@ RSpec.shared_examples 'enrollment_encountering_an_error_that_has_a_nil_response' do |error_type:| it 'logs that response is not present' do - expect(NewRelic::Agent).to receive(:notice_error).with(instance_of(error_type)) + expect(NewRelic::Agent).to receive(:notice_error).with(instance_of(error_type)).at_least(1).times job.perform(Time.zone.now) expect(job_analytics).to have_logged_event( @@ -215,35 +215,19 @@ describe 'IPP enabled' do describe 'DAV not enabled' do let!(:pending_enrollments) do - [ - create( - :in_person_enrollment, :pending, :with_notification_phone_configuration, - selected_location_details: { name: 'BALTIMORE' }, - issuer: 'http://localhost:3000' - ), - create( - :in_person_enrollment, :pending, - selected_location_details: { name: 'FRIENDSHIP' } - ), - create( - :in_person_enrollment, :pending, - selected_location_details: { name: 'WASHINGTON' } - ), - create( - :in_person_enrollment, :pending, - selected_location_details: { name: 'ARLINGTON' } - ), - create( - :in_person_enrollment, :pending, - selected_location_details: { name: 'DEANWOOD' } - ), - ] + locations = ['BALTIMORE', 'FRIENDSHIP', 'WASHINGTON', 'ARLINGTON', 'DEANWOOD'] + build_list(:in_person_enrollment, 5, :pending) do |record, i| + record.issuer = 'http://localhost:3000' + record.selected_location_details = { name: locations[i] } + record.save! + end end - let(:pending_enrollment) { pending_enrollments[0] } + let(:pending_enrollment) { pending_enrollments.first } before do + enrollment_record = InPersonEnrollment.where(id: pending_enrollments.map(&:id)) allow(InPersonEnrollment).to receive(:needs_usps_status_check). - and_return([pending_enrollment]) + and_return(enrollment_record) allow(IdentityConfig.store).to receive(:in_person_proofing_enabled).and_return(true) end @@ -261,8 +245,9 @@ end it 'records the last attempted status check regardless of response code and contents' do + enrollment_records = InPersonEnrollment.where(id: pending_enrollments.map(&:id)) allow(InPersonEnrollment).to receive(:needs_usps_status_check). - and_return(pending_enrollments) + and_return(enrollment_records) stub_request_proofing_results_with_responses( request_failed_proofing_results_args, request_in_progress_proofing_results_args, @@ -306,8 +291,9 @@ end it 'logs a message when the job starts' do + enrollment_records = InPersonEnrollment.where(id: pending_enrollments.map(&:id)) allow(InPersonEnrollment).to receive(:needs_usps_status_check). - and_return(pending_enrollments) + and_return(enrollment_records) stub_request_proofing_results_with_responses( request_failed_proofing_results_args, request_in_progress_proofing_results_args, @@ -326,8 +312,9 @@ end it 'logs a message with counts of various outcomes when the job completes (errored > 0)' do + enrollment_records = InPersonEnrollment.where(id: pending_enrollments.map(&:id)) allow(InPersonEnrollment).to receive(:needs_usps_status_check). - and_return(pending_enrollments) + and_return(enrollment_records) stub_request_proofing_results_with_responses( request_passed_proofing_results_args, request_in_progress_proofing_results_args, @@ -358,8 +345,9 @@ end it 'logs a message with counts of various outcomes when the job completes (errored = 0)' do + enrollment_records = InPersonEnrollment.where(id: pending_enrollments.map(&:id)) allow(InPersonEnrollment).to receive(:needs_usps_status_check). - and_return(pending_enrollments) + and_return(enrollment_records) stub_request_proofing_results_with_responses( request_passed_proofing_results_args, ) @@ -388,7 +376,7 @@ it 'logs a message with counts of various outcomes when the job completes (no enrollments)' do allow(InPersonEnrollment).to receive(:needs_usps_status_check). - and_return([]) + and_return(InPersonEnrollment.none) stub_request_proofing_results_with_responses( request_passed_proofing_results_args, ) @@ -422,7 +410,7 @@ it 'logs failure details' do allow(UspsInPersonProofing::Proofer).to receive(:new).and_return(proofer) allow(proofer).to receive(:request_proofing_results).and_raise(error) - expect(NewRelic::Agent).to receive(:notice_error).with(error) + expect(NewRelic::Agent).to receive(:notice_error).with(error).at_least(1).times job.perform(Time.zone.now) @@ -442,8 +430,9 @@ let(:request_delay_ms) { 750 } it 'adds a delay between requests to USPS' do + enrollment_records = InPersonEnrollment.where(id: pending_enrollments.map(&:id)) allow(InPersonEnrollment).to receive(:needs_usps_status_check). - and_return(pending_enrollments) + and_return(enrollment_records) stub_request_passed_proofing_results expect(job).to receive(:sleep).exactly(pending_enrollments.length - 1).times. with(0.75) @@ -456,10 +445,10 @@ it 'generates a backwards-compatible unique ID' do pending_enrollment.update(unique_id: nil) stub_request_passed_proofing_results - expect(pending_enrollment).to receive(:usps_unique_id).and_call_original + expect_any_instance_of(InPersonEnrollment).to receive(:usps_unique_id).and_call_original job.perform(Time.zone.now) - + pending_enrollment.reload expect(pending_enrollment.unique_id).not_to be_nil end end @@ -644,6 +633,7 @@ and_return(true) expect do job.perform(Time.zone.now) + pending_enrollment.reload end.to have_enqueued_job(InPerson::SendProofingNotificationJob). with(pending_enrollment.id).on_queue(:intentionally_delayed) expect(pending_enrollment.proofed_at).to eq(transaction_end_date_time) @@ -684,6 +674,7 @@ it 'logs failure details' do job.perform(Time.zone.now) + pending_enrollment.reload expect(pending_enrollment.proofed_at).to eq(transaction_end_date_time) expect(job_analytics).to have_logged_event( 'GetUspsProofingResultsJob: Enrollment status updated', @@ -722,6 +713,7 @@ it 'logs fraud failure details' do job.perform(Time.zone.now) + pending_enrollment.reload expect(pending_enrollment.proofed_at).to eq(transaction_end_date_time) expect(job_analytics).to have_logged_event( 'GetUspsProofingResultsJob: Enrollment status updated', @@ -760,7 +752,8 @@ it 'logs a message about the unsupported ID' do job.perform Time.zone.now - + + pending_enrollment.reload expect(pending_enrollment.proofed_at).to eq(transaction_end_date_time) expect(job_analytics).to have_logged_event( 'GetUspsProofingResultsJob: Enrollment status updated', @@ -878,8 +871,10 @@ context 'when an enrollment code is invalid' do # this enrollment code is hardcoded into the fixture # request_unexpected_invalid_enrollment_code_response.json - let(:pending_enrollment) do - create(:in_person_enrollment, :pending, enrollment_code: '1234567890123456') + let(:pending_enrollments) do + [ + create(:in_person_enrollment, :pending, enrollment_code: '1234567890123456') + ] end before(:each) do stub_request_unexpected_invalid_enrollment_code @@ -903,8 +898,10 @@ context 'when a unique id is invalid' do # this unique id is hardcoded into the fixture # request_unexpected_invalid_applicant_response.json - let(:pending_enrollment) do - create(:in_person_enrollment, :pending, unique_id: '123456789abcdefghi') + let(:pending_enrollments) do + [ + create(:in_person_enrollment, :pending, unique_id: '123456789abcdefghi') + ] end before(:each) do stub_request_unexpected_invalid_applicant @@ -994,7 +991,7 @@ it 'logs the error to NewRelic' do expect(NewRelic::Agent).to receive(:notice_error). - with(instance_of(Faraday::BadRequestError)) + with(instance_of(Faraday::BadRequestError)).at_least(1).times job.perform(Time.zone.now) end end @@ -1020,7 +1017,7 @@ it 'logs the error to NewRelic' do expect(NewRelic::Agent).to receive(:notice_error). - with(instance_of(Faraday::ClientError)) + with(instance_of(Faraday::ClientError)).at_least(1).times job.perform(Time.zone.now) end end @@ -1040,7 +1037,7 @@ it 'logs the error to NewRelic' do expect(NewRelic::Agent).to receive(:notice_error). - with(instance_of(Faraday::ServerError)) + with(instance_of(Faraday::ServerError)).at_least(1).times job.perform(Time.zone.now) end end @@ -1116,8 +1113,8 @@ ) end before do - allow(InPersonEnrollment).to receive(:needs_usps_status_check). - and_return([pending_enrollment]) + #allow(InPersonEnrollment).to receive(:needs_usps_status_check). + # and_return([pending_enrollment]) allow(IdentityConfig.store).to receive(:in_person_proofing_enabled).and_return(true) end @@ -1140,6 +1137,8 @@ and_return(true) expect do job.perform Time.zone.now + + pending_enrollment.reload end.to have_enqueued_job(InPerson::SendProofingNotificationJob). with(pending_enrollment.id).on_queue(:intentionally_delayed) expect(pending_enrollment.proofed_at).to eq(transaction_end_date_time) diff --git a/spec/models/in_person_enrollment_spec.rb b/spec/models/in_person_enrollment_spec.rb index 1f8876c9362..5b953f97530 100644 --- a/spec/models/in_person_enrollment_spec.rb +++ b/spec/models/in_person_enrollment_spec.rb @@ -148,7 +148,7 @@ let!(:failing_enrollment) { create(:in_person_enrollment, :failed) } let!(:expired_enrollment) { create(:in_person_enrollment, :expired) } let!(:checked_pending_enrollment) do - create(:in_person_enrollment, :pending, status_check_attempted_at: Time.zone.now) + create(:in_person_enrollment, :pending, last_batch_claim_at: Time.zone.now) end let!(:needy_enrollments) do [ @@ -193,7 +193,7 @@ end let!(:checked_pending_enrollment) do create( - :in_person_enrollment, :pending, status_check_attempted_at: Time.zone.now, + :in_person_enrollment, :pending, last_batch_claim_at: Time.zone.now, ready_for_status_check: true ) end From 6773bc3413e9d9386f7b96decee36ac59304a0ec Mon Sep 17 00:00:00 2001 From: racingspider Date: Tue, 25 Jul 2023 11:34:07 -0400 Subject: [PATCH 2/8] include a missed field in enrollment list --- spec/jobs/get_usps_proofing_results_job_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/jobs/get_usps_proofing_results_job_spec.rb b/spec/jobs/get_usps_proofing_results_job_spec.rb index 77c2f9122c2..7ecea61eda9 100644 --- a/spec/jobs/get_usps_proofing_results_job_spec.rb +++ b/spec/jobs/get_usps_proofing_results_job_spec.rb @@ -216,7 +216,7 @@ describe 'DAV not enabled' do let!(:pending_enrollments) do locations = ['BALTIMORE', 'FRIENDSHIP', 'WASHINGTON', 'ARLINGTON', 'DEANWOOD'] - build_list(:in_person_enrollment, 5, :pending) do |record, i| + build_list(:in_person_enrollment, 5, :pending, :with_notification_phone_configuration ) do |record, i| record.issuer = 'http://localhost:3000' record.selected_location_details = { name: locations[i] } record.save! @@ -322,7 +322,7 @@ request_failed_proofing_results_args, request_expired_proofing_results_args, ) - + binding.pry job.perform(Time.zone.now) expect(job_analytics).to have_logged_event( From be9910bdac6a6998f3ec386185da27ae2e5f9c51 Mon Sep 17 00:00:00 2001 From: racingspider Date: Tue, 25 Jul 2023 11:48:42 -0400 Subject: [PATCH 3/8] fix lint issues --- app/jobs/get_usps_proofing_results_job.rb | 4 ++-- spec/jobs/get_usps_proofing_results_job_spec.rb | 17 ++++++++++------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/app/jobs/get_usps_proofing_results_job.rb b/app/jobs/get_usps_proofing_results_job.rb index 618c5d382ce..5f52880fb75 100644 --- a/app/jobs/get_usps_proofing_results_job.rb +++ b/app/jobs/get_usps_proofing_results_job.rb @@ -34,9 +34,9 @@ def perform(_now) started_at = Time.zone.now enrollments.update(last_batch_claim_at: started_at) - enrollments = InPersonEnrollment.needs_usps_status_check_batch(started_at) if + enrollments = InPersonEnrollment.needs_usps_status_check_batch(started_at) if enrollments.size > 0 - analytics.idv_in_person_usps_proofing_results_job_started( + analytics.idv_in_person_usps_proofing_results_job_started( enrollments_count: enrollments.count, reprocess_delay_minutes: reprocess_delay_minutes, job_name: self.class.name, diff --git a/spec/jobs/get_usps_proofing_results_job_spec.rb b/spec/jobs/get_usps_proofing_results_job_spec.rb index 7ecea61eda9..0474cda44e0 100644 --- a/spec/jobs/get_usps_proofing_results_job_spec.rb +++ b/spec/jobs/get_usps_proofing_results_job_spec.rb @@ -149,7 +149,8 @@ RSpec.shared_examples 'enrollment_encountering_an_error_that_has_a_nil_response' do |error_type:| it 'logs that response is not present' do - expect(NewRelic::Agent).to receive(:notice_error).with(instance_of(error_type)).at_least(1).times + expect(NewRelic::Agent).to receive(:notice_error). + with(instance_of(error_type)).at_least(1).times job.perform(Time.zone.now) expect(job_analytics).to have_logged_event( @@ -216,7 +217,10 @@ describe 'DAV not enabled' do let!(:pending_enrollments) do locations = ['BALTIMORE', 'FRIENDSHIP', 'WASHINGTON', 'ARLINGTON', 'DEANWOOD'] - build_list(:in_person_enrollment, 5, :pending, :with_notification_phone_configuration ) do |record, i| + build_list( + :in_person_enrollment, 5, :pending, + :with_notification_phone_configuration + ) do |record, i| record.issuer = 'http://localhost:3000' record.selected_location_details = { name: locations[i] } record.save! @@ -322,7 +326,6 @@ request_failed_proofing_results_args, request_expired_proofing_results_args, ) - binding.pry job.perform(Time.zone.now) expect(job_analytics).to have_logged_event( @@ -752,7 +755,7 @@ it 'logs a message about the unsupported ID' do job.perform Time.zone.now - + pending_enrollment.reload expect(pending_enrollment.proofed_at).to eq(transaction_end_date_time) expect(job_analytics).to have_logged_event( @@ -873,7 +876,7 @@ # request_unexpected_invalid_enrollment_code_response.json let(:pending_enrollments) do [ - create(:in_person_enrollment, :pending, enrollment_code: '1234567890123456') + create(:in_person_enrollment, :pending, enrollment_code: '1234567890123456'), ] end before(:each) do @@ -900,7 +903,7 @@ # request_unexpected_invalid_applicant_response.json let(:pending_enrollments) do [ - create(:in_person_enrollment, :pending, unique_id: '123456789abcdefghi') + create(:in_person_enrollment, :pending, unique_id: '123456789abcdefghi'), ] end before(:each) do @@ -1113,7 +1116,7 @@ ) end before do - #allow(InPersonEnrollment).to receive(:needs_usps_status_check). + # allow(InPersonEnrollment).to receive(:needs_usps_status_check). # and_return([pending_enrollment]) allow(IdentityConfig.store).to receive(:in_person_proofing_enabled).and_return(true) end From 7cd986e1cf04baded8865be4241bdfb836ee5487 Mon Sep 17 00:00:00 2001 From: racingspider Date: Tue, 25 Jul 2023 12:45:12 -0400 Subject: [PATCH 4/8] changelog: Internal, IPP Enrollments, prevent InPersonEnrollment from appearing in two batches From 477d691fc1aee684c096447f1aebf35105b3076f Mon Sep 17 00:00:00 2001 From: racingspider Date: Tue, 25 Jul 2023 12:58:20 -0400 Subject: [PATCH 5/8] changelog: Internal, IPP Enrollments, prevent InPersonEnrollment from appearing in two batches --- app/jobs/get_usps_proofing_results_job.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/jobs/get_usps_proofing_results_job.rb b/app/jobs/get_usps_proofing_results_job.rb index 5f52880fb75..266fbf7ea4b 100644 --- a/app/jobs/get_usps_proofing_results_job.rb +++ b/app/jobs/get_usps_proofing_results_job.rb @@ -41,7 +41,6 @@ def perform(_now) reprocess_delay_minutes: reprocess_delay_minutes, job_name: self.class.name, ) - check_enrollments(enrollments) analytics.idv_in_person_usps_proofing_results_job_completed( From 87651b6fec86d1bbd7db9a8205b5dd23d9af95d4 Mon Sep 17 00:00:00 2001 From: Micah Date: Thu, 27 Jul 2023 09:45:17 -0400 Subject: [PATCH 6/8] Update app/jobs/get_usps_proofing_results_job.rb Good suggestion, I broke it there because of the linting, but this is easier to read. Co-authored-by: Zach Margolis --- app/jobs/get_usps_proofing_results_job.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/jobs/get_usps_proofing_results_job.rb b/app/jobs/get_usps_proofing_results_job.rb index ea580d8b6c8..24d4082628e 100644 --- a/app/jobs/get_usps_proofing_results_job.rb +++ b/app/jobs/get_usps_proofing_results_job.rb @@ -34,8 +34,9 @@ def perform(_now) started_at = Time.zone.now enrollments.update(last_batch_claim_at: started_at) - enrollments = InPersonEnrollment.needs_usps_status_check_batch(started_at) if - enrollments.size > 0 + enrollments = if enrollments.size > 0 + InPersonEnrollment.needs_usps_status_check_batch(started_at) + end analytics.idv_in_person_usps_proofing_results_job_started( enrollments_count: enrollments.count, reprocess_delay_minutes: reprocess_delay_minutes, From c9078ecc790b9b0ae468d04e46aa03082c77ceca Mon Sep 17 00:00:00 2001 From: racingspider Date: Thu, 27 Jul 2023 10:59:57 -0400 Subject: [PATCH 7/8] minor refactor to increase readability --- app/jobs/get_usps_proofing_results_job.rb | 4 +-- .../get_usps_proofing_results_job_spec.rb | 26 +++++++++++++------ 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/app/jobs/get_usps_proofing_results_job.rb b/app/jobs/get_usps_proofing_results_job.rb index 24d4082628e..e5873871244 100644 --- a/app/jobs/get_usps_proofing_results_job.rb +++ b/app/jobs/get_usps_proofing_results_job.rb @@ -34,9 +34,7 @@ def perform(_now) started_at = Time.zone.now enrollments.update(last_batch_claim_at: started_at) - enrollments = if enrollments.size > 0 - InPersonEnrollment.needs_usps_status_check_batch(started_at) - end + enrollments = InPersonEnrollment.needs_usps_status_check_batch(started_at) analytics.idv_in_person_usps_proofing_results_job_started( enrollments_count: enrollments.count, reprocess_delay_minutes: reprocess_delay_minutes, diff --git a/spec/jobs/get_usps_proofing_results_job_spec.rb b/spec/jobs/get_usps_proofing_results_job_spec.rb index 64ed2e91c4b..5159808bc61 100644 --- a/spec/jobs/get_usps_proofing_results_job_spec.rb +++ b/spec/jobs/get_usps_proofing_results_job_spec.rb @@ -218,14 +218,24 @@ describe 'IPP enabled' do describe 'DAV not enabled' do let!(:pending_enrollments) do - locations = ['BALTIMORE', 'FRIENDSHIP', 'WASHINGTON', 'ARLINGTON', 'DEANWOOD'] - build_list( - :in_person_enrollment, 5, :pending, - :with_notification_phone_configuration - ) do |record, i| - record.issuer = 'http://localhost:3000' - record.selected_location_details = { name: locations[i] } - record.save! + + ['BALTIMORE', 'FRIENDSHIP', 'WASHINGTON', 'ARLINGTON', 'DEANWOOD'].map do |name| + create( + :in_person_enrollment, + :pending, + :with_notification_phone_configuration, + issuer: 'http://localhost:3000', + selected_location_details: { name: name }, + ) + + + # build_list( + # :in_person_enrollment, 5, :pending, + # :with_notification_phone_configuration + # ) do |record, i| + # record.issuer = 'http://localhost:3000' + # record.selected_location_details = { name: locations[i] } + # record.save! end end let(:pending_enrollment) { pending_enrollments.first } From 0c7b4dc85d57b6c39b3b40eee178a164574519fd Mon Sep 17 00:00:00 2001 From: racingspider Date: Mon, 14 Aug 2023 09:21:14 -0400 Subject: [PATCH 8/8] rebuild column with corrected name in new migration --- app/jobs/get_usps_proofing_results_job.rb | 10 +++++----- app/models/in_person_enrollment.rb | 13 ++++++------- ...d_last_batch_claim_at_to_in_person_enrollment.rb | 5 ----- ...last_batch_claimed_at_to_in_person_enrollment.rb | 6 ++++++ db/schema.rb | 4 ++-- spec/jobs/get_usps_proofing_results_job_spec.rb | 6 ++---- spec/models/in_person_enrollment_spec.rb | 4 ++-- 7 files changed, 23 insertions(+), 25 deletions(-) delete mode 100644 db/primary_migrate/20230725135906_add_last_batch_claim_at_to_in_person_enrollment.rb create mode 100644 db/primary_migrate/20230814130423_add_last_batch_claimed_at_to_in_person_enrollment.rb diff --git a/app/jobs/get_usps_proofing_results_job.rb b/app/jobs/get_usps_proofing_results_job.rb index 35fc665b7ef..c0da8c79f14 100644 --- a/app/jobs/get_usps_proofing_results_job.rb +++ b/app/jobs/get_usps_proofing_results_job.rb @@ -28,19 +28,19 @@ def perform(_now) reprocess_delay_minutes = IdentityConfig.store. get_usps_proofing_results_job_reprocess_delay_minutes - enrollments = InPersonEnrollment.needs_usps_status_check( + pending_enrollments = InPersonEnrollment.needs_usps_status_check( ...reprocess_delay_minutes.minutes.ago, ) started_at = Time.zone.now - enrollments.update(last_batch_claim_at: started_at) - enrollments = InPersonEnrollment.needs_usps_status_check_batch(started_at) + pending_enrollments.update(last_batch_claimed_at: started_at) + enrollments_to_check = InPersonEnrollment.needs_usps_status_check_batch(started_at) analytics.idv_in_person_usps_proofing_results_job_started( - enrollments_count: enrollments.count, + enrollments_count: enrollments_to_check.count, reprocess_delay_minutes: reprocess_delay_minutes, job_name: self.class.name, ) - check_enrollments(enrollments) + check_enrollments(enrollments_to_check) analytics.idv_in_person_usps_proofing_results_job_completed( **enrollment_outcomes, diff --git a/app/models/in_person_enrollment.rb b/app/models/in_person_enrollment.rb index 8add9ac58b6..dc9c2400dea 100644 --- a/app/models/in_person_enrollment.rb +++ b/app/models/in_person_enrollment.rb @@ -60,16 +60,15 @@ def self.needs_late_email_reminder(early_benchmark, late_benchmark) def self.needs_usps_status_check(check_interval) where(status: :pending). and( - where(last_batch_claim_at: check_interval). - or(where(last_batch_claim_at: nil)), - ). - order(status_check_attempted_at: :asc) + where(last_batch_claimed_at: check_interval). + or(where(last_batch_claimed_at: nil)), + ) end def self.needs_usps_status_check_batch(batch_at) where(status: :pending). and( - where(last_batch_claim_at: batch_at), + where(last_batch_claimed_at: batch_at), ). order(status_check_attempted_at: :asc) end @@ -77,8 +76,8 @@ def self.needs_usps_status_check_batch(batch_at) # Does this enrollment need a status check via the USPS API? def needs_usps_status_check?(check_interval) pending? && ( - last_batch_claim_at.nil? || - check_interval.cover?(last_batch_claim_at) + last_batch_claimed_at.nil? || + check_interval.cover?(last_batch_claimed_at) ) end diff --git a/db/primary_migrate/20230725135906_add_last_batch_claim_at_to_in_person_enrollment.rb b/db/primary_migrate/20230725135906_add_last_batch_claim_at_to_in_person_enrollment.rb deleted file mode 100644 index b88ac54e410..00000000000 --- a/db/primary_migrate/20230725135906_add_last_batch_claim_at_to_in_person_enrollment.rb +++ /dev/null @@ -1,5 +0,0 @@ -class AddLastBatchClaimAtToInPersonEnrollment < ActiveRecord::Migration[7.0] - def change - add_column :in_person_enrollments, :last_batch_claim_at, :datetime - end -end diff --git a/db/primary_migrate/20230814130423_add_last_batch_claimed_at_to_in_person_enrollment.rb b/db/primary_migrate/20230814130423_add_last_batch_claimed_at_to_in_person_enrollment.rb new file mode 100644 index 00000000000..0a18b9e298e --- /dev/null +++ b/db/primary_migrate/20230814130423_add_last_batch_claimed_at_to_in_person_enrollment.rb @@ -0,0 +1,6 @@ +class AddLastBatchClaimedAtToInPersonEnrollment < ActiveRecord::Migration[7.0] + def change + add_column :in_person_enrollments, :last_batch_claimed_at, :datetime + InPersonEnrollment.update_all("last_batch_claimed_at = status_check_attempted_at") + end +end diff --git a/db/schema.rb b/db/schema.rb index c908991ce66..7dd15040377 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_08_03_143215) do +ActiveRecord::Schema[7.0].define(version: 2023_08_14_130423) do # These are extensions that must be enabled in order to support this database enable_extension "pg_stat_statements" enable_extension "pgcrypto" @@ -311,7 +311,7 @@ t.datetime "status_check_completed_at", comment: "The last time a status check was successfully completed" t.boolean "ready_for_status_check", default: false t.datetime "notification_sent_at", comment: "The time a notification was sent" - t.datetime "last_batch_claim_at" + t.datetime "last_batch_claimed_at" t.index ["profile_id"], name: "index_in_person_enrollments_on_profile_id" t.index ["ready_for_status_check"], name: "index_in_person_enrollments_on_ready_for_status_check", where: "(ready_for_status_check = true)" t.index ["status_check_attempted_at"], name: "index_in_person_enrollments_on_status_check_attempted_at", where: "(status = 1)" diff --git a/spec/jobs/get_usps_proofing_results_job_spec.rb b/spec/jobs/get_usps_proofing_results_job_spec.rb index 64dd9ae50ab..0a8df4ac944 100644 --- a/spec/jobs/get_usps_proofing_results_job_spec.rb +++ b/spec/jobs/get_usps_proofing_results_job_spec.rb @@ -231,9 +231,9 @@ let(:pending_enrollment) { pending_enrollments.first } before do - enrollment_record = InPersonEnrollment.where(id: pending_enrollments.map(&:id)) + enrollment_records = InPersonEnrollment.where(id: pending_enrollments.map(&:id)) allow(InPersonEnrollment).to receive(:needs_usps_status_check). - and_return(enrollment_record) + and_return(enrollment_records) allow(IdentityConfig.store).to receive(:in_person_proofing_enabled).and_return(true) end @@ -1128,8 +1128,6 @@ ) end before do - # allow(InPersonEnrollment).to receive(:needs_usps_status_check). - # and_return([pending_enrollment]) allow(IdentityConfig.store).to receive(:in_person_proofing_enabled).and_return(true) end diff --git a/spec/models/in_person_enrollment_spec.rb b/spec/models/in_person_enrollment_spec.rb index 05ccf556d11..372604202c0 100644 --- a/spec/models/in_person_enrollment_spec.rb +++ b/spec/models/in_person_enrollment_spec.rb @@ -148,7 +148,7 @@ let!(:failing_enrollment) { create(:in_person_enrollment, :failed) } let!(:expired_enrollment) { create(:in_person_enrollment, :expired) } let!(:checked_pending_enrollment) do - create(:in_person_enrollment, :pending, last_batch_claim_at: Time.zone.now) + create(:in_person_enrollment, :pending, last_batch_claimed_at: Time.zone.now) end let!(:needy_enrollments) do [ @@ -193,7 +193,7 @@ end let!(:checked_pending_enrollment) do create( - :in_person_enrollment, :pending, last_batch_claim_at: Time.zone.now, + :in_person_enrollment, :pending, last_batch_claimed_at: Time.zone.now, ready_for_status_check: true ) end