From 28f7eb078993b5f2d0a47f64bc6ccf4ed0ec2a2a Mon Sep 17 00:00:00 2001 From: mayra lucia navarro Date: Thu, 22 Jun 2023 03:12:04 -0500 Subject: [PATCH] Fix #2093 Allow custom start for forward date generator *Allow set from as String or Date type --- lib/faker/default/date.rb | 18 +++++++++++++----- test/faker/default/test_faker_date.rb | 21 +++++++++++++++++++++ 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/lib/faker/default/date.rb b/lib/faker/default/date.rb index 6d1997c1af..9fee0f7e38 100644 --- a/lib/faker/default/date.rb +++ b/lib/faker/default/date.rb @@ -53,18 +53,26 @@ def between_except(from:, to:, excepted:) ## # Produce a random date in the future (up to N days). # + # @param from [Integer] The start of the usable forward date range. # @param days [Integer] The maximum number of days to go into the future. # @return [Date] # - # @example + # @example if used with or without Rails (Active Support) # Faker::Date.forward(days: 23) #=> # # + # @example if used with Rails (Active Support) + # Faker::Date.forward(from: Date.current, days: 17) #=> # + # + # @example if used with or without Rails (Active Support) + # Faker::Date.forward(from: '2022-06-03', days: 10) #=> # + # # @faker.version 1.0.0 - def forward(days: 365) - from = ::Date.today + 1 - to = ::Date.today + days + def forward(from: ::Date.today, days: 365) + start_date = get_date_object(from) + since = start_date + 1 + to = start_date + days - between(from: from, to: to).to_date + between(from: since, to: to).to_date end ## diff --git a/test/faker/default/test_faker_date.rb b/test/faker/default/test_faker_date.rb index d509bd85dc..03be200a9c 100644 --- a/test/faker/default/test_faker_date.rb +++ b/test/faker/default/test_faker_date.rb @@ -63,6 +63,27 @@ def test_forward end end + def test_forward_with_from_parameter + from = Date.parse('2012-01-01') + five_days_after_from = from + 5 + random_date = @tester.forward(from: from, days: 5) + + assert random_date > from, "Expected > \"#{from}\", but got #{random_date}" + assert five_days_after_from > from, "Expected < \"#{from}\", but got #{random_date}" + end + + def test_forward_with_string_parameter + from = '2012-01-01' + + from_date = Date.parse(from) + + 100.times do + random_date = @tester.forward(from: from, days: 5) + + assert random_date > from_date, "Expected > \"#{from}\", but got #{random_date}" + end + end + def test_backward today = Date.today