Fail tests for dirty tracking type casting with datetime (possible with BigDecimal too)
adis-io opened this issue · 0 comments
adis-io commented
Steps to reproduce
- save snippet below, name it like
json_typed_store_bug.rb
ruby json_typed_store_bug.rb
begin
require 'bundler/inline'
rescue LoadError => e
$stderr.puts 'Bundler version 1.10 or later is required. Please update your Bundler'
raise e
end
gemfile(true) do
source 'https://rubygems.org'
gem 'rails', '4.2.7.1'
gem 'pg', '0.19.0'
gem 'factory_bot_rails'
gem 'activerecord-typedstore', '1.1.3'
end
require 'active_record'
require 'action_controller/railtie'
ActiveRecord::Base.establish_connection(
adapter: 'postgresql', database: 'ovkovckm',
host: 'baasu.db.elephantsql.com', username: 'ovkovckm',
password: '866lKeR6FSUgG_fEfo1e13XpYu0zZ-Iz'
)
ActiveRecord::Base.logger = Logger.new(STDOUT)
ActiveRecord::Schema.define do
create_table :users, force: true do |t|
t.json :extra_attrs, default: {}, null: false
t.timestamps
end
end
module JSONCoder
extend self
def load(data)
data || {}
end
def dump(data)
data || {}
end
end
class User < ActiveRecord::Base
typed_store :extra_attrs, coder: JSONCoder do |s|
s.datetime :birth_date
end
end
FactoryBot.define do
factory :user do
end
end
require 'minitest/autorun'
class TypedStoreTest < Minitest::Test
def test_dirty_changes
user = FactoryBot.create(:user, birth_date: '1970-01-01T00:00:00.000Z')
old_birth_date = user.birth_date
assert_equal(false, user.changed?)
user.assign_attributes(birth_date: '1970-01-01T00:00:00.000Z')
new_birth_date = user.birth_date
assert_equal(false, user.changed?)
assert_equal(old_birth_date, new_birth_date)
end
end
Expected behaviour
two asserts are passing
Actual behaviour
one assert is failing