spree_core 3.2.1 → 3.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (207) hide show
  1. checksums.yaml +4 -4
  2. data/lib/spree/core/version.rb +1 -1
  3. data/spree_core.gemspec +1 -1
  4. metadata +3 -206
  5. data/spec/fixtures/microdata.html +0 -22
  6. data/spec/fixtures/microdata_itemref.html +0 -15
  7. data/spec/fixtures/microdata_no_itemscope.html +0 -20
  8. data/spec/fixtures/thinking-cat.jpg +0 -0
  9. data/spec/helpers/base_helper_spec.rb +0 -200
  10. data/spec/helpers/products_helper_spec.rb +0 -289
  11. data/spec/lib/calculated_adjustments_spec.rb +0 -7
  12. data/spec/lib/i18n_spec.rb +0 -123
  13. data/spec/lib/search/base_spec.rb +0 -86
  14. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -103
  15. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -110
  16. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -17
  17. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -72
  18. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -39
  19. data/spec/lib/spree/core/delegate_belongs_to_spec.rb +0 -22
  20. data/spec/lib/spree/core/importer/order_spec.rb +0 -605
  21. data/spec/lib/spree/core/number_generator_spec.rb +0 -175
  22. data/spec/lib/spree/core/token_generator_spec.rb +0 -24
  23. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  24. data/spec/lib/spree/core_spec.rb +0 -23
  25. data/spec/lib/spree/localized_number_spec.rb +0 -48
  26. data/spec/lib/spree/migrations_spec.rb +0 -36
  27. data/spec/lib/spree/money_spec.rb +0 -122
  28. data/spec/lib/tasks/exchanges_spec.rb +0 -136
  29. data/spec/mailers/order_mailer_spec.rb +0 -122
  30. data/spec/mailers/reimbursement_mailer_spec.rb +0 -47
  31. data/spec/mailers/shipment_mailer_spec.rb +0 -81
  32. data/spec/mailers/test_mailer_spec.rb +0 -38
  33. data/spec/models/option_type_prototype_spec.rb +0 -9
  34. data/spec/models/spree/ability_spec.rb +0 -251
  35. data/spec/models/spree/address_spec.rb +0 -402
  36. data/spec/models/spree/adjustable/adjuster/base_spec.rb +0 -10
  37. data/spec/models/spree/adjustable/adjuster/promotion_spec.rb +0 -211
  38. data/spec/models/spree/adjustable/adjuster/tax_spec.rb +0 -86
  39. data/spec/models/spree/adjustable/adjustments_updater_spec.rb +0 -26
  40. data/spec/models/spree/adjustment_spec.rb +0 -189
  41. data/spec/models/spree/app_configuration_spec.rb +0 -26
  42. data/spec/models/spree/asset_spec.rb +0 -28
  43. data/spec/models/spree/calculator/default_tax_spec.rb +0 -152
  44. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -25
  45. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -47
  46. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -41
  47. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -15
  48. data/spec/models/spree/calculator/price_sack_spec.rb +0 -30
  49. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -47
  50. data/spec/models/spree/calculator/shipping.rb +0 -8
  51. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -23
  52. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -13
  53. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -52
  54. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -20
  55. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -29
  56. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -40
  57. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -51
  58. data/spec/models/spree/calculator_spec.rb +0 -69
  59. data/spec/models/spree/classification_spec.rb +0 -93
  60. data/spec/models/spree/concerns/display_money_spec.rb +0 -43
  61. data/spec/models/spree/concerns/user_methods_spec.rb +0 -82
  62. data/spec/models/spree/concerns/vat_price_calculation_spec.rb +0 -66
  63. data/spec/models/spree/country_spec.rb +0 -55
  64. data/spec/models/spree/credit_card_spec.rb +0 -328
  65. data/spec/models/spree/customer_return_spec.rb +0 -240
  66. data/spec/models/spree/exchange_spec.rb +0 -75
  67. data/spec/models/spree/gateway/bogus_simple.rb +0 -20
  68. data/spec/models/spree/gateway/bogus_spec.rb +0 -13
  69. data/spec/models/spree/gateway_spec.rb +0 -61
  70. data/spec/models/spree/image_spec.rb +0 -8
  71. data/spec/models/spree/inventory_unit_spec.rb +0 -256
  72. data/spec/models/spree/line_item_spec.rb +0 -346
  73. data/spec/models/spree/option_type_spec.rb +0 -14
  74. data/spec/models/spree/option_value_spec.rb +0 -18
  75. data/spec/models/spree/order/address_spec.rb +0 -50
  76. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  77. data/spec/models/spree/order/callbacks_spec.rb +0 -42
  78. data/spec/models/spree/order/checkout_spec.rb +0 -770
  79. data/spec/models/spree/order/currency_updater_spec.rb +0 -32
  80. data/spec/models/spree/order/finalizing_spec.rb +0 -114
  81. data/spec/models/spree/order/helpers_spec.rb +0 -5
  82. data/spec/models/spree/order/payment_spec.rb +0 -214
  83. data/spec/models/spree/order/risk_assessment_spec.rb +0 -84
  84. data/spec/models/spree/order/shipments_spec.rb +0 -43
  85. data/spec/models/spree/order/state_machine_spec.rb +0 -212
  86. data/spec/models/spree/order/store_credit_spec.rb +0 -426
  87. data/spec/models/spree/order/tax_spec.rb +0 -84
  88. data/spec/models/spree/order/totals_spec.rb +0 -24
  89. data/spec/models/spree/order/updating_spec.rb +0 -18
  90. data/spec/models/spree/order/validations_spec.rb +0 -15
  91. data/spec/models/spree/order_contents_spec.rb +0 -297
  92. data/spec/models/spree/order_inventory_spec.rb +0 -239
  93. data/spec/models/spree/order_merger_spec.rb +0 -135
  94. data/spec/models/spree/order_spec.rb +0 -1046
  95. data/spec/models/spree/order_updater_spec.rb +0 -305
  96. data/spec/models/spree/payment/gateway_options_spec.rb +0 -127
  97. data/spec/models/spree/payment/store_credit_spec.rb +0 -60
  98. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -291
  99. data/spec/models/spree/payment_method_spec.rb +0 -103
  100. data/spec/models/spree/payment_spec.rb +0 -919
  101. data/spec/models/spree/preference_spec.rb +0 -80
  102. data/spec/models/spree/preferences/configuration_spec.rb +0 -30
  103. data/spec/models/spree/preferences/preferable_spec.rb +0 -344
  104. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -58
  105. data/spec/models/spree/preferences/store_spec.rb +0 -46
  106. data/spec/models/spree/price_spec.rb +0 -128
  107. data/spec/models/spree/product/scopes_spec.rb +0 -183
  108. data/spec/models/spree/product_duplicator_spec.rb +0 -103
  109. data/spec/models/spree/product_filter_spec.rb +0 -26
  110. data/spec/models/spree/product_option_type_spec.rb +0 -9
  111. data/spec/models/spree/product_promotion_rule_spec.rb +0 -9
  112. data/spec/models/spree/product_property_spec.rb +0 -26
  113. data/spec/models/spree/product_spec.rb +0 -629
  114. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -113
  115. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -148
  116. data/spec/models/spree/promotion/actions/create_line_items_spec.rb +0 -86
  117. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -36
  118. data/spec/models/spree/promotion/rules/country_spec.rb +0 -36
  119. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -75
  120. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -282
  121. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -42
  122. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -90
  123. data/spec/models/spree/promotion/rules/product_spec.rb +0 -143
  124. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -102
  125. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -27
  126. data/spec/models/spree/promotion/rules/user_spec.rb +0 -45
  127. data/spec/models/spree/promotion_action_spec.rb +0 -10
  128. data/spec/models/spree/promotion_category_spec.rb +0 -17
  129. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -102
  130. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -323
  131. data/spec/models/spree/promotion_handler/free_shipping_spec.rb +0 -48
  132. data/spec/models/spree/promotion_handler/page_spec.rb +0 -44
  133. data/spec/models/spree/promotion_rule_spec.rb +0 -29
  134. data/spec/models/spree/promotion_rule_taxon_spec.rb +0 -9
  135. data/spec/models/spree/promotion_rule_user_spec.rb +0 -9
  136. data/spec/models/spree/promotion_spec.rb +0 -679
  137. data/spec/models/spree/property_prototype_spec.rb +0 -9
  138. data/spec/models/spree/property_spec.rb +0 -5
  139. data/spec/models/spree/prototype_spec.rb +0 -5
  140. data/spec/models/spree/prototype_taxon_spec.rb +0 -9
  141. data/spec/models/spree/refund_reason_spec.rb +0 -20
  142. data/spec/models/spree/refund_spec.rb +0 -195
  143. data/spec/models/spree/reimbursement/credit_spec.rb +0 -36
  144. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -140
  145. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -83
  146. data/spec/models/spree/reimbursement_performer_spec.rb +0 -30
  147. data/spec/models/spree/reimbursement_spec.rb +0 -188
  148. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -63
  149. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -53
  150. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -46
  151. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -55
  152. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -101
  153. data/spec/models/spree/return_authorization_reason_spec.rb +0 -7
  154. data/spec/models/spree/return_authorization_spec.rb +0 -230
  155. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -77
  156. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -58
  157. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -61
  158. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -32
  159. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -29
  160. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -35
  161. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -65
  162. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  163. data/spec/models/spree/return_item_spec.rb +0 -731
  164. data/spec/models/spree/returns_calculator_spec.rb +0 -14
  165. data/spec/models/spree/role_spec.rb +0 -7
  166. data/spec/models/spree/shipment_spec.rb +0 -742
  167. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  168. data/spec/models/spree/shipping_category_spec.rb +0 -19
  169. data/spec/models/spree/shipping_method_spec.rb +0 -95
  170. data/spec/models/spree/shipping_rate_spec.rb +0 -140
  171. data/spec/models/spree/state_spec.rb +0 -29
  172. data/spec/models/spree/stock/availability_validator_spec.rb +0 -36
  173. data/spec/models/spree/stock/content_item_spec.rb +0 -31
  174. data/spec/models/spree/stock/coordinator_spec.rb +0 -61
  175. data/spec/models/spree/stock/differentiator_spec.rb +0 -39
  176. data/spec/models/spree/stock/estimator_spec.rb +0 -202
  177. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -38
  178. data/spec/models/spree/stock/package_spec.rb +0 -182
  179. data/spec/models/spree/stock/packer_spec.rb +0 -70
  180. data/spec/models/spree/stock/prioritizer_spec.rb +0 -125
  181. data/spec/models/spree/stock/quantifier_spec.rb +0 -126
  182. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -29
  183. data/spec/models/spree/stock/splitter/base_spec.rb +0 -21
  184. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -47
  185. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -32
  186. data/spec/models/spree/stock_item_spec.rb +0 -432
  187. data/spec/models/spree/stock_location_spec.rb +0 -243
  188. data/spec/models/spree/stock_movement_spec.rb +0 -120
  189. data/spec/models/spree/stock_transfer_spec.rb +0 -50
  190. data/spec/models/spree/store_credit_event_spec.rb +0 -101
  191. data/spec/models/spree/store_credit_spec.rb +0 -786
  192. data/spec/models/spree/store_spec.rb +0 -78
  193. data/spec/models/spree/tax_category_spec.rb +0 -32
  194. data/spec/models/spree/tax_rate_spec.rb +0 -561
  195. data/spec/models/spree/taxon_spec.rb +0 -85
  196. data/spec/models/spree/taxonomy_spec.rb +0 -18
  197. data/spec/models/spree/tracker_spec.rb +0 -21
  198. data/spec/models/spree/user_spec.rb +0 -203
  199. data/spec/models/spree/variant_spec.rb +0 -818
  200. data/spec/models/spree/zone_member_spec.rb +0 -38
  201. data/spec/models/spree/zone_spec.rb +0 -472
  202. data/spec/spec_helper.rb +0 -79
  203. data/spec/support/big_decimal.rb +0 -5
  204. data/spec/support/concerns/adjustment_source.rb +0 -23
  205. data/spec/support/concerns/default_price.rb +0 -37
  206. data/spec/support/rake.rb +0 -13
  207. data/spec/support/test_gateway.rb +0 -2
