spree_core 3.3.0.rc1 → 3.3.0.rc2

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.
Files changed (220) hide show
  1. checksums.yaml +4 -4
  2. data/app/helpers/spree/base_helper.rb +1 -1
  3. data/app/mailers/spree/base_mailer.rb +5 -0
  4. data/app/models/spree/ability.rb +4 -1
  5. data/app/models/spree/image.rb +6 -2
  6. data/app/models/spree/order.rb +10 -9
  7. data/app/models/spree/order/payments.rb +1 -1
  8. data/app/models/spree/payment_method/store_credit.rb +4 -0
  9. data/app/models/spree/shipment.rb +2 -0
  10. data/app/views/spree/shared/_base_mailer_header.html.erb +5 -1
  11. data/app/views/spree/shared/_mailer_line_item.html.erb +5 -1
  12. data/config/routes.rb +0 -3
  13. data/lib/spree/core/components.rb +17 -0
  14. data/lib/spree/core/controller_helpers/auth.rb +3 -1
  15. data/lib/spree/core/engine.rb +1 -0
  16. data/lib/spree/core/validators/email.rb +1 -5
  17. data/lib/spree/core/version.rb +1 -1
  18. data/spree_core.gemspec +1 -1
  19. metadata +4 -204
  20. data/lib/spree/testing_support/shoulda_matcher_configuration.rb +0 -6
  21. data/spec/fixtures/thinking-cat.jpg +0 -0
  22. data/spec/helpers/base_helper_spec.rb +0 -200
  23. data/spec/helpers/products_helper_spec.rb +0 -289
  24. data/spec/lib/calculated_adjustments_spec.rb +0 -7
  25. data/spec/lib/i18n_spec.rb +0 -123
  26. data/spec/lib/search/base_spec.rb +0 -86
  27. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -103
  28. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -110
  29. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -17
  30. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -72
  31. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -39
  32. data/spec/lib/spree/core/delegate_belongs_to_spec.rb +0 -22
  33. data/spec/lib/spree/core/importer/order_spec.rb +0 -607
  34. data/spec/lib/spree/core/number_generator_spec.rb +0 -139
  35. data/spec/lib/spree/core/token_generator_spec.rb +0 -24
  36. data/spec/lib/spree/core/validators/email_spec.rb +0 -54
  37. data/spec/lib/spree/core_spec.rb +0 -23
  38. data/spec/lib/spree/localized_number_spec.rb +0 -54
  39. data/spec/lib/spree/migrations_spec.rb +0 -36
  40. data/spec/lib/spree/money_spec.rb +0 -122
  41. data/spec/lib/tasks/exchanges_spec.rb +0 -136
  42. data/spec/mailers/order_mailer_spec.rb +0 -122
  43. data/spec/mailers/reimbursement_mailer_spec.rb +0 -52
  44. data/spec/mailers/shipment_mailer_spec.rb +0 -81
  45. data/spec/mailers/test_mailer_spec.rb +0 -38
  46. data/spec/models/spree/ability_spec.rb +0 -251
  47. data/spec/models/spree/address_spec.rb +0 -402
  48. data/spec/models/spree/adjustable/adjuster/base_spec.rb +0 -10
  49. data/spec/models/spree/adjustable/adjuster/promotion_spec.rb +0 -211
  50. data/spec/models/spree/adjustable/adjuster/tax_spec.rb +0 -86
  51. data/spec/models/spree/adjustable/adjustments_updater_spec.rb +0 -26
  52. data/spec/models/spree/adjustment_spec.rb +0 -189
  53. data/spec/models/spree/app_configuration_spec.rb +0 -26
  54. data/spec/models/spree/asset_spec.rb +0 -28
  55. data/spec/models/spree/calculator/default_tax_spec.rb +0 -152
  56. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -25
  57. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -47
  58. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -41
  59. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -15
  60. data/spec/models/spree/calculator/price_sack_spec.rb +0 -30
  61. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -47
  62. data/spec/models/spree/calculator/shipping.rb +0 -8
  63. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -23
  64. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -13
  65. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -52
  66. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -20
  67. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -29
  68. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -40
  69. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -51
  70. data/spec/models/spree/calculator_spec.rb +0 -69
  71. data/spec/models/spree/classification_spec.rb +0 -93
  72. data/spec/models/spree/concerns/display_money_spec.rb +0 -43
  73. data/spec/models/spree/concerns/user_methods_spec.rb +0 -82
  74. data/spec/models/spree/concerns/vat_price_calculation_spec.rb +0 -66
  75. data/spec/models/spree/country_spec.rb +0 -55
  76. data/spec/models/spree/credit_card_spec.rb +0 -328
  77. data/spec/models/spree/customer_return_spec.rb +0 -240
  78. data/spec/models/spree/exchange_spec.rb +0 -75
  79. data/spec/models/spree/gateway/bogus_simple.rb +0 -20
  80. data/spec/models/spree/gateway/bogus_spec.rb +0 -13
  81. data/spec/models/spree/gateway_spec.rb +0 -61
  82. data/spec/models/spree/image_spec.rb +0 -8
  83. data/spec/models/spree/inventory_unit_spec.rb +0 -256
  84. data/spec/models/spree/line_item_spec.rb +0 -348
  85. data/spec/models/spree/option_type_prototype_spec.rb +0 -9
  86. data/spec/models/spree/option_type_spec.rb +0 -14
  87. data/spec/models/spree/option_value_spec.rb +0 -18
  88. data/spec/models/spree/order/address_spec.rb +0 -50
  89. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  90. data/spec/models/spree/order/callbacks_spec.rb +0 -42
  91. data/spec/models/spree/order/checkout_spec.rb +0 -770
  92. data/spec/models/spree/order/currency_updater_spec.rb +0 -32
  93. data/spec/models/spree/order/finalizing_spec.rb +0 -114
  94. data/spec/models/spree/order/helpers_spec.rb +0 -5
  95. data/spec/models/spree/order/payment_spec.rb +0 -214
  96. data/spec/models/spree/order/risk_assessment_spec.rb +0 -84
  97. data/spec/models/spree/order/shipments_spec.rb +0 -43
  98. data/spec/models/spree/order/state_machine_spec.rb +0 -212
  99. data/spec/models/spree/order/store_credit_spec.rb +0 -457
  100. data/spec/models/spree/order/tax_spec.rb +0 -84
  101. data/spec/models/spree/order/totals_spec.rb +0 -24
  102. data/spec/models/spree/order/updating_spec.rb +0 -18
  103. data/spec/models/spree/order/validations_spec.rb +0 -15
  104. data/spec/models/spree/order_contents_spec.rb +0 -332
  105. data/spec/models/spree/order_inventory_spec.rb +0 -247
  106. data/spec/models/spree/order_merger_spec.rb +0 -135
  107. data/spec/models/spree/order_spec.rb +0 -1067
  108. data/spec/models/spree/order_updater_spec.rb +0 -305
  109. data/spec/models/spree/payment/gateway_options_spec.rb +0 -127
  110. data/spec/models/spree/payment/store_credit_spec.rb +0 -60
  111. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -291
  112. data/spec/models/spree/payment_method_spec.rb +0 -108
  113. data/spec/models/spree/payment_spec.rb +0 -922
  114. data/spec/models/spree/preference_spec.rb +0 -80
  115. data/spec/models/spree/preferences/configuration_spec.rb +0 -30
  116. data/spec/models/spree/preferences/preferable_spec.rb +0 -344
  117. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -58
  118. data/spec/models/spree/preferences/store_spec.rb +0 -46
  119. data/spec/models/spree/price_spec.rb +0 -128
  120. data/spec/models/spree/product/scopes_spec.rb +0 -174
  121. data/spec/models/spree/product_duplicator_spec.rb +0 -102
  122. data/spec/models/spree/product_filter_spec.rb +0 -26
  123. data/spec/models/spree/product_option_type_spec.rb +0 -9
  124. data/spec/models/spree/product_promotion_rule_spec.rb +0 -9
  125. data/spec/models/spree/product_property_spec.rb +0 -26
  126. data/spec/models/spree/product_spec.rb +0 -626
  127. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -113
  128. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -148
  129. data/spec/models/spree/promotion/actions/create_line_items_spec.rb +0 -86
  130. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -36
  131. data/spec/models/spree/promotion/rules/country_spec.rb +0 -36
  132. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -75
  133. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -282
  134. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -42
  135. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -90
  136. data/spec/models/spree/promotion/rules/product_spec.rb +0 -143
  137. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -102
  138. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -27
  139. data/spec/models/spree/promotion/rules/user_spec.rb +0 -45
  140. data/spec/models/spree/promotion_action_spec.rb +0 -10
  141. data/spec/models/spree/promotion_category_spec.rb +0 -17
  142. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -102
  143. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -323
  144. data/spec/models/spree/promotion_handler/free_shipping_spec.rb +0 -48
  145. data/spec/models/spree/promotion_handler/page_spec.rb +0 -44
  146. data/spec/models/spree/promotion_rule_spec.rb +0 -29
  147. data/spec/models/spree/promotion_rule_taxon_spec.rb +0 -9
  148. data/spec/models/spree/promotion_rule_user_spec.rb +0 -9
  149. data/spec/models/spree/promotion_spec.rb +0 -674
  150. data/spec/models/spree/property_prototype_spec.rb +0 -9
  151. data/spec/models/spree/property_spec.rb +0 -5
  152. data/spec/models/spree/prototype_spec.rb +0 -5
  153. data/spec/models/spree/prototype_taxon_spec.rb +0 -9
  154. data/spec/models/spree/refund_reason_spec.rb +0 -20
  155. data/spec/models/spree/refund_spec.rb +0 -195
  156. data/spec/models/spree/reimbursement/credit_spec.rb +0 -36
  157. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -140
  158. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -83
  159. data/spec/models/spree/reimbursement_performer_spec.rb +0 -30
  160. data/spec/models/spree/reimbursement_spec.rb +0 -188
  161. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -63
  162. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -53
  163. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -46
  164. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -55
  165. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -101
  166. data/spec/models/spree/return_authorization_reason_spec.rb +0 -7
  167. data/spec/models/spree/return_authorization_spec.rb +0 -230
  168. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -77
  169. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -58
  170. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -61
  171. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -32
  172. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -29
  173. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -35
  174. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -65
  175. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  176. data/spec/models/spree/return_item_spec.rb +0 -734
  177. data/spec/models/spree/returns_calculator_spec.rb +0 -14
  178. data/spec/models/spree/role_spec.rb +0 -7
  179. data/spec/models/spree/shipment_spec.rb +0 -744
  180. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  181. data/spec/models/spree/shipping_category_spec.rb +0 -19
  182. data/spec/models/spree/shipping_method_spec.rb +0 -125
  183. data/spec/models/spree/shipping_rate_spec.rb +0 -140
  184. data/spec/models/spree/state_spec.rb +0 -29
  185. data/spec/models/spree/stock/availability_validator_spec.rb +0 -42
  186. data/spec/models/spree/stock/content_item_spec.rb +0 -31
  187. data/spec/models/spree/stock/coordinator_spec.rb +0 -61
  188. data/spec/models/spree/stock/differentiator_spec.rb +0 -39
  189. data/spec/models/spree/stock/estimator_spec.rb +0 -202
  190. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -37
  191. data/spec/models/spree/stock/package_spec.rb +0 -182
  192. data/spec/models/spree/stock/packer_spec.rb +0 -70
  193. data/spec/models/spree/stock/prioritizer_spec.rb +0 -125
  194. data/spec/models/spree/stock/quantifier_spec.rb +0 -126
  195. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -29
  196. data/spec/models/spree/stock/splitter/base_spec.rb +0 -21
  197. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -47
  198. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -32
  199. data/spec/models/spree/stock_item_spec.rb +0 -465
  200. data/spec/models/spree/stock_location_spec.rb +0 -243
  201. data/spec/models/spree/stock_movement_spec.rb +0 -120
  202. data/spec/models/spree/stock_transfer_spec.rb +0 -50
  203. data/spec/models/spree/store_credit_event_spec.rb +0 -101
  204. data/spec/models/spree/store_credit_spec.rb +0 -798
  205. data/spec/models/spree/store_spec.rb +0 -78
  206. data/spec/models/spree/tax_category_spec.rb +0 -32
  207. data/spec/models/spree/tax_rate_spec.rb +0 -561
  208. data/spec/models/spree/taxon_spec.rb +0 -93
  209. data/spec/models/spree/taxonomy_spec.rb +0 -18
  210. data/spec/models/spree/tracker_spec.rb +0 -21
  211. data/spec/models/spree/user_spec.rb +0 -203
  212. data/spec/models/spree/variant_spec.rb +0 -818
  213. data/spec/models/spree/zone_member_spec.rb +0 -38
  214. data/spec/models/spree/zone_spec.rb +0 -472
  215. data/spec/spec_helper.rb +0 -82
  216. data/spec/support/big_decimal.rb +0 -5
  217. data/spec/support/concerns/adjustment_source.rb +0 -23
  218. data/spec/support/concerns/default_price.rb +0 -37
  219. data/spec/support/rake.rb +0 -13
  220. 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,332 +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(subject.order).to receive(:refresh_shipment_rates).with(Spree::ShippingMethod::DISPLAY_ON_BACK_END)
