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,39 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Spree
4
- module Stock
5
- describe Differentiator, type: :model do
6
- let(:variant1) { mock_model(Variant) }
7
- let(:variant2) { mock_model(Variant) }
8
-
9
- let(:line_item1) { build(:line_item, variant: variant1, quantity: 2) }
10
- let(:line_item2) { build(:line_item, variant: variant2, quantity: 2) }
11
-
12
- let(:stock_location) { mock_model(StockLocation) }
13
-
14
- let(:inventory_unit1) { build(:inventory_unit, variant: variant1, line_item: line_item1) }
15
- let(:inventory_unit2) { build(:inventory_unit, variant: variant2, line_item: line_item2) }
16
-
17
- let(:order) { mock_model(Order, line_items: [line_item1, line_item2]) }
18
-
19
- let(:package1) do
20
- Package.new(stock_location).tap { |p| p.add(inventory_unit1) }
21
- end
22
-
23
- let(:package2) do
24
- Package.new(stock_location).tap { |p| p.add(inventory_unit2) }
25
- end
26
-
27
- let(:packages) { [package1, package2] }
28
-
29
- subject { Differentiator.new(order, packages) }
30
-
31
- it { is_expected.to be_missing }
32
-
33
- it 'calculates the missing items' do
34
- expect(subject.missing[variant1]).to eq 1
35
- expect(subject.missing[variant2]).to eq 1
36
- end
37
- end
38
- end
39
- end
@@ -1,202 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Spree
4
- module Stock
5
- describe Estimator, type: :model do
6
- let!(:shipping_method) { create(:shipping_method) }
7
- let(:package) { build(:stock_package, contents: inventory_units.map { |i| ContentItem.new(inventory_unit) }) }
8
- let(:order) { build(:order_with_line_items) }
9
- let(:inventory_units) { order.inventory_units }
10
-
11
- subject { Estimator.new(order) }
12
-
13
- context "#shipping rates" do
14
- before(:each) do
15
- shipping_method.zones.first.members.create(zoneable: order.ship_address.country)
16
- allow_any_instance_of(ShippingMethod).to receive_message_chain(:calculator, :available?).and_return(true)
17
- allow_any_instance_of(ShippingMethod).to receive_message_chain(:calculator, :compute).and_return(4.00)
18
- allow_any_instance_of(ShippingMethod).to receive_message_chain(:calculator, :preferences).and_return({currency: currency})
19
- allow_any_instance_of(ShippingMethod).to receive_message_chain(:calculator, :marked_for_destruction?)
20
-
21
- allow(package).to receive_messages(shipping_methods: [shipping_method])
22
- end
23
-
24
- let(:currency) { "USD" }
25
-
26
- shared_examples_for "shipping rate matches" do
27
- it "returns shipping rates" do
28
- shipping_rates = subject.shipping_rates(package)
29
- expect(shipping_rates.first.cost).to eq 4.00
30
- end
31
- end
32
-
33
- shared_examples_for "shipping rate doesn't match" do
34
- it "does not return shipping rates" do
35
- shipping_rates = subject.shipping_rates(package)
36
- expect(shipping_rates).to eq([])
37
- end
38
- end
39
-
40
- context "when the order's ship address is in the same zone" do
41
- it_should_behave_like "shipping rate matches"
42
- end
43
-
44
- context "when the order's ship address is in a different zone" do
45
- before { shipping_method.zones.each{|z| z.members.delete_all} }
46
- it_should_behave_like "shipping rate doesn't match"
47
- end
48
-
49
- context "when the calculator is not available for that order" do
50
- before { allow_any_instance_of(ShippingMethod).to receive_message_chain(:calculator, :available?).and_return(false) }
51
- it_should_behave_like "shipping rate doesn't match"
52
- end
53
-
54
- context "when the currency is nil" do
55
- let(:currency) { nil }
56
- it_should_behave_like "shipping rate matches"
57
- end
58
-
59
- context "when the currency is an empty string" do
60
- let(:currency) { "" }
61
- it_should_behave_like "shipping rate matches"
62
- end
63
-
64
- context "when the current matches the order's currency" do
65
- it_should_behave_like "shipping rate matches"
66
- end
67
-
68
- context "if the currency is different than the order's currency" do
69
- let(:currency) { "GBP" }
70
- it_should_behave_like "shipping rate doesn't match"
71
- end
72
-
73
- it "sorts shipping rates by cost" do
74
- shipping_methods = 3.times.map { create(:shipping_method) }
75
- allow(shipping_methods[0]).to receive_message_chain(:calculator, :compute).and_return(5.00)
76
- allow(shipping_methods[1]).to receive_message_chain(:calculator, :compute).and_return(3.00)
77
- allow(shipping_methods[2]).to receive_message_chain(:calculator, :compute).and_return(4.00)
78
-
79
- allow(subject).to receive(:shipping_methods).and_return(shipping_methods)
80
-
81
- expect(subject.shipping_rates(package).map(&:cost)).to eq %w[3.00 4.00 5.00].map(&BigDecimal.method(:new))
82
- end
83
-
84
- context "general shipping methods" do
85
- let(:shipping_methods) { 2.times.map { create(:shipping_method) } }
86
-
87
- it "selects the most affordable shipping rate" do
88
- allow(shipping_methods[0]).to receive_message_chain(:calculator, :compute).and_return(5.00)
89
- allow(shipping_methods[1]).to receive_message_chain(:calculator, :compute).and_return(3.00)
90
-
91
- allow(subject).to receive(:shipping_methods).and_return(shipping_methods)
92
-
93
- expect(subject.shipping_rates(package).sort_by(&:cost).map(&:selected)).to eq [true, false]
94
- end
95
-
96
- it "selects the most affordable shipping rate and doesn't raise exception over nil cost" do
97
- allow(shipping_methods[0]).to receive_message_chain(:calculator, :compute).and_return(1.00)
98
- allow(shipping_methods[1]).to receive_message_chain(:calculator, :compute).and_return(nil)
99
-
100
- allow(subject).to receive(:shipping_methods).and_return(shipping_methods)
101
-
102
- subject.shipping_rates(package)
103
- end
104
- end
105
-
106
- context "involves backend only shipping methods" do
107
- let(:backend_method) { create(:shipping_method, display_on: "back_end") }
108
- let(:generic_method) { create(:shipping_method) }
109
-
110
- before do
111
- allow(backend_method).to receive_message_chain(:calculator, :compute).and_return(0.00)
112
- allow(generic_method).to receive_message_chain(:calculator, :compute).and_return(5.00)
113
- allow(package).to receive(:shipping_methods).and_return([backend_method, generic_method])
114
- end
115
-
116
- it "does not return backend rates at all" do
117
- expect(subject.shipping_rates(package).map(&:shipping_method_id)).to eq([generic_method.id])
118
- end
119
-
120
- # regression for #3287
121
- it "doesn't select backend rates even if they're more affordable" do
122
- expect(subject.shipping_rates(package).map(&:selected)).to eq [true]
123
- end
124
- end
125
-
126
- context "includes tax adjustments if applicable" do
127
- let!(:tax_rate) { create(:tax_rate, zone: order.tax_zone) }
128
-
129
- before do
130
- Spree::ShippingMethod.all.each do |sm|
131
- sm.tax_category_id = tax_rate.tax_category_id
132
- sm.save
133
- end
134
- package.shipping_methods.map(&:reload)
135
- end
136
-
137
-
138
- it "links the shipping rate and the tax rate" do
139
- shipping_rates = subject.shipping_rates(package)
140
- expect(shipping_rates.first.tax_rate).to eq(tax_rate)
141
- end
142
- end
143
-
144
- context "VAT price calculation" do
145
- let(:tax_category) { create :tax_category }
146
- let!(:shipping_method) { create(:shipping_method, tax_category: tax_category) }
147
-
148
- let(:default_zone) { create(:zone_with_country, default_tax: true) }
149
- let!(:default_vat) do
150
- create :tax_rate,
151
- included_in_price: true,
152
- zone: default_zone,
153
- amount: 0.2,
154
- tax_category: shipping_method.tax_category
155
- end
156
-
157
- context "when the order does not have a tax zone" do
158
- before { allow(order).to receive(:tax_zone).and_return nil }
159
- it_should_behave_like "shipping rate matches"
160
- end
161
-
162
- context "when the order's tax zone is the default zone" do
163
- before { allow(order).to receive(:tax_zone).and_return(default_zone) }
164
- it_should_behave_like "shipping rate matches"
165
- end
166
-
167
- context "when the order's tax zone is a non-VAT zone" do
168
- let!(:zone_without_vat) { create(:zone_with_country) }
169
- before { allow(order).to receive(:tax_zone).and_return(zone_without_vat) }
170
-
171
- it 'deducts the default VAT from the cost' do
172
- shipping_rates = subject.shipping_rates(package)
173
- # deduct default vat: 4.00 / 1.2 = 3.33 (rounded)
174
- expect(shipping_rates.first.cost).to eq(3.33)
175
- end
176
- end
177
-
178
- context "when the order's tax zone is a zone with VAT outside the default zone" do
179
- let(:other_vat_zone) { create(:zone_with_country) }
180
- let!(:other_vat) do
181
- create :tax_rate,
182
- included_in_price: true,
183
- zone: other_vat_zone,
184
- amount: 0.3,
185
- tax_category: shipping_method.tax_category
186
- end
187
-
188
- before { allow(order).to receive(:tax_zone).and_return(other_vat_zone) }
189
-
190
- it 'deducts the default vat and applies the foreign vat to calculate the price' do
191
- shipping_rates = subject.shipping_rates(package)
192
- #
193
- # deduct default vat: 4.00 / 1.2 = 3.33 (rounded)
194
- # apply foreign vat: 3.33 * 1.3 = 4.33 (rounded)
195
- expect(shipping_rates.first.cost).to eq(4.33)
196
- end
197
- end
198
- end
199
- end
200
- end
201
- end
202
- end
@@ -1,37 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Spree
4
- module Stock
5
- describe InventoryUnitBuilder, type: :model do
6
- let(:line_item_1) { build(:line_item) }
7
- let(:line_item_2) { build(:line_item, quantity: 2) }
8
- let(:order) { build(:order, line_items: [line_item_1, line_item_2]) }
9
-
10
- subject { InventoryUnitBuilder.new(order) }
11
-
12
- describe "#units" do
13
- it "returns an inventory unit for each quantity for the order's line items" do
14
- units = subject.units
15
- expect(units.count).to eq 2
16
- expect(units.first.line_item).to eq line_item_1
17
- expect(units.first.variant).to eq line_item_1.variant
18
- expect(units.first.quantity).to eq line_item_1.quantity
19
-
20
- expect(units.second.line_item).to eq line_item_2
21
- expect(units.second.variant).to eq line_item_2.variant
22
- expect(units.second.quantity).to eq line_item_2.quantity
23
- end
24
-
25
- it "builds the inventory units as pending" do
26
- expect(subject.units.map(&:pending).uniq).to eq [true]
27
- end
28
-
29
- it "sets the order_id on inventory units" do
30
- expect(subject.units.map(&:order_id).uniq).to eq [order.id]
31
- end
32
-
33
- end
34
-
35
- end
36
- end
37
- end
@@ -1,182 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Spree
4
- module Stock
5
- describe Package, type: :model do
6
- let(:variant) { build(:variant, weight: 25.0) }
7
- let(:stock_location) { build(:stock_location) }
8
- let(:order) { build(:order) }
9
-
10
- subject { Package.new(stock_location) }
11
-
12
- def build_inventory_unit
13
- build(:inventory_unit, variant: variant)
14
- end
15
-
16
- it 'calculates the weight of all the contents' do
17
- 4.times { subject.add build_inventory_unit }
18
- expect(subject.weight).to eq(100.0)
19
- end
20
-
21
- context "currency" do
22
- let(:unit) { build_inventory_unit }
23
- before { subject.add unit }
24
-
25
- it "returns the currency based on the currency from the order" do
26
- expect(subject.currency).to eql "USD"
27
- end
28
- end
29
-
30
- it 'filters by on_hand and backordered' do
31
- 4.times { subject.add build_inventory_unit }
32
- 3.times { subject.add build_inventory_unit, :backordered }
33
- expect(subject.on_hand.count).to eq 4
34
- expect(subject.backordered.count).to eq 3
35
- end
36
-
37
- it 'calculates the quantity by state' do
38
- 4.times { subject.add build_inventory_unit }
39
- 3.times { subject.add build_inventory_unit, :backordered }
40
-
41
- expect(subject.quantity).to eq 7
42
- expect(subject.quantity(:on_hand)).to eq 4
43
- expect(subject.quantity(:backordered)).to eq 3
44
- end
45
-
46
- it 'returns nil for content item not found' do
47
- unit = build_inventory_unit
48
- item = subject.find_item(unit, :on_hand)
49
- expect(item).to be_nil
50
- end
51
-
52
- it 'finds content item for an inventory unit' do
53
- unit = build_inventory_unit
54
- subject.add unit
55
- item = subject.find_item(unit, :on_hand)
56
- expect(item.quantity).to eq 1
57
- end
58
-
59
- # Contains regression test for #2804
60
- it 'builds a list of shipping methods common to all categories' do
61
- category1 = create(:shipping_category)
62
- category2 = create(:shipping_category)
63
- method1 = create(:shipping_method)
64
- method2 = create(:shipping_method)
65
- method1.shipping_categories = [category1, category2]
66
- method2.shipping_categories = [category1]
67
- variant1 = create(:product, shipping_category: category1).master
68
- variant2 = create(:product, shipping_category: category2).master
69
- contents = [ContentItem.new(build(:inventory_unit, variant_id: variant1.id)),
70
- ContentItem.new(build(:inventory_unit, variant_id: variant1.id)),
71
- ContentItem.new(build(:inventory_unit, variant_id: variant2.id))]
72
-
73
- package = Package.new(stock_location, contents)
74
- expect(package.shipping_methods).to eq([method1])
75
- end
76
-
77
- it 'builds an empty list of shipping methods when no categories' do
78
- variant = mock_model(Variant, shipping_category: nil)
79
- contents = [ContentItem.new(build(:inventory_unit, variant: variant))]
80
- package = Package.new(stock_location, contents)
81
- expect(package.shipping_methods).to be_empty
82
- end
83
-
84
- it "can convert to a shipment" do
85
- 2.times { subject.add build_inventory_unit }
86
- subject.add build_inventory_unit, :backordered
87
-
88
- shipping_method = build(:shipping_method)
89
- subject.shipping_rates = [ Spree::ShippingRate.new(shipping_method: shipping_method, cost: 10.00, selected: true) ]
90
-
91
- shipment = subject.to_shipment
92
- expect(shipment.stock_location).to eq subject.stock_location
93
- expect(shipment.inventory_units.size).to eq 3
94
-
95
- first_unit = shipment.inventory_units.first
96
- expect(first_unit.variant).to eq variant
97
- expect(first_unit.state).to eq 'on_hand'
98
- expect(first_unit).to be_pending
99
-
100
- last_unit = shipment.inventory_units.last
101
- expect(last_unit.variant).to eq variant
102
- expect(last_unit.state).to eq 'backordered'
103
-
104
- expect(shipment.shipping_method).to eq shipping_method
105
- end
106
-
107
- describe "#add_multiple" do
108
- it "adds multiple inventory units" do
109
- expect { subject.add_multiple [build_inventory_unit, build_inventory_unit] }.to change { subject.quantity }.by(2)
110
- end
111
-
112
- it "allows adding with a state" do
113
- expect { subject.add_multiple [build_inventory_unit, build_inventory_unit], :backordered }.to change { subject.backordered.count }.by(2)
114
- end
115
-
116
- it "defaults to adding with the on hand state" do
117
- expect { subject.add_multiple [build_inventory_unit, build_inventory_unit] }.to change { subject.on_hand.count }.by(2)
118
- end
119
- end
120
-
121
- describe "#remove" do
122
- let(:unit) { build_inventory_unit }
123
- context "there is a content item for the inventory unit" do
124
-
125
- before { subject.add unit }
126
-
127
- it "removes that content item" do
128
- expect { subject.remove(unit) }.to change { subject.quantity }.by(-1)
129
- expect(subject.contents.map(&:inventory_unit)).not_to include unit
130
- end
131
- end
132
-
133
- context "there is no content item for the inventory unit" do
134
- it "doesn't change the set of content items" do
135
- expect { subject.remove(unit) }.not_to change { subject.quantity }
136
- end
137
- end
138
- end
139
-
140
- describe "#order" do
141
- let(:unit) { build_inventory_unit }
142
- context "there is an inventory unit" do
143
-
144
- before { subject.add unit }
145
-
146
- it "returns an order" do
147
- expect(subject.order).to be_a_kind_of Spree::Order
148
- expect(subject.order).to eq unit.order
149
- end
150
- end
151
-
152
- context "there is no inventory unit" do
153
- it "returns nil" do
154
- expect(subject.order).to eq nil
155
- end
156
- end
157
- end
158
-
159
- context "#volume" do
160
- it "calculates the sum of the volume of all the items" do
161
- contents = [ContentItem.new(build(:inventory_unit, variant: build(:variant))),
162
- ContentItem.new(build(:inventory_unit, variant: build(:variant))),
163
- ContentItem.new(build(:inventory_unit, variant: build(:variant))),
164
- ContentItem.new(build(:inventory_unit, variant: build(:variant)))]
165
- package = Package.new(stock_location, contents)
166
- expect(package.volume).to eq contents.sum(&:volume)
167
- end
168
- end
169
-
170
- context "#dimension" do
171
- it "calculates the sum of the dimension of all the items" do
172
- contents = [ContentItem.new(build(:inventory_unit, variant: build(:variant))),
173
- ContentItem.new(build(:inventory_unit, variant: build(:variant))),
174
- ContentItem.new(build(:inventory_unit, variant: build(:variant))),
175
- ContentItem.new(build(:inventory_unit, variant: build(:variant)))]
176
- package = Package.new(stock_location, contents)
177
- expect(package.dimension).to eq contents.sum(&:dimension)
178
- end
179
- end
180
- end
181
- end
182
- end