test/mongo_mapper_test.rb in symmetric-encryption-3.6.0 vs test/mongo_mapper_test.rb in symmetric-encryption-3.7.0

- old
+ new

@@ -1,539 +1,542 @@ -$LOAD_PATH.unshift File.dirname(__FILE__) -require 'mongo_mapper' -require 'test_helper' -require 'symmetric_encryption/extensions/mongo_mapper/plugins/encrypted_key' +begin + require 'mongo_mapper' + require_relative 'test_helper' + require_relative '../lib/symmetric_encryption/extensions/mongo_mapper/plugins/encrypted_key' -# Initialize MongoMapper -config_file = File.join('test', 'config', 'mongo_mapper.yml') -config = YAML.load(ERB.new(File.read(config_file)).result) -MongoMapper.setup(config, 'test', logger: SemanticLogger['Mongo']) + # Initialize MongoMapper + config_file = File.join('test', 'config', 'mongo_mapper.yml') + config = YAML.load(ERB.new(File.read(config_file)).result) + MongoMapper.setup(config, 'test', logger: SemanticLogger['Mongo']) -class MongoMapperUser - include MongoMapper::Document + class MongoMapperUser + include MongoMapper::Document - key :name, String - encrypted_key :bank_account_number, String - encrypted_key :social_security_number, String - encrypted_key :string, String, encrypted: { random_iv: true } - encrypted_key :long_string, String, encrypted: { random_iv: true, compress: true } + key :name, String + encrypted_key :bank_account_number, String + encrypted_key :social_security_number, String + encrypted_key :string, String, encrypted: { random_iv: true } + encrypted_key :long_string, String, encrypted: { random_iv: true, compress: true } - # Valid Types: String, Integer, Float, BigDecimal, DateTime, Time, Date, Hash - encrypted_key :integer_value, Integer - encrypted_key :aliased_integer_value, Integer, encrypted: { encrypt_as: :aiv } - encrypted_key :float_value, Float - encrypted_key :decimal_value, BigDecimal - encrypted_key :datetime_value, DateTime - encrypted_key :time_value, Time - encrypted_key :date_value, Date - encrypted_key :true_value, Boolean - encrypted_key :false_value, Boolean - encrypted_key :data_json, Hash, encrypted: {random_iv: true, compress: true} - encrypted_key :data_yaml, Hash, encrypted: {random_iv: true, compress: true, type: :yaml} + # Valid Types: String, Integer, Float, BigDecimal, DateTime, Time, Date, Hash + encrypted_key :integer_value, Integer + encrypted_key :aliased_integer_value, Integer, encrypted: { encrypt_as: :aiv } + encrypted_key :float_value, Float + encrypted_key :decimal_value, BigDecimal + encrypted_key :datetime_value, DateTime + encrypted_key :time_value, Time + encrypted_key :date_value, Date + encrypted_key :true_value, Boolean + encrypted_key :false_value, Boolean + encrypted_key :data_json, Hash, encrypted: {random_iv: true, compress: true} + encrypted_key :data_yaml, Hash, encrypted: {random_iv: true, compress: true, type: :yaml} - validates :encrypted_bank_account_number, symmetric_encryption: true - validates :encrypted_social_security_number, symmetric_encryption: true -end + validates :encrypted_bank_account_number, symmetric_encryption: true + validates :encrypted_social_security_number, symmetric_encryption: true + end -# -# Unit Tests for MongoMapper -# -class MongoMapperTest < Test::Unit::TestCase - context 'MongoMapperUser' do - setup do - @bank_account_number = "1234567890" - @bank_account_number_encrypted = "QEVuQwIAL94ArJeFlJrZp6SYsvoOGA==" + # + # Unit Tests for MongoMapper + # + class MongoMapperTest < Minitest::Test + context 'MongoMapperUser' do + setup do + @bank_account_number = "1234567890" + @bank_account_number_encrypted = "QEVuQwIAL94ArJeFlJrZp6SYsvoOGA==" - @social_security_number = "987654321" - @social_security_number_encrypted = "QEVuQwIAS+8X1NRrqdfEIQyFHVPuVA==" + @social_security_number = "987654321" + @social_security_number_encrypted = "QEVuQwIAS+8X1NRrqdfEIQyFHVPuVA==" - @integer = 32768 - @integer_encrypted = "FA3smFQEKqB/ITv+A0xACg==" + @integer = 32768 + @integer_encrypted = "FA3smFQEKqB/ITv+A0xACg==" - @float = 0.9867 - @float_encrypted = "z7Pwt2JDp74d+u0IXFAdrQ==" + @float = 0.9867 + @float_encrypted = "z7Pwt2JDp74d+u0IXFAdrQ==" - @date = Date.parse('20120320') - @date_encrypted = "WTkSPHo5ApSSHBJMxxWt2A==" + @date = Date.parse('20120320') + @date_encrypted = "WTkSPHo5ApSSHBJMxxWt2A==" - @string = "A string containing some data to be encrypted with a random initialization vector" - @long_string = "A string containing some data to be encrypted with a random initialization vector and compressed since it takes up so much space in plain text form" + @string = "A string containing some data to be encrypted with a random initialization vector" + @long_string = "A string containing some data to be encrypted with a random initialization vector and compressed since it takes up so much space in plain text form" - @integer_value = 12 - @float_value = 88.12345 - @decimal_value = BigDecimal.new("22.51") - @datetime_value = DateTime.new(2001, 11, 26, 20, 55, 54, "-5") - @time_value = Time.new(2013, 01, 01, 22, 30, 00, "-04:00") - @date_value = Date.new(1927, 04, 02) - @h = { a: 'A', b: 'B' } + @integer_value = 12 + @float_value = 88.12345 + @decimal_value = BigDecimal.new("22.51") + @datetime_value = DateTime.new(2001, 11, 26, 20, 55, 54, "-5") + @time_value = Time.new(2013, 01, 01, 22, 30, 00, "-04:00") + @date_value = Date.new(1927, 04, 02) + @h = { a: 'A', b: 'B' } - @user = MongoMapperUser.new( - encrypted_bank_account_number: @bank_account_number_encrypted, - encrypted_social_security_number: @social_security_number_encrypted, - name: "Joe Bloggs", - # data type specific fields - integer_value: @integer_value, - aliased_integer_value: @integer_value, - float_value: @float_value, - decimal_value: @decimal_value, - datetime_value: @datetime_value, - time_value: @time_value, - date_value: @date_value, - true_value: true, - false_value: false, - data_yaml: @h.dup, - data_json: @h.dup - ) - end + @user = MongoMapperUser.new( + encrypted_bank_account_number: @bank_account_number_encrypted, + encrypted_social_security_number: @social_security_number_encrypted, + name: "Joe Bloggs", + # data type specific fields + integer_value: @integer_value, + aliased_integer_value: @integer_value, + float_value: @float_value, + decimal_value: @decimal_value, + datetime_value: @datetime_value, + time_value: @time_value, + date_value: @date_value, + true_value: true, + false_value: false, + data_yaml: @h.dup, + data_json: @h.dup + ) + end - should "have encrypted methods" do - assert_equal true, @user.respond_to?(:encrypted_bank_account_number) - assert_equal true, @user.respond_to?(:encrypted_social_security_number) - assert_equal true, @user.respond_to?(:encrypted_string) - assert_equal true, @user.respond_to?(:encrypted_long_string) - assert_equal false, @user.respond_to?(:encrypted_name) + should "have encrypted methods" do + assert_equal true, @user.respond_to?(:encrypted_bank_account_number) + assert_equal true, @user.respond_to?(:encrypted_social_security_number) + assert_equal true, @user.respond_to?(:encrypted_string) + assert_equal true, @user.respond_to?(:encrypted_long_string) + assert_equal false, @user.respond_to?(:encrypted_name) - assert_equal true, @user.respond_to?(:encrypted_bank_account_number=) - assert_equal true, @user.respond_to?(:encrypted_social_security_number=) - assert_equal true, @user.respond_to?(:encrypted_string=) - assert_equal true, @user.respond_to?(:encrypted_long_string=) - assert_equal false, @user.respond_to?(:encrypted_name=) - end + assert_equal true, @user.respond_to?(:encrypted_bank_account_number=) + assert_equal true, @user.respond_to?(:encrypted_social_security_number=) + assert_equal true, @user.respond_to?(:encrypted_string=) + assert_equal true, @user.respond_to?(:encrypted_long_string=) + assert_equal false, @user.respond_to?(:encrypted_name=) + end - should "have unencrypted methods" do - assert_equal true, @user.respond_to?(:bank_account_number) - assert_equal true, @user.respond_to?(:social_security_number) - assert_equal true, @user.respond_to?(:string) - assert_equal true, @user.respond_to?(:long_string) - assert_equal true, @user.respond_to?(:name) + should "have unencrypted methods" do + assert_equal true, @user.respond_to?(:bank_account_number) + assert_equal true, @user.respond_to?(:social_security_number) + assert_equal true, @user.respond_to?(:string) + assert_equal true, @user.respond_to?(:long_string) + assert_equal true, @user.respond_to?(:name) - assert_equal true, @user.respond_to?(:bank_account_number=) - assert_equal true, @user.respond_to?(:social_security_number=) - assert_equal true, @user.respond_to?(:string=) - assert_equal true, @user.respond_to?(:long_string=) - assert_equal true, @user.respond_to?(:name=) - end + assert_equal true, @user.respond_to?(:bank_account_number=) + assert_equal true, @user.respond_to?(:social_security_number=) + assert_equal true, @user.respond_to?(:string=) + assert_equal true, @user.respond_to?(:long_string=) + assert_equal true, @user.respond_to?(:name=) + end - should "support aliased fields" do - assert_equal true, @user.respond_to?(:aliased_integer_value=) - assert_equal true, @user.respond_to?(:aliased_integer_value) - end + should "support aliased fields" do + assert_equal true, @user.respond_to?(:aliased_integer_value=) + assert_equal true, @user.respond_to?(:aliased_integer_value) + end - should "have unencrypted values" do - assert_equal @bank_account_number, @user.bank_account_number - assert_equal @social_security_number, @user.social_security_number - end + should "have unencrypted values" do + assert_equal @bank_account_number, @user.bank_account_number + assert_equal @social_security_number, @user.social_security_number + end - should "have encrypted values" do - assert_equal @bank_account_number_encrypted, @user.encrypted_bank_account_number - assert_equal @social_security_number_encrypted, @user.encrypted_social_security_number - end + should "have encrypted values" do + assert_equal @bank_account_number_encrypted, @user.encrypted_bank_account_number + assert_equal @social_security_number_encrypted, @user.encrypted_social_security_number + end - should "support same iv" do - @user.social_security_number = @social_security_number - assert first_value = @user.social_security_number - # Assign the same value - @user.social_security_number = @social_security_number - assert_equal first_value, @user.social_security_number - end + should "support same iv" do + @user.social_security_number = @social_security_number + assert first_value = @user.social_security_number + # Assign the same value + @user.social_security_number = @social_security_number + assert_equal first_value, @user.social_security_number + end - should "support a random iv" do - @user.string = @string - assert first_value = @user.encrypted_string - # Assign the same value - @user.string = @string.dup - assert_equal true, first_value != @user.encrypted_string - end + should "support a random iv" do + @user.string = @string + assert first_value = @user.encrypted_string + # Assign the same value + @user.string = @string.dup + assert_equal true, first_value != @user.encrypted_string + end - should "support a random iv and compress" do - @user.string = @long_string - @user.long_string = @long_string + should "support a random iv and compress" do + @user.string = @long_string + @user.long_string = @long_string - assert_equal true, (@user.encrypted_long_string.length.to_f / @user.encrypted_string.length) < 0.8 - end + assert_equal true, (@user.encrypted_long_string.length.to_f / @user.encrypted_string.length) < 0.8 + end - should "encrypt" do - user = MongoMapperUser.new - user.bank_account_number = @bank_account_number - assert_equal @bank_account_number, user.bank_account_number - assert_equal @bank_account_number_encrypted, user.encrypted_bank_account_number - end + should "encrypt" do + user = MongoMapperUser.new + user.bank_account_number = @bank_account_number + assert_equal @bank_account_number, user.bank_account_number + assert_equal @bank_account_number_encrypted, user.encrypted_bank_account_number + end - should "all paths should lead to the same result" do - assert_equal @bank_account_number_encrypted, (@user.encrypted_social_security_number = @bank_account_number_encrypted) - assert_equal @bank_account_number, @user.social_security_number - end + should "all paths should lead to the same result" do + assert_equal @bank_account_number_encrypted, (@user.encrypted_social_security_number = @bank_account_number_encrypted) + assert_equal @bank_account_number, @user.social_security_number + end - should "all paths should lead to the same result 2" do - assert_equal @bank_account_number, (@user.social_security_number = @bank_account_number) - assert_equal @bank_account_number_encrypted, @user.encrypted_social_security_number - end + should "all paths should lead to the same result 2" do + assert_equal @bank_account_number, (@user.social_security_number = @bank_account_number) + assert_equal @bank_account_number_encrypted, @user.encrypted_social_security_number + end - should "all paths should lead to the same result, check uninitialized" do - user = MongoMapperUser.new - assert_equal nil, user.social_security_number - assert_equal @bank_account_number, (user.social_security_number = @bank_account_number) - assert_equal @bank_account_number, user.social_security_number - assert_equal @bank_account_number_encrypted, user.encrypted_social_security_number + should "all paths should lead to the same result, check uninitialized" do + user = MongoMapperUser.new + assert_equal nil, user.social_security_number + assert_equal @bank_account_number, (user.social_security_number = @bank_account_number) + assert_equal @bank_account_number, user.social_security_number + assert_equal @bank_account_number_encrypted, user.encrypted_social_security_number - assert_equal nil, (user.social_security_number = nil) - assert_equal nil, user.social_security_number - assert_equal nil, user.encrypted_social_security_number - end + assert_equal nil, (user.social_security_number = nil) + assert_equal nil, user.social_security_number + assert_equal nil, user.encrypted_social_security_number + end - should "allow unencrypted values to be passed to the constructor" do - user = MongoMapperUser.new(bank_account_number: @bank_account_number, social_security_number: @social_security_number) - assert_equal @bank_account_number, user.bank_account_number - assert_equal @social_security_number, user.social_security_number - assert_equal @bank_account_number_encrypted, user.encrypted_bank_account_number - assert_equal @social_security_number_encrypted, user.encrypted_social_security_number - end - - should "allow both encrypted and unencrypted values to be passed to the constructor" do - user = MongoMapperUser.new(encrypted_bank_account_number: @bank_account_number_encrypted, social_security_number: @social_security_number) - assert_equal @bank_account_number, user.bank_account_number - assert_equal @social_security_number, user.social_security_number - assert_equal @bank_account_number_encrypted, user.encrypted_bank_account_number - assert_equal @social_security_number_encrypted, user.encrypted_social_security_number - end - - context "data types" do - setup do - @user.save! - @user_clone = MongoMapperUser.find(@user.id) + should "allow unencrypted values to be passed to the constructor" do + user = MongoMapperUser.new(bank_account_number: @bank_account_number, social_security_number: @social_security_number) + assert_equal @bank_account_number, user.bank_account_number + assert_equal @social_security_number, user.social_security_number + assert_equal @bank_account_number_encrypted, user.encrypted_bank_account_number + assert_equal @social_security_number_encrypted, user.encrypted_social_security_number end - context "aliased fields" do - should "return correct data type" do - @user_clone.aliased_integer_value = "5" - assert_equal 5, @user_clone.aliased_integer_value - end + should "allow both encrypted and unencrypted values to be passed to the constructor" do + user = MongoMapperUser.new(encrypted_bank_account_number: @bank_account_number_encrypted, social_security_number: @social_security_number) + assert_equal @bank_account_number, user.bank_account_number + assert_equal @social_security_number, user.social_security_number + assert_equal @bank_account_number_encrypted, user.encrypted_bank_account_number + assert_equal @social_security_number_encrypted, user.encrypted_social_security_number end - context "integer values" do - should "return correct data type" do - assert_equal @integer_value, @user_clone.integer_value - assert @user.clone.integer_value.kind_of?(Integer) + context "data types" do + setup do + @user.save! + @user_clone = MongoMapperUser.find(@user.id) end - should "coerce data type before save" do - u = MongoMapperUser.new(integer_value: "5") - assert_equal 5, u.integer_value - assert u.integer_value.kind_of?(Integer) + context "aliased fields" do + should "return correct data type" do + @user_clone.aliased_integer_value = "5" + assert_equal 5, @user_clone.aliased_integer_value + end end - should "permit replacing value with nil" do - @user_clone.integer_value = nil - @user_clone.save! + context "integer values" do + should "return correct data type" do + assert_equal @integer_value, @user_clone.integer_value + assert @user.clone.integer_value.kind_of?(Integer) + end - @user.reload - assert_nil @user.integer_value - assert_nil @user.encrypted_integer_value - end + should "coerce data type before save" do + u = MongoMapperUser.new(integer_value: "5") + assert_equal 5, u.integer_value + assert u.integer_value.kind_of?(Integer) + end - should "permit replacing value" do - new_integer_value = 98 - @user_clone.integer_value = new_integer_value - @user_clone.save! + should "permit replacing value with nil" do + @user_clone.integer_value = nil + @user_clone.save! - @user.reload - assert_equal new_integer_value, @user.integer_value - end - end + @user.reload + assert_nil @user.integer_value + assert_nil @user.encrypted_integer_value + end - context "float values" do - should "return correct data type" do - assert_equal @float_value, @user_clone.float_value - assert @user.clone.float_value.kind_of?(Float) - end + should "permit replacing value" do + new_integer_value = 98 + @user_clone.integer_value = new_integer_value + @user_clone.save! - should "coerce data type before save" do - u = MongoMapperUser.new(float_value: "5.6") - assert_equal 5.6, u.float_value - assert u.float_value.kind_of?(Float) + @user.reload + assert_equal new_integer_value, @user.integer_value + end end - should "permit replacing value with nil" do - @user_clone.float_value = nil - @user_clone.save! + context "float values" do + should "return correct data type" do + assert_equal @float_value, @user_clone.float_value + assert @user.clone.float_value.kind_of?(Float) + end - @user.reload - assert_nil @user.float_value - assert_nil @user.encrypted_float_value - end + should "coerce data type before save" do + u = MongoMapperUser.new(float_value: "5.6") + assert_equal 5.6, u.float_value + assert u.float_value.kind_of?(Float) + end - should "permit replacing value" do - new_float_value = 45.4321 - @user_clone.float_value = new_float_value - @user_clone.save! + should "permit replacing value with nil" do + @user_clone.float_value = nil + @user_clone.save! - @user.reload - assert_equal new_float_value, @user.float_value - end - end + @user.reload + assert_nil @user.float_value + assert_nil @user.encrypted_float_value + end - context "decimal values" do - should "return correct data type" do - assert_equal @decimal_value, @user_clone.decimal_value - assert @user.clone.decimal_value.kind_of?(BigDecimal) - end + should "permit replacing value" do + new_float_value = 45.4321 + @user_clone.float_value = new_float_value + @user_clone.save! - should "coerce data type before save" do - u = MongoMapperUser.new(decimal_value: "99.95") - assert_equal BigDecimal.new("99.95"), u.decimal_value - assert u.decimal_value.kind_of?(BigDecimal) + @user.reload + assert_equal new_float_value, @user.float_value + end end - should "permit replacing value with nil" do - @user_clone.decimal_value = nil - @user_clone.save! + context "decimal values" do + should "return correct data type" do + assert_equal @decimal_value, @user_clone.decimal_value + assert @user.clone.decimal_value.kind_of?(BigDecimal) + end - @user.reload - assert_nil @user.decimal_value - assert_nil @user.encrypted_decimal_value - end + should "coerce data type before save" do + u = MongoMapperUser.new(decimal_value: "99.95") + assert_equal BigDecimal.new("99.95"), u.decimal_value + assert u.decimal_value.kind_of?(BigDecimal) + end - should "permit replacing value" do - new_decimal_value = BigDecimal.new("99.95") - @user_clone.decimal_value = new_decimal_value - @user_clone.save! + should "permit replacing value with nil" do + @user_clone.decimal_value = nil + @user_clone.save! - @user.reload - assert_equal new_decimal_value, @user.decimal_value - end - end + @user.reload + assert_nil @user.decimal_value + assert_nil @user.encrypted_decimal_value + end - context "datetime values" do - should "return correct data type" do - assert_equal @datetime_value, @user_clone.datetime_value - assert @user.clone.datetime_value.kind_of?(DateTime) - end + should "permit replacing value" do + new_decimal_value = BigDecimal.new("99.95") + @user_clone.decimal_value = new_decimal_value + @user_clone.save! - should "coerce data type before save" do - now = Time.now - u = MongoMapperUser.new(datetime_value: now) - assert_equal now, u.datetime_value - assert u.datetime_value.kind_of?(DateTime) + @user.reload + assert_equal new_decimal_value, @user.decimal_value + end end - should "permit replacing value with nil" do - @user_clone.datetime_value = nil - @user_clone.save! + context "datetime values" do + should "return correct data type" do + assert_equal @datetime_value, @user_clone.datetime_value + assert @user.clone.datetime_value.kind_of?(DateTime) + end - @user.reload - assert_nil @user.datetime_value - assert_nil @user.encrypted_datetime_value - end + should "coerce data type before save" do + now = Time.now + u = MongoMapperUser.new(datetime_value: now) + assert_equal now, u.datetime_value + assert u.datetime_value.kind_of?(DateTime) + end - should "permit replacing value" do - new_datetime_value = DateTime.new(1998, 10, 21, 8, 33, 28, "+5") - @user_clone.datetime_value = new_datetime_value - @user_clone.save! + should "permit replacing value with nil" do + @user_clone.datetime_value = nil + @user_clone.save! - @user.reload - assert_equal new_datetime_value, @user.datetime_value - end - end + @user.reload + assert_nil @user.datetime_value + assert_nil @user.encrypted_datetime_value + end - context "time values" do - should "return correct data type" do - assert_equal @time_value, @user_clone.time_value - assert @user.clone.time_value.kind_of?(Time) - end + should "permit replacing value" do + new_datetime_value = DateTime.new(1998, 10, 21, 8, 33, 28, "+5") + @user_clone.datetime_value = new_datetime_value + @user_clone.save! - should "coerce data type before save" do - now = Time.now - u = MongoMapperUser.new(time_value: now) - assert_equal now, u.time_value - assert u.time_value.kind_of?(Time) + @user.reload + assert_equal new_datetime_value, @user.datetime_value + end end - should "permit replacing value with nil" do - @user_clone.time_value = nil - @user_clone.save! + context "time values" do + should "return correct data type" do + assert_equal @time_value, @user_clone.time_value + assert @user.clone.time_value.kind_of?(Time) + end - @user.reload - assert_nil @user.time_value - assert_nil @user.encrypted_time_value - end + should "coerce data type before save" do + now = Time.now + u = MongoMapperUser.new(time_value: now) + assert_equal now, u.time_value + assert u.time_value.kind_of?(Time) + end - should "permit replacing value" do - new_time_value = Time.new(1998, 10, 21, 8, 33, 28, "+04:00") - @user_clone.time_value = new_time_value - @user_clone.save! + should "permit replacing value with nil" do + @user_clone.time_value = nil + @user_clone.save! - @user.reload - assert_equal new_time_value, @user.time_value - end - end + @user.reload + assert_nil @user.time_value + assert_nil @user.encrypted_time_value + end - context "date values" do - should "return correct data type" do - assert_equal @date_value, @user_clone.date_value - assert @user.clone.date_value.kind_of?(Date) - end + should "permit replacing value" do + new_time_value = Time.new(1998, 10, 21, 8, 33, 28, "+04:00") + @user_clone.time_value = new_time_value + @user_clone.save! - should "coerce data type before save" do - now = Time.now - u = MongoMapperUser.new(date_value: now) - assert_equal now.to_date, u.date_value - assert u.date_value.kind_of?(Date) + @user.reload + assert_equal new_time_value, @user.time_value + end end - should "permit replacing value with nil" do - @user_clone.date_value = nil - @user_clone.save! + context "date values" do + should "return correct data type" do + assert_equal @date_value, @user_clone.date_value + assert @user.clone.date_value.kind_of?(Date) + end - @user.reload - assert_nil @user.date_value - assert_nil @user.encrypted_date_value - end + should "coerce data type before save" do + now = Time.now + u = MongoMapperUser.new(date_value: now) + assert_equal now.to_date, u.date_value + assert u.date_value.kind_of?(Date) + end - should "permit replacing value" do - new_date_value = Date.new(1998, 10, 21) - @user_clone.date_value = new_date_value - @user_clone.save! + should "permit replacing value with nil" do + @user_clone.date_value = nil + @user_clone.save! - @user.reload - assert_equal new_date_value, @user.date_value - end - end + @user.reload + assert_nil @user.date_value + assert_nil @user.encrypted_date_value + end - context "true values" do - should "return correct data type" do - assert_equal true, @user_clone.true_value - assert @user.clone.true_value.kind_of?(TrueClass) - end + should "permit replacing value" do + new_date_value = Date.new(1998, 10, 21) + @user_clone.date_value = new_date_value + @user_clone.save! - should "coerce data type before save" do - u = MongoMapperUser.new(true_value: "1") - assert_equal true, u.true_value - assert u.true_value.kind_of?(TrueClass) + @user.reload + assert_equal new_date_value, @user.date_value + end end - should "permit replacing value with nil" do - @user_clone.true_value = nil - @user_clone.save! + context "true values" do + should "return correct data type" do + assert_equal true, @user_clone.true_value + assert @user.clone.true_value.kind_of?(TrueClass) + end - @user.reload - assert_nil @user.true_value - assert_nil @user.encrypted_true_value - end + should "coerce data type before save" do + u = MongoMapperUser.new(true_value: "1") + assert_equal true, u.true_value + assert u.true_value.kind_of?(TrueClass) + end - should "permit replacing value" do - new_value = false - @user_clone.true_value = new_value - @user_clone.save! + should "permit replacing value with nil" do + @user_clone.true_value = nil + @user_clone.save! - @user.reload - assert_equal new_value, @user.true_value - end - end + @user.reload + assert_nil @user.true_value + assert_nil @user.encrypted_true_value + end - context "false values" do - should "return correct data type" do - assert_equal false, @user_clone.false_value - assert @user.clone.false_value.kind_of?(FalseClass) - end + should "permit replacing value" do + new_value = false + @user_clone.true_value = new_value + @user_clone.save! - should "coerce data type before save" do - u = MongoMapperUser.new(false_value: "0") - assert_equal false, u.false_value - assert u.false_value.kind_of?(FalseClass) + @user.reload + assert_equal new_value, @user.true_value + end end - should "permit replacing value with nil" do - @user_clone.false_value = nil - @user_clone.save! + context "false values" do + should "return correct data type" do + assert_equal false, @user_clone.false_value + assert @user.clone.false_value.kind_of?(FalseClass) + end - @user.reload - assert_nil @user.false_value - assert_nil @user.encrypted_false_value - end + should "coerce data type before save" do + u = MongoMapperUser.new(false_value: "0") + assert_equal false, u.false_value + assert u.false_value.kind_of?(FalseClass) + end - should "permit replacing value" do - new_value = true - @user_clone.false_value = new_value - @user_clone.save! + should "permit replacing value with nil" do + @user_clone.false_value = nil + @user_clone.save! - @user.reload - assert_equal new_value, @user.false_value - end - end + @user.reload + assert_nil @user.false_value + assert_nil @user.encrypted_false_value + end - context "JSON Serialization" do - setup do - # JSON Does not support symbols, so they will come back as strings - # Convert symbols to string in the test - @h.keys.each do |k| - @h[k.to_s] = @h[k] - @h.delete(k) + should "permit replacing value" do + new_value = true + @user_clone.false_value = new_value + @user_clone.save! + + @user.reload + assert_equal new_value, @user.false_value end end - should "return correct data type" do - assert_equal @h, @user_clone.data_json - assert @user.clone.data_json.kind_of?(Hash) - end + context "JSON Serialization" do + setup do + # JSON Does not support symbols, so they will come back as strings + # Convert symbols to string in the test + @h.keys.each do |k| + @h[k.to_s] = @h[k] + @h.delete(k) + end + end - should "not coerce data type (leaves as hash) before save" do - u = MongoMapperUser.new(data_json: @h) - assert_equal @h, u.data_json - assert u.data_json.kind_of?(Hash) - end + should "return correct data type" do + assert_equal @h, @user_clone.data_json + assert @user.clone.data_json.kind_of?(Hash) + end - should "permit replacing value with nil" do - @user_clone.data_json = nil - @user_clone.save! + should "not coerce data type (leaves as hash) before save" do + u = MongoMapperUser.new(data_json: @h) + assert_equal @h, u.data_json + assert u.data_json.kind_of?(Hash) + end - @user.reload - assert_nil @user.data_json - assert_nil @user.encrypted_data_json - end + should "permit replacing value with nil" do + @user_clone.data_json = nil + @user_clone.save! - should "permit replacing value" do - new_value = @h.clone - new_value['c'] = 'C' - @user_clone.data_json = new_value - @user_clone.save! + @user.reload + assert_nil @user.data_json + assert_nil @user.encrypted_data_json + end - @user.reload - assert_equal new_value, @user.data_json - end - end + should "permit replacing value" do + new_value = @h.clone + new_value['c'] = 'C' + @user_clone.data_json = new_value + @user_clone.save! - context "YAML Serialization" do - should "return correct data type" do - assert_equal @h, @user_clone.data_yaml - assert @user.clone.data_yaml.kind_of?(Hash) + @user.reload + assert_equal new_value, @user.data_json + end end - should "not coerce data type (leaves as hash) before save" do - u = MongoMapperUser.new(data_yaml: @h) - assert_equal @h, u.data_yaml - assert u.data_yaml.kind_of?(Hash) - end + context "YAML Serialization" do + should "return correct data type" do + assert_equal @h, @user_clone.data_yaml + assert @user.clone.data_yaml.kind_of?(Hash) + end - should "permit replacing value with nil" do - @user_clone.data_yaml = nil - @user_clone.save! + should "not coerce data type (leaves as hash) before save" do + u = MongoMapperUser.new(data_yaml: @h) + assert_equal @h, u.data_yaml + assert u.data_yaml.kind_of?(Hash) + end - @user.reload - assert_nil @user.data_yaml - assert_nil @user.encrypted_data_yaml - end + should "permit replacing value with nil" do + @user_clone.data_yaml = nil + @user_clone.save! - should "permit replacing value" do - new_value = @h.clone - new_value[:c] = 'C' - @user_clone.data_yaml = new_value - @user_clone.save! + @user.reload + assert_nil @user.data_yaml + assert_nil @user.encrypted_data_yaml + end - @user.reload - assert_equal new_value, @user.data_yaml + should "permit replacing value" do + new_value = @h.clone + new_value[:c] = 'C' + @user_clone.data_yaml = new_value + @user_clone.save! + + @user.reload + assert_equal new_value, @user.data_yaml + end end + end end - end -end \ No newline at end of file +rescue LoadError + puts "Not running MongoMapper tests because mongo_mapper gem is not installed!!!" +end