test/unit/serializer_test.rb in paper_trail-2.7.0 vs test/unit/serializer_test.rb in paper_trail-2.7.1
- old
+ new
@@ -1,71 +1,74 @@
require 'test_helper'
-class CustomSerializer
- require 'json'
- def self.dump(object_hash)
- JSON.dump object_hash
- end
-
- def self.load(string)
- JSON.parse string
- end
-end
-
class SerializerTest < ActiveSupport::TestCase
context 'YAML Serializer' do
setup do
Fluxor.instance_eval <<-END
has_paper_trail
END
@fluxor = Fluxor.create :name => 'Some text.'
+ @original_fluxor_attributes = @fluxor.send(:item_before_change).attributes # this is exactly what PaperTrail serializes
@fluxor.update_attributes :name => 'Some more text.'
end
should 'work with the default yaml serializer' do
# Normal behaviour
assert_equal 2, @fluxor.versions.length
assert_nil @fluxor.versions[0].reify
assert_equal 'Some text.', @fluxor.versions[1].reify.name
-
# Check values are stored as YAML.
- hash = {"widget_id" => nil,"name" =>"Some text.","id" =>1}
- assert_equal YAML.dump(hash), @fluxor.versions[1].object
- assert_equal hash, YAML.load(@fluxor.versions[1].object)
-
+ assert_equal @original_fluxor_attributes, YAML.load(@fluxor.versions[1].object)
+ # This test can't consistently pass in Ruby1.8 because hashes do no preserve order, which means the order of the
+ # attributes in the YAML can't be ensured.
+ if RUBY_VERSION.to_f >= 1.9
+ assert_equal YAML.dump(@original_fluxor_attributes), @fluxor.versions[1].object
+ end
end
end
context 'Custom Serializer' do
setup do
- PaperTrail.config.serializer = CustomSerializer
+ PaperTrail.configure do |config|
+ config.serializer = PaperTrail::Serializers::Json
+ end
Fluxor.instance_eval <<-END
has_paper_trail
END
@fluxor = Fluxor.create :name => 'Some text.'
+ @original_fluxor_attributes = @fluxor.send(:item_before_change).attributes # this is exactly what PaperTrail serializes
@fluxor.update_attributes :name => 'Some more text.'
end
teardown do
PaperTrail.config.serializer = PaperTrail::Serializers::Yaml
end
- should 'work with custom serializer' do
+ should 'reify with custom serializer' do
# Normal behaviour
assert_equal 2, @fluxor.versions.length
assert_nil @fluxor.versions[0].reify
assert_equal 'Some text.', @fluxor.versions[1].reify.name
# Check values are stored as JSON.
- hash = {"widget_id" => nil,"name" =>"Some text.","id" =>1}
- assert_equal JSON.dump(hash), @fluxor.versions[1].object
- assert_equal hash, JSON.parse(@fluxor.versions[1].object)
+ assert_equal @original_fluxor_attributes, ActiveSupport::JSON.decode(@fluxor.versions[1].object)
+ # This test can't consistently pass in Ruby1.8 because hashes do no preserve order, which means the order of the
+ # attributes in the JSON can't be ensured.
+ if RUBY_VERSION.to_f >= 1.9
+ assert_equal ActiveSupport::JSON.encode(@original_fluxor_attributes), @fluxor.versions[1].object
+ end
+ end
+ should 'store object_changes' do
+ initial_changeset = {"name" => [nil, "Some text."], "id" => [nil, 1]}
+ second_changeset = {"name"=>["Some text.", "Some more text."]}
+ assert_equal initial_changeset, @fluxor.versions[0].changeset
+ assert_equal second_changeset, @fluxor.versions[1].changeset
end
end
end