lib/spreewald/timecop_steps.rb in spreewald-0.6.5 vs lib/spreewald/timecop_steps.rb in spreewald-0.6.6
- old
+ new
@@ -6,42 +6,73 @@
# See [this article](https://makandracards.com/makandra/1222-useful-cucumber-steps-to-travel-through-time-with-timecop) for details.
if defined?(Timecop)
+ module TimecopHarness
+
+ # When you have to make your rails app time zone aware you have to go 100%
+ # otherwise you are better off ignoring time zones at all.
+ # https://makandracards.com/makandra/8723-guide-to-localizing-a-rails-application
+
+ def use_timezones?
+ active_record_loaded = defined?(ActiveRecord::Base)
+ (!active_record_loaded || ActiveRecord::Base.default_timezone != :local) && Time.zone
+ end
+
+ def parse_time(str)
+ if use_timezones?
+ Time.zone.parse(str)
+ else
+ Time.parse(str)
+ end
+ end
+
+ def current_time
+ if use_timezones?
+ Time.current
+ else
+ Time.now
+ end
+ end
+
+ end
+
+ World(TimecopHarness)
+
# Example:
#
# Given the date is 2012-02-10
# Given the time is 2012-02-10 13:40
When /^the (?:date|time) is "?(\d{4}-\d{2}-\d{2}(?: \d{1,2}:\d{2})?)"?$/ do |time|
- Timecop.travel(Time.zone ? Time.zone.parse(time) : Time.parse(time))
+ Timecop.travel(parse_time(time))
end
# Example:
#
# Given the time is 13:40
- When /^the time is "?(\d{1,2}:\d{2})"?$/ do |time|
- Timecop.travel(Time.zone ? Time.zone.parse(time) : Time.parse(time)) # date will be today
+ When /^the time is "?(\d{1,2}:\d{2})"?$/ do |time_without_date|
+ Timecop.travel(parse_time(time_without_date)) # date will be today
end
# Example:
#
# When it is 10 minutes later
# When it is a few hours earlier
When /^it is (\d+|a|some|a few) (seconds?|minutes?|hours?|days?|weeks?|months?|years?) (later|earlier)$/ do |amount, unit, direction|
amount = case amount
- when 'a'
- 1
- when 'some', 'a few'
- 10
- else
- amount.to_i
- end
+ when 'a'
+ 1
+ when 'some', 'a few'
+ 10
+ else
+ amount.to_i
+ end
amount = -amount if direction == 'earlier'
- Timecop.travel(Time.current + amount.send(unit))
+ Timecop.travel(current_time + amount.send(unit))
end
After do
Timecop.return
end
-end
+end
\ No newline at end of file