spree_core 3.2.1 → 3.2.2

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 (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,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,38 +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 3
16
- expect(units.first.line_item).to eq line_item_1
17
- expect(units.first.variant).to eq line_item_1.variant
18
-
19
- expect(units[1].line_item).to eq line_item_2
20
- expect(units[1].variant).to eq line_item_2.variant
21
-
22
- expect(units[2].line_item).to eq line_item_2
23
- expect(units[2].variant).to eq line_item_2.variant
24
- end
25
-
26
- it "builds the inventory units as pending" do
27
- expect(subject.units.map(&:pending).uniq).to eq [true]
28
- end
29
-
30
- it "associates the inventory units to the order" do
31
- expect(subject.units.map(&:order).uniq).to eq [order]
32
- end
33
-
34
- end
35
-
36
- end
37
- end
38
- 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