spree_core 3.1.5 → 3.1.6

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 (215) hide show
  1. checksums.yaml +4 -4
  2. data/app/models/concerns/spree/ransackable_attributes.rb +6 -1
  3. data/app/models/concerns/spree/user_methods.rb +10 -0
  4. data/app/models/spree/legacy_user.rb +0 -8
  5. data/app/models/spree/order.rb +1 -1
  6. data/app/models/spree/product.rb +8 -0
  7. data/app/models/spree/product/scopes.rb +7 -3
  8. data/app/models/spree/stock_transfer.rb +1 -1
  9. data/config/locales/en.yml +2 -0
  10. data/lib/spree/core/version.rb +1 -1
  11. data/spree_core.gemspec +2 -2
  12. metadata +11 -208
  13. data/spec/fixtures/microdata.html +0 -22
  14. data/spec/fixtures/microdata_itemref.html +0 -15
  15. data/spec/fixtures/microdata_no_itemscope.html +0 -20
  16. data/spec/fixtures/thinking-cat.jpg +0 -0
  17. data/spec/helpers/base_helper_spec.rb +0 -200
  18. data/spec/helpers/products_helper_spec.rb +0 -296
  19. data/spec/lib/calculated_adjustments_spec.rb +0 -7
  20. data/spec/lib/i18n_spec.rb +0 -123
  21. data/spec/lib/search/base_spec.rb +0 -86
  22. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -103
  23. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -110
  24. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -17
  25. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -72
  26. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -39
  27. data/spec/lib/spree/core/delegate_belongs_to_spec.rb +0 -22
  28. data/spec/lib/spree/core/importer/order_spec.rb +0 -605
  29. data/spec/lib/spree/core/number_generator_spec.rb +0 -175
  30. data/spec/lib/spree/core/token_generator_spec.rb +0 -24
  31. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  32. data/spec/lib/spree/core_spec.rb +0 -23
  33. data/spec/lib/spree/localized_number_spec.rb +0 -48
  34. data/spec/lib/spree/migrations_spec.rb +0 -36
  35. data/spec/lib/spree/money_spec.rb +0 -122
  36. data/spec/lib/tasks/exchanges_spec.rb +0 -136
  37. data/spec/mailers/order_mailer_spec.rb +0 -122
  38. data/spec/mailers/reimbursement_mailer_spec.rb +0 -47
  39. data/spec/mailers/shipment_mailer_spec.rb +0 -81
  40. data/spec/mailers/test_mailer_spec.rb +0 -38
  41. data/spec/models/option_type_prototype_spec.rb +0 -9
  42. data/spec/models/spree/ability_spec.rb +0 -251
  43. data/spec/models/spree/address_spec.rb +0 -291
  44. data/spec/models/spree/adjustable/adjuster/base_spec.rb +0 -10
  45. data/spec/models/spree/adjustable/adjuster/promotion_spec.rb +0 -211
  46. data/spec/models/spree/adjustable/adjuster/tax_spec.rb +0 -86
  47. data/spec/models/spree/adjustable/adjustments_updater_spec.rb +0 -26
  48. data/spec/models/spree/adjustment_spec.rb +0 -189
  49. data/spec/models/spree/app_configuration_spec.rb +0 -26
  50. data/spec/models/spree/asset_spec.rb +0 -28
  51. data/spec/models/spree/calculator/default_tax_spec.rb +0 -152
  52. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -25
  53. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -47
  54. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -41
  55. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -15
  56. data/spec/models/spree/calculator/price_sack_spec.rb +0 -30
  57. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -51
  58. data/spec/models/spree/calculator/shipping.rb +0 -8
  59. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -23
  60. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -13
  61. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -52
  62. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -20
  63. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -29
  64. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -40
  65. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -51
  66. data/spec/models/spree/calculator_spec.rb +0 -69
  67. data/spec/models/spree/classification_spec.rb +0 -93
  68. data/spec/models/spree/concerns/display_money_spec.rb +0 -43
  69. data/spec/models/spree/concerns/user_methods_spec.rb +0 -55
  70. data/spec/models/spree/concerns/vat_price_calculation_spec.rb +0 -66
  71. data/spec/models/spree/country_spec.rb +0 -55
  72. data/spec/models/spree/credit_card_spec.rb +0 -328
  73. data/spec/models/spree/customer_return_spec.rb +0 -240
  74. data/spec/models/spree/exchange_spec.rb +0 -75
  75. data/spec/models/spree/gateway/bogus_simple.rb +0 -20
  76. data/spec/models/spree/gateway/bogus_spec.rb +0 -13
  77. data/spec/models/spree/gateway_spec.rb +0 -61
  78. data/spec/models/spree/image_spec.rb +0 -8
  79. data/spec/models/spree/inventory_unit_spec.rb +0 -225
  80. data/spec/models/spree/line_item_spec.rb +0 -327
  81. data/spec/models/spree/option_type_spec.rb +0 -14
  82. data/spec/models/spree/option_value_spec.rb +0 -18
  83. data/spec/models/spree/order/address_spec.rb +0 -50
  84. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  85. data/spec/models/spree/order/callbacks_spec.rb +0 -42
  86. data/spec/models/spree/order/checkout_spec.rb +0 -782
  87. data/spec/models/spree/order/currency_updater_spec.rb +0 -32
  88. data/spec/models/spree/order/finalizing_spec.rb +0 -114
  89. data/spec/models/spree/order/helpers_spec.rb +0 -5
  90. data/spec/models/spree/order/payment_spec.rb +0 -214
  91. data/spec/models/spree/order/risk_assessment_spec.rb +0 -84
  92. data/spec/models/spree/order/shipments_spec.rb +0 -43
  93. data/spec/models/spree/order/state_machine_spec.rb +0 -211
  94. data/spec/models/spree/order/store_credit_spec.rb +0 -426
  95. data/spec/models/spree/order/tax_spec.rb +0 -84
  96. data/spec/models/spree/order/totals_spec.rb +0 -24
  97. data/spec/models/spree/order/updating_spec.rb +0 -18
  98. data/spec/models/spree/order/validations_spec.rb +0 -15
  99. data/spec/models/spree/order_contents_spec.rb +0 -297
  100. data/spec/models/spree/order_inventory_spec.rb +0 -238
  101. data/spec/models/spree/order_merger_spec.rb +0 -135
  102. data/spec/models/spree/order_spec.rb +0 -967
  103. data/spec/models/spree/order_updater_spec.rb +0 -305
  104. data/spec/models/spree/payment/gateway_options_spec.rb +0 -127
  105. data/spec/models/spree/payment/store_credit_spec.rb +0 -60
  106. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -291
  107. data/spec/models/spree/payment_method_spec.rb +0 -103
  108. data/spec/models/spree/payment_spec.rb +0 -919
  109. data/spec/models/spree/preference_spec.rb +0 -80
  110. data/spec/models/spree/preferences/configuration_spec.rb +0 -30
  111. data/spec/models/spree/preferences/preferable_spec.rb +0 -348
  112. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -58
  113. data/spec/models/spree/preferences/store_spec.rb +0 -46
  114. data/spec/models/spree/price_spec.rb +0 -128
  115. data/spec/models/spree/product/scopes_spec.rb +0 -183
  116. data/spec/models/spree/product_duplicator_spec.rb +0 -103
  117. data/spec/models/spree/product_filter_spec.rb +0 -26
  118. data/spec/models/spree/product_option_type_spec.rb +0 -9
  119. data/spec/models/spree/product_promotion_rule_spec.rb +0 -9
  120. data/spec/models/spree/product_property_spec.rb +0 -22
  121. data/spec/models/spree/product_spec.rb +0 -540
  122. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -50
  123. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -148
  124. data/spec/models/spree/promotion/actions/create_line_items_spec.rb +0 -86
  125. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -36
  126. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -75
  127. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -282
  128. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -42
  129. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -90
  130. data/spec/models/spree/promotion/rules/product_spec.rb +0 -143
  131. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -102
  132. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -27
  133. data/spec/models/spree/promotion/rules/user_spec.rb +0 -45
  134. data/spec/models/spree/promotion_action_spec.rb +0 -10
  135. data/spec/models/spree/promotion_category_spec.rb +0 -17
  136. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -102
  137. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -323
  138. data/spec/models/spree/promotion_handler/free_shipping_spec.rb +0 -48
  139. data/spec/models/spree/promotion_handler/page_spec.rb +0 -44
  140. data/spec/models/spree/promotion_rule_spec.rb +0 -29
  141. data/spec/models/spree/promotion_rule_taxon_spec.rb +0 -9
  142. data/spec/models/spree/promotion_rule_user_spec.rb +0 -9
  143. data/spec/models/spree/promotion_spec.rb +0 -644
  144. data/spec/models/spree/property_prototype_spec.rb +0 -9
  145. data/spec/models/spree/property_spec.rb +0 -5
  146. data/spec/models/spree/prototype_spec.rb +0 -5
  147. data/spec/models/spree/prototype_taxon_spec.rb +0 -9
  148. data/spec/models/spree/refund_reason_spec.rb +0 -7
  149. data/spec/models/spree/refund_spec.rb +0 -195
  150. data/spec/models/spree/reimbursement/credit_spec.rb +0 -36
  151. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -140
  152. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -83
  153. data/spec/models/spree/reimbursement_performer_spec.rb +0 -30
  154. data/spec/models/spree/reimbursement_spec.rb +0 -188
  155. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -63
  156. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -53
  157. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -46
  158. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -55
  159. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -101
  160. data/spec/models/spree/return_authorization_reason_spec.rb +0 -7
  161. data/spec/models/spree/return_authorization_spec.rb +0 -230
  162. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -77
  163. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -58
  164. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -61
  165. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -32
  166. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -29
  167. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -35
  168. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -65
  169. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  170. data/spec/models/spree/return_item_spec.rb +0 -731
  171. data/spec/models/spree/returns_calculator_spec.rb +0 -14
  172. data/spec/models/spree/role_spec.rb +0 -7
  173. data/spec/models/spree/shipment_spec.rb +0 -740
  174. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  175. data/spec/models/spree/shipping_category_spec.rb +0 -19
  176. data/spec/models/spree/shipping_method_spec.rb +0 -95
  177. data/spec/models/spree/shipping_rate_spec.rb +0 -140
  178. data/spec/models/spree/state_spec.rb +0 -29
  179. data/spec/models/spree/stock/availability_validator_spec.rb +0 -36
  180. data/spec/models/spree/stock/content_item_spec.rb +0 -31
  181. data/spec/models/spree/stock/coordinator_spec.rb +0 -51
  182. data/spec/models/spree/stock/differentiator_spec.rb +0 -39
  183. data/spec/models/spree/stock/estimator_spec.rb +0 -202
  184. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -38
  185. data/spec/models/spree/stock/package_spec.rb +0 -194
  186. data/spec/models/spree/stock/packer_spec.rb +0 -70
  187. data/spec/models/spree/stock/prioritizer_spec.rb +0 -125
  188. data/spec/models/spree/stock/quantifier_spec.rb +0 -126
  189. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -29
  190. data/spec/models/spree/stock/splitter/base_spec.rb +0 -21
  191. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -47
  192. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -32
  193. data/spec/models/spree/stock_item_spec.rb +0 -428
  194. data/spec/models/spree/stock_location_spec.rb +0 -243
  195. data/spec/models/spree/stock_movement_spec.rb +0 -56
  196. data/spec/models/spree/stock_transfer_spec.rb +0 -50
  197. data/spec/models/spree/store_credit_event_spec.rb +0 -101
  198. data/spec/models/spree/store_credit_spec.rb +0 -786
  199. data/spec/models/spree/store_spec.rb +0 -78
  200. data/spec/models/spree/tax_category_spec.rb +0 -32
  201. data/spec/models/spree/tax_rate_spec.rb +0 -542
  202. data/spec/models/spree/taxon_spec.rb +0 -74
  203. data/spec/models/spree/taxonomy_spec.rb +0 -18
  204. data/spec/models/spree/tracker_spec.rb +0 -21
  205. data/spec/models/spree/user_spec.rb +0 -203
  206. data/spec/models/spree/variant_spec.rb +0 -795
  207. data/spec/models/spree/zone_member_spec.rb +0 -38
  208. data/spec/models/spree/zone_spec.rb +0 -470
  209. data/spec/spec_helper.rb +0 -77
  210. data/spec/support/big_decimal.rb +0 -5
  211. data/spec/support/concerns/adjustment_source.rb +0 -23
  212. data/spec/support/concerns/default_price.rb +0 -37
  213. data/spec/support/rake.rb +0 -13
  214. data/spec/support/test_gateway.rb +0 -2
  215. data/spec/validators/db_maximum_length_validator_spec.rb +0 -22
