diff --git a/app/models/in_person_enrollment.rb b/app/models/in_person_enrollment.rb index 313a133d6fa..7903768ffdb 100644 --- a/app/models/in_person_enrollment.rb +++ b/app/models/in_person_enrollment.rb @@ -136,8 +136,8 @@ def due_date end def days_to_due_date - today = DateTime.now - (today...due_date).count + today = Time.zone.now.utc + (due_date - today).seconds.in_days.to_i end def eligible_for_notification? diff --git a/spec/models/in_person_enrollment_spec.rb b/spec/models/in_person_enrollment_spec.rb index 1d2bd5ac76b..92185c925fd 100644 --- a/spec/models/in_person_enrollment_spec.rb +++ b/spec/models/in_person_enrollment_spec.rb @@ -386,7 +386,6 @@ describe 'due_date and days_to_due_date' do let(:validity_in_days) { 10 } - let(:days_ago_established_at) { 7 } before do allow(IdentityConfig.store). @@ -400,10 +399,10 @@ freeze_time do enrollment = create( :in_person_enrollment, - enrollment_established_at: days_ago_established_at.days.ago, + enrollment_established_at: (validity_in_days - 3).days.ago, ) expect(enrollment.due_date).to( - eq((validity_in_days - days_ago_established_at).days.from_now), + eq(3.days.from_now), ) end end @@ -412,9 +411,50 @@ freeze_time do enrollment = create( :in_person_enrollment, - enrollment_established_at: days_ago_established_at.days.ago, + enrollment_established_at: (validity_in_days - 3).days.ago, ) - expect(enrollment.days_to_due_date).to eq(validity_in_days - days_ago_established_at) + expect(enrollment.days_to_due_date).to eq(3) + end + end + + context 'check edges to confirm date calculation is correct' do + it 'returns the correct due date and days to due date with 1 day left' do + freeze_time do + enrollment = create( + :in_person_enrollment, + enrollment_established_at: (validity_in_days - 1).days.ago, + ) + expect(enrollment.days_to_due_date).to eq(1) + expect(enrollment.due_date).to( + eq(Time.zone.now + 1.day), + ) + end + end + + it 'returns the correct due date and days to due date with 0.5 days left' do + freeze_time do + enrollment = create( + :in_person_enrollment, + enrollment_established_at: (validity_in_days - 0.5).days.ago, + ) + expect(enrollment.days_to_due_date).to eq(0) + expect(enrollment.due_date).to( + eq(Time.zone.now + 0.5.days), + ) + end + end + + it 'returns the correct due date and days to due date with 0 days left' do + freeze_time do + enrollment = create( + :in_person_enrollment, + enrollment_established_at: validity_in_days.days.ago, + ) + expect(enrollment.days_to_due_date).to eq(0) + expect(enrollment.due_date).to( + eq(Time.zone.now), + ) + end end end end