solidus_core 1.3.0.beta1 → 1.3.0.rc1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of solidus_core might be problematic. Click here for more details.

Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/app/assets/images/noimage/large.png +0 -0
  4. data/app/assets/images/noimage/mini.png +0 -0
  5. data/app/assets/images/noimage/product.png +0 -0
  6. data/app/assets/images/noimage/small.png +0 -0
  7. data/app/models/spree/app_configuration.rb +9 -9
  8. data/app/models/spree/country.rb +1 -0
  9. data/app/models/spree/line_item.rb +7 -1
  10. data/app/models/spree/payment_method.rb +1 -1
  11. data/app/models/spree/preferences/preferable.rb +1 -0
  12. data/app/models/spree/preferences/statically_configurable.rb +2 -2
  13. data/app/models/spree/price.rb +30 -2
  14. data/app/models/spree/product.rb +4 -1
  15. data/app/models/spree/stock/inventory_unit_builder.rb +2 -2
  16. data/app/models/spree/tax/tax_location.rb +4 -0
  17. data/app/models/spree/tax_rate.rb +2 -11
  18. data/app/models/spree/variant/price_selector.rb +35 -0
  19. data/app/models/spree/variant/pricing_options.rb +69 -4
  20. data/app/models/spree/variant/vat_price_generator.rb +58 -0
  21. data/app/models/spree/variant.rb +38 -16
  22. data/config/locales/en.yml +22 -1
  23. data/db/migrate/20140410141842_add_many_missing_indexes.rb +15 -13
  24. data/db/migrate/20140410150358_correct_some_polymorphic_index_and_add_more_missing.rb +40 -38
  25. data/db/migrate/20141217215630_update_product_slug_index.rb +4 -2
  26. data/db/migrate/20150723224133_remove_unnecessary_indexes.rb +2 -10
  27. data/db/migrate/20151219020209_add_stock_item_unique_index.rb +2 -2
  28. data/db/migrate/20160509181311_add_country_iso_to_prices.rb +8 -0
  29. data/lib/spree/core/class_constantizer.rb +31 -0
  30. data/lib/spree/core/engine.rb +55 -59
  31. data/lib/spree/core/environment/calculators.rb +6 -1
  32. data/lib/spree/core/environment.rb +5 -2
  33. data/lib/spree/core/environment_extension.rb +16 -12
  34. data/lib/spree/core/price_migrator.rb +32 -0
  35. data/lib/spree/core/search/base.rb +2 -2
  36. data/lib/spree/core/version.rb +1 -1
  37. data/lib/spree/core.rb +4 -0
  38. data/lib/spree/migration_helpers.rb +19 -0
  39. data/lib/spree/money.rb +41 -15
  40. data/lib/spree/promo/environment.rb +2 -1
  41. data/lib/spree/testing_support/controller_requests.rb +22 -7
  42. data/lib/spree/testing_support/factories/state_factory.rb +7 -0
  43. data/lib/spree/testing_support/factories/stock_location_factory.rb +4 -1
  44. data/lib/tasks/migrations/create_vat_prices.rake +11 -0
  45. data/lib/tasks/upgrade.rake +2 -1
  46. data/spec/lib/spree/core/class_constantizer_spec.rb +68 -0
  47. data/spec/lib/spree/core/environment_extension_spec.rb +33 -0
  48. data/spec/lib/spree/core/price_migrator_spec.rb +356 -0
  49. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +9 -0
  50. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +9 -0
  51. data/spec/lib/spree/money_spec.rb +75 -0
  52. data/spec/models/spree/app_configuration_spec.rb +5 -5
  53. data/spec/models/spree/country_spec.rb +16 -0
  54. data/spec/models/spree/line_item_spec.rb +6 -2
  55. data/spec/models/spree/preferences/preferable_spec.rb +5 -0
  56. data/spec/models/spree/preferences/statically_configurable_spec.rb +4 -0
  57. data/spec/models/spree/price_spec.rb +89 -0
  58. data/spec/models/spree/stock/coordinator_spec.rb +9 -0
  59. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +30 -32
  60. data/spec/models/spree/tax/tax_location_spec.rb +14 -5
  61. data/spec/models/spree/tax/taxation_integration_spec.rb +15 -42
  62. data/spec/models/spree/variant/{pricer_spec.rb → price_selector_spec.rb} +41 -1
  63. data/spec/models/spree/variant/pricing_options_spec.rb +87 -4
  64. data/spec/models/spree/variant/vat_price_generator_spec.rb +69 -0
  65. data/spec/models/spree/variant_spec.rb +57 -8
  66. metadata +14 -5
  67. data/app/models/spree/product_scope/scopes.rb +0 -47
  68. data/app/models/spree/variant/pricer.rb +0 -19
@@ -49,4 +49,20 @@ describe Spree::Country, type: :model do
49
49
  end
50
50
  end
51
51
  end
52
+
53
+ describe '#prices' do
54
+ let(:country) { create(:country) }
55
+ subject { country.prices }
56
+
57
+ it { is_expected.to be_a(ActiveRecord::Associations::CollectionProxy) }
58
+
59
+ context "if the country has associated prices" do
60
+ let!(:price_one) { create(:price) }
61
+ let!(:price_two) { create(:price) }
62
+ let!(:price_three) { create(:price) }
63
+ let(:country) { create(:country, prices: [price_one, price_two]) }
64
+
65
+ it { is_expected.to contain_exactly(price_one, price_two) }
66
+ end
67
+ end
52
68
  end
@@ -207,15 +207,19 @@ describe Spree::LineItem, type: :model do
207
207
 
208
208
  describe "#options=" do
209
209
  it "can handle updating a blank line item with no order" do
210
- expect(Spree::Deprecation).not_to receive(:warn)
211
210
  line_item.options = { price: 123 }
212
211
  end
213
212
 
214
213
  it "updates the data provided in the options" do
215
- expect(Spree::Deprecation).not_to receive(:warn)
216
214
  line_item.options = { price: 123 }
217
215
  expect(line_item.price).to eq 123
218
216
  end
217
+
218
+ it "updates the price based on the options provided" do
219
+ expect(line_item).to receive(:gift_wrap=).with(true)
220
+ expect(line_item).to receive(:money_price=)
221
+ line_item.options = { gift_wrap: true }
222
+ end
219
223
  end
220
224
 
221
225
  describe 'money_price=' do
@@ -117,6 +117,11 @@ describe Spree::Preferences::Preferable, type: :model do
117
117
  @a.set_preference(:is_integer, '')
118
118
  expect(@a.preferences[:is_integer]).to eq(0)
119
119
  end
120
+
121
+ it 'does not convert if value is nil' do
122
+ @a.set_preference(:is_integer, nil)
123
+ expect(@a.preferences[:is_integer]).to be_nil
124
+ end
120
125
  end
121
126
 
122
127
  context "converts decimal preferences to BigDecimal values" do
@@ -9,6 +9,10 @@ module Spree
9
9
  def initialize
10
10
  @preferences = { color: 'blue' }
11
11
  end
12
+
13
+ def [](key)
14
+ return @preferences if key == :preferences
15
+ end
12
16
  end
13
17
  end
14
18
  let(:klass) do
@@ -1,6 +1,13 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Spree::Price, type: :model do
4
+ describe 'searchable columns' do
5
+ subject { described_class.whitelisted_ransackable_attributes }
6
+ it 'allows searching by variant_id' do
7
+ expect(subject).to include("variant_id")
8
+ end
9
+ end
10
+
4
11
  describe 'validations' do
5
12
  let(:variant) { stub_model Spree::Variant }
6
13
  subject { Spree::Price.new variant: variant, amount: amount }
@@ -38,5 +45,87 @@ describe Spree::Price, type: :model do
38
45
  let(:amount) { Spree::Price::MAXIMUM_AMOUNT }
39
46
  it { is_expected.to be_valid }
40
47
  end
