Last active
May 16, 2016 11:34
-
-
Save WaKeMaTTa/1f960f58f3a001c9ae78bedf539d87cc to your computer and use it in GitHub Desktop.
Bug report : Enum and PaperTrail
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Issues https://github.com/airblade/paper_trail/issues/798 | |
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 | |
ruby "2.2.5" | |
source "https://rubygems.org" | |
gem "activerecord", "4.2.6" | |
gem "minitest", "5.8.4" | |
gem "paper_trail", "5.0.1", require: false | |
gem "sqlite3" | |
end | |
require "active_record" | |
require "minitest/autorun" | |
require "logger" | |
ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:") | |
ActiveRecord::Base.logger = Logger.new(STDOUT) | |
ActiveRecord::Schema.define do | |
create_table :users, force: true do |t| | |
t.string :email, null: false | |
t.integer :gender, default: 0 | |
t.timestamps null: false | |
end | |
create_table :versions do |t| | |
t.string :item_type, null: false | |
t.integer :item_id, null: false | |
t.string :event, null: false | |
t.string :whodunnit | |
t.text :object, limit: 1_073_741_823 | |
t.text :object_changes, limit: 1_073_741_823 | |
t.integer :transaction_id | |
t.datetime :created_at | |
end | |
add_index :versions, [:item_type, :item_id] | |
add_index :versions, [:transaction_id] | |
create_table :version_associations do |t| | |
t.integer :version_id | |
t.string :foreign_key_name, null: false | |
t.integer :foreign_key_id | |
end | |
add_index :version_associations, [:version_id] | |
add_index :version_associations, [:foreign_key_name, :foreign_key_id], | |
name: "index_version_associations_on_foreign_key" | |
end | |
# Require `paper_trail.rb` after the `version_associations` table | |
# exists so that PT will track associations. | |
require "paper_trail" | |
PaperTrail.config.track_associations = true | |
# Include your models here. Please only include the minimum code necessary to | |
# reproduce your issue. | |
class User < ActiveRecord::Base | |
has_paper_trail | |
enum gender: { male: 0, female: 1 } | |
end | |
class BugTest < ActiveSupport::TestCase | |
def test_enum | |
user = User.create(email: "[email protected]", gender: :male) | |
user.save | |
assert_equal 1, user.versions.count | |
assert_equal "male", user.gender | |
user.touch_with_version | |
assert_equal 2, user.versions.count | |
# Fails: expected to be "male" but it returns nil | |
assert_equal "male", user.previous_version.gender | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Issues https://github.com/airblade/paper_trail/issues/798 | |
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 | |
ruby "2.3.1" | |
source "https://rubygems.org" | |
gem "activerecord", "4.2.6" | |
gem "minitest", "5.8.4" | |
gem "paper_trail", "5.0.1", require: false | |
gem "sqlite3" | |
end | |
require "active_record" | |
require "minitest/autorun" | |
require "logger" | |
ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:") | |
ActiveRecord::Base.logger = Logger.new(STDOUT) | |
ActiveRecord::Schema.define do | |
create_table :posts, force: true do |t| | |
t.integer :status, default: 0 | |
t.timestamps null: false | |
end | |
create_table :versions do |t| | |
t.string :item_type, null: false | |
t.integer :item_id, null: false | |
t.string :event, null: false | |
t.string :whodunnit | |
t.text :object, limit: 1_073_741_823 | |
t.text :object_changes, limit: 1_073_741_823 | |
t.integer :transaction_id | |
t.datetime :created_at | |
end | |
add_index :versions, [:item_type, :item_id] | |
add_index :versions, [:transaction_id] | |
create_table :version_associations do |t| | |
t.integer :version_id | |
t.string :foreign_key_name, null: false | |
t.integer :foreign_key_id | |
end | |
add_index :version_associations, [:version_id] | |
add_index :version_associations, [:foreign_key_name, :foreign_key_id], | |
name: "index_version_associations_on_foreign_key" | |
end | |
# Require `paper_trail.rb` after the `version_associations` table | |
# exists so that PT will track associations. | |
require "paper_trail" | |
PaperTrail.config.track_associations = true | |
# Include your models here. Please only include the minimum code necessary to | |
# reproduce your issue. | |
class Post < ActiveRecord::Base | |
has_paper_trail | |
enum status: { draft: 0, published: 1, unpublished: 2 } | |
end | |
class BugTest < ActiveSupport::TestCase | |
def test_post_with_status_enum | |
post = Post.create!(status: "draft") # enum 0 | |
assert_equal 1, post.versions.count | |
post.published! | |
assert_equal 2, post.versions.count | |
assert_equal 0, post.versions[1].object_deserialized["status"] # draft | |
# Not need it because im using sqlite3 | |
#Timecop.travel 1.second.since # because MySQL doesn't do fractional seconds | |
post.touch_with_version | |
assert_equal 3, post.versions.count | |
assert_equal 1, post.versions[2].object_deserialized["status"] # published | |
post.archived! | |
assert_equal 4, post.versions.count | |
assert_equal 1, post.versions[3].object_deserialized["status"] # published | |
assert_equal true, post.previous_version.published? | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment