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,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