48
+
49
+ context '#country_iso' do
50
+ subject(:price) { build(:price, country_iso: country_iso) }
51
+
52
+ context 'when country iso is nil' do
53
+ let(:country_iso) { nil }
54
+
55
+ it { is_expected.to be_valid }
56
+ end
57
+
58
+ context 'when country iso is a country code' do
59
+ let!(:country) { create(:country, iso: "DE") }
60
+ let(:country_iso) { "DE" }
61
+
62
+ it { is_expected.to be_valid }
63
+ end
64
+
65
+ context 'when country iso is not a country code' do
66
+ let(:country_iso) { "ZZ" }
67
+
68
+ it { is_expected.not_to be_valid }
69
+ end
70
+ end
71
+
72
+ describe '#country' do
73
+ let!(:country) { create(:country, iso: "DE") }
74
+ let(:price) { create(:price, country_iso: "DE", is_default: false) }
75
+
76
+ it 'returns the country object' do
77
+ expect(price.country).to eq(country)
78
+ end
79
+ end
80
+ end
81
+
82
+ describe "#currency" do
83
+ let(:variant) { stub_model Spree::Variant }
84
+ subject { Spree::Price.new variant: variant, amount: 10, currency: currency }
85
+
86
+ describe "validation" do
87
+ context "with an invalid currency" do
88
+ let(:currency) { "XYZ" }
89
+
90
+ it { is_expected.to be_invalid }
91
+
92
+ it "has an understandable error message" do
93
+ subject.valid?
94
+ expect(subject.errors.messages[:currency].first).to eq("is not a valid currency code")
95
+ end
96
+ end
97
+
98
+ context "with a valid currency" do
99
+ let(:currency) { "USD" }
100
+
101
+ it { is_expected.to be_valid }
102
+ end
103
+ end
104
+ end
105
+
106
+ describe 'scopes' do
107
+ describe '.for_any_country' do
108
+ let(:country) { create(:country) }
109
+ let!(:fallback_price) { create(:price, country_iso: nil) }
110
+ let!(:country_price) { create(:price, country: country) }
111
+
112
+ subject { described_class.for_any_country }
113
+
114
+ it { is_expected.to include(fallback_price) }
115
+ end
116
+ end
117
+
118
+ describe 'net_amount' do
119
+ let(:country) { create(:country, iso: "DE") }
120
+ let(:zone) { create(:zone, countries: [country]) }
121
+ let!(:tax_rate) { create(:tax_rate, included_in_price: true, zone: zone, tax_category: variant.tax_category) }
122
+
123
+ let(:variant) { create(:product).master }
124
+
125
+ let(:price) { variant.prices.create(amount: 20, country: country) }
126
+
127
+ subject { price.net_amount }
128
+
129
+ it { is_expected.to eq(BigDecimal.new(20) / 1.1) }
41
130
  end
42
131
  end
@@ -42,6 +42,15 @@ module Spree
42
42
  expect(subject.shipments.count).to eq(StockLocation.count - 1)
43
43
  end
44
44
  end
45
+
46
+ it "does not unintentionally add shipments to the order" do
47
+ subject.shipments
48
+ expect {
49
+ order.update!
50
+ }.not_to change {
51
+ order.shipments.count
52
+ }
53
+ end
45
54
  end
46
55
 
47
56
  # regression spec
@@ -2,46 +2,44 @@ require 'spec_helper'
2
2
 
3
3
  module Spree
4
4
  module Stock
