From 153c8812a24eafbbe537cabd37fee5322c8d5d24 Mon Sep 17 00:00:00 2001 From: Koichi ITO Date: Tue, 1 Nov 2022 15:22:03 +0900 Subject: [PATCH] [Fix #848] Fix a false positive for `Rails/FreezeTime` Fixes #848. This PR fixes a false positive for `Rails/FreezeTime` when using `travel_to` with an argument of `Time.new(...).in_time_zone`. --- changelog/fix_false_positive_for_rails_freeze_time.md | 1 + lib/rubocop/cop/rails/freeze_time.rb | 8 +++++--- spec/rubocop/cop/rails/freeze_time_spec.rb | 6 ++++++ 3 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 changelog/fix_false_positive_for_rails_freeze_time.md diff --git a/changelog/fix_false_positive_for_rails_freeze_time.md b/changelog/fix_false_positive_for_rails_freeze_time.md new file mode 100644 index 0000000000..1f7a547967 --- /dev/null +++ b/changelog/fix_false_positive_for_rails_freeze_time.md @@ -0,0 +1 @@ +* [#848](https://github.com/rubocop/rubocop-rails/issues/848): Fix a false positive for `Rails/FreezeTime` when using `travel_to` with an argument of `Time.new(...).in_time_zone`. ([@koic][]) diff --git a/lib/rubocop/cop/rails/freeze_time.rb b/lib/rubocop/cop/rails/freeze_time.rb index 57afdacebc..40fb6024c3 100644 --- a/lib/rubocop/cop/rails/freeze_time.rb +++ b/lib/rubocop/cop/rails/freeze_time.rb @@ -29,7 +29,7 @@ class FreezeTime < Base MSG = 'Use `freeze_time` instead of `travel_to`.' NOW_METHODS = %i[now new current].freeze - CONV_METHODS = %i[to_time in_time_zone].freeze + CONVERT_METHODS = %i[to_time in_time_zone].freeze RESTRICT_ON_SEND = %i[travel_to].freeze # @!method time_now?(node) @@ -63,9 +63,11 @@ def current_time?(node, method_name) end def current_time_with_convert?(node, method_name) - return false unless CONV_METHODS.include?(method_name) + return false unless CONVERT_METHODS.include?(method_name) + + child_node, child_method_name, time_argument = *node.children + return if time_argument - child_node, child_method_name = *node.children current_time?(child_node, child_method_name) end end diff --git a/spec/rubocop/cop/rails/freeze_time_spec.rb b/spec/rubocop/cop/rails/freeze_time_spec.rb index 120e8d6b19..e54a9a53d7 100644 --- a/spec/rubocop/cop/rails/freeze_time_spec.rb +++ b/spec/rubocop/cop/rails/freeze_time_spec.rb @@ -98,6 +98,12 @@ RUBY end + it 'does not register an offense when using `travel_to` with an argument of `Time.new(...).in_time_zone`' do + expect_no_offenses(<<~RUBY) + travel_to(Time.new(2019, 4, 3, 12, 30).in_time_zone) + RUBY + end + it 'does not register an offense when using `travel_to` without argument' do expect_no_offenses(<<~RUBY) travel_to