@@ -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,194 +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 = mock_model(Variant, shipping_category: category1)
68
- variant2 = mock_model(Variant, shipping_category: category2)
69
- variant3 = mock_model(Variant, shipping_category: nil)
70
- contents = [ContentItem.new(build(:inventory_unit, variant: variant1)),
71
- ContentItem.new(build(:inventory_unit, variant: variant1)),
72
- ContentItem.new(build(:inventory_unit, variant: variant2)),
73
- ContentItem.new(build(:inventory_unit, variant: variant3))]
74
-
75
- package = Package.new(stock_location, contents)
76
- expect(package.shipping_methods).to eq([method1])
77
- end
78
-
79
- it 'builds an empty list of shipping methods when no categories' do
80
- variant = mock_model(Variant, shipping_category: nil)
81
- contents = [ContentItem.new(build(:inventory_unit, variant: variant))]
82
- package = Package.new(stock_location, contents)
83
- expect(package.shipping_methods).to be_empty
84
- end
85
-
86
- it "can convert to a shipment" do
87
- 2.times { subject.add build_inventory_unit }
88
- subject.add build_inventory_unit, :backordered
89
-
90
- shipping_method = build(:shipping_method)
91
- subject.shipping_rates = [ Spree::ShippingRate.new(shipping_method: shipping_method, cost: 10.00, selected: true) ]
92
-
93
- shipment = subject.to_shipment
94
- expect(shipment.stock_location).to eq subject.stock_location
95
- expect(shipment.inventory_units.size).to eq 3
96
-
97
- first_unit = shipment.inventory_units.first
98
- expect(first_unit.variant).to eq variant
99
- expect(first_unit.state).to eq 'on_hand'
100
- expect(first_unit).to be_pending
101
-
102
- last_unit = shipment.inventory_units.last
103
- expect(last_unit.variant).to eq variant
104
- expect(last_unit.state).to eq 'backordered'
105
-
106
- expect(shipment.shipping_method).to eq shipping_method
107
- end
108
-
109
- it 'does not add an inventory unit to a package twice' do
110
- # since inventory units currently don't have a quantity
111
- unit = build_inventory_unit
112
- subject.add unit
113
- subject.add unit
114
- expect(subject.quantity).to eq 1
115
- expect(subject.contents.first.inventory_unit).to eq unit
116
- expect(subject.contents.first.quantity).to eq 1
117
- end
118
-
119
- describe "#add_multiple" do
120
- it "adds multiple inventory units" do
121
- expect { subject.add_multiple [build_inventory_unit, build_inventory_unit] }.to change { subject.quantity }.by(2)
122
- end
123
-
124
- it "allows adding with a state" do
125
- expect { subject.add_multiple [build_inventory_unit, build_inventory_unit], :backordered }.to change { subject.backordered.count }.by(2)
126
- end
127
-
128
- it "defaults to adding with the on hand state" do
129
- expect { subject.add_multiple [build_inventory_unit, build_inventory_unit] }.to change { subject.on_hand.count }.by(2)
130
- end
131
- end
132
-
133
- describe "#remove" do
134
- let(:unit) { build_inventory_unit }
135
- context "there is a content item for the inventory unit" do
136
-
137
- before { subject.add unit }
138
-
139
- it "removes that content item" do
140
- expect { subject.remove(unit) }.to change { subject.quantity }.by(-1)
141
- expect(subject.contents.map(&:inventory_unit)).not_to include unit
142
- end
143
- end
144
-
145
- context "there is no content item for the inventory unit" do
146
- it "doesn't change the set of content items" do
147
- expect { subject.remove(unit) }.not_to change { subject.quantity }
148
- end
149
- end
150
- end
151
-
152
- describe "#order" do
153
- let(:unit) { build_inventory_unit }
154
- context "there is an inventory unit" do
155
-
156
- before { subject.add unit }
157
-
158
- it "returns an order" do
159
- expect(subject.order).to be_a_kind_of Spree::Order
160
- expect(subject.order).to eq unit.order
161
- end
162
- end
163
-
164
- context "there is no inventory unit" do
165
- it "returns nil" do
166
- expect(subject.order).to eq nil
167
- end
168
- end
169
- end
170
-
171
- context "#volume" do
172
- it "calculates the sum of the volume of all the items" do
173
- contents = [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
- ContentItem.new(build(:inventory_unit, variant: build(:variant)))]
177
- package = Package.new(stock_location, contents)
178
- expect(package.volume).to eq contents.sum(&:volume)
179
- end
180
- end
181
-
182
- context "#dimension" do
183
- it "calculates the sum of the dimension of all the items" do
184
- contents = [ContentItem.new(build(:inventory_unit, variant: build(:variant))),
185
- ContentItem.new(build(:inventory_unit, variant: build(:variant))),
186
- ContentItem.new(build(:inventory_unit, variant: build(:variant))),
187
- ContentItem.new(build(:inventory_unit, variant: build(:variant)))]
188
- package = Package.new(stock_location, contents)
189
- expect(package.dimension).to eq contents.sum(&:dimension)
190
- end
191
- end
192
- end
193
- end
194
- end