5
- module Splitter
6
- describe ShippingCategory, type: :model do
7
- let(:order) { create(:order_with_line_items, line_items_count: 1) }
8
- let(:line_item) { order.line_items.first }
9
- let(:variant1) { build(:variant) }
10
- let(:variant2) { build(:variant) }
11
- let(:shipping_category_1) { create(:shipping_category, name: 'A') }
12
- let(:shipping_category_2) { create(:shipping_category, name: 'B') }
13
-
14
- def inventory_unit1
15
- build(:inventory_unit, variant: variant1, order: order, line_item: line_item).tap do |inventory_unit|
16
- inventory_unit.variant.product.shipping_category = shipping_category_1
17
- end
5
+ describe Splitter::ShippingCategory, type: :model do
6
+ let(:order) { create(:order_with_line_items, line_items_count: 1) }
7
+ let(:line_item) { order.line_items.first }
8
+ let(:variant1) { build(:variant) }
9
+ let(:variant2) { build(:variant) }
10
+ let(:shipping_category_1) { create(:shipping_category, name: 'A') }
11
+ let(:shipping_category_2) { create(:shipping_category, name: 'B') }
12
+
13
+ def inventory_unit1
14
+ build(:inventory_unit, variant: variant1, order: order, line_item: line_item).tap do |inventory_unit|
15
+ inventory_unit.variant.product.shipping_category = shipping_category_1
18
16
  end
17
+ end
19
18
 
20
- def inventory_unit2
21
- build(:inventory_unit, variant: variant2, order: order, line_item: line_item).tap do |inventory_unit|
22
- inventory_unit.variant.product.shipping_category = shipping_category_2
23
- end
19
+ def inventory_unit2
20
+ build(:inventory_unit, variant: variant2, order: order, line_item: line_item).tap do |inventory_unit|
21
+ inventory_unit.variant.product.shipping_category = shipping_category_2
24
22
  end
23
+ end
25
24
 
26
- let(:packer) { build(:stock_packer) }
25
+ let(:packer) { build(:stock_packer) }
27
26
 
28
- subject { ShippingCategory.new(packer) }
27
+ subject { described_class.new(packer) }
29
28
 
30
- it 'splits each package by shipping category' do
31
- package1 = Package.new(packer.stock_location)
32
- 4.times { package1.add inventory_unit1 }
33
- 8.times { package1.add inventory_unit2 }
29
+ it 'splits each package by shipping category' do
30
+ package1 = Package.new(packer.stock_location)
31
+ 4.times { package1.add inventory_unit1 }
32
+ 8.times { package1.add inventory_unit2 }
34
33
 
35
- package2 = Package.new(packer.stock_location)
36
- 6.times { package2.add inventory_unit1 }
37
- 9.times { package2.add inventory_unit2, :backordered }
34
+ package2 = Package.new(packer.stock_location)
35
+ 6.times { package2.add inventory_unit1 }
36
+ 9.times { package2.add inventory_unit2, :backordered }
38
37
 
39
- packages = subject.split([package1, package2])
40
- expect(packages[0].quantity).to eq 4
41
- expect(packages[1].quantity).to eq 8
42
- expect(packages[2].quantity).to eq 6
43
- expect(packages[3].quantity).to eq 9
44
- end
38
+ packages = subject.split([package1, package2])
39
+ expect(packages[0].quantity).to eq 4
40
+ expect(packages[1].quantity).to eq 8
41
+ expect(packages[2].quantity).to eq 6
42
+ expect(packages[3].quantity).to eq 9
45
43
  end
46
44
  end
47
45
  end
@@ -34,13 +34,22 @@ RSpec.describe Spree::Tax::TaxLocation do
34
34
  expect(subject.country_id).to eq(country.id)
35
35
  end
36
36
  end
37
+ end
37
38
 
38
- context 'with a state object' do
39
- let(:args) { { state: state } }
39
+ describe "#country" do
40
+ let(:country) { create(:country) }
41
+ subject { described_class.new(args).country }
40
42
 
41
- it "will yield a location with that state's id" do
42
- expect(subject.state_id).to eq(state.id)
43
- end
43
+ context 'with a country object' do
44
+ let(:args) { { country: country } }
45
+
46
+ it { is_expected.to eq(country) }
47
+ end
48
+
49
+ context 'with no country object' do
50
+ let(:args) { { country: nil } }
51
+
52
+ it { is_expected.to be nil }
44
53
  end
45
54
  end
46
55
 
@@ -43,7 +43,7 @@ RSpec.describe "Taxation system integration tests" do
43
43
  context 'selling from germany' do
44
44
  let(:germany) { create :country, iso: "DE" }
45
45
  # The weird default_tax boolean is what makes this context one with default included taxes
46
- let!(:germany_zone) { create :zone, countries: [germany], default_tax: true }
46
+ let!(:germany_zone) { create :zone, countries: [germany] }
47
47
  let(:romania) { create(:country, iso: "RO") }
48
48
  let(:romania_zone) { create(:zone, countries: [romania] ) }
49
49
  let(:eu_zone) { create(:zone, countries: [romania, germany]) }
@@ -114,6 +114,7 @@ RSpec.describe "Taxation system integration tests" do
114
114
  end
115
115
 
116
116
  before do
117
+ Spree::Config.admin_vat_country_iso = "DE"
117
118
  order.contents.add(variant)
118
119
  end
119
120
 
@@ -310,7 +311,6 @@ RSpec.describe "Taxation system integration tests" do
310
311
  let(:variant) { download }
311
312
 
312
313
  it 'still has an adjusted price for romania' do
313
- pending "waiting for the MOSS refactoring"
314
314
  expect(line_item.price).to eq(10.42)
315
315
  end
316
316
 
@@ -319,12 +319,10 @@ RSpec.describe "Taxation system integration tests" do
319
319
  end
320
320
 
321
321
  it 'has 2.02 of included tax' do
322
- pending 'waiting for the MOSS refactoring'
323
322
  expect(line_item.included_tax_total).to eq(2.02)
324
323
  end
325
324
 
326
325
  it 'has a constant amount pre tax' do
327
- pending 'but it changes to 8.06, because Spree thinks both VATs apply'
328
326
  expect(line_item.discounted_amount - line_item.included_tax_total).to eq(8.40)
329
327
  end
330
328
  end
@@ -334,19 +332,16 @@ RSpec.describe "Taxation system integration tests" do
334
332
 
335
333
  before { 2.times { order.next! } }
336
334
 
337
- it 'it has a shipment with an adjusted price to 2.08' do
338
- pending 'Waiting for the MOSS refactoring'
339
- expect(shipment.amount).to eq(2.08)
335
+ it 'it has a shipment with worth 2.00' do
336
+ expect(shipment.amount).to eq(2.00)
340
337
  end
341
338
 
342
339
  it 'has a shipment with 0.40 included tax' do
343
- pending 'But the tax is not created'
344
- expect(shipment.included_tax_total).to eq(0.40)
340
+ expect(shipment.included_tax_total).to eq(0.39)
345
341
  end
346
342
 
347
343
  it 'has a shipping rate that correctly reflects the shipment' do
348
- pending 'But the shipping rate is not adjusted'
349
- expect(shipping_rate.display_price).to eq("$2.08 (incl. $0.40 Romanian VAT)")
344
+ expect(shipping_rate.display_price).to eq("$2.00 (incl. $0.39 Romanian VAT)")
350
345
  end
351
346
  end
352
347
  end
@@ -360,22 +355,18 @@ RSpec.describe "Taxation system integration tests" do
360
355
  let(:variant) { book }
361
356
 
362
357
  it 'should sell at the net price' do
363
- pending "Prices have to be adjusted"
364
358
  expect(line_item.price).to eq(18.69)
365
359
  end
366
360
 
367
361
  it 'is adjusted to the net price' do
368
- pending 'This will turn green when the default zone is gone'
369
362
  expect(line_item.total).to eq(18.69)
370
363
  end
371
364
 
372
365
  it 'has no tax adjustments' do
373
- pending "Right now it gets a refund"
374
366
  expect(line_item.adjustments.tax.count).to eq(0)
375
367
  end
376
368
 
377
369
  it 'has no included tax' do
378
- pending 'This will turn green when the default zone is gone'
379
370
  expect(line_item.included_tax_total).to eq(0)
380
371
  end
381
372
 
@@ -397,7 +388,6 @@ RSpec.describe "Taxation system integration tests" do
397
388
  let(:variant) { book }
398
389
 
399
390
  it 'should sell at the net price' do
400
- pending "Prices have to be adjusted"
401
391
  expect(line_item.price).to eq(18.69)