@@ -1,84 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Spree
4
- describe Spree::Order, type: :model do
5
- let(:order) { stub_model(Spree::Order) }
6
-
7
- context "#tax_zone" do
8
- let(:bill_address) { create :address }
9
- let(:ship_address) { create :address }
10
- let(:order) { Spree::Order.create(ship_address: ship_address, bill_address: bill_address) }
11
- let(:zone) { create :zone }
12
-
13
- context "when no zones exist" do
14
- it "should return nil" do
15
- expect(order.tax_zone).to be_nil
16
- end
17
- end
18
-
19
- context "when tax_using_ship_address: true" do
20
- before { Spree::Config.set(tax_using_ship_address: true) }
21
-
22
- it "should calculate using ship_address" do
23
- expect(Spree::Zone).to receive(:match).at_least(:once).with(ship_address)
24
- expect(Spree::Zone).not_to receive(:match).with(bill_address)
25
- order.tax_zone
26
- end
27
- end
28
-
29
- context "when tax_using_ship_address: false" do
30
- before { Spree::Config.set(tax_using_ship_address: false) }
31
-
32
- it "should calculate using bill_address" do
33
- expect(Spree::Zone).to receive(:match).at_least(:once).with(bill_address)
34
- expect(Spree::Zone).not_to receive(:match).with(ship_address)
35
- order.tax_zone
36
- end
37
- end
38
-
39
- context "when there is a default tax zone" do
40
- before do
41
- @default_zone = create(:zone, name: "foo_zone")
42
- allow(Spree::Zone).to receive_messages default_tax: @default_zone
43
- end
44
-
45
- context "when there is a matching zone" do
46
- before { allow(Spree::Zone).to receive_messages(match: zone) }
47
-
48
- it "should return the matching zone" do
49
- expect(order.tax_zone).to eq(zone)
50
- end
51
- end
52
-
53
- context "when there is no matching zone" do
54
- before { allow(Spree::Zone).to receive_messages(match: nil) }
55
-
56
- it "should return the default tax zone" do
57
- expect(order.tax_zone).to eq(@default_zone)
58
- end
59
- end
60
- end
61
-
62
- context "when no default tax zone" do
63
- before { allow(Spree::Zone).to receive_messages default_tax: nil }
64
-
65
- context "when there is a matching zone" do
66
- before { allow(Spree::Zone).to receive_messages(match: zone) }
67
-
68
- it "should return the matching zone" do
69
- expect(order.tax_zone).to eq(zone)
70
- end
71
- end
72
-
73
- context "when there is no matching zone" do
74
- before { allow(Spree::Zone).to receive_messages(match: nil) }
75
-
76
- it "should return nil" do
77
- expect(order.tax_zone).to be_nil
78
- end
79
- end
80
- end
81
- end
82
-
83
- end
84
- end
@@ -1,24 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Spree
4
- describe Order, type: :model do
5
- let(:order) { Order.create }
6
- let(:shirt) { create(:variant) }
7
-
8
- context "adds item to cart and activates promo" do
9
- let(:promotion) { Promotion.create name: 'Huhu' }
10
- let(:calculator) { Calculator::FlatPercentItemTotal.new(preferred_flat_percent: 10) }
11
- let!(:action) { Promotion::Actions::CreateAdjustment.create(promotion: promotion, calculator: calculator) }
12
-
13
- before { order.contents.add(shirt, 1) }
14
-
15
- context "item quantity changes" do
16
- it "recalculates order adjustments" do
17
- expect {
18
- order.contents.add(shirt, 3)
19
- }.to change { order.adjustments.eligible.pluck(:amount) }
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,18 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::Order, type: :model do
4
- let(:order) { create(:order) }
5
-
6
- context "#update_with_updater!" do
7
- let(:line_items) { [mock_model(Spree::LineItem, amount: 5) ]}
8
-
9
- context "when there are update hooks" do
10
- before { Spree::Order.register_update_hook :foo }
11
- after { Spree::Order.update_hooks.clear }
12
- it "should call each of the update hooks" do
13
- expect(order).to receive :foo
14
- order.update_with_updater!
15
- end
16
- end
17
- end
18
- end
@@ -1,15 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Spree
4
- describe Spree::Order, type: :model do
5
- context "validations" do
6
- # Regression test for #2214
7
- it "does not return two error messages when email is blank" do
8
- order = Spree::Order.new
9
- allow(order).to receive_messages(require_email: true)
10
- order.valid?
11
- expect(order.errors[:email]).to eq(["can't be blank"])
12
- end
13
- end
14
- end
15
- end
@@ -1,297 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::OrderContents, type: :model do
4
- let(:order) { Spree::Order.create }
5
- let(:variant) { create(:variant) }
6
-
7
- subject { described_class.new(order) }
8
-
9
- context "#add" do
10
- context 'given quantity is not explicitly provided' do
11
- it 'should add one line item' do
12
- line_item = subject.add(variant)
13
- expect(line_item.quantity).to eq(1)
14
- expect(order.line_items.size).to eq(1)
15
- end
16
- end
17
-
18
- context 'given a shipment' do
19
- it "ensure shipment calls update_amounts instead of order calling ensure_updated_shipments" do
20
- shipment = create(:shipment)
21
- expect(subject.order).to_not receive(:ensure_updated_shipments)
22
- expect(shipment).to receive(:update_amounts)
23
- subject.add(variant, 1, shipment: shipment)
24
- end
25
- end
26
-
27
- context 'not given a shipment' do
28
- it "ensures updated shipments" do
29
- expect(subject.order).to receive(:ensure_updated_shipments)
30
- subject.add(variant)
31
- end
32
- end
33
-
34
- it 'should add line item if one does not exist' do
35
- line_item = subject.add(variant, 1)
36
- expect(line_item.quantity).to eq(1)
37
- expect(order.line_items.size).to eq(1)
38
- end
39
-
40
- it 'should update line item if one exists' do
41
- subject.add(variant, 1)
42
- line_item = subject.add(variant, 1)
43
- expect(line_item.quantity).to eq(2)
44
- expect(order.line_items.size).to eq(1)
45
- end
46
-
47
- it "should update order totals" do
48
- expect(order.item_total.to_f).to eq(0.00)
49
- expect(order.total.to_f).to eq(0.00)
50
-
51
- subject.add(variant, 1)
52
-
53
- expect(order.item_total.to_f).to eq(19.99)
54
- expect(order.total.to_f).to eq(19.99)
55
- end
56
-
57
- context "running promotions" do
58
- let(:promotion) { create(:promotion) }
59
- let(:calculator) { Spree::Calculator::FlatRate.new(preferred_amount: 10) }
60
-
61
- shared_context "discount changes order total" do
62
- before { subject.add(variant, 1) }
63
- it { expect(subject.order.total).not_to eq variant.price }
64
- end
65
-
66
- context "one active order promotion" do
67
- let!(:action) { Spree::Promotion::Actions::CreateAdjustment.create(promotion: promotion, calculator: calculator) }
68
-
69
- it "creates valid discount on order" do
70
- subject.add(variant, 1)
71
- expect(subject.order.adjustments.to_a.sum(&:amount)).not_to eq 0
72
- end
73
-
74
- include_context "discount changes order total"
75
- end
76
-
77
- context "one active line item promotion" do
78
- let!(:action) { Spree::Promotion::Actions::CreateItemAdjustments.create(promotion: promotion, calculator: calculator) }
79
-
80
- it "creates valid discount on order" do
81
- subject.add(variant, 1)
82
- expect(subject.order.line_item_adjustments.to_a.sum(&:amount)).not_to eq 0
83
- end
84
-
85
- include_context "discount changes order total"
86
- end
87
-
88
- context "VAT for variant with percent promotion" do
89
- let!(:category) { Spree::TaxCategory.create name: "Taxable Foo" }
90
- let!(:rate) do
91
- Spree::TaxRate.create(
92
- amount: 0.25,
93
- included_in_price: true,
94
- calculator: Spree::Calculator::DefaultTax.create,
95
- tax_category: category,
96
- zone: create(:zone_with_country, default_tax: true)
97
- )
98
- end
99
- let(:variant) { create(:variant, price: 1000) }
100
- let(:calculator) { Spree::Calculator::PercentOnLineItem.new(preferred_percent: 50) }
101
- let!(:action) { Spree::Promotion::Actions::CreateItemAdjustments.create(promotion: promotion, calculator: calculator) }
102
-
103
- it "should update included_tax_total" do
104
- expect(order.included_tax_total.to_f).to eq(0.00)
105
- subject.add(variant, 1)
106
- expect(order.included_tax_total.to_f).to eq(100)
107
- end
108
-
109
- it "should update included_tax_total after adding two line items" do
110
- subject.add(variant, 1)
111
- expect(order.included_tax_total.to_f).to eq(100)
112
- subject.add(variant, 1)
113
- expect(order.included_tax_total.to_f).to eq(200)
114
- end
115
- end
116
- end
117
- end
118
-
119
- context "#remove" do
120
- context "given an invalid variant" do
121
- it "raises an exception" do
122
- expect {
123
- subject.remove(variant, 1)
124
- }.to raise_error(ActiveRecord::RecordNotFound)
125
- end
126
- end
127
-
128
- context 'given quantity is not explicitly provided' do
129
- it 'should remove one line item' do
130
- line_item = subject.add(variant, 3)
131
- subject.remove(variant)
132
-
133
- expect(line_item.quantity).to eq(2)
134
- end
135
- end
136
-
137
- context 'given a shipment' do
138
- it "ensure shipment calls update_amounts instead of order calling ensure_updated_shipments" do
139
- line_item = subject.add(variant, 1)
140
- shipment = create(:shipment)
141
- expect(subject.order).to_not receive(:ensure_updated_shipments)
142
- expect(shipment).to receive(:update_amounts)
143
- subject.remove(variant, 1, shipment: shipment)
144
- end
145
- end
146
-
147
- context 'not given a shipment' do
148
- it "ensures updated shipments" do
149
- line_item = subject.add(variant, 1)
150
- expect(subject.order).to receive(:ensure_updated_shipments)
151
- subject.remove(variant)
152
- end
153
- end
154
-
155
- it 'should reduce line_item quantity if quantity is less the line_item quantity' do
156
- line_item = subject.add(variant, 3)
157
- subject.remove(variant, 1)
158
-
159
- expect(line_item.quantity).to eq(2)
160
- end
161
-
162
- it 'should remove line_item if quantity matches line_item quantity' do
163
- subject.add(variant, 1)
164
- removed_line_item = subject.remove(variant, 1)
165
-
166
- # Should reflect the change already in Order#line_item
167
- expect(order.line_items).to_not include(removed_line_item)
168
- end
169
-
170
- it "should update order totals" do
171
- expect(order.item_total.to_f).to eq(0.00)
172
- expect(order.total.to_f).to eq(0.00)
173
-
174
- subject.add(variant,2)
175
-
176
- expect(order.item_total.to_f).to eq(39.98)
177
- expect(order.total.to_f).to eq(39.98)
178
-
179
- subject.remove(variant,1)
180
- expect(order.item_total.to_f).to eq(19.99)
181
- expect(order.total.to_f).to eq(19.99)
182
- end
183
- end
184
-
185
- context "#remove_line_item" do
186
- context 'given a shipment' do
187
- it "ensure shipment calls update_amounts instead of order calling ensure_updated_shipments" do
188
- line_item = subject.add(variant, 1)
189
- shipment = create(:shipment)
190
- expect(subject.order).to_not receive(:ensure_updated_shipments)
191
- expect(shipment).to receive(:update_amounts)
192
- subject.remove_line_item(line_item, shipment: shipment)
193
- end
194
- end
195
-
196
- context 'not given a shipment' do
197
- it "ensures updated shipments" do
198
- line_item = subject.add(variant, 1)
199
- expect(subject.order).to receive(:ensure_updated_shipments)
200
- subject.remove_line_item(line_item)
201
- end
202
- end
203
-
204
- it 'should remove line_item' do
205
- line_item = subject.add(variant, 1)
206
- subject.remove_line_item(line_item)
207
-
208
- expect(order.reload.line_items).to_not include(line_item)
209
- end
210
-
211
- it "should update order totals" do
212
- expect(order.item_total.to_f).to eq(0.00)
213
- expect(order.total.to_f).to eq(0.00)
214
-
215
- line_item = subject.add(variant,2)
216
-
217
- expect(order.item_total.to_f).to eq(39.98)
218
- expect(order.total.to_f).to eq(39.98)
219
-
220
- subject.remove_line_item(line_item)
221
- expect(order.item_total.to_f).to eq(0.00)
222
- expect(order.total.to_f).to eq(0.00)
223
- end
224
- end
225
-
226
- context "update cart" do
227
- let!(:shirt) { subject.add variant, 1 }
228
-
229
- let(:params) do
230
- { line_items_attributes: {
231
- "0" => { id: shirt.id, quantity: 3 }
232
- } }
233
- end
234
-
235
- it "changes item quantity" do
236
- subject.update_cart params
237
- expect(shirt.quantity).to eq 3
238
- end
239
-
240
- it "updates order totals" do
241
- expect {
242
- subject.update_cart params
243
- }.to change { subject.order.total }
244
- end
245
-
246
- context "submits item quantity 0" do
247
- let(:params) do
248
- { line_items_attributes: {
249
- "0" => { id: shirt.id, quantity: 0 },
250
- "1" => { id: "666", quantity: 0}
251
- } }
252
- end
253
-
254
- it "removes item from order" do
255
- expect {
256
- subject.update_cart params
257
- }.to change { subject.order.line_items.count }
258
- end
259
-
260
- it "doesnt try to update unexistent items" do
261
- filtered_params = { line_items_attributes: {
262
- "0" => { id: shirt.id, quantity: 0 },
263
- } }
264
- expect(subject.order).to receive(:update_attributes).with(filtered_params)
265
- subject.update_cart params
266
- end
267
-
268
- it "should not filter if there is only one line item" do
269
- single_line_item_params = { line_items_attributes: { id: shirt.id, quantity: 0 } }
270
- expect(subject.order).to receive(:update_attributes).with(single_line_item_params)
271
- subject.update_cart single_line_item_params
272
- end
273
-
274
- end
275
-
276
- it "ensures updated shipments" do
277
- expect(subject.order).to receive(:ensure_updated_shipments)
278
- subject.update_cart params
279
- end
280
- end
281
-
282
- context "completed order" do
283
- let(:order) { create(:order, state: 'complete', completed_at: Time.current) }
284
-
285
- before { order.shipments.create! stock_location_id: variant.stock_location_ids.first }
286
-
287
- it "updates order payment state" do
288
- expect {
289
- subject.add variant
290
- }.to change { order.payment_state }
291
-
292
- expect {
293
- subject.remove variant
294
- }.to change { order.payment_state }
295
- end
296
- end
297
- end
@@ -1,239 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::OrderInventory, type: :model do
4
- let(:order) { create :completed_order_with_totals }
5
- let(:line_item) { order.line_items.first }
6
-
7
- subject { described_class.new(order, line_item) }
8
-
9
- describe 'delegate' do
10
- it { is_expected.to delegate_method(:inventory_units).to(:line_item) }
11
- end
12
-
13
- context "when order is missing inventory units" do
14
- before { line_item.update_column(:quantity, 2) }
15
-
16
- it 'creates the proper number of inventory units' do
17
- subject.verify
18
- expect(subject.inventory_units.count).to eq 2
19
- end
20
- end
21
-
22
- context "#add_to_shipment" do
23
- let(:shipment) { order.shipments.first }
24
-
25
- context "order is not completed" do
26
- before { allow(order).to receive_messages completed?: false }
27
-
28
- it "doesn't unstock items" do
29
- expect(shipment.stock_location).not_to receive(:unstock)
30
- expect(subject.send(:add_to_shipment, shipment, 5)).to eq(5)
31
- end
32
- end
33
-
34
- context "inventory units state" do
35
- before { shipment.inventory_units.destroy_all }
36
-
37
- it 'sets inventory_units state as per stock location availability' do
38
- expect(shipment.stock_location).to receive(:fill_status).with(subject.variant, 5).and_return([3, 2])
39
-
40
- expect(subject.send(:add_to_shipment, shipment, 5)).to eq(5)
41
-
42
- units = shipment.inventory_units_for(subject.variant).group_by(&:state)
43
- expect(units['backordered'].size).to eq(2)
44
- expect(units['on_hand'].size).to eq(3)
45
- end
46
- end
47
-
48
- context "store doesnt track inventory" do
49
- let(:variant) { create(:variant) }
50
-
51
- before { Spree::Config.track_inventory_levels = false }
52
-
53
- it "creates only on hand inventory units" do
54
- variant.stock_items.destroy_all
55
-
56
- # The before_save callback in LineItem would verify inventory
57
- line_item = order.contents.add variant, 1, shipment: shipment
58
-
59
- units = shipment.inventory_units_for(line_item.variant)
60
- expect(units.count).to eq 1
61
- expect(units.first).to be_on_hand
62
- end
63
- end
64
-
65
- context "variant doesnt track inventory" do
66
- let(:variant) { create(:variant) }
67
- before { variant.track_inventory = false }
68
-
69
- it "creates only on hand inventory units" do
70
- variant.stock_items.destroy_all
71
-
72
- line_item = order.contents.add variant, 1
73
- subject.verify(shipment)
74
-
75
- units = shipment.inventory_units_for(line_item.variant)
76
- expect(units.count).to eq 1
77
- expect(units.first).to be_on_hand
78
- end
79
- end
80
-
81
- it 'should create stock_movement' do
82
- expect(subject.send(:add_to_shipment, shipment, 5)).to eq(5)
83
-
84
- stock_item = shipment.stock_location.stock_item(subject.variant)
85
- movement = stock_item.stock_movements.last
86
- # movement.originator.should == shipment
87
- expect(movement.quantity).to eq(-5)
88
- end
89
- end
90
-
91
- context "#determine_target_shipment" do
92
- let(:stock_location) { create :stock_location }
93
- let(:variant) { line_item.variant }
94
-
95
- before do
96
- allow(line_item).to receive(:changed?).and_return(:true)
97
- subject.verify
98
-
99
- order.shipments.create(stock_location_id: stock_location.id, cost: 5)
100
-
101
- shipped = order.shipments.create(stock_location_id: order.shipments.first.stock_location.id, cost: 10)
102
- shipped.update_column(:state, 'shipped')
103
- end
104
-
105
- it 'should select first non-shipped shipment that already contains given variant' do
106
- shipment = subject.send(:determine_target_shipment)
107
- expect(shipment.shipped?).to be false
108
- expect(shipment.inventory_units_for(variant)).not_to be_empty
109
-
110
- expect(variant.stock_location_ids.include?(shipment.stock_location_id)).to be true
111
- end
112
-
113
- context "when no shipments already contain this varint" do
114
- before do
115
- subject.line_item.reload
116
- subject.inventory_units.destroy_all
117
- end
118
-
119
- it 'selects first non-shipped shipment that leaves from same stock_location' do
120
- shipment = subject.send(:determine_target_shipment)
121
- shipment.reload
122
- expect(shipment.shipped?).to be false
123
- expect(shipment.inventory_units_for(variant)).to be_empty
124
- expect(variant.stock_location_ids.include?(shipment.stock_location_id)).to be true
125
- end
126
- end
127
- end
128
-
129
- context 'when order has too many inventory units' do
130
- before do
131
- line_item.quantity = 3
132
- line_item.save!
133
-
134
- line_item.update_column(:quantity, 2)
135
- subject.line_item.reload
136
- end
137
-
138
- it 'should be a messed up order' do
139
- expect(order.shipments.first.inventory_units_for(line_item.variant).size).to eq(3)
140
- expect(line_item.quantity).to eq(2)
141
- end
142
-
143
- it 'should decrease the number of inventory units' do
144
- subject.verify
145
- expect(subject.inventory_units.count).to eq 2
146
- end
147
-
148
- context '#remove_from_shipment' do
149
- let(:shipment) { order.shipments.first }
150
- let(:variant) { subject.variant }
151
-
152
- context "order is not completed" do
153
- before { allow(order).to receive_messages completed?: false }
154
-
155
- it "doesn't restock items" do
156
- expect(shipment.stock_location).not_to receive(:restock)
157
- expect(subject.send(:remove_from_shipment, shipment, 1)).to eq(1)
158
- end
159
- end
160
-
161
- it 'should create stock_movement' do
162
- expect(subject.send(:remove_from_shipment, shipment, 1)).to eq(1)
163
-
164
- stock_item = shipment.stock_location.stock_item(variant)
165
- movement = stock_item.stock_movements.last
166
- # movement.originator.should == shipment
167
- expect(movement.quantity).to eq(1)
168
- end
169
-
170
- it 'should destroy backordered units first' do
171
- allow(shipment).to receive_messages(
172
- inventory_units_for_item: [
173
- mock_model(Spree::InventoryUnit, variant_id: variant.id, state: 'backordered', shipped?: false),
174
- mock_model(Spree::InventoryUnit, variant_id: variant.id, state: 'on_hand', shipped?: false),
175
- mock_model(Spree::InventoryUnit, variant_id: variant.id, state: 'backordered', shipped?: false)
176
- ]
177
- )
178
-
179
- expect(shipment.inventory_units_for_item[0]).to receive(:destroy)
180
- expect(shipment.inventory_units_for_item[1]).not_to receive(:destroy)
181
- expect(shipment.inventory_units_for_item[2]).to receive(:destroy)
182
-
183
- expect(subject.send(:remove_from_shipment, shipment, 2)).to eq(2)
184
- end
185
-
186
- it 'should destroy unshipped units first' do
187
- allow(shipment).to receive_messages(
188
- inventory_units_for_item: [
189
- mock_model(Spree::InventoryUnit, variant_id: variant.id, state: 'shipped', shipped?: true),
190
- mock_model(Spree::InventoryUnit, variant_id: variant.id, state: 'on_hand', shipped?: false)
191
- ]
192
- )
193
-
194
- expect(shipment.inventory_units_for_item[0]).not_to receive(:destroy)
195
- expect(shipment.inventory_units_for_item[1]).to receive(:destroy)
196
-
197
- expect(subject.send(:remove_from_shipment, shipment, 1)).to eq(1)
198
- end
199
-
200
- it 'only attempts to destroy as many units as are eligible, and return amount destroyed' do
201
- allow(shipment).to receive_messages(
202
- inventory_units_for_item: [
203
- mock_model(Spree::InventoryUnit, variant_id: variant.id, state: 'shipped', shipped?: true),
204
- mock_model(Spree::InventoryUnit, variant_id: variant.id, state: 'on_hand', shipped?: false)
205
- ]
206
- )
207
-
208
- expect(shipment.inventory_units_for_item[0]).not_to receive(:destroy)
209
- expect(shipment.inventory_units_for_item[1]).to receive(:destroy)
210
-
211
- expect(subject.send(:remove_from_shipment, shipment, 1)).to eq(1)
212
- end
213
-
214
- it 'should destroy self if not inventory units remain' do
215
- allow(shipment.inventory_units).to receive_messages(count: 0)
216
- expect(shipment).to receive(:destroy)
217
-
218
- expect(subject.send(:remove_from_shipment, shipment, 1)).to eq(1)
219
- end
220
-
221
- context "inventory unit line item and variant points to different products" do
222
- let(:different_line_item) { create(:line_item) }
223
-
224
- let!(:different_inventory) do
225
- shipment.set_up_inventory("on_hand", variant, order, different_line_item)
226
- end
227
-
228
- context "completed order" do
229
- before { order.touch :completed_at }
230
-
231
- it "removes only units that match both line item and variant" do
232
- subject.send(:remove_from_shipment, shipment, shipment.inventory_units.count)
233
- expect(different_inventory.reload).to be_persisted
234
- end
235
- end
236
- end
237
- end
238
- end
239
- end