From 1ae7d5de73c3ad2d351530f29600034bfe0b1409 Mon Sep 17 00:00:00 2001 From: Oleksii Kuznietsov Date: Tue, 17 Sep 2024 09:44:42 +0100 Subject: [PATCH] Parse datetime in UTC by default instead of system time Time.parse("2024-09-17 10:00:00") is getting system time zone assigned e.g. resulting in "2024-08-17 10:00:00 +03:00" So based on system time this could be a differnt time which is incorrect given the time provided by eBay is in UTC --- lib/ebay.rb | 3 +++ lib/support/xml_mapping/date_time_node.rb | 2 +- lib/support/xml_mapping/time_node.rb | 2 +- test/unit/ebay_test.rb | 6 +++--- test/unit/xml_mapping_date_time_node_test.rb | 11 +++++------ test/unit/xml_mapping_test.rb | 3 +-- test/unit/xml_mapping_time_node_test.rb | 9 ++++----- 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/lib/ebay.rb b/lib/ebay.rb index 4d678834..c9e91385 100644 --- a/lib/ebay.rb +++ b/lib/ebay.rb @@ -16,6 +16,9 @@ require 'active_support' require 'active_support/core_ext' +require 'active_support/time_with_zone' + +Time.zone_default = Time.find_zone!('UTC') # Include the additional XML::Mapping node types require 'support/xml_mapping' diff --git a/lib/support/xml_mapping/date_time_node.rb b/lib/support/xml_mapping/date_time_node.rb index e0c19379..b2795152 100644 --- a/lib/support/xml_mapping/date_time_node.rb +++ b/lib/support/xml_mapping/date_time_node.rb @@ -5,7 +5,7 @@ def initialize_impl(path) @path = XML::XXPath.new(path) end def extract_attr_value(xml) # :nodoc: - Time.parse(default_when_xpath_err{ @path.first(xml).text }) + Time.zone.parse(default_when_xpath_err{ @path.first(xml).text }) end def set_attr_value(xml, value) # :nodoc: raise "Not a Time object: #{value}" unless value.is_a?(Time) diff --git a/lib/support/xml_mapping/time_node.rb b/lib/support/xml_mapping/time_node.rb index b82263a1..15f76344 100644 --- a/lib/support/xml_mapping/time_node.rb +++ b/lib/support/xml_mapping/time_node.rb @@ -5,7 +5,7 @@ def initialize_impl(path) @path = XML::XXPath.new(path) end def extract_attr_value(xml) # :nodoc: - Time.parse(default_when_xpath_err{ @path.first(xml).text }) + Time.zone.parse(default_when_xpath_err{ @path.first(xml).text }) end def set_attr_value(xml, value) # :nodoc: raise "Not a Time object: #{value}" unless value.is_a?(Time) diff --git a/test/unit/ebay_test.rb b/test/unit/ebay_test.rb index 2fefd5cb..f173bff4 100644 --- a/test/unit/ebay_test.rb +++ b/test/unit/ebay_test.rb @@ -64,7 +64,7 @@ def test_header_uses_overridden_site_id def test_override_auth_token ebay = Api.new(:auth_token => 'OVERRIDE') - assert_equal 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', Api.auth_token + assert_equal 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', Api.auth_token assert_equal 'OVERRIDE', ebay.auth_token end @@ -79,14 +79,14 @@ def test_successful_request Ebay::HttpMock.respond_with(@success) response = @ebay.get_ebay_official_time assert response.success? - assert_equal Time.parse('2006-07-05T14:23:03.399Z'), response.timestamp + assert_equal Time.zone.parse('2006-07-05T14:23:03.399Z'), response.timestamp end def test_request_with_block Ebay::HttpMock.respond_with(@success) response = @ebay.get_ebay_official_time{ } assert response.success? - assert_equal Time.parse('2006-07-05T14:23:03.399Z'), response.timestamp + assert_equal Time.zone.parse('2006-07-05T14:23:03.399Z'), response.timestamp end def test_raise_on_error_with_errors diff --git a/test/unit/xml_mapping_date_time_node_test.rb b/test/unit/xml_mapping_date_time_node_test.rb index 6688322e..d69f0dc6 100644 --- a/test/unit/xml_mapping_date_time_node_test.rb +++ b/test/unit/xml_mapping_date_time_node_test.rb @@ -6,7 +6,7 @@ class Widget end class DateTimeNodeTest < Test::Unit::TestCase - + def setup @xml = <<-END @@ -18,13 +18,13 @@ def setup def test_load_from_xml item = Widget.load_from_xml(REXML::Document.new(@xml).root) - assert_instance_of Time, item.shipped_on - assert_equal Time.parse('2006-07-21T21:52:37.000Z'), item.shipped_on - end + assert_instance_of ActiveSupport::TimeWithZone, item.shipped_on + assert_equal Time.zone.parse('2006-07-21T21:52:37.000Z'), item.shipped_on + end def test_save_to_xml widget = Widget.new - widget.shipped_on = Time.parse('2006-07-21T21:52:37.000Z') + widget.shipped_on = Time.zone.parse('2006-07-21T21:52:37.000Z') assert_equal '2006-07-21 21:52:37', widget.save_to_xml.to_s end @@ -34,4 +34,3 @@ def test_set_with_non_time_object assert_raise(RuntimeError){ widget.save_to_xml } end end - diff --git a/test/unit/xml_mapping_test.rb b/test/unit/xml_mapping_test.rb index ccccb5bb..a64d2207 100644 --- a/test/unit/xml_mapping_test.rb +++ b/test/unit/xml_mapping_test.rb @@ -19,10 +19,9 @@ def assert_valid_abstract_response(response) ack = 'Success' version = '467' build = 'e467_core_Bundled_3145691_R1' - assert_equal Time.parse(timestamp), response.timestamp + assert_equal Time.zone.parse(timestamp), response.timestamp assert_equal ack, response.ack assert_equal version, response.version assert_equal build, response.build end end - diff --git a/test/unit/xml_mapping_time_node_test.rb b/test/unit/xml_mapping_time_node_test.rb index 4843d22b..92fe5c9a 100644 --- a/test/unit/xml_mapping_time_node_test.rb +++ b/test/unit/xml_mapping_time_node_test.rb @@ -18,13 +18,13 @@ def setup def test_load_from_xml item = Widget.load_from_xml(REXML::Document.new(@xml).root) - assert_instance_of Time, item.opening_time - assert_equal Time.parse('T21:52:37.000Z'), item.opening_time - end + assert_instance_of ActiveSupport::TimeWithZone, item.opening_time + assert_equal Time.zone.parse('T21:52:37.000Z'), item.opening_time + end def test_save_to_xml widget = Widget.new - widget.opening_time = Time.parse('T21:52:37.000Z') + widget.opening_time = Time.zone.parse('T21:52:37.000Z') assert_equal '21:52:37', widget.save_to_xml.to_s end @@ -34,4 +34,3 @@ def test_set_with_non_time_object assert_raise(RuntimeError){ widget.save_to_xml } end end -