mongoid_money_field 4.0.8 → 5.0.0

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.
data/spec/money3_spec.rb DELETED
@@ -1,342 +0,0 @@
1
- # coding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Mongoid::MoneyField do
6
-
7
- describe 'when money field is required' do
8
- it 'should be valid to save when field is filled in' do
9
- dummy = DummyMoneyRequired.new
10
- dummy.price = '$10'
11
- expect(dummy).to be_valid
12
- expect(dummy.save).to eq true
13
- end
14
-
15
- it 'should be not valid to save when field is not filled in' do
16
- dummy = DummyMoneyRequired.new
17
- expect(dummy).not_to be_valid
18
- expect(dummy.errors.count).to eq 1
19
- expect(dummy.errors.messages[:price][0]).to eq "can't be blank"
20
- expect(dummy.save).to eq false
21
- end
22
-
23
- it 'should be valid to save when field is filled in but currency is not' do
24
- dummy = DummyMoneyRequired.new
25
- dummy.price_cents = 123
26
- expect(dummy).to be_valid
27
- expect(dummy.save).to eq true
28
- expect(dummy.price_currency).to eq Money.default_currency.iso_code
29
- end
30
- end
31
-
32
- describe 'when value is filled from code' do
33
- it 'should raise the error when value consists non digits' do
34
- dummy = DummyNotANumber.new
35
- dummy.price = 'incorrect1'
36
- expect(dummy).not_to be_valid
37
- expect(dummy.errors.count).to eq 1
38
- expect(dummy.errors.messages[:price][0]).to eq "is not a number"
39
- expect(dummy.save).to eq false
40
- end
41
-
42
- it 'should raise the error when value consists more then one decimal separator' do
43
- dummy = DummyNotANumber.new
44
- dummy.price = '121,212,22'
45
- expect(dummy).not_to be_valid
46
- expect(dummy.errors.count).to eq 1
47
- expect(dummy.errors.messages[:price][0]).to eq "is not a number"
48
- expect(dummy.save).to eq false
49
- end
50
-
51
- it 'should raise the error when value is not present' do
52
- dummy = DummyNotANumber.new
53
- expect(dummy).not_to be_valid
54
- expect(dummy.errors.count).to eq 1
55
- expect(dummy.errors.messages[:price][0]).to eq "is not a number"
56
- expect(dummy.save).to eq false
57
- end
58
-
59
- it 'should raise the error when value is not present' do
60
- dummy = DummyNotANumber.new( price: '' )
61
- expect(dummy).not_to be_valid
62
- expect(dummy.errors.count).to eq 1
63
- expect(dummy.errors.messages[:price][0]).to eq "is not a number"
64
- expect(dummy.save).to eq false
65
- end
66
- end
67
-
68
- describe 'when value is filled from SimpleForm' do
69
- it 'should raise the error when value consists non digits' do
70
- dummy = DummyNotANumber.new
71
- dummy.price_plain = 'incorrect1'
72
- expect(dummy).not_to be_valid
73
- expect(dummy.errors.count).to eq 1
74
- expect(dummy.errors.messages[:price][0]).to eq "is not a number"
75
- expect(dummy.save).to eq false
76
- end
77
-
78
- it 'should raise the error when value consists more then one decimal separator' do
79
- dummy = DummyNotANumber.new
80
- dummy.price_plain = '121,212,22'
81
- expect(dummy).not_to be_valid
82
- expect(dummy.errors.count).to eq 1
83
- expect(dummy.errors.messages[:price][0]).to eq "is not a number"
84
- expect(dummy.save).to eq false
85
- end
86
- end
87
-
88
- describe 'when value should be a positive number' do
89
- it 'should raise the error when value lesser than 1' do
90
- dummy = DummyPositiveNumber.new( price: '-10' )
91
- expect(dummy).not_to be_valid
92
- expect(dummy.errors.count).to eq 1
93
- expect(dummy.errors.messages[:price][0]).to eq "must be greater than 1"
94
- expect(dummy.save).to eq false
95
- expect(dummy.price_cents).to eq -1000
96
- end
97
-
98
- it 'should raise the error when value lesser than 1' do
99
- dummy = DummyPositiveNumber.new( price: '0' )
100
- expect(dummy).not_to be_valid
101
- expect(dummy.errors.count).to eq 1
102
- expect(dummy.errors.messages[:price][0]).to eq "must be greater than 1"
103
- expect(dummy.save).to eq false
104
- end
105
-
106
- it 'should be ok when value is greater than 1' do
107
- dummy = DummyPositiveNumber.new( price: '10' )
108
- expect(dummy).to be_valid
109
- expect(dummy.save).to eq true
110
- end
111
-
112
- it 'should be ok when value is not present' do
113
- dummy = DummyPositiveNumber.new( price: '' )
114
- expect(dummy).to be_valid
115
- expect(dummy.save).to eq true
116
- end
117
- end
118
-
119
- describe 'when both default currency and fixed currency is specified' do
120
- it 'should use fixed currency instead of default' do
121
- DummyOverrideDefaultCurrency.create!(price: '1.23')
122
- expect(DummyOverrideDefaultCurrency.first.price.currency.iso_code).to eq 'GBP'
123
- end
124
- end
125
-
126
- describe 'when default currency is specified' do
127
- it 'should use it instead of Money.default_currency' do
128
- DummyWithDefaultCurrency.create!(price: '1.23')
129
- expect(DummyWithDefaultCurrency.first.price.currency.iso_code).to eq 'EUR'
130
- expect(Money.default_currency.iso_code).to eq 'RUB'
131
- end
132
- end
133
-
134
- describe 'when persisting a document with a Money datatype' do
135
- it 'should be persisted normally when set as dollars' do
136
- dummy = DummyMoney.new
137
- dummy.price = '$10'
138
- expect(dummy.save).to eq true
139
- end
140
-
141
- it 'should be persisted normally when set as cents' do
142
- dummy = DummyMoney.new
143
- dummy.price = '$9.99'
144
- expect(dummy.save).to eq true
145
- end
146
-
147
- it 'should be persisted normally when set as Money' do
148
- dummy = DummyMoney.new
149
- dummy.price = Monetize.parse(1.23)
150
- expect(dummy.save).to eq true
151
- end
152
-
153
- it 'should be possible to set value to nil' do
154
- dummy = DummyMoney.new
155
- dummy.price = Monetize.parse(1.23)
156
- expect(dummy.save).to eq true
157
-
158
- dummy = DummyMoney.first
159
- expect(dummy.price).to eq Monetize.parse(1.23)
160
- dummy.price = nil
161
- expect(dummy.save).to eq true
162
- dummy = DummyMoney.first
163
- expect(dummy.price).to be_nil
164
- end
165
- end
166
-
167
- describe 'when accessing a document from the datastore with a Money datatype' do
168
- before(:each) do
169
- DummyMoney.create(:description => "Test", :price => '9.99')
170
- end
171
-
172
- it 'should have a Money value that matches the money value that was initially persisted' do
173
- dummy = DummyMoney.first
174
- expect(dummy.price).to eq Monetize.parse('9.99')
175
- end
176
- end
177
-
178
- describe 'when accessing a document from the datastore with a Money datatype set as money' do
179
- before(:each) do
180
- dm = DummyMoney.create(:description => "Test")
181
- dm.price = Monetize.parse('1.23')
182
- dm.save!
183
- end
184
-
185
- it 'should have a Money value that matches the money value that was initially persisted' do
186
- dummy = DummyMoney.first
187
- expect(dummy.price.cents).to eq 123
188
- end
189
- end
190
-
191
- describe 'when accessing a document from the datastore with a Money datatype set as money with mass asignment' do
192
- before(:each) do
193
- DummyMoney.create(:description => "Test", :price => Monetize.parse('1.23'))
194
- end
195
-
196
- it 'should have a Money value that matches the money value that was initially persisted' do
197
- dummy = DummyMoney.first
198
- expect(dummy.price.cents).to eq 123
199
- end
200
- end
201
-
202
- describe 'when accessing a document from the datastore with a Money datatype and empty value' do
203
- it 'should be nil' do
204
- dummy = DummyMoneyWithoutDefault.new
205
- expect(dummy.save).to eq true
206
- expect(DummyMoneyWithoutDefault.first.price).to be_nil
207
- end
208
-
209
- it 'should be 0 when used with default' do
210
- dummy = DummyMoney.new
211
- expect(dummy.save).to eq true
212
- expect(DummyMoney.first.price.cents).to eq 0
213
- end
214
-
215
- it 'should set money to default currency if money is given without it' do
216
- dummy = DummyMoneyWithDefault.new
217
- expect(dummy.save).to eq true
218
- dummy = DummyMoneyWithDefault.first
219
- expect(dummy.price.currency.iso_code).to eq Money.default_currency.iso_code
220
- expect(dummy.price.cents).to eq 100
221
- end
222
-
223
- it 'should set money to default currency if money is given without it on a document with multiple money fields' do
224
- dummy = DummyPrices.new
225
- expect(dummy.save).to eq true
226
- dummy = DummyPrices.first
227
- expect(dummy.price.currency.iso_code).to eq Money.default_currency.iso_code
228
- expect(dummy.price.cents).to eq 100
229
-
230
- expect(dummy.price2).to be_nil
231
-
232
- expect(dummy.price1.cents).to eq 0
233
- end
234
-
235
-
236
- it 'should set money to correct currency if money is given with it' do
237
- dummy = DummyMoneyWithDefaultWithCurrency.new
238
- expect(dummy.save).to eq true
239
- dummy = DummyMoneyWithDefaultWithCurrency.first
240
- expect(dummy.price.currency.iso_code).to eq 'GBP'
241
- expect(dummy.price.cents).to eq 100
242
- end
243
- end
244
-
245
- describe 'when accessing a document from the datastore with a Money datatype and fixed currency' do
246
- it 'should have correct currency when value is set to 5$' do
247
- DummyMoneyWithFixedCurrency.create!(price: '5$')
248
- dummy = DummyMoneyWithFixedCurrency.first
249
- expect(dummy.price.currency.iso_code).to eq 'GBP'
250
- expect(dummy.price.cents).to eq 500
251
- expect(dummy.price).to eq Monetize.parse('5 GBP')
252
- end
253
-
254
- it 'should have correct currency when value is set to 100 RUB' do
255
- DummyMoneyWithFixedCurrency.create!(price: '100 RUB')
256
- dummy = DummyMoneyWithFixedCurrency.first
257
- expect(dummy.price.currency.iso_code).to eq 'GBP'
258
- expect(dummy.price.cents).to eq 100_00
259
- expect(dummy.price).to eq Monetize.parse('100 GBP')
260
- end
261
- end
262
-
263
- describe 'when setting to a string value with currency' do
264
- it 'should handle RUB' do
265
- DummyMoney.create(description: "Test", price: '1.23 RUB')
266
- dummy = DummyMoney.first
267
- expect(dummy.price.currency.iso_code).to eq 'RUB'
268
- expect(dummy.price.cents).to eq 123
269
- expect(dummy.price).to eq Monetize.parse('1.23 RUB')
270
- end
271
-
272
- it 'should handle $' do
273
- DummyMoney.create(description: "Test", price: '1.23 USD')
274
- dummy = DummyMoney.first
275
- expect(dummy.price.currency.iso_code).to eq 'USD'
276
- expect(dummy.price.cents).to eq 123
277
- expect(dummy.price).to eq Monetize.parse('1.23 USD')
278
- end
279
- end
280
-
281
- describe 'when accessing a document from the datastore with a Money datatype and blank value' do
282
- before(:each) do
283
- DummyMoney.create(description: "Test", price: '')
284
- end
285
-
286
- it 'should be nil' do
287
- dummy = DummyMoney.first
288
- expect(dummy.price).to be_nil
289
- end
290
-
291
- it 'should be updated correctly' do
292
- dummy = DummyMoney.first
293
- expect(dummy.price).to be_nil
294
- dummy.price = '1.23 USD'
295
- expect(dummy.save).to eq true
296
- dummy = DummyMoney.first
297
- expect(dummy.price.currency.iso_code).to eq 'USD'
298
- expect(dummy.price.cents).to eq 123
299
- end
300
- end
301
-
302
- describe 'when accessing a document from the datastore with embedded documents with money fields' do
303
- before(:each) do
304
- o = DummyOrder.new(first_name: 'test')
305
-
306
- o.dummy_line_items << DummyLineItem.new({name: 'item 1', price: Money.new(1299)})
307
- li = DummyLineItem.new({name: 'item 2', price: Money.new(1499)})
308
- o.dummy_line_items.push li
309
-
310
- o.save
311
- end
312
-
313
- it 'should have correct value for first item' do
314
- o = DummyOrder.first
315
- expect(o.dummy_line_items.first.price).to eq Monetize.parse('12.99')
316
- end
317
-
318
- it 'should have correct value for first item' do
319
- o = DummyOrder.first
320
- expect(o.dummy_line_items.last.price).to eq Monetize.parse('14.99')
321
- end
322
- end
323
-
324
- describe 'when accessing a document from the datastore with multiple Money datatypes' do
325
- before(:each) do
326
- DummyPrices.create(description: "Test", price3: '1', price1: '1.23', price2: '2.33')
327
- end
328
-
329
- it 'should have correct Money value for field 1' do
330
- dummy = DummyPrices.first
331
- expect(dummy.price1).to eq Monetize.parse('1.23')
332
- end
333
- it 'should have correct Money value for field 2' do
334
- dummy = DummyPrices.first
335
- expect(dummy.price2).to eq Monetize.parse('2.33')
336
- end
337
- it 'should have correct Money value for field 3' do
338
- dummy = DummyPrices.first
339
- expect(dummy.price3).to eq Monetize.parse('1')
340
- end
341
- end
342
- end