spree_core 3.1.5 → 3.1.6

Sign up to get free protection for your applications and to get access to all the features.
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,135 +0,0 @@
1
- require 'spec_helper'
2
-
3
- # Regression tests for #2179
4
- module Spree
5
- describe OrderMerger, type: :model do
6
- let(:variant) { create(:variant) }
7
- let(:order_1) { Spree::Order.create }
8
- let(:order_2) { Spree::Order.create }
9
- let(:user) { stub_model(Spree::LegacyUser, email: "spree@example.com") }
10
- let(:subject) { Spree::OrderMerger.new(order_1) }
11
-
12
- it "destroys the other order" do
13
- subject.merge!(order_2)
14
- expect { order_2.reload }.to raise_error(ActiveRecord::RecordNotFound)
15
- end
16
-
17
- it "persist the merge" do
18
- expect(subject).to receive(:persist_merge)
19
- subject.merge!(order_2)
20
- end
21
-
22
- context "user is provided" do
23
- it "assigns user to new order" do
24
- subject.merge!(order_2, user)
25
- expect(order_1.user).to eq user
26
- end
27
- end
28
-
29
- context "merging together two orders with line items for the same variant" do
30
- before do
31
- order_1.contents.add(variant, 1)
32
- order_2.contents.add(variant, 1)
33
- end
34
-
35
- specify do
36
- subject.merge!(order_2, user)
37
- expect(order_1.line_items.count).to eq(1)
38
-
39
- line_item = order_1.line_items.first
40
- expect(line_item.quantity).to eq(2)
41
- expect(line_item.variant_id).to eq(variant.id)
42
- end
43
- end
44
-
45
- context "merging using extension-specific line_item_comparison_hooks" do
46
- before do
47
- Spree::Order.register_line_item_comparison_hook(:foos_match)
48
- allow(Spree::Variant).to receive(:price_modifier_amount).and_return(0.00)
49
- end
50
-
51
- after do
52
- # reset to avoid test pollution
53
- Spree::Order.line_item_comparison_hooks = Set.new
54
- end
55
-
56
- context "2 equal line items" do
57
- before do
58
- @line_item_1 = order_1.contents.add(variant, 1, foos: {})
59
- @line_item_2 = order_2.contents.add(variant, 1, foos: {})
60
- end
61
-
62
- specify do
63
- expect(order_1).to receive(:foos_match).with(@line_item_1, kind_of(Hash)).and_return(true)
64
- subject.merge!(order_2)
65
- expect(order_1.line_items.count).to eq(1)
66
-
67
- line_item = order_1.line_items.first
68
- expect(line_item.quantity).to eq(2)
69
- expect(line_item.variant_id).to eq(variant.id)
70
- end
71
- end
72
-
73
- context "2 different line items" do
74
- before do
75
- allow(order_1).to receive(:foos_match).and_return(false)
76
-
77
- order_1.contents.add(variant, 1, foos: {})
78
- order_2.contents.add(variant, 1, foos: { bar: :zoo })
79
- end
80
-
81
- specify do
82
- subject.merge!(order_2)
83
- expect(order_1.line_items.count).to eq(2)
84
-
85
- line_item = order_1.line_items.first
86
- expect(line_item.quantity).to eq(1)
87
- expect(line_item.variant_id).to eq(variant.id)
88
-
89
- line_item = order_1.line_items.last
90
- expect(line_item.quantity).to eq(1)
91
- expect(line_item.variant_id).to eq(variant.id)
92
- end
93
- end
94
- end
95
-
96
- context "merging together two orders with different line items" do
97
- let(:variant_2) { create(:variant) }
98
-
99
- before do
100
- order_1.contents.add(variant, 1)
101
- order_2.contents.add(variant_2, 1)
102
- end
103
-
104
- specify do
105
- subject.merge!(order_2)
106
- line_items = order_1.line_items.reload
107
- expect(line_items.count).to eq(2)
108
-
109
- expect(order_1.item_count).to eq 2
110
- expect(order_1.item_total).to eq line_items.map(&:amount).sum
111
-
112
- # No guarantee on ordering of line items, so we do this:
113
- expect(line_items.pluck(:quantity)).to match_array([1, 1])
114
- expect(line_items.pluck(:variant_id)).to match_array([variant.id, variant_2.id])
115
- end
116
- end
117
-
118
- context "merging together orders with invalid line items" do
119
- let(:variant_2) { create(:variant) }
120
-
121
- before do
122
- order_1.contents.add(variant, 1)
123
- order_2.contents.add(variant_2, 1)
124
- end
125
-
126
- it "should create errors with invalid line items" do
127
- # we cannot use .destroy here as it will be halted by
128
- # :ensure_no_line_items callback
129
- variant_2.really_destroy!
130
- subject.merge!(order_2)
131
- expect(order_1.errors.full_messages).not_to be_empty
132
- end
133
- end
134
- end
135
- end
@@ -1,967 +0,0 @@
1
- require 'spec_helper'
2
-
3
- class FakeCalculator < Spree::Calculator
4
- def compute(computable)
5
- 5
6
- end
7
- end
8
-
9
- describe Spree::Order, :type => :model do
10
- let(:user) { stub_model(Spree::LegacyUser, :email => "spree@example.com") }
11
- let(:order) { stub_model(Spree::Order, :user => user) }
12
-
13
- before do
14
- create(:store)
15
- allow(Spree::LegacyUser).to receive_messages(:current => mock_model(Spree::LegacyUser, :id => 123))
16
- end
17
-
18
- describe '.scopes' do
19
- let!(:user) { FactoryGirl.create(:user) }
20
- let!(:completed_order) { FactoryGirl.create(:order, user: user, completed_at: Time.current) }
21
- let!(:incompleted_order) { FactoryGirl.create(:order, user: user, completed_at: nil) }
22
-
23
- describe '.complete' do
24
- it { expect(Spree::Order.complete).to include completed_order }
25
- it { expect(Spree::Order.complete).not_to include incompleted_order }
26
- end
27
-
28
- describe '.incomplete' do
29
- it { expect(Spree::Order.incomplete).to include incompleted_order }
30
- it { expect(Spree::Order.incomplete).not_to include completed_order }
31
- end
32
- end
33
-
34
- describe '#update_with_updater!' do
35
- let(:updater) { Spree::OrderUpdater.new(order) }
36
-
37
- before do
38
- allow(order).to receive(:updater).and_return(updater)
39
- allow(updater).to receive(:update).and_return(true)
40
- end
41
-
42
- after { order.update_with_updater! }
43
-
44
- it 'expects to update order with order updater' do
45
- expect(updater).to receive(:update).and_return(true)
46
- end
47
- end
48
-
49
- context "#cancel" do
50
- let(:order) { create(:completed_order_with_totals) }
51
- let!(:payment) do
52
- create(
53
- :payment,
54
- order: order,
55
- amount: order.total,
56
- state: "completed"
57
- )
58
- end
59
- let(:payment_method) { double }
60
-
61
- it "should mark the payments as void" do
62
- allow_any_instance_of(Spree::Shipment).to receive(:refresh_rates).and_return(true)
63
- order.cancel
64
- order.reload
65
-
66
- expect(order.payments.first).to be_void
67
- end
68
- end
69
-
70
- context "#canceled_by" do
71
- let(:admin_user) { create :admin_user }
72
- let(:order) { create :order }
73
-
74
- before do
75
- allow(order).to receive(:cancel!)
76
- end
77
-
78
- subject { order.canceled_by(admin_user) }
79
-
80
- it 'should cancel the order' do
81
- expect(order).to receive(:cancel!)
82
- subject
83
- end
84
-
85
- it 'should save canceler_id' do
86
- subject
87
- expect(order.reload.canceler_id).to eq(admin_user.id)
88
- end
89
-
90
- it 'should save canceled_at' do
91
- subject
92
- expect(order.reload.canceled_at).to_not be_nil
93
- end
94
-
95
- it 'should have canceler' do
96
- subject
97
- expect(order.reload.canceler).to eq(admin_user)
98
- end
99
- end
100
-
101
- context '#create' do
102
- let(:order) { Spree::Order.create }
103
-
104
- it 'should assign an order number' do
105
- expect(order.number).not_to be_nil
106
- end
107
-
108
- it 'should create a randomized 35 character token' do
109
- expect(order.guest_token.size).to eq(35)
110
- end
111
- end
112
-
113
- context "creates shipments cost" do
114
- let(:shipment) { double }
115
-
116
- before { allow(order).to receive_messages shipments: [shipment] }
117
-
118
- it "update and persist totals" do
119
- expect(shipment).to receive :update_amounts
120
- expect(order.updater).to receive :update_shipment_total
121
- expect(order.updater).to receive :persist_totals
122
-
123
- order.set_shipments_cost
124
- end
125
- end
126
-
127
- context "#finalize!" do
128
- let(:order) { Spree::Order.create(email: 'test@example.com') }
129
-
130
- before do
131
- order.update_column :state, 'complete'
132
- end
133
-
134
- it "should set completed_at" do
135
- expect(order).to receive(:touch).with(:completed_at)
136
- order.finalize!
137
- end
138
-
139
- it "should sell inventory units" do
140
- order.shipments.each do |shipment|
141
- expect(shipment).to receive(:update!)
142
- expect(shipment).to receive(:finalize!)
143
- end
144
- order.finalize!
145
- end
146
-
147
- it "should decrease the stock for each variant in the shipment" do
148
- order.shipments.each do |shipment|
149
- expect(shipment.stock_location).to receive(:decrease_stock_for_variant)
150
- end
151
- order.finalize!
152
- end
153
-
154
- it "should change the shipment state to ready if order is paid" do
155
- Spree::Shipment.create(order: order, stock_location: create(:stock_location))
156
- order.shipments.reload
157
-
158
- allow(order).to receive_messages(paid?: true, complete?: true)
159
- order.finalize!
160
- order.reload # reload so we're sure the changes are persisted
161
- expect(order.shipment_state).to eq('ready')
162
- end
163
-
164
- after { Spree::Config.set track_inventory_levels: true }
165
- it "should not sell inventory units if track_inventory_levels is false" do
166
- Spree::Config.set track_inventory_levels: false
167
- expect(Spree::InventoryUnit).not_to receive(:sell_units)
168
- order.finalize!
169
- end
170
-
171
- it "should send an order confirmation email" do
172
- mail_message = double "Mail::Message"
173
- expect(Spree::OrderMailer).to receive(:confirm_email).with(order.id).and_return mail_message
174
- expect(mail_message).to receive :deliver_later
175
- order.finalize!
176
- end
177
-
178
- it "sets confirmation delivered when finalizing" do
179
- expect(order.confirmation_delivered?).to be false
180
- order.finalize!
181
- expect(order.confirmation_delivered?).to be true
182
- end
183
-
184
- it "should not send duplicate confirmation emails" do
185
- allow(order).to receive_messages(:confirmation_delivered? => true)
186
- expect(Spree::OrderMailer).not_to receive(:confirm_email)
187
- order.finalize!
188
- end
189
-
190
- it "should freeze all adjustments" do
191
- allow(Spree::OrderMailer).to receive_message_chain :confirm_email, :deliver_later
192
- adjustments = [double]
193
- expect(order).to receive(:all_adjustments).and_return(adjustments)
194
- adjustments.each do |adj|
195
- expect(adj).to receive(:close)
196
- end
197
- order.finalize!
198
- end
199
-
200
- context "order is considered risky" do
201
- before do
202
- allow(order).to receive_messages :is_risky? => true
203
- end
204
-
205
- it "should change state to risky" do
206
- expect(order).to receive(:considered_risky!)
207
- order.finalize!
208
- end
209
-
210
- context "and order is approved" do
211
- before do
212
- allow(order).to receive_messages :approved? => true
213
- end
214
-
215
- it "should leave order in complete state" do
216
- order.finalize!
217
- expect(order.state).to eq 'complete'
218
- end
219
- end
220
- end
221
- end
222
-
223
- context "insufficient_stock_lines" do
224
- let(:line_item) { mock_model Spree::LineItem, :insufficient_stock? => true }
225
-
226
- before { allow(order).to receive_messages(:line_items => [line_item]) }
227
-
228
- it "should return line_item that has insufficient stock on hand" do
229
- expect(order.insufficient_stock_lines.size).to eq(1)
230
- expect(order.insufficient_stock_lines.include?(line_item)).to be true
231
- end
232
- end
233
-
234
- describe "#ensure_line_item_variants_are_not_discontinued" do
235
- subject { order.ensure_line_item_variants_are_not_discontinued }
236
-
237
- let(:order) { create :order_with_line_items }
238
-
239
- context 'when variant is destroyed' do
240
- before do
241
- order.line_items.first.variant.discontinue!
242
- end
243
-
244
- it 'should restart checkout flow' do
245
- expect(order).to receive(:restart_checkout_flow).once
246
- subject
247
- end
248
-
249
- it 'should have error message' do
250
- subject
251
- expect(order.errors[:base]).to include(Spree.t(:discontinued_variants_present))
252
- end
253
-
254
- it 'should be false' do
255
- expect(subject).to be_falsey
256
- end
257
- end
258
-
259
- context 'when no variants are destroyed' do
260
- it 'should not restart checkout' do
261
- expect(order).to receive(:restart_checkout_flow).never
262
- subject
263
- end
264
-
265
- it 'should be true' do
266
- expect(subject).to be_truthy
267
- end
268
- end
269
- end
270
-
271
- describe '#ensure_line_items_are_in_stock' do
272
- subject { order.ensure_line_items_are_in_stock }
273
-
274
- let(:line_item) { create(:line_item, order: order) }
275
-
276
- before do
277
- allow(order).to receive(:insufficient_stock_lines).and_return([true])
278
- end
279
-
280
- it 'should restart checkout flow' do
281
- allow(order).to receive(:restart_checkout_flow)
282
- expect(order).to receive(:restart_checkout_flow).once
283
- subject
284
- end
285
-
286
- it 'should have error message' do
287
- subject
288
- expect(order.errors[:base]).to include(Spree.t(:insufficient_stock_lines_present))
289
- end
290
-
291
- it 'should be false' do
292
- allow(order).to receive(:restart_checkout_flow)
293
- expect(subject).to be_falsey
294
- end
295
- end
296
-
297
- context "empty!" do
298
- let(:order) { Spree::Order.create(email: 'test@example.com') }
299
- let(:promotion) { create :promotion, code: '10off' }
300
-
301
- before do
302
- promotion.orders << order
303
- end
304
-
305
- context 'completed order' do
306
- before do
307
- order.update_columns(state: 'complete', completed_at: Time.current)
308
- end
309
-
310
- it "raises an exception" do
311
- expect { order.empty! }.to raise_error(RuntimeError, Spree.t(:cannot_empty_completed_order))
312
- end
313
- end
314
-
315
- context 'incomplete order' do
316
- before do
317
- order.empty!
318
- end
319
-
320
- it "clears out line items, adjustments and update totals" do
321
- expect(order.line_items.count).to be_zero
322
- expect(order.adjustments.count).to be_zero
323
- expect(order.shipments.count).to be_zero
324
- expect(order.order_promotions.count).to be_zero
325
- expect(order.promo_total).to be_zero
326
- expect(order.item_total).to be_zero
327
- expect(order.empty!).to eq(order)
328
- end
329
- end
330
- end
331
-
332
- context "#display_outstanding_balance" do
333
- it "returns the value as a spree money" do
334
- allow(order).to receive(:outstanding_balance) { 10.55 }
335
- expect(order.display_outstanding_balance).to eq(Spree::Money.new(10.55))
336
- end
337
- end
338
-
339
- context "#display_item_total" do
340
- it "returns the value as a spree money" do
341
- allow(order).to receive(:item_total) { 10.55 }
342
- expect(order.display_item_total).to eq(Spree::Money.new(10.55))
343
- end
344
- end
345
-
346
- context "#display_adjustment_total" do
347
- it "returns the value as a spree money" do
348
- order.adjustment_total = 10.55
349
- expect(order.display_adjustment_total).to eq(Spree::Money.new(10.55))
350
- end
351
- end
352
-
353
- context "#display_promo_total" do
354
- it "returns the value as a spree money" do
355
- order.promo_total = 10.55
356
- expect(order.display_promo_total).to eq(Spree::Money.new(10.55))
357
- end
358
- end
359
-
360
- context "#display_total" do
361
- it "returns the value as a spree money" do
362
- order.total = 10.55
363
- expect(order.display_total).to eq(Spree::Money.new(10.55))
364
- end
365
- end
366
-
367
- context "#currency" do
368
- context "when object currency is ABC" do
369
- before { order.currency = "ABC" }
370
-
371
- it "returns the currency from the object" do
372
- expect(order.currency).to eq("ABC")
373
- end
374
- end
375
-
376
- context "when object currency is nil" do
377
- before { order.currency = nil }
378
-
379
- it "returns the globally configured currency" do
380
- expect(order.currency).to eq("USD")
381
- end
382
- end
383
- end
384
-
385
- context "#confirmation_required?" do
386
-
387
- # Regression test for #4117
388
- it "is required if the state is currently 'confirm'" do
389
- order = Spree::Order.new
390
- assert !order.confirmation_required?
391
- order.state = 'confirm'
392
- assert order.confirmation_required?
393
- end
394
-
395
- context 'Spree::Config[:always_include_confirm_step] == true' do
396
-
397
- before do
398
- Spree::Config[:always_include_confirm_step] = true
399
- end
400
-
401
- it "returns true if payments empty" do
402
- order = Spree::Order.new
403
- assert order.confirmation_required?
404
- end
405
- end
406
-
407
- context 'Spree::Config[:always_include_confirm_step] == false' do
408
-
409
- it "returns false if payments empty and Spree::Config[:always_include_confirm_step] == false" do
410
- order = Spree::Order.new
411
- assert !order.confirmation_required?
412
- end
413
-
414
- it "does not bomb out when an order has an unpersisted payment" do
415
- order = Spree::Order.new
416
- order.payments.build
417
- assert !order.confirmation_required?
418
- end
419
- end
420
- end
421
-
422
-
423
- context "add_update_hook" do
424
- before do
425
- Spree::Order.class_eval do
426
- register_update_hook :add_awesome_sauce
427
- end
428
- end
429
-
430
- after do
431
- Spree::Order.update_hooks = Set.new
432
- end
433
-
434
- it "calls hook during update" do
435
- order = create(:order)
436
- expect(order).to receive(:add_awesome_sauce)
437
- order.update_with_updater!
438
- end
439
-
440
- it "calls hook during finalize" do
441
- order = create(:order)
442
- expect(order).to receive(:add_awesome_sauce)
443
- order.finalize!
444
- end
445
- end
446
-
447
- describe "#tax_address" do
448
- before { Spree::Config[:tax_using_ship_address] = tax_using_ship_address }
449
- subject { order.tax_address }
450
-
451
- context "when tax_using_ship_address is true" do
452
- let(:tax_using_ship_address) { true }
453
-
454
- it 'returns ship_address' do
455
- expect(subject).to eq(order.ship_address)
456
- end
457
- end
458
-
459
- context "when tax_using_ship_address is not true" do
460
- let(:tax_using_ship_address) { false }
461
-
462
- it "returns bill_address" do
463
- expect(subject).to eq(order.bill_address)
464
- end
465
- end
466
- end
467
-
468
- describe "#restart_checkout_flow" do
469
- it "updates the state column to the first checkout_steps value" do
470
- order = create(:order_with_totals, state: "delivery")
471
- expect(order.checkout_steps).to eql ["address", "delivery", "complete"]
472
- expect{ order.restart_checkout_flow }.to change{order.state}.from("delivery").to("address")
473
- end
474
-
475
- context "without line items" do
476
- it "updates the state column to cart" do
477
- order = create(:order, state: "delivery")
478
- expect{ order.restart_checkout_flow }.to change{order.state}.from("delivery").to("cart")
479
- end
480
- end
481
- end
482
-
483
- # Regression tests for #4072
484
- context "#state_changed" do
485
- let(:order) { FactoryGirl.create(:order) }
486
-
487
- it "logs state changes" do
488
- order.update_column(:payment_state, 'balance_due')
489
- order.payment_state = 'paid'
490
- expect(order.state_changes).to be_empty
491
- order.state_changed('payment')
492
- state_change = order.state_changes.find_by(:name => 'payment')
493
- expect(state_change.previous_state).to eq('balance_due')
494
- expect(state_change.next_state).to eq('paid')
495
- end
496
-
497
- it "does not do anything if state does not change" do
498
- order.update_column(:payment_state, 'balance_due')
499
- expect(order.state_changes).to be_empty
500
- order.state_changed('payment')
501
- expect(order.state_changes).to be_empty
502
- end
503
- end
504
-
505
- # Regression test for #4199
506
- context "#available_payment_methods" do
507
- it "includes frontend payment methods" do
508
- payment_method = Spree::PaymentMethod.create!({
509
- :name => "Fake",
510
- :active => true,
511
- :display_on => "front_end",
512
- })
513
- expect(order.available_payment_methods).to include(payment_method)
514
- end
515
-
516
- it "includes 'both' payment methods" do
517
- payment_method = Spree::PaymentMethod.create!({
518
- :name => "Fake",
519
- :active => true,
520
- :display_on => "both",
521
- })
522
- expect(order.available_payment_methods).to include(payment_method)
523
- end
524
-
525
- it "does not include a payment method twice if display_on is blank" do
526
- payment_method = Spree::PaymentMethod.create!({
527
- :name => "Fake",
528
- :active => true,
529
- :display_on => "both",
530
- })
531
- expect(order.available_payment_methods.count).to eq(1)
532
- expect(order.available_payment_methods).to include(payment_method)
533
- end
534
- end
535
-
536
- context "#apply_free_shipping_promotions" do
537
- it "calls out to the FreeShipping promotion handler" do
538
- shipment = double('Shipment')
539
- allow(order).to receive_messages :shipments => [shipment]
540
- expect(Spree::PromotionHandler::FreeShipping).to receive(:new).and_return(handler = double)
541
- expect(handler).to receive(:activate)
542
-
543
- expect(Spree::Adjustable::AdjustmentsUpdater).to receive(:update).with(shipment)
544
-
545
- expect(order.updater).to receive(:update_shipment_total)
546
- expect(order.updater).to receive(:persist_totals)
547
- order.apply_free_shipping_promotions
548
- end
549
- end
550
-
551
-
552
- context "#products" do
553
- before :each do
554
- @variant1 = mock_model(Spree::Variant, :product => "product1")
555
- @variant2 = mock_model(Spree::Variant, :product => "product2")
556
- @line_items = [mock_model(Spree::LineItem, :product => "product1", :variant => @variant1, :variant_id => @variant1.id, :quantity => 1),
557
- mock_model(Spree::LineItem, :product => "product2", :variant => @variant2, :variant_id => @variant2.id, :quantity => 2)]
558
- allow(order).to receive_messages(:line_items => @line_items)
559
- end
560
-
561
- it "gets the quantity of a given variant" do
562
- expect(order.quantity_of(@variant1)).to eq(1)
563
-
564
- @variant3 = mock_model(Spree::Variant, :product => "product3")
565
- expect(order.quantity_of(@variant3)).to eq(0)
566
- end
567
-
568
- it "can find a line item matching a given variant" do
569
- expect(order.find_line_item_by_variant(@variant1)).not_to be_nil
570
- expect(order.find_line_item_by_variant(mock_model(Spree::Variant))).to be_nil
571
- end
572
-
573
- context "match line item with options" do
574
- before do
575
- Spree::Order.register_line_item_comparison_hook(:foos_match)
576
- end
577
-
578
- after do
579
- # reset to avoid test pollution
580
- Spree::Order.line_item_comparison_hooks = Set.new
581
- end
582
-
583
- it "matches line item when options match" do
584
- allow(order).to receive(:foos_match).and_return(true)
585
- expect(order.line_item_options_match(@line_items.first, {foos: {bar: :zoo}})).to be true
586
- end
587
-
588
- it "does not match line item without options" do
589
- allow(order).to receive(:foos_match).and_return(false)
590
- expect(order.line_item_options_match(@line_items.first, {})).to be false
591
- end
592
- end
593
- end
594
-
595
- describe "#associate_user!" do
596
- let(:user) { FactoryGirl.create(:user_with_addreses) }
597
- let(:email) { user.email }
598
- let(:created_by) { user }
599
- let(:bill_address) { user.bill_address }
600
- let(:ship_address) { user.ship_address }
601
- let(:override_email) { true }
602
-
603
- let(:order) { FactoryGirl.build(:order, order_attributes) }
604
-
605
- let(:order_attributes) do
606
- {
607
- user: nil,
608
- email: nil,
609
- created_by: nil,
610
- bill_address: nil,
611
- ship_address: nil
612
- }
613
- end
614
-
615
- def assert_expected_order_state
616
- expect(order.user).to eql(user)
617
- expect(order.user_id).to eql(user.id)
618
-
619
- expect(order.email).to eql(email)
620
-
621
- expect(order.created_by).to eql(created_by)
622
- expect(order.created_by_id).to eql(created_by.id)
623
-
624
- expect(order.bill_address).to eql(bill_address)
625
- expect(order.bill_address_id).to eql(bill_address.id)
626
-
627
- expect(order.ship_address).to eql(ship_address)
628
- expect(order.ship_address_id).to eql(ship_address.id)
629
- end
630
-
631
- shared_examples_for "#associate_user!" do |persisted = false|
632
- it "associates a user to an order" do
633
- order.associate_user!(user, override_email)
634
- assert_expected_order_state
635
- end
636
-
637
- unless persisted
638
- it "does not persist the order" do
639
- expect { order.associate_user!(user) }
640
- .to_not change(order, :persisted?)
641
- .from(false)
642
- end
643
- end
644
- end
645
-
646
- context "when email is set" do
647
- let(:order_attributes) { super().merge(email: 'test@example.com') }
648
-
649
- context "when email should be overridden" do
650
- it_should_behave_like "#associate_user!"
651
- end
652
-
653
- context "when email should not be overridden" do
654
- let(:override_email) { false }
655
- let(:email) { 'test@example.com' }
656
-
657
- it_should_behave_like "#associate_user!"
658
- end
659
- end
660
-
661
- context "when created_by is set" do
662
- let(:order_attributes) { super().merge(created_by: created_by) }
663
- let(:created_by) { create(:user_with_addreses) }
664
-
665
- it_should_behave_like "#associate_user!"
666
- end
667
-
668
- context "when bill_address is set" do
669
- let(:order_attributes) { super().merge(bill_address: bill_address) }
670
- let(:bill_address) { FactoryGirl.build(:address) }
671
-
672
- it_should_behave_like "#associate_user!"
673
- end
674
-
675
- context "when ship_address is set" do
676
- let(:order_attributes) { super().merge(ship_address: ship_address) }
677
- let(:ship_address) { FactoryGirl.build(:address) }
678
-
679
- it_should_behave_like "#associate_user!"
680
- end
681
-
682
- context "when the user is not persisted" do
683
- let(:user) { FactoryGirl.build(:user_with_addreses) }
684
-
685
- it "does not persist the user" do
686
- expect { order.associate_user!(user) }
687
- .to_not change(user, :persisted?)
688
- .from(false)
689
- end
690
-
691
- it_should_behave_like "#associate_user!"
692
- end
693
-
694
- context "when the order is persisted" do
695
- let(:order) { FactoryGirl.create(:order, order_attributes) }
696
-
697
- it "associates a user to a persisted order" do
698
- order.associate_user!(user)
699
- order.reload
700
- assert_expected_order_state
701
- end
702
-
703
- it "does not persist other changes to the order" do
704
- order.state = 'complete'
705
- order.associate_user!(user)
706
- order.reload
707
- expect(order.state).to eql('cart')
708
- end
709
-
710
- it "does not change any other orders" do
711
- other = FactoryGirl.create(:order)
712
- order.associate_user!(user)
713
- expect(other.reload.user).to_not eql(user)
714
- end
715
-
716
- it "is not affected by scoping" do
717
- order.class.where.not(id: order).scoping do
718
- order.associate_user!(user)
719
- end
720
- order.reload
721
- assert_expected_order_state
722
- end
723
-
724
- it_should_behave_like "#associate_user!", true
725
- end
726
- end
727
-
728
- context "#can_ship?" do
729
- let(:order) { Spree::Order.create }
730
-
731
- it "should be true for order in the 'complete' state" do
732
- allow(order).to receive_messages(:complete? => true)
733
- expect(order.can_ship?).to be true
734
- end
735
-
736
- it "should be true for order in the 'resumed' state" do
737
- allow(order).to receive_messages(:resumed? => true)
738
- expect(order.can_ship?).to be true
739
- end
740
-
741
- it "should be true for an order in the 'awaiting return' state" do
742
- allow(order).to receive_messages(:awaiting_return? => true)
743
- expect(order.can_ship?).to be true
744
- end
745
-
746
- it "should be true for an order in the 'returned' state" do
747
- allow(order).to receive_messages(:returned? => true)
748
- expect(order.can_ship?).to be true
749
- end
750
-
751
- it "should be false if the order is neither in the 'complete' nor 'resumed' state" do
752
- allow(order).to receive_messages(:resumed? => false, :complete? => false)
753
- expect(order.can_ship?).to be false
754
- end
755
- end
756
-
757
- context "#completed?" do
758
- it "should indicate if order is completed" do
759
- order.completed_at = nil
760
- expect(order.completed?).to be false
761
-
762
- order.completed_at = Time.current
763
- expect(order.completed?).to be true
764
- end
765
- end
766
-
767
- context "#allow_checkout?" do
768
- it "should be true if there are line_items in the order" do
769
- allow(order).to receive_message_chain(:line_items, :count => 1)
770
- expect(order.checkout_allowed?).to be true
771
- end
772
- it "should be false if there are no line_items in the order" do
773
- allow(order).to receive_message_chain(:line_items, :count => 0)
774
- expect(order.checkout_allowed?).to be false
775
- end
776
- end
777
-
778
- context "#amount" do
779
- before do
780
- @order = create(:order, :user => user)
781
- @order.line_items = [create(:line_item, :price => 1.0, :quantity => 2),
782
- create(:line_item, :price => 1.0, :quantity => 1)]
783
- end
784
- it "should return the correct lum sum of items" do
785
- expect(@order.amount).to eq(3.0)
786
- end
787
- end
788
-
789
- context "#backordered?" do
790
- it 'is backordered if one of the shipments is backordered' do
791
- allow(order).to receive_messages(:shipments => [mock_model(Spree::Shipment, :backordered? => false),
792
- mock_model(Spree::Shipment, :backordered? => true)])
793
- expect(order).to be_backordered
794
- end
795
- end
796
-
797
- context "#can_cancel?" do
798
- it "should be false for completed order in the canceled state" do
799
- order.state = 'canceled'
800
- order.shipment_state = 'ready'
801
- order.completed_at = Time.current
802
- expect(order.can_cancel?).to be false
803
- end
804
-
805
- it "should be true for completed order with no shipment" do
806
- order.state = 'complete'
807
- order.shipment_state = nil
808
- order.completed_at = Time.current
809
- expect(order.can_cancel?).to be true
810
- end
811
- end
812
-
813
- context "#tax_total" do
814
- it "adds included tax and additional tax" do
815
- allow(order).to receive_messages(:additional_tax_total => 10, :included_tax_total => 20)
816
-
817
- expect(order.tax_total).to eq 30
818
- end
819
- end
820
-
821
- # Regression test for #4923
822
- context "locking" do
823
- let(:order) { Spree::Order.create } # need a persisted in order to test locking
824
-
825
- it 'can lock' do
826
- expect { order.with_lock {} }.to_not raise_error
827
- end
828
- end
829
-
830
- describe "#pre_tax_item_amount" do
831
- it "sums all of the line items' pre tax amounts" do
832
- subject.line_items = [
833
- Spree::LineItem.new(price: 10, quantity: 2, pre_tax_amount: 5.0),
834
- Spree::LineItem.new(price: 30, quantity: 1, pre_tax_amount: 14.0),
835
- ]
836
-
837
- expect(subject.pre_tax_item_amount).to eq 19.0
838
- end
839
- end
840
-
841
- describe '#quantity' do
842
- # Uses a persisted record, as the quantity is retrieved via a DB count
843
- let(:order) { create :order_with_line_items, line_items_count: 3 }
844
-
845
- it 'sums the quantity of all line items' do
846
- expect(order.quantity).to eq 3
847
- end
848
- end
849
-
850
- describe '#has_non_reimbursement_related_refunds?' do
851
- subject do
852
- order.has_non_reimbursement_related_refunds?
853
- end
854
-
855
- context 'no refunds exist' do
856
- it { is_expected.to eq false }
857
- end
858
-
859
- context 'a non-reimbursement related refund exists' do
860
- let(:order) { refund.payment.order }
861
- let(:refund) { create(:refund, reimbursement_id: nil, amount: 5) }
862
-
863
- it { is_expected.to eq true }
864
- end
865
-
866
- context 'an old-style refund exists' do
867
- let(:order) { create(:order_ready_to_ship) }
868
- let(:payment) { order.payments.first.tap { |p| allow(p).to receive_messages(profiles_supported: false) } }
869
- let!(:refund_payment) {
870
- build(:payment, amount: -1, order: order, state: 'completed', source: payment).tap do |p|
871
- allow(p).to receive_messages(profiles_supported?: false)
872
- p.save!
873
- end
874
- }
875
-
876
- it { is_expected.to eq true }
877
- end
878
-
879
- context 'a reimbursement related refund exists' do
880
- let(:order) { refund.payment.order }
881
- let(:refund) { create(:refund, reimbursement_id: 123, amount: 5)}
882
-
883
- it { is_expected.to eq false }
884
- end
885
- end
886
-
887
- describe "#create_proposed_shipments" do
888
- it "assigns the coordinator returned shipments to its shipments" do
889
- shipment = build(:shipment)
890
- allow_any_instance_of(Spree::Stock::Coordinator).to receive(:shipments).and_return([shipment])
891
- subject.create_proposed_shipments
892
- expect(subject.shipments).to eq [shipment]
893
- end
894
- end
895
-
896
- describe "#all_inventory_units_returned?" do
897
- let(:order) { create(:order_with_line_items, line_items_count: 3) }
898
-
899
- subject { order.all_inventory_units_returned? }
900
-
901
- context "all inventory units are returned" do
902
- before { order.inventory_units.update_all(state: 'returned') }
903
-
904
- it "is true" do
905
- expect(subject).to eq true
906
- end
907
- end
908
-
909
- context "some inventory units are returned" do
910
- before do
911
- order.inventory_units.first.update_attribute(:state, 'returned')
912
- end
913
-
914
- it "is false" do
915
- expect(subject).to eq false
916
- end
917
- end
918
-
919
- context "no inventory units are returned" do
920
- it "is false" do
921
- expect(subject).to eq false
922
- end
923
- end
924
- end
925
-
926
- describe "#fully_discounted?" do
927
- let(:line_item) { Spree::LineItem.new(price: 10, quantity: 1) }
928
- let(:shipment) { Spree::Shipment.new(cost: 10) }
929
- let(:payment) { Spree::Payment.new(amount: 10) }
930
-
931
- before do
932
- allow(order).to receive(:line_items) { [line_item] }
933
- allow(order).to receive(:shipments) { [shipment] }
934
- allow(order).to receive(:payments) { [payment] }
935
- end
936
-
937
- context "the order had no inventory-related cost" do
938
- before do
939
- # discount the cost of the line items
940
- allow(order).to receive(:adjustment_total) { -5 }
941
- allow(line_item).to receive(:adjustment_total) { -5 }
942
-
943
- # but leave some shipment payment amount
944
- allow(shipment).to receive(:adjustment_total) { 0 }
945
- end
946
-
947
- it { expect(order.fully_discounted?).to eq true }
948
-
949
- end
950
-
951
- context "the order had inventory-related cost" do
952
- before do
953
- # partially discount the cost of the line item
954
- allow(order).to receive(:adjustment_total) { 0 }
955
- allow(line_item).to receive(:adjustment_total) { -5 }
956
-
957
- # and partially discount the cost of the shipment so the total
958
- # discount matches the item total for test completeness
959
- allow(shipment).to receive(:adjustment_total) { -5 }
960
- end
961
-
962
- it { expect(order.fully_discounted?).to eq false }
963
-
964
- end
965
- end
966
-
967
- end