solidus_core 2.2.2 → 2.3.0.beta1

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 (175) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -7
  3. data/app/assets/javascripts/spree.js.erb +2 -2
  4. data/app/helpers/spree/base_helper.rb +3 -4
  5. data/app/models/spree/address.rb +1 -1
  6. data/app/models/spree/adjustment.rb +3 -1
  7. data/app/models/spree/app_configuration.rb +43 -0
  8. data/app/models/spree/billing_integration.rb +2 -2
  9. data/app/models/spree/calculator/default_tax.rb +3 -1
  10. data/app/models/spree/calculator/distributed_amount.rb +24 -0
  11. data/app/models/spree/calculator/free_shipping.rb +0 -1
  12. data/app/models/spree/calculator/tiered_flat_rate.rb +17 -3
  13. data/app/models/spree/calculator/tiered_percent.rb +18 -3
  14. data/app/models/spree/distributed_amounts_handler.rb +43 -0
  15. data/app/models/spree/gateway/bogus.rb +7 -83
  16. data/app/models/spree/gateway/bogus_simple.rb +7 -20
  17. data/app/models/spree/gateway.rb +8 -58
  18. data/app/models/spree/image.rb +1 -1
  19. data/app/models/spree/line_item.rb +1 -1
  20. data/app/models/spree/option_value.rb +1 -1
  21. data/app/models/spree/order/checkout.rb +1 -4
  22. data/app/models/spree/order/number_generator.rb +43 -0
  23. data/app/models/spree/order.rb +33 -38
  24. data/app/models/spree/order_contents.rb +1 -1
  25. data/app/models/spree/order_taxation.rb +79 -0
  26. data/app/models/spree/order_update_attributes.rb +0 -2
  27. data/app/models/spree/order_updater.rb +55 -33
  28. data/app/models/spree/payment.rb +0 -1
  29. data/app/models/spree/payment_method/bogus_credit_card.rb +87 -0
  30. data/app/models/spree/payment_method/check.rb +14 -6
  31. data/app/models/spree/payment_method/credit_card.rb +41 -0
  32. data/app/models/spree/payment_method/simple_bogus_credit_card.rb +24 -0
  33. data/app/models/spree/payment_method/store_credit.rb +5 -13
  34. data/app/models/spree/payment_method.rb +126 -40
  35. data/app/models/spree/preferences/preferable.rb +5 -1
  36. data/app/models/spree/preferences/store.rb +2 -2
  37. data/app/models/spree/product/scopes.rb +14 -1
  38. data/app/models/spree/product.rb +10 -4
  39. data/app/models/spree/promotion_action.rb +4 -0
  40. data/app/models/spree/promotion_code/batch_builder.rb +3 -2
  41. data/app/models/spree/promotion_rule.rb +4 -0
  42. data/app/models/spree/role.rb +2 -0
  43. data/app/models/spree/role_user.rb +2 -0
  44. data/app/models/spree/shipment.rb +4 -2
  45. data/app/models/spree/shipping_method.rb +3 -1
  46. data/app/models/spree/shipping_rate.rb +1 -1
  47. data/app/models/spree/state.rb +10 -2
  48. data/app/models/spree/stock_item.rb +3 -3
  49. data/app/models/spree/store.rb +5 -0
  50. data/app/models/spree/store_credit.rb +2 -2
  51. data/app/models/spree/store_credit_event.rb +1 -1
  52. data/app/models/spree/store_selector/by_server_name.rb +30 -0
  53. data/app/models/spree/store_selector/legacy.rb +48 -0
  54. data/app/models/spree/tax/item_tax.rb +20 -0
  55. data/app/models/spree/tax/order_adjuster.rb +2 -14
  56. data/app/models/spree/tax/order_tax.rb +18 -0
  57. data/app/models/spree/tax/shipping_rate_taxer.rb +4 -13
  58. data/app/models/spree/tax/tax_helpers.rb +5 -3
  59. data/app/models/spree/tax_calculator/default.rb +83 -0
  60. data/app/models/spree/tax_calculator/shipping_rate.rb +46 -0
  61. data/app/models/spree/tax_category.rb +9 -1
  62. data/app/models/spree/tax_rate.rb +31 -7
  63. data/app/models/spree/tax_rate_tax_category.rb +6 -0
  64. data/app/models/spree/taxon.rb +1 -1
  65. data/app/models/spree/variant.rb +1 -1
  66. data/app/views/spree/{shipment_mailer → carton_mailer}/shipped_email.html.erb +3 -3
  67. data/app/views/spree/order_mailer/cancel_email.html.erb +3 -3
  68. data/app/views/spree/order_mailer/confirm_email.html.erb +2 -2
  69. data/app/views/spree/order_mailer/inventory_cancellation_email.html.erb +26 -0
  70. data/app/views/spree/reimbursement_mailer/reimbursement_email.html.erb +2 -2
  71. data/app/views/spree/test_mailer/test_email.html.erb +2 -2
  72. data/config/locales/en.yml +66 -57
  73. data/db/default/spree/refund_reasons.rb +1 -0
  74. data/db/default/spree/shipping_categories.rb +1 -0
  75. data/db/default/spree/stock_locations.rb +2 -0
  76. data/db/default/spree/stores.rb +3 -4
  77. data/db/migrate/20170412103617_transform_tax_rate_category_relation.rb +48 -0
  78. data/db/migrate/20170422134804_add_roles_unique_constraints.rb +6 -0
  79. data/db/migrate/20170522143442_add_time_range_to_tax_rate.rb +6 -0
  80. data/db/migrate/20170608074534_rename_bogus_gateways.rb +13 -0
  81. data/lib/generators/spree/custom_user/custom_user_generator.rb +1 -1
  82. data/lib/generators/spree/dummy/dummy_generator.rb +10 -4
  83. data/lib/generators/spree/dummy/templates/rails/database.yml +12 -12
  84. data/lib/generators/spree/install/install_generator.rb +5 -5
  85. data/lib/generators/spree/install/templates/config/initializers/{spree.rb → solidus.rb} +0 -0
  86. data/lib/solidus/migrations/rename_gateways.rb +39 -0
  87. data/lib/spree/core/controller_helpers/auth.rb +1 -1
  88. data/lib/spree/core/controller_helpers/order.rb +10 -5
  89. data/lib/spree/core/controller_helpers/store.rb +1 -9
  90. data/lib/spree/core/current_store.rb +6 -14
  91. data/lib/spree/core/engine.rb +4 -3
  92. data/lib/spree/core/importer/order.rb +4 -4
  93. data/lib/spree/core/version.rb +1 -1
  94. data/lib/spree/core.rb +0 -1
  95. data/lib/spree/localized_number.rb +2 -1
  96. data/lib/spree/permitted_attributes.rb +12 -6
  97. data/lib/spree/testing_support/capybara_ext.rb +0 -1
  98. data/lib/spree/testing_support/factories/adjustment_factory.rb +5 -1
  99. data/lib/spree/testing_support/factories/order_factory.rb +26 -24
  100. data/lib/spree/testing_support/factories/payment_factory.rb +4 -0
  101. data/lib/spree/testing_support/factories/payment_method_factory.rb +3 -3
  102. data/lib/spree/testing_support/factories/shipment_factory.rb +7 -3
  103. data/lib/spree/testing_support/factories/tax_rate_factory.rb +1 -1
  104. data/lib/spree/testing_support/factories/variant_factory.rb +3 -1
  105. data/lib/tasks/migrations/copy_order_bill_address_to_credit_card.rake +0 -4
  106. data/lib/tasks/migrations/migrate_user_addresses.rake +2 -2
  107. data/lib/tasks/migrations/rename_gateways.rake +19 -0
  108. data/solidus_core.gemspec +2 -3
  109. data/spec/lib/spree/core/controller_helpers/order_spec.rb +32 -6
  110. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -1
  111. data/spec/lib/spree/core/current_store_spec.rb +6 -11
  112. data/spec/lib/spree/core/price_migrator_spec.rb +4 -4
  113. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +199 -91
  114. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +18 -0
  115. data/spec/lib/spree/localized_number_spec.rb +6 -0
  116. data/spec/mailers/carton_mailer_spec.rb +3 -3
  117. data/spec/models/spree/address_spec.rb +3 -3
  118. data/spec/models/spree/adjustment_spec.rb +71 -27
  119. data/spec/models/spree/calculator/default_tax_spec.rb +72 -1
  120. data/spec/models/spree/calculator/distributed_amount_spec.rb +32 -0
  121. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +20 -1
  122. data/spec/models/spree/calculator/tiered_percent_spec.rb +20 -1
  123. data/spec/models/spree/distributed_amounts_handler_spec.rb +79 -0
  124. data/spec/models/spree/gateway/bogus_simple.rb +7 -13
  125. data/spec/models/spree/gateway/bogus_spec.rb +8 -4
  126. data/spec/models/spree/gateway_spec.rb +6 -105
  127. data/spec/models/spree/image_spec.rb +23 -0
  128. data/spec/models/spree/order/checkout_spec.rb +3 -18
  129. data/spec/models/spree/order/number_generator_spec.rb +45 -0
  130. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +135 -0
  131. data/spec/models/spree/order/payment_spec.rb +7 -2
  132. data/spec/models/spree/order/state_machine_spec.rb +4 -2
  133. data/spec/models/spree/order_capturing_spec.rb +8 -8
  134. data/spec/models/spree/order_contents_spec.rb +8 -1
  135. data/spec/models/spree/order_shipping_spec.rb +5 -1
  136. data/spec/models/spree/order_spec.rb +156 -83
  137. data/spec/models/spree/order_taxation_spec.rb +126 -0
  138. data/spec/models/spree/order_update_attributes_spec.rb +1 -5
  139. data/spec/models/spree/order_updater_spec.rb +20 -21
  140. data/spec/models/spree/payment_create_spec.rb +14 -6
  141. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +8 -0
  142. data/spec/models/spree/payment_method/check_spec.rb +78 -0
  143. data/spec/models/spree/payment_method/credit_card_spec.rb +66 -0
  144. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +18 -0
  145. data/spec/models/spree/payment_method_spec.rb +47 -2
  146. data/spec/models/spree/payment_spec.rb +6 -8
  147. data/spec/models/spree/preference_spec.rb +1 -1
  148. data/spec/models/spree/price_spec.rb +1 -1
  149. data/spec/models/spree/product/scopes_spec.rb +46 -0
  150. data/spec/models/spree/promotion_action_spec.rb +4 -0
  151. data/spec/models/spree/promotion_code/batch_builder_spec.rb +25 -3
  152. data/spec/models/spree/promotion_code_batch_spec.rb +0 -6
  153. data/spec/models/spree/promotion_handler/coupon_spec.rb +1 -1
  154. data/spec/models/spree/promotion_rule_spec.rb +5 -0
  155. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +1 -1
  156. data/spec/models/spree/shipment_spec.rb +24 -3
  157. data/spec/models/spree/shipping_rate_spec.rb +5 -5
  158. data/spec/models/spree/state_spec.rb +31 -4
  159. data/spec/models/spree/stock/coordinator_spec.rb +24 -0
  160. data/spec/models/spree/stock/estimator_spec.rb +1 -1
  161. data/spec/models/spree/store_selector/by_server_name_spec.rb +26 -0
  162. data/spec/models/spree/store_selector/legacy_spec.rb +44 -0
  163. data/spec/models/spree/store_spec.rb +10 -2
  164. data/spec/models/spree/tax/order_adjuster_spec.rb +11 -21
  165. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +10 -3
  166. data/spec/models/spree/tax/taxation_integration_spec.rb +43 -8
  167. data/spec/models/spree/tax_calculator/default_spec.rb +54 -0
  168. data/spec/models/spree/tax_rate_spec.rb +92 -0
  169. data/spec/models/spree/variant/vat_price_generator_spec.rb +4 -4
  170. data/spec/models/spree/variant_spec.rb +8 -2
  171. data/spec/spec_helper.rb +2 -1
  172. data/spec/support/test_gateway.rb +1 -1
  173. metadata +45 -24
  174. data/app/models/spree/tax/item_adjuster.rb +0 -51
  175. data/spec/models/spree/tax/item_adjuster_spec.rb +0 -82
