symmetric-encryption 4.0.0 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/Rakefile +2 -2
- data/bin/symmetric-encryption +1 -1
- data/lib/symmetric-encryption.rb +1 -1
- data/lib/symmetric_encryption.rb +2 -2
- data/lib/symmetric_encryption/cipher.rb +15 -18
- data/lib/symmetric_encryption/cli.rb +30 -36
- data/lib/symmetric_encryption/coerce.rb +3 -4
- data/lib/symmetric_encryption/config.rb +30 -34
- data/lib/symmetric_encryption/encoder.rb +0 -1
- data/lib/symmetric_encryption/exception.rb +0 -2
- data/lib/symmetric_encryption/extensions/active_record/base.rb +5 -2
- data/lib/symmetric_encryption/extensions/mongo_mapper/plugins/encrypted_key.rb +3 -5
- data/lib/symmetric_encryption/extensions/mongoid/encrypted.rb +0 -2
- data/lib/symmetric_encryption/generator.rb +3 -3
- data/lib/symmetric_encryption/header.rb +9 -4
- data/lib/symmetric_encryption/key.rb +3 -4
- data/lib/symmetric_encryption/keystore.rb +9 -9
- data/lib/symmetric_encryption/keystore/environment.rb +6 -7
- data/lib/symmetric_encryption/keystore/file.rb +5 -6
- data/lib/symmetric_encryption/keystore/memory.rb +2 -2
- data/lib/symmetric_encryption/railtie.rb +4 -7
- data/lib/symmetric_encryption/railties/symmetric_encryption_validator.rb +2 -1
- data/lib/symmetric_encryption/reader.rb +28 -39
- data/lib/symmetric_encryption/symmetric_encryption.rb +10 -8
- data/lib/symmetric_encryption/utils/re_encrypt_files.rb +5 -8
- data/lib/symmetric_encryption/version.rb +2 -2
- data/lib/symmetric_encryption/writer.rb +12 -17
- data/test/active_record_test.rb +237 -200
- data/test/cipher_test.rb +12 -6
- data/test/encoder_test.rb +1 -3
- data/test/header_test.rb +0 -4
- data/test/key_test.rb +0 -2
- data/test/keystore/environment_test.rb +10 -11
- data/test/keystore/file_test.rb +9 -10
- data/test/keystore_test.rb +2 -3
- data/test/mongoid_test.rb +37 -40
- data/test/reader_test.rb +24 -32
- data/test/symmetric_encryption_test.rb +17 -18
- data/test/test_db.sqlite3 +0 -0
- data/test/writer_test.rb +0 -1
- metadata +23 -23
data/test/cipher_test.rb
CHANGED
@@ -3,7 +3,7 @@ require_relative 'test_helper'
|
|
3
3
|
# Tests for SymmetricEncryption::Cipher
|
4
4
|
class CipherTest < Minitest::Test
|
5
5
|
['aes-128-cbc'].each do |cipher_name|
|
6
|
-
#['aes-128-cbc', 'aes-128-gcm'].each do |cipher_name|
|
6
|
+
# ['aes-128-cbc', 'aes-128-gcm'].each do |cipher_name|
|
7
7
|
describe "Cipher: #{cipher_name}" do
|
8
8
|
describe 'standalone' do
|
9
9
|
it 'allows setting the cipher_name' do
|
@@ -41,7 +41,7 @@ class CipherTest < Minitest::Test
|
|
41
41
|
end
|
42
42
|
|
43
43
|
[false, true].each do |always_add_header|
|
44
|
-
[
|
44
|
+
%i[none base64 base64strict base16].each do |encoding|
|
45
45
|
describe "encoding: #{encoding} with#{'out' unless always_add_header} header" do
|
46
46
|
before do
|
47
47
|
@social_security_number = '987654321'
|
@@ -62,7 +62,7 @@ class CipherTest < Minitest::Test
|
|
62
62
|
none: {
|
63
63
|
header: "@EnC\x00\x00\xC97\x8B\x8E\xC1\xD3k\xCC\xA4\xA0\xEFy+B\x90\x9A",
|
64
64
|
no_header: "\xC97\x8B\x8E\xC1\xD3k\xCC\xA4\xA0\xEFy+B\x90\x9A"
|
65
|
-
}
|
65
|
+
}
|
66
66
|
},
|
67
67
|
# 'aes-128-gcm' => {
|
68
68
|
# base64: {
|
@@ -173,8 +173,15 @@ class CipherTest < Minitest::Test
|
|
173
173
|
|
174
174
|
it 'build and parse header' do
|
175
175
|
key = SymmetricEncryption::Key.new(cipher_name: 'aes-128-cbc')
|
176
|
-
|
177
|
-
|
176
|
+
# Test Deprecated method
|
177
|
+
binary_header = SymmetricEncryption::Cipher.build_header(
|
178
|
+
SymmetricEncryption.cipher.version,
|
179
|
+
true,
|
180
|
+
key.iv,
|
181
|
+
key.key,
|
182
|
+
key.cipher_name
|
183
|
+
)
|
184
|
+
header = SymmetricEncryption::Header.new
|
178
185
|
header.parse(binary_header)
|
179
186
|
assert_equal true, header.compressed?
|
180
187
|
assert random_cipher = SymmetricEncryption::Cipher.new(iv: key.iv, key: key.key, cipher_name: key.cipher_name)
|
@@ -204,7 +211,6 @@ class CipherTest < Minitest::Test
|
|
204
211
|
end
|
205
212
|
end
|
206
213
|
end
|
207
|
-
|
208
214
|
end
|
209
215
|
end
|
210
216
|
end
|
data/test/encoder_test.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
require_relative 'test_helper'
|
3
2
|
|
4
3
|
# Unit Test for SymmetricEncryption
|
5
4
|
#
|
6
5
|
class EncoderTest < Minitest::Test
|
7
6
|
describe SymmetricEncryption::Encoder do
|
8
|
-
[
|
7
|
+
%i[none base64 base64strict base16].each do |encoding|
|
9
8
|
describe "encoding: #{encoding}" do
|
10
9
|
before do
|
11
10
|
@data = '987654321'
|
@@ -57,5 +56,4 @@ class EncoderTest < Minitest::Test
|
|
57
56
|
end
|
58
57
|
end
|
59
58
|
end
|
60
|
-
|
61
59
|
end
|
data/test/header_test.rb
CHANGED
@@ -92,7 +92,6 @@ class CipherTest < Minitest::Test
|
|
92
92
|
assert header.compressed?
|
93
93
|
end
|
94
94
|
end
|
95
|
-
|
96
95
|
end
|
97
96
|
|
98
97
|
describe '#to_s' do
|
@@ -138,7 +137,6 @@ class CipherTest < Minitest::Test
|
|
138
137
|
assert header.compressed?
|
139
138
|
end
|
140
139
|
end
|
141
|
-
|
142
140
|
end
|
143
141
|
end
|
144
142
|
|
@@ -212,7 +210,5 @@ class CipherTest < Minitest::Test
|
|
212
210
|
end
|
213
211
|
end
|
214
212
|
end
|
215
|
-
|
216
213
|
end
|
217
214
|
end
|
218
|
-
|
data/test/key_test.rb
CHANGED
@@ -16,10 +16,10 @@ module SymmetricEncryption
|
|
16
16
|
|
17
17
|
let :keystore_config do
|
18
18
|
SymmetricEncryption::Keystore::Environment.new_key_config(
|
19
|
-
cipher_name:
|
20
|
-
app_name:
|
21
|
-
environment:
|
22
|
-
version:
|
19
|
+
cipher_name: 'aes-256-cbc',
|
20
|
+
app_name: 'tester',
|
21
|
+
environment: 'test',
|
22
|
+
version: version
|
23
23
|
)
|
24
24
|
end
|
25
25
|
|
@@ -48,7 +48,7 @@ module SymmetricEncryption
|
|
48
48
|
end
|
49
49
|
|
50
50
|
it 'retains the env var name' do
|
51
|
-
assert_equal
|
51
|
+
assert_equal 'TESTER_TEST_V11', keystore_config[:key_env_var]
|
52
52
|
end
|
53
53
|
|
54
54
|
it 'retains cipher_name' do
|
@@ -58,7 +58,7 @@ module SymmetricEncryption
|
|
58
58
|
|
59
59
|
describe '.new_config' do
|
60
60
|
let :environments do
|
61
|
-
%i
|
61
|
+
%i[development test acceptance preprod production]
|
62
62
|
end
|
63
63
|
|
64
64
|
let :config do
|
@@ -79,7 +79,7 @@ module SymmetricEncryption
|
|
79
79
|
end
|
80
80
|
|
81
81
|
it 'each non test environment has a key encryption key' do
|
82
|
-
(environments - %i
|
82
|
+
(environments - %i[development test]).each do |env|
|
83
83
|
assert config[env][:ciphers].first[:key_encrypting_key], "Environment #{env} is missing the key encryption key"
|
84
84
|
end
|
85
85
|
end
|
@@ -92,9 +92,9 @@ module SymmetricEncryption
|
|
92
92
|
end
|
93
93
|
|
94
94
|
it 'creates an encrypted key file for all non-test environments' do
|
95
|
-
(environments - %i
|
95
|
+
(environments - %i[development test]).each do |env|
|
96
96
|
assert ciphers = config[env][:ciphers], "Environment #{env} is missing ciphers: #{config[env].inspect}"
|
97
|
-
assert
|
97
|
+
assert ciphers.first[:key_env_var], "Environment #{env} is missing key_env_var: #{ciphers.inspect}"
|
98
98
|
end
|
99
99
|
end
|
100
100
|
end
|
@@ -109,11 +109,10 @@ module SymmetricEncryption
|
|
109
109
|
end
|
110
110
|
|
111
111
|
it 'reads the key' do
|
112
|
-
ENV[
|
112
|
+
ENV['TESTER_ENV_VAR'] = Base64.strict_encode64(key.encrypt('TEST'))
|
113
113
|
assert_equal 'TEST', keystore.read
|
114
114
|
end
|
115
115
|
end
|
116
|
-
|
117
116
|
end
|
118
117
|
end
|
119
118
|
end
|
data/test/keystore/file_test.rb
CHANGED
@@ -16,11 +16,11 @@ module SymmetricEncryption
|
|
16
16
|
|
17
17
|
let :key_config do
|
18
18
|
SymmetricEncryption::Keystore::File.new_key_config(
|
19
|
-
key_path:
|
20
|
-
cipher_name:
|
21
|
-
app_name:
|
22
|
-
environment:
|
23
|
-
version:
|
19
|
+
key_path: 'tmp',
|
20
|
+
cipher_name: 'aes-256-cbc',
|
21
|
+
app_name: 'tester',
|
22
|
+
environment: 'test',
|
23
|
+
version: version
|
24
24
|
)
|
25
25
|
end
|
26
26
|
|
@@ -60,13 +60,13 @@ module SymmetricEncryption
|
|
60
60
|
|
61
61
|
it 'is readable by Key.from_config' do
|
62
62
|
key_config.delete(:version)
|
63
|
-
assert
|
63
|
+
assert SymmetricEncryption::Key.from_config(key_config)
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
67
67
|
describe '.new_config' do
|
68
68
|
let :environments do
|
69
|
-
%i
|
69
|
+
%i[development test acceptance preprod production]
|
70
70
|
end
|
71
71
|
|
72
72
|
let :config do
|
@@ -88,7 +88,7 @@ module SymmetricEncryption
|
|
88
88
|
end
|
89
89
|
|
90
90
|
it 'each non test environment has a key encryption key' do
|
91
|
-
(environments - %i
|
91
|
+
(environments - %i[development test]).each do |env|
|
92
92
|
assert config[env][:ciphers].first[:key_encrypting_key], "Environment #{env} is missing the key encryption key"
|
93
93
|
end
|
94
94
|
end
|
@@ -101,7 +101,7 @@ module SymmetricEncryption
|
|
101
101
|
end
|
102
102
|
|
103
103
|
it 'creates an encrypted key file for all non-test environments' do
|
104
|
-
(environments - %i
|
104
|
+
(environments - %i[development test]).each do |env|
|
105
105
|
assert ciphers = config[env][:ciphers], "Environment #{env} is missing ciphers: #{config[env].inspect}"
|
106
106
|
assert file_name = ciphers.first[:key_filename], "Environment #{env} is missing key_filename: #{ciphers.inspect}"
|
107
107
|
assert File.exist?(file_name)
|
@@ -119,7 +119,6 @@ module SymmetricEncryption
|
|
119
119
|
assert_equal 'TEST', keystore.read
|
120
120
|
end
|
121
121
|
end
|
122
|
-
|
123
122
|
end
|
124
123
|
end
|
125
124
|
end
|
data/test/keystore_test.rb
CHANGED
@@ -14,7 +14,7 @@ module SymmetricEncryption
|
|
14
14
|
|
15
15
|
describe '.rotate_keys' do
|
16
16
|
let :environments do
|
17
|
-
%i
|
17
|
+
%i[development test acceptance preprod production]
|
18
18
|
end
|
19
19
|
|
20
20
|
let :config do
|
@@ -40,7 +40,7 @@ module SymmetricEncryption
|
|
40
40
|
end
|
41
41
|
|
42
42
|
it 'creates an encrypted key file for all non-test environments' do
|
43
|
-
(environments - %i
|
43
|
+
(environments - %i[development test]).each do |env|
|
44
44
|
assert key_rotation
|
45
45
|
assert key_rotation[env.to_sym], key_rotation
|
46
46
|
assert key_rotation[env.to_sym][:ciphers]
|
@@ -53,7 +53,6 @@ module SymmetricEncryption
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
56
|
-
|
57
56
|
end
|
58
57
|
end
|
59
58
|
end
|
data/test/mongoid_test.rb
CHANGED
@@ -6,7 +6,7 @@ begin
|
|
6
6
|
|
7
7
|
Mongoid.load!('test/config/mongoid.yml')
|
8
8
|
|
9
|
-
|
9
|
+
# @formatter:off
|
10
10
|
class MongoidUser
|
11
11
|
include Mongoid::Document
|
12
12
|
|
@@ -42,11 +42,11 @@ begin
|
|
42
42
|
validates_uniqueness_of :encrypted_username, allow_blank: true, if: :encrypted_username_changed?
|
43
43
|
|
44
44
|
validates :username,
|
45
|
-
|
46
|
-
|
47
|
-
|
45
|
+
length: {in: 3..20},
|
46
|
+
format: {with: /\A[\w\-]+\z/},
|
47
|
+
allow_blank: true
|
48
48
|
end
|
49
|
-
|
49
|
+
# @formatter:on
|
50
50
|
|
51
51
|
#
|
52
52
|
# Unit Tests for field encrypted and validation aspects of SymmetricEncryption
|
@@ -60,7 +60,7 @@ begin
|
|
60
60
|
@social_security_number = '987654321'
|
61
61
|
@social_security_number_encrypted = 'QEVuQwIAS+8X1NRrqdfEIQyFHVPuVA=='
|
62
62
|
|
63
|
-
@integer =
|
63
|
+
@integer = 32_768
|
64
64
|
@integer_encrypted = 'FA3smFQEKqB/ITv+A0xACg=='
|
65
65
|
|
66
66
|
@float = 0.9867
|
@@ -74,10 +74,10 @@ begin
|
|
74
74
|
|
75
75
|
@integer_value = 12
|
76
76
|
@float_value = 88.12345
|
77
|
-
@decimal_value = BigDecimal
|
78
|
-
@datetime_value = DateTime.new(2001, 11, 26, 20, 55, 54,
|
79
|
-
@time_value = Time.new(2013,
|
80
|
-
@date_value = Date.new(1927,
|
77
|
+
@decimal_value = BigDecimal('22.51')
|
78
|
+
@datetime_value = DateTime.new(2001, 11, 26, 20, 55, 54, '-5')
|
79
|
+
@time_value = Time.new(2013, 0o1, 0o1, 22, 30, 0o0, '-04:00')
|
80
|
+
@date_value = Date.new(1927, 0o4, 0o2)
|
81
81
|
@h = {a: 'A', b: 'B'}
|
82
82
|
|
83
83
|
@user = MongoidUser.new(
|
@@ -182,14 +182,14 @@ begin
|
|
182
182
|
assert_equal @bank_account_number_encrypted, @user.encrypted_social_security_number
|
183
183
|
end
|
184
184
|
|
185
|
-
it
|
185
|
+
it 'all paths it lead to the same result, check uninitialized' do
|
186
186
|
user = MongoidUser.new
|
187
187
|
assert_nil user.social_security_number
|
188
188
|
assert_equal @bank_account_number, (user.social_security_number = @bank_account_number)
|
189
189
|
assert_equal @bank_account_number, user.social_security_number
|
190
190
|
assert_equal @bank_account_number_encrypted, user.encrypted_social_security_number
|
191
191
|
|
192
|
-
|
192
|
+
user.social_security_number = nil
|
193
193
|
assert_nil user.social_security_number
|
194
194
|
assert_nil user.encrypted_social_security_number
|
195
195
|
end
|
@@ -216,7 +216,7 @@ begin
|
|
216
216
|
end
|
217
217
|
|
218
218
|
after do
|
219
|
-
@user
|
219
|
+
@user&.destroy
|
220
220
|
end
|
221
221
|
|
222
222
|
it 'return false if it was not changed' do
|
@@ -238,7 +238,7 @@ begin
|
|
238
238
|
end
|
239
239
|
|
240
240
|
after do
|
241
|
-
@user
|
241
|
+
@user&.destroy
|
242
242
|
end
|
243
243
|
|
244
244
|
describe 'aliased fields' do
|
@@ -251,13 +251,13 @@ begin
|
|
251
251
|
describe 'integer values' do
|
252
252
|
it 'return correct data type' do
|
253
253
|
assert_equal @integer_value, @user_clone.integer_value
|
254
|
-
assert @user.clone.integer_value.
|
254
|
+
assert @user.clone.integer_value.is_a?(Integer)
|
255
255
|
end
|
256
256
|
|
257
257
|
it 'coerce data type before save' do
|
258
258
|
u = MongoidUser.new(integer_value: '5')
|
259
259
|
assert_equal 5, u.integer_value
|
260
|
-
assert u.integer_value.
|
260
|
+
assert u.integer_value.is_a?(Integer)
|
261
261
|
end
|
262
262
|
|
263
263
|
it 'permit replacing value with nil' do
|
@@ -282,13 +282,13 @@ begin
|
|
282
282
|
describe 'float values' do
|
283
283
|
it 'return correct data type' do
|
284
284
|
assert_equal @float_value, @user_clone.float_value
|
285
|
-
assert @user.clone.float_value.
|
285
|
+
assert @user.clone.float_value.is_a?(Float)
|
286
286
|
end
|
287
287
|
|
288
288
|
it 'coerce data type before save' do
|
289
289
|
u = MongoidUser.new(float_value: '5.6')
|
290
290
|
assert_equal 5.6, u.float_value
|
291
|
-
assert u.float_value.
|
291
|
+
assert u.float_value.is_a?(Float)
|
292
292
|
end
|
293
293
|
|
294
294
|
it 'permit replacing value with nil' do
|
@@ -313,13 +313,13 @@ begin
|
|
313
313
|
describe 'decimal values' do
|
314
314
|
it 'return correct data type' do
|
315
315
|
assert_equal @decimal_value, @user_clone.decimal_value
|
316
|
-
assert @user.clone.decimal_value.
|
316
|
+
assert @user.clone.decimal_value.is_a?(BigDecimal)
|
317
317
|
end
|
318
318
|
|
319
319
|
it 'coerce data type before save' do
|
320
320
|
u = MongoidUser.new(decimal_value: '99.95')
|
321
|
-
assert_equal BigDecimal
|
322
|
-
assert u.decimal_value.
|
321
|
+
assert_equal BigDecimal('99.95'), u.decimal_value
|
322
|
+
assert u.decimal_value.is_a?(BigDecimal)
|
323
323
|
end
|
324
324
|
|
325
325
|
it 'permit replacing value with nil' do
|
@@ -332,7 +332,7 @@ begin
|
|
332
332
|
end
|
333
333
|
|
334
334
|
it 'permit replacing value' do
|
335
|
-
new_decimal_value = BigDecimal
|
335
|
+
new_decimal_value = BigDecimal('99.95')
|
336
336
|
@user_clone.decimal_value = new_decimal_value
|
337
337
|
@user_clone.save!
|
338
338
|
|
@@ -344,14 +344,14 @@ begin
|
|
344
344
|
describe 'datetime values' do
|
345
345
|
it 'return correct data type' do
|
346
346
|
assert_equal @datetime_value, @user_clone.datetime_value
|
347
|
-
assert @user.clone.datetime_value.
|
347
|
+
assert @user.clone.datetime_value.is_a?(DateTime)
|
348
348
|
end
|
349
349
|
|
350
350
|
it 'coerce data type before save' do
|
351
351
|
now = Time.now
|
352
352
|
u = MongoidUser.new(datetime_value: now)
|
353
353
|
assert_equal now, u.datetime_value
|
354
|
-
assert u.datetime_value.
|
354
|
+
assert u.datetime_value.is_a?(DateTime)
|
355
355
|
end
|
356
356
|
|
357
357
|
it 'permit replacing value with nil' do
|
@@ -376,14 +376,14 @@ begin
|
|
376
376
|
describe 'time values' do
|
377
377
|
it 'return correct data type' do
|
378
378
|
assert_equal @time_value, @user_clone.time_value.dup
|
379
|
-
assert @user.clone.time_value.
|
379
|
+
assert @user.clone.time_value.is_a?(Time)
|
380
380
|
end
|
381
381
|
|
382
382
|
it 'coerce data type before save' do
|
383
383
|
now = Time.now
|
384
384
|
u = MongoidUser.new(time_value: now)
|
385
385
|
assert_equal now, u.time_value.dup
|
386
|
-
assert u.time_value.
|
386
|
+
assert u.time_value.is_a?(Time)
|
387
387
|
end
|
388
388
|
|
389
389
|
it 'permit replacing value with nil' do
|
@@ -408,14 +408,14 @@ begin
|
|
408
408
|
describe 'date values' do
|
409
409
|
it 'return correct data type' do
|
410
410
|
assert_equal @date_value, @user_clone.date_value
|
411
|
-
assert @user.clone.date_value.
|
411
|
+
assert @user.clone.date_value.is_a?(Date)
|
412
412
|
end
|
413
413
|
|
414
414
|
it 'coerce data type before save' do
|
415
415
|
now = Time.now
|
416
416
|
u = MongoidUser.new(date_value: now)
|
417
417
|
assert_equal now.to_date, u.date_value
|
418
|
-
assert u.date_value.
|
418
|
+
assert u.date_value.is_a?(Date)
|
419
419
|
end
|
420
420
|
|
421
421
|
it 'permit replacing value with nil' do
|
@@ -440,13 +440,13 @@ begin
|
|
440
440
|
describe 'true values' do
|
441
441
|
it 'return correct data type' do
|
442
442
|
assert_equal true, @user_clone.true_value
|
443
|
-
assert @user.clone.true_value.
|
443
|
+
assert @user.clone.true_value.is_a?(TrueClass)
|
444
444
|
end
|
445
445
|
|
446
446
|
it 'coerce data type before save' do
|
447
447
|
u = MongoidUser.new(true_value: '1')
|
448
448
|
assert_equal true, u.true_value
|
449
|
-
assert u.true_value.
|
449
|
+
assert u.true_value.is_a?(TrueClass)
|
450
450
|
end
|
451
451
|
|
452
452
|
it 'permit replacing value with nil' do
|
@@ -471,13 +471,13 @@ begin
|
|
471
471
|
describe 'false values' do
|
472
472
|
it 'return correct data type' do
|
473
473
|
assert_equal false, @user_clone.false_value
|
474
|
-
assert @user.clone.false_value.
|
474
|
+
assert @user.clone.false_value.is_a?(FalseClass)
|
475
475
|
end
|
476
476
|
|
477
477
|
it 'coerce data type before save' do
|
478
478
|
u = MongoidUser.new(false_value: '0')
|
479
479
|
assert_equal false, u.false_value
|
480
|
-
assert u.false_value.
|
480
|
+
assert u.false_value.is_a?(FalseClass)
|
481
481
|
end
|
482
482
|
|
483
483
|
it 'permit replacing value with nil' do
|
@@ -511,13 +511,13 @@ begin
|
|
511
511
|
|
512
512
|
it 'return correct data type' do
|
513
513
|
assert_equal @h, @user_clone.data_json
|
514
|
-
assert @user.clone.data_json.
|
514
|
+
assert @user.clone.data_json.is_a?(Hash)
|
515
515
|
end
|
516
516
|
|
517
517
|
it 'not coerce data type (leaves as hash) before save' do
|
518
518
|
u = MongoidUser.new(data_json: @h)
|
519
519
|
assert_equal @h, u.data_json
|
520
|
-
assert u.data_json.
|
520
|
+
assert u.data_json.is_a?(Hash)
|
521
521
|
end
|
522
522
|
|
523
523
|
it 'permit replacing value with nil' do
|
@@ -543,13 +543,13 @@ begin
|
|
543
543
|
describe 'YAML Serialization' do
|
544
544
|
it 'return correct data type' do
|
545
545
|
assert_equal @h, @user_clone.data_yaml
|
546
|
-
assert @user.clone.data_yaml.
|
546
|
+
assert @user.clone.data_yaml.is_a?(Hash)
|
547
547
|
end
|
548
548
|
|
549
549
|
it 'not coerce data type (leaves as hash) before save' do
|
550
550
|
u = MongoidUser.new(data_yaml: @h)
|
551
551
|
assert_equal @h, u.data_yaml
|
552
|
-
assert u.data_yaml.
|
552
|
+
assert u.data_yaml.is_a?(Hash)
|
553
553
|
end
|
554
554
|
|
555
555
|
it 'permit replacing value with nil' do
|
@@ -571,7 +571,6 @@ begin
|
|
571
571
|
assert_equal new_value, @user.data_yaml
|
572
572
|
end
|
573
573
|
end
|
574
|
-
|
575
574
|
end
|
576
575
|
|
577
576
|
describe 'uniqueness' do
|
@@ -589,10 +588,8 @@ begin
|
|
589
588
|
assert_equal 'is already taken', duplicate.errors.messages[:encrypted_email].first
|
590
589
|
end
|
591
590
|
end
|
592
|
-
|
593
591
|
end
|
594
592
|
end
|
595
|
-
|
596
593
|
rescue LoadError
|
597
|
-
puts
|
594
|
+
puts 'Not running Mongoid tests because mongoid gem is not installed!!!'
|
598
595
|
end
|