402
392
  end
403
393
 
@@ -406,7 +396,6 @@ RSpec.describe "Taxation system integration tests" do
406
396
  end
407
397
 
408
398
  it 'has no tax adjustments' do
409
- pending "Right now it gets a refund"
410
399
  expect(line_item.adjustments.tax.count).to eq(0)
411
400
  end
412
401
 
@@ -415,12 +404,10 @@ RSpec.describe "Taxation system integration tests" do
415
404
  end
416
405
 
417
406
  it 'has no additional tax' do
418
- pending 'but there is a refund, still'
419
407
  expect(line_item.additional_tax_total).to eq(0)
420
408
  end
421
409
 
422
410
  it 'has a constant amount pre tax' do
423
- pending 'But it has a discount that abuses the additional tax total'
424
411
  expect(line_item.discounted_amount - line_item.included_tax_total).to eq(18.69)
425
412
  end
426
413
 
@@ -429,9 +416,8 @@ RSpec.describe "Taxation system integration tests" do
429
416
 
430
417
  before { 2.times { order.next! } }
431
418
 
432
- it 'it has a shipment with an adjusted price to 7.47' do
433
- pending 'but prices are not adjusted yet'
434
- expect(shipment.amount).to eq(7.47)
419
+ it 'it has a shipment that costs $8.00' do
420
+ expect(shipment.amount).to eq(8.00)
435
421
  end
436
422
 
437
423
  it 'has a shipment with no included tax' do
@@ -439,8 +425,7 @@ RSpec.describe "Taxation system integration tests" do
439
425
  end
440
426
 
441
427
  it 'has a shipping rate that correctly reflects the shipment' do
442
- pending 'since no tax created, no correct display price'
443
- expect(shipping_rate.display_price).to eq("$7.47")
428
+ expect(shipping_rate.display_price).to eq("$8.00")
444
429
  end
445
430
  end
446
431
  end
@@ -449,12 +434,10 @@ RSpec.describe "Taxation system integration tests" do
449
434
  let(:variant) { sweater }
450
435
 
451
436
  it 'should sell at the net price' do
452
- pending 'but prices are not adjusted according to the zone yet'
453
437
  expect(line_item.price).to eq(25.21)
454
438
  end
455
439
 
456
440
  it 'has no tax adjustments' do
457
- pending 'but it has a refund'
458
441
  expect(line_item.adjustments.tax.count).to eq(0)
459
442
  end
460
443
 
@@ -463,12 +446,10 @@ RSpec.describe "Taxation system integration tests" do
463
446
  end
464
447
 
465
448
  it 'has no additional tax' do
466
- pending 'but it has a refund for included taxes wtf'
467
449
  expect(line_item.additional_tax_total).to eq(0)
468
450
  end
469
451
 
470
452
  it 'has a constant amount pre tax' do
471
- pending 'But it has a discount that abuses the additional tax total'
472
453
  expect(line_item.discounted_amount - line_item.included_tax_total).to eq(25.21)
473
454
  end
474
455
 
@@ -477,9 +458,8 @@ RSpec.describe "Taxation system integration tests" do
477
458
 
478
459
  before { 2.times { order.next! } }
479
460
 
480
- it 'it has a shipment with an adjusted price to 13.45' do
481
- pending 'But prices are not adjusted yet'
482
- expect(shipment.amount).to eq(13.45)
461
+ it 'it has a shipment costing $16.00' do
462
+ expect(shipment.amount).to eq(16.00)
483
463
  end
484
464
 
485
465
  it 'has a shipment with no included tax' do
@@ -487,8 +467,7 @@ RSpec.describe "Taxation system integration tests" do
487
467
  end
488
468
 
489
469
  it 'has a shipping rate that correctly reflects the shipment' do
490
- pending 'since no tax created, no correct display price'
491
- expect(shipping_rate.display_price).to eq("$13.45")
470
+ expect(shipping_rate.display_price).to eq("$16.00")
492
471
  end
493
472
  end
494
473
  end