@@ -147,7 +147,8 @@ describe Spree::Order, type: :model do
147
147
  it_behaves_like "it references the user's the default address" do
148
148
  let(:address_kind) { :bill }
149
149
  before do
150
- order.user = FactoryGirl.create(:user, bill_address: default_address)
150
+ order.user = FactoryGirl.create(:user)
151
+ order.user.default_address = default_address
151
152
  order.next!
152
153
  order.reload
153
154
  end
@@ -184,7 +185,7 @@ describe Spree::Order, type: :model do
184
185
 
185
186
  it "recalculates tax and updates totals" do
186
187
  zone = create(:zone, countries: [order.tax_address.country])
187
- create(:tax_rate, tax_category: line_item.tax_category, amount: 0.05, zone: zone)
188
+ create(:tax_rate, tax_categories: [line_item.tax_category], amount: 0.05, zone: zone)
188
189
  order.next!
189
190
  expect(order).to have_attributes(
190
191
  adjustment_total: 0.5,
@@ -589,22 +590,6 @@ describe Spree::Order, type: :model do
589
590
  end
590
591
  end
591
592
 
592
- context 'a shipment has no shipping rates' do
593
- let(:order) { create(:order_with_line_items, state: 'confirm') }
594
- let(:shipment) { order.shipments.first }
595
-
596
- before do
597
- shipment.shipping_rates.destroy_all
598
- end
599
-
600
- it 'clears the shipments and fails the transition' do
601
- expect(order.complete).to eq(false)
602
- expect(order.errors[:base]).to include(Spree.t(:items_cannot_be_shipped))
603
- expect(order.shipments.count).to eq(0)
604
- expect(Spree::InventoryUnit.where(shipment_id: shipment.id).count).to eq(0)
605
- end
606
- end
607
-
608
593
  context 'the order is already paid' do
609
594
  let(:order) { create(:order_with_line_items) }
610
595
 
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Spree::Order::NumberGenerator do
4
+ subject { described_class.new.generate }
5
+
6
+ it { is_expected.to be_a(String) }
7
+
8
+ describe 'length' do
9
+ let(:default_length) do
10
+ Spree::Order::ORDER_NUMBER_LENGTH + Spree::Order::ORDER_NUMBER_PREFIX.length
11
+ end
12
+
13
+ it { expect(subject.length).to eq default_length }
14
+
15
+ context "when length option is 5" do
16
+ let(:option_length) { 5 + Spree::Order::ORDER_NUMBER_PREFIX.length }
17
+
18
+ subject { described_class.new(length: 5).generate }
19
+
20
+ it "should be 5 plus default prefix length" do
21
+ expect(subject.length).to eq option_length
22
+ end
23
+ end
24
+ end
25
+
26
+ context "when letters option is true" do
27
+ subject { described_class.new(letters: true).generate }
28
+
29
+ it "generates order number including letters" do
30
+ is_expected.to match /[A-Z]/
31
+ end
32
+ end
33
+
34
+ describe 'prefix' do
35
+ it { is_expected.to match /^#{Spree::Order::ORDER_NUMBER_PREFIX}/ }
36
+
37
+ context "when prefix option is 'P'" do
38
+ subject { described_class.new(prefix: 'P').generate }
39
+
40
+ it "generates order number prefixed with 'P'" do
41
+ is_expected.to match /^P/
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,135 @@
1
+ require 'spec_helper'
2
+
3
+ # This method in particular has been difficult to get right.
4
+ # Many things will affect this amount
5
+ #
6
+ # See also:
7
+ # https://github.com/solidusio/solidus/issues/1254
8
+ # https://github.com/spree/spree/issues/6229
9
+ # https://github.com/solidusio/solidus/issues/1107
10
+ # https://github.com/solidusio/solidus/pull/1557
11
+ # https://github.com/solidusio/solidus/pull/1536
12
+
13
+ RSpec.describe "Outstanding balance integration tests" do
14
+ let!(:order) { create(:order_with_line_items, line_items_count: 2, line_items_price: 3, shipment_cost: 13) }
15
+ let(:item_1) { order.line_items[0] }
16
+ let(:item_2) { order.line_items[1] }
17
+ before { order.update_attributes!(state: 'complete', completed_at: Time.now) }
18
+
19
+ subject do
20
+ order.reload
21
+ order.update!
22
+ order.outstanding_balance
23
+ end
24
+
25
+ context 'when the order is unpaid' do
26
+ it { should eq order.total }
27
+ it { should eq 19 }
28
+
29
+ context 'when the order is cancelled' do
30
+ before { order.cancel! }
31
+ it { should eq 0 }
32
+ end
33
+ end
34
+
35
+ context 'when the order is fully paid' do
36
+ let!(:payment) { create(:payment, :completed, order: order, amount: order.total) }
37
+ it { should eq 0 }
38
+
39
+ context 'and there is a full refund' do
40
+ let!(:refund) { create(:refund, payment: payment, amount: payment.amount) }
41
+ it { should eq 19 }
42
+ end
43
+
44
+ context 'when the order is cancelled' do
45
+ before { order.update_attributes!(state: "canceled") }
46
+ it { should eq(-19) }
47
+
48
+ context 'and the payment is voided' do
49
+ before { payment.update_attributes!(state: "void") }
50
+ it { should eq 0 }
51
+ end
52
+
53
+ context 'and there is a full refund' do
54
+ let!(:refund) { create(:refund, payment: payment, amount: payment.amount) }
55
+ it { should eq 0 }
56
+ end
57
+
58
+ context 'and there is a partial refund' do
59
+ let!(:refund) { create(:refund, payment: payment, amount: 6) }
60
+ it { should eq(-13) }
61
+ end
62
+ end
63
+
64
+ context 'with a removed item' do
65
+ before do
66
+ item_amount = item_1.final_amount
67
+ order.contents.remove(item_1.variant)
68
+ create(:refund, payment: payment, amount: item_amount)
69
+ end
70
+
71
+ it { should eq(0) }
72
+ end
73
+
74
+ context 'when the order is adjusted downward by an admin' do
75
+ let!(:adjustment) { create(:adjustment, order: order, adjustable: item_1, amount: -1, source: nil) }
76
+ let!(:refund) { create(:refund, payment: payment, amount: 1) }
77
+
78
+ it { should eq(0) }
79
+ end
80
+
81
+ context 'with a cancelled item' do
82
+ let(:cancelations) { Spree::OrderCancellations.new(order) }
83
+ let(:cancelled_item) { item_1 }
84
+
85
+ before do
86
+ # Required to refund
87
+ Spree::RefundReason.create!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false)
88
+
89
+ cancelations.cancel_unit(cancelled_item.inventory_units.first)
90
+ cancelations.reimburse_units(cancelled_item.inventory_units)
91
+
92
+ order.reload
93
+ end
94
+
95
+ it 'discounts the cancelled item amount' do
96
+ expect(order.refund_total).to eq(3)
97
+ expect(order.reimbursement_total).to eq(3)
98
+ expect(order.payment_total).to eq(16)
99
+ expect(order.outstanding_balance).to eq(0)
100
+
101
+ expect(order.total).to eq(19)
102
+ end
103
+ end
104
+ end
105
+
106
+ context 'when the order is partly paid' do
107
+ let!(:payment) { create(:payment, :completed, order: order, amount: 10) }
108
+ it { should eq 9 }
109
+
110
+ context 'and there is a full refund' do
111
+ let!(:refund) { create(:refund, payment: payment, amount: payment.amount) }
112
+ it { should eq 19 }
113
+ end
114
+
115
+ context 'when the order is cancelled' do
116
+ before { order.update_attributes!(state: "canceled") }
117
+ it { should eq(-10) }
118
+
119
+ context 'and the payment is voided' do
120
+ before { payment.update_attributes!(state: "void") }
121
+ it { should eq 0 }
122
+ end
123
+
124
+ context 'and there is a full refund' do
125
+ let!(:refund) { create(:refund, payment: payment, amount: payment.amount) }
126
+ it { should eq 0 }
127
+ end
128
+
129
+ context 'and there is a partial refund' do
130
+ let!(:refund) { create(:refund, payment: payment, amount: 6) }
131
+ it { should eq(-4) }
132
+ end
133
+ end
134
+ end
135
+ end
@@ -182,8 +182,13 @@ module Spree
182
182
  context "for canceled orders" do
183
183
  before { order.update_attributes(state: 'canceled') }
184
184
 
185
- it "it should be a negative amount incorporating reimbursements" do
186
- expect(order.outstanding_balance).to eq(-10)
185
+ it "it should be zero" do
186
+ expect(order.total).to eq(110)
187
+ expect(order.payments.sum(:amount)).to eq(10)
188
+ expect(order.refund_total).to eq(10)
189
+ expect(order.reimbursement_total).to eq(10)
190
+ expect(order.payment_total).to eq(0)
191
+ expect(order.outstanding_balance).to eq(0)
187
192
  end
188
193
  end
189
194
 
@@ -43,7 +43,7 @@ describe Spree::Order, type: :model do
43
43
  end
44
44
 
45
45
  it "adjusts tax rates when transitioning to delivery" do
46
- expect(Spree::Tax::OrderAdjuster).to receive(:new).once.with(order).and_call_original
46
+ expect(Spree::TaxCalculator::Default).to receive(:new).once.with(order).and_call_original
47
47
  order.next!
48
48
  end
49
49
  end
@@ -82,7 +82,9 @@ describe Spree::Order, type: :model do
82
82
  end
83
83
 
84
84
  it "should send a cancel email" do
85
- order.cancel!
85
+ perform_enqueued_jobs do
86
+ order.cancel!
87
+ end
86
88
 
87
89
  mail = ActionMailer::Base.deliveries.last
88
90
  expect(mail.subject).to include "Cancellation"
@@ -38,7 +38,7 @@ describe Spree::OrderCapturing do
38
38
 
39
39
  let!(:product) { create(:product, price: 10.00) }
40
40
  let!(:variant) do
41
- create(:variant, price: 10, product: product, track_inventory: false, tax_category: tax_rate.tax_category)
41
+ create(:variant, price: 10, product: product, track_inventory: false, tax_category: tax_rate.tax_categories.first)
42
42
  end
43
43
  let!(:shipping_method) { create(:free_shipping_method) }
44
44
  let(:tax_rate) { create(:tax_rate, amount: 0.1, zone: create(:global_zone, name: "Some Tax Zone")) }
@@ -58,10 +58,10 @@ describe Spree::OrderCapturing do
58
58
  context "payment method ordering" do
59
59
  let(:secondary_payment_method) { SecondaryBogusPaymentMethod }
60
60
 
61
- class SecondaryBogusPaymentMethod < Spree::Gateway::Bogus; end
61
+ class SecondaryBogusPaymentMethod < Spree::PaymentMethod::BogusCreditCard; end
62
62
 
63
63
  context "SecondaryBogusPaymentMethod payments are prioritized" do
64
- let(:payment_methods) { [SecondaryBogusPaymentMethod, Spree::Gateway::Bogus] }
64
+ let(:payment_methods) { [SecondaryBogusPaymentMethod, Spree::PaymentMethod::BogusCreditCard] }
65
65
 
66
66
  it "captures SecondaryBogusPaymentMethod payments first" do
67
67
  @bogus_payment.update!(amount: bogus_total + 100)
@@ -72,7 +72,7 @@ describe Spree::OrderCapturing do
72
72
  end
73
73
 
74
74
  context "Bogus payments are prioritized" do
75
- let(:payment_methods) { [Spree::Gateway::Bogus, SecondaryBogusPaymentMethod] }
75
+ let(:payment_methods) { [Spree::PaymentMethod::BogusCreditCard, SecondaryBogusPaymentMethod] }
76
76
 
77
77
  it "captures Bogus payments first" do
78
78
  @secondary_bogus_payment.update!(amount: secondary_total + 100)
@@ -89,7 +89,7 @@ describe Spree::OrderCapturing do
89
89
 
90
90
  before do
91
91
  allow(Spree::OrderCapturing).to receive(:sorted_payment_method_classes).and_return(
92
- [SecondaryBogusPaymentMethod, Spree::Gateway::Bogus]
92
+ [SecondaryBogusPaymentMethod, Spree::PaymentMethod::BogusCreditCard]
93
93
  )
94
94
  end
95
95
 
@@ -103,7 +103,7 @@ describe Spree::OrderCapturing do
103
103
 
104
104
  context "when a payment is not needed to capture the entire order" do
105
105
  let(:secondary_payment_method) { SecondaryBogusPaymentMethod }
106
- let(:payment_methods) { [Spree::Gateway::Bogus, SecondaryBogusPaymentMethod] }
106
+ let(:payment_methods) { [Spree::PaymentMethod::BogusCreditCard, SecondaryBogusPaymentMethod] }
107
107
 
108
108
  before do
109
109
  @bogus_payment.update!(amount: order.total)
@@ -132,9 +132,9 @@ describe Spree::OrderCapturing do
132
132
  let(:secondary_payment_method) { ExceptionallyBogusPaymentMethod }
133
133
  let(:bogus_total) { order.total - 1 }
134
134
  let(:secondary_total) { 1 }
135
- let(:payment_methods) { [Spree::Gateway::Bogus, ExceptionallyBogusPaymentMethod] }
135
+ let(:payment_methods) { [Spree::PaymentMethod::BogusCreditCard, ExceptionallyBogusPaymentMethod] }
136
136
 
137
- class ExceptionallyBogusPaymentMethod < Spree::Gateway::Bogus
137
+ class ExceptionallyBogusPaymentMethod < Spree::PaymentMethod::BogusCreditCard
138
138
  def capture(*_args)
139
139
  raise ActiveMerchant::ConnectionError.new("foo", nil)
140
140
  end
@@ -123,7 +123,7 @@ describe Spree::OrderContents, type: :model do
123
123
  describe 'tax calculations' do
124
124
  let!(:zone) { create(:global_zone) }
125
125
  let!(:tax_rate) do
126
- create(:tax_rate, zone: zone, tax_category: variant.tax_category)
126
+ create(:tax_rate, zone: zone, tax_categories: [variant.tax_category])
127
127
  end
128
128
 
129
129
  context 'when the order has a taxable address' do
@@ -203,6 +203,13 @@ describe Spree::OrderContents, type: :model do
203
203
  expect(order.reload.find_line_item_by_variant(variant)).to be_nil
204
204
  end
205
205
 
206
+ it 'should remove line_item if quantity is greater than line_item quantity' do
207
+ subject.add(variant, 1)
208
+ subject.remove(variant, 2)
209
+
210
+ expect(order.reload.find_line_item_by_variant(variant)).to be_nil
211
+ end
212
+
206
213
  it "should update order totals" do
207
214
  expect(order.item_total.to_f).to eq(0.00)
208
215
  expect(order.total.to_f).to eq(0.00)
@@ -19,7 +19,11 @@ describe Spree::OrderShipping do
19
19
 
20
20
  describe "shipment email" do
21
21
  it "should send a shipment email" do
22
- expect { subject }.to change { emails.size }.by(1)
22
+ expect {
23
+ perform_enqueued_jobs {
24
+ subject
25
+ }
26
+ }.to change { emails.size }.by(1)
23
27
  expect(emails.last.subject).to eq("#{order.store.name} Shipment Notification ##{order.number}")
24
28
  end
25
29
  end