23
- expect(shipment).to receive(:update_amounts)
24
- subject.add(variant, 1, shipment: shipment)
25
- end
26
- end
27
-
28
- context 'not given a shipment' do
29
- it "ensures updated shipments" do
30
- expect(subject.order).to receive(:ensure_updated_shipments)
31
- subject.add(variant)
32
- end
33
- end
34
-
35
- it 'should add line item if one does not exist' do
36
- line_item = subject.add(variant, 1)
37
- expect(line_item.quantity).to eq(1)
38
- expect(order.line_items.size).to eq(1)
39
- end
40
-
41
- it 'should update line item if one exists' do
42
- subject.add(variant, 1)
43
- line_item = subject.add(variant, 1)
44
- expect(line_item.quantity).to eq(2)
45
- expect(order.line_items.size).to eq(1)
46
- end
47
-
48
- it "should update order totals" do
49
- expect(order.item_total.to_f).to eq(0.00)
50
- expect(order.total.to_f).to eq(0.00)
51
-
52
- subject.add(variant, 1)
53
-
54
- expect(order.item_total.to_f).to eq(19.99)
55
- expect(order.total.to_f).to eq(19.99)
56
- end
57
-
58
- context 'when store_credits payment' do
59
- let!(:payment) { create(:store_credit_payment, order: order) }
60
-
61
- it { expect { subject.add(variant, 1) }.to change { order.payments.store_credits.count }.by(-1) }
62
- end
63
-
64
- context "running promotions" do
65
- let(:promotion) { create(:promotion) }
66
- let(:calculator) { Spree::Calculator::FlatRate.new(preferred_amount: 10) }
67
-
68
- shared_context "discount changes order total" do
69
- before { subject.add(variant, 1) }
70
- it { expect(subject.order.total).not_to eq variant.price }
71
- end
72
-
73
- context "one active order promotion" do
74
- let!(:action) { Spree::Promotion::Actions::CreateAdjustment.create(promotion: promotion, calculator: calculator) }
75
-
76
- it "creates valid discount on order" do
77
- subject.add(variant, 1)
78
- expect(subject.order.adjustments.to_a.sum(&:amount)).not_to eq 0
79
- end
80
-
81
- include_context "discount changes order total"
82
- end
83
-
84
- context "one active line item promotion" do
85
- let!(:action) { Spree::Promotion::Actions::CreateItemAdjustments.create(promotion: promotion, calculator: calculator) }
86
-
87
- it "creates valid discount on order" do
88
- subject.add(variant, 1)
89
- expect(subject.order.line_item_adjustments.to_a.sum(&:amount)).not_to eq 0
90
- end
91
-
92
- include_context "discount changes order total"
93
- end
94
-
95
- context "VAT for variant with percent promotion" do
96
- let!(:category) { Spree::TaxCategory.create name: "Taxable Foo" }
97
- let!(:rate) do
98
- Spree::TaxRate.create(
99
- amount: 0.25,
100
- included_in_price: true,
101
- calculator: Spree::Calculator::DefaultTax.create,
102
- tax_category: category,
103
- zone: create(:zone_with_country, default_tax: true)
104
- )
105
- end
106
- let(:variant) { create(:variant, price: 1000) }
107
- let(:calculator) { Spree::Calculator::PercentOnLineItem.new(preferred_percent: 50) }
108
- let!(:action) { Spree::Promotion::Actions::CreateItemAdjustments.create(promotion: promotion, calculator: calculator) }
109
-
110
- it "should update included_tax_total" do
111
- expect(order.included_tax_total.to_f).to eq(0.00)
112
- subject.add(variant, 1)
113
- expect(order.included_tax_total.to_f).to eq(100)
114
- end
115
-
116
- it "should update included_tax_total after adding two line items" do
117
- subject.add(variant, 1)
118
- expect(order.included_tax_total.to_f).to eq(100)
119
- subject.add(variant, 1)
120
- expect(order.included_tax_total.to_f).to eq(200)
121
- end
122
- end
123
- end
124
- end
125
-
126
- context "#remove" do
127
- context "given an invalid variant" do
128
- it "raises an exception" do
129
- expect {
130
- subject.remove(variant, 1)
131
- }.to raise_error(ActiveRecord::RecordNotFound)
132
- end
133
- end
134
-
135
- context 'given quantity is not explicitly provided' do
136
- it 'should remove one line item' do
137
- line_item = subject.add(variant, 3)
138
- subject.remove(variant)
139
-
140
- expect(line_item.quantity).to eq(2)
141
- end
142
- end
143
-
144
- context 'given a shipment' do
145
- it "ensure shipment calls update_amounts instead of order calling ensure_updated_shipments" do
146
- line_item = subject.add(variant, 1)
147
- shipment = create(:shipment)
148
- expect(subject.order).to_not receive(:ensure_updated_shipments)
149
- expect(shipment).to receive(:update_amounts)
150
- subject.remove(variant, 1, shipment: shipment)
151
- end
152
- end
153
-
154
- context 'not given a shipment' do
155
- it "ensures updated shipments" do
156
- line_item = subject.add(variant, 1)
157
- expect(subject.order).to receive(:ensure_updated_shipments)
158
- subject.remove(variant)
159
- end
160
- end
161
-
162
- it 'should reduce line_item quantity if quantity is less the line_item quantity' do
163
- line_item = subject.add(variant, 3)
164
- subject.remove(variant, 1)
165
-
166
- expect(line_item.quantity).to eq(2)
167
- end
168
-
169
- context 'when store_credits payment' do
170
- let(:payment) { create(:store_credit_payment, order: order) }
171
-
172
- before do
173
- subject.add(variant, 1)
174
- payment
175
- end
176
-
177
- it { expect { subject.remove(variant, 1) }.to change { order.payments.store_credits.count }.by(-1) }
178
- end
179
-
180
- it 'should remove line_item if quantity matches line_item quantity' do
181
- subject.add(variant, 1)
182
- removed_line_item = subject.remove(variant, 1)
183
-
184
- # Should reflect the change already in Order#line_item
185
- expect(order.line_items).to_not include(removed_line_item)
186
- end
187
-
188
- it "should update order totals" do
189
- expect(order.item_total.to_f).to eq(0.00)
190
- expect(order.total.to_f).to eq(0.00)
191
-
192
- subject.add(variant,2)
193
-
194
- expect(order.item_total.to_f).to eq(39.98)
195
- expect(order.total.to_f).to eq(39.98)
196
-
197
- subject.remove(variant,1)
198
- expect(order.item_total.to_f).to eq(19.99)
199
- expect(order.total.to_f).to eq(19.99)
200
- end
201
- end
202
-
203
- context "#remove_line_item" do
204
- context 'given a shipment' do
205
- it "ensure shipment calls update_amounts instead of order calling ensure_updated_shipments" do
206
- line_item = subject.add(variant, 1)
207
- shipment = create(:shipment)
208
- expect(subject.order).to_not receive(:ensure_updated_shipments)
209
- expect(shipment).to receive(:update_amounts)
210
- subject.remove_line_item(line_item, shipment: shipment)
211
- end
212
- end
213
-
214
- context 'not given a shipment' do
215
- it "ensures updated shipments" do
216
- line_item = subject.add(variant, 1)
217
- expect(subject.order).to receive(:ensure_updated_shipments)
218
- subject.remove_line_item(line_item)
219
- end
220
- end
221
-
222
- context 'when store_credits payment' do
223
- let(:payment) { create(:store_credit_payment, order: order) }
224
-
225
- before do
226
- @line_item = subject.add(variant, 1)
227
- payment
228
- end
229
-
230
- it { expect { subject.remove_line_item(@line_item) }.to change { order.payments.store_credits.count }.by(-1) }
231
- end
232
-
233
- it 'should remove line_item' do
234
- line_item = subject.add(variant, 1)
235
- subject.remove_line_item(line_item)
236
-
237
- expect(order.reload.line_items).to_not include(line_item)
238
- end
239
-
240
- it "should update order totals" do
241
- expect(order.item_total.to_f).to eq(0.00)
242
- expect(order.total.to_f).to eq(0.00)
243
-
244
- line_item = subject.add(variant,2)
245
-
246
- expect(order.item_total.to_f).to eq(39.98)
247
- expect(order.total.to_f).to eq(39.98)
248
-
249
- subject.remove_line_item(line_item)
250
- expect(order.item_total.to_f).to eq(0.00)
251
- expect(order.total.to_f).to eq(0.00)
252
- end
253
- end
254
-
255
- context "update cart" do
256
- let!(:shirt) { subject.add variant, 1 }
257
-
258
- let(:params) do
259
- { line_items_attributes: {
260
- "0" => { id: shirt.id, quantity: 3 }
261
- } }
262
- end
263
-
264
- it "changes item quantity" do
265
- subject.update_cart params
266
- expect(shirt.quantity).to eq 3
267
- end
268
-
269
- it "updates order totals" do
270
- expect {
271
- subject.update_cart params
272
- }.to change { subject.order.total }
273
- end
274
-
275
- context 'when store_credits payment' do
276
- let!(:payment) { create(:store_credit_payment, order: order) }
277
-
278
- it { expect { subject.update_cart params }.to change { order.payments.store_credits.count }.by(-1) }
279
- end
280
-
281
- context "submits item quantity 0" do
282
- let(:params) do
283
- { line_items_attributes: {
284
- "0" => { id: shirt.id, quantity: 0 },
285
- "1" => { id: "666", quantity: 0}
286
- } }
287
- end
288
-
289
- it "removes item from order" do
290
- expect {
291
- subject.update_cart params
292
- }.to change { subject.order.line_items.count }
293
- end
294
-
295
- it "doesnt try to update unexistent items" do
296
- filtered_params = { line_items_attributes: {
297
- "0" => { id: shirt.id, quantity: 0 },
298
- } }
299
- expect(subject.order).to receive(:update_attributes).with(filtered_params)
300
- subject.update_cart params
301
- end
302
-
303
- it "should not filter if there is only one line item" do
304
- single_line_item_params = { line_items_attributes: { id: shirt.id, quantity: 0 } }
305
- expect(subject.order).to receive(:update_attributes).with(single_line_item_params)
306
- subject.update_cart single_line_item_params
307
- end
308
-
309
- end
310
-
311
- it "ensures updated shipments" do
312
- expect(subject.order).to receive(:ensure_updated_shipments)
313
- subject.update_cart params
314
- end
315
- end
316
-
317
- context "completed order" do
318
- let(:order) { create(:order, state: 'complete', completed_at: Time.current) }
319
-
320
- before { order.shipments.create! stock_location_id: variant.stock_location_ids.first }
321
-
322
- it "updates order payment state" do
323
- expect {
324
- subject.add variant
325
- }.to change { order.payment_state }
326
-
327
- expect {
328
- subject.remove variant
329
- }.to change { order.payment_state }
330
- end
331
- end
332
- end