@@ -497,12 +476,10 @@ RSpec.describe "Taxation system integration tests" do
497
476
  let(:variant) { download }
498
477
 
499
478
  it 'should sell at the net price' do
500
- pending 'but prices are not adjusted yet'
501
479
  expect(line_item.price).to eq(8.40)
502
480
  end
503
481
 
504
482
  it 'has no tax adjustments' do
505
- pending 'but a refund is created'
506
483
  expect(line_item.adjustments.tax.count).to eq(0)
507
484
  end
508
485
 
@@ -511,12 +488,10 @@ RSpec.describe "Taxation system integration tests" do
511
488
  end
512
489
 
513
490
  it 'has no additional tax' do
514
- pending 'but an tax refund that disguises as additional tax is created'
515
491
  expect(line_item.additional_tax_total).to eq(0)
516
492
  end
517
493
 
518
494
  it 'has a constant amount pre tax' do
519
- pending 'But it has a discount that abuses the additional tax total'
520
495
  expect(line_item.discounted_amount - line_item.included_tax_total).to eq(8.40)
521
496
  end
522
497
  end
@@ -526,9 +501,8 @@ RSpec.describe "Taxation system integration tests" do
526
501
 
527
502
  before { 2.times { order.next! } }
528
503
 
529
- it 'it has a shipment with an adjusted price to 1.68' do
530
- pending 'but prices are not adjusted yet'
531
- expect(shipment.amount).to eq(1.68)
504
+ it 'it has a shipment costing 2.00' do
505
+ expect(shipment.amount).to eq(2.00)
532
506
  end
533
507
 
534
508
  it 'has a shipment with no included tax' do
@@ -536,8 +510,7 @@ RSpec.describe "Taxation system integration tests" do
536
510
  end
537
511
 
538
512
  it 'has a shipping rate that correctly reflects the shipment' do
539
- pending 'since no tax created, no correct display price'
540
- expect(shipping_rate.display_price).to eq("$1.68")
513
+ expect(shipping_rate.display_price).to eq("$2.00")
541
514
  end
542
515
  end
543
516
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::Variant::Pricer do
3
+ describe Spree::Variant::PriceSelector do
4
4
  let(:variant) { build_stubbed(:variant) }
5
5
 
6
6
  subject { described_class.new(variant) }
@@ -23,6 +23,46 @@ describe Spree::Variant::Pricer do
23
23
  it "returns the correct (default) price as a Spree::Money object" do
24
24
  expect(subject.price_for(pricing_options)).to eq(Spree::Money.new(12.34, currency: "USD"))
25
25
  end
26
+
27
+ context "with the another country iso" do
28
+ let(:country) { create(:country, iso: "DE") }
29
+
30
+ let(:pricing_options) do
31
+ described_class.pricing_options_class.new(currency: "USD", country_iso: "DE")
32
+ end
33
+
34
+ context "with a price for that country present" do
35
+ before do
36
+ variant.prices.create(amount: 44.44, country: country, currency: Spree::Config.currency)
37
+ end
38
+
39
+ it "returns the correct price" do
40
+ expect(subject.price_for(pricing_options)).to eq(Spree::Money.new(44.44, currency: "USD"))
41
+ end
42
+ end
43
+
44
+ context "with no price for that country present" do
45
+ context "and no fallback price for the variant present" do
46
+ before do
47
+ variant.prices.delete_all
48
+ end
49
+
50
+ it "returns nil" do
51
+ expect(subject.price_for(pricing_options)).to be_nil
52
+ end
53
+ end
54
+
55
+ context "and a fallback price for the variant present" do
56
+ before do
57
+ variant.prices.create(amount: 55.44, country: nil, currency: Spree::Config.currency)
58
+ end
59
+
60
+ it "returns the fallback price" do
61
+ expect(subject.price_for(pricing_options)).to eq(Spree::Money.new(55.44, currency: "USD"))
62
+ end
63
+ end
64
+ end
65
+ end
26
66
  end
27
67
 
28
68
  context "with a different currency" do