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,32 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::Order, :type => :model do
4
- context 'CurrencyUpdater' do
5
- context "when changing order currency" do
6
- let!(:line_item) { create(:line_item) }
7
- let!(:euro_price) { create(:price, variant: line_item.variant, amount: 8, currency: 'EUR') }
8
-
9
- context "#homogenize_line_item_currencies" do
10
- it "succeeds without error" do
11
- expect { line_item.order.update_attributes!(currency: 'EUR') }.not_to raise_error
12
- end
13
-
14
- it "changes the line_item currencies" do
15
- expect { line_item.order.update_attributes!(currency: 'EUR') }.to change{ line_item.reload.currency }.from('USD').to('EUR')
16
- end
17
-
18
- it "changes the line_item amounts" do
19
- expect { line_item.order.update_attributes!(currency: 'EUR') }.to change{ line_item.reload.amount }.to(8)
20
- end
21
-
22
- it "fails to change the order currency when no prices are available in that currency" do
23
- expect { line_item.order.update_attributes!(currency: 'GBP') }.to raise_error("no GBP price found for #{line_item.product.name} (#{line_item.variant.sku})")
24
- end
25
-
26
- it "calculates the item total in the order.currency" do
27
- expect { line_item.order.update_attributes!(currency: 'EUR') }.to change{ line_item.order.item_total }.to(8)
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,114 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::Order, :type => :model do
4
- let(:order) { stub_model("Spree::Order") }
5
-
6
- before { create(:store) }
7
-
8
- context "#finalize!" do
9
- let(:order) { Spree::Order.create(email: 'test@example.com') }
10
-
11
- before do
12
- order.update_column :state, 'complete'
13
- end
14
-
15
- it "should set completed_at" do
16
- expect(order).to receive(:touch).with(:completed_at)
17
- order.finalize!
18
- end
19
-
20
- it "should sell inventory units" do
21
- order.shipments.each do |shipment|
22
- expect(shipment).to receive(:update!)
23
- expect(shipment).to receive(:finalize!)
24
- end
25
- order.finalize!
26
- end
27
-
28
- it "should decrease the stock for each variant in the shipment" do
29
- order.shipments.each do |shipment|
30
- expect(shipment.stock_location).to receive(:decrease_stock_for_variant)
31
- end
32
- order.finalize!
33
- end
34
-
35
- it "should change the shipment state to ready if order is paid" do
36
- Spree::Shipment.create(order: order, stock_location: create(:stock_location))
37
- order.shipments.reload
38
-
39
- allow(order).to receive_messages(paid?: true, complete?: true)
40
- order.finalize!
41
- order.reload # reload so we're sure the changes are persisted
42
- expect(order.shipment_state).to eq('ready')
43
- end
44
-
45
- after { Spree::Config.set track_inventory_levels: true }
46
- it "should not sell inventory units if track_inventory_levels is false" do
47
- Spree::Config.set track_inventory_levels: false
48
- expect(Spree::InventoryUnit).not_to receive(:sell_units)
49
- order.finalize!
50
- end
51
-
52
- it "should send an order confirmation email" do
53
- mail_message = double "Mail::Message"
54
- expect(Spree::OrderMailer).to receive(:confirm_email).with(order.id).and_return mail_message
55
- expect(mail_message).to receive :deliver_later
56
- order.finalize!
57
- end
58
-
59
- it "sets confirmation delivered when finalizing" do
60
- expect(order.confirmation_delivered?).to be false
61
- order.finalize!
62
- expect(order.confirmation_delivered?).to be true
63
- end
64
-
65
- it "should not send duplicate confirmation emails" do
66
- allow(order).to receive_messages(:confirmation_delivered? => true)
67
- expect(Spree::OrderMailer).not_to receive(:confirm_email)
68
- order.finalize!
69
- end
70
-
71
- it "should freeze all adjustments" do
72
- allow(Spree::OrderMailer).to receive_message_chain :confirm_email, :deliver_later
73
- adjustments = [double]
74
- expect(order).to receive(:all_adjustments).and_return(adjustments)
75
- adjustments.each do |adj|
76
- expect(adj).to receive(:close)
77
- end
78
- order.finalize!
79
- end
80
-
81
- context "order is considered risky" do
82
- before do
83
- allow(order).to receive_messages :is_risky? => true
84
- end
85
-
86
- it "should change state to risky" do
87
- expect(order).to receive(:considered_risky!)
88
- order.finalize!
89
- end
90
-
91
- context "and order is approved" do
92
- before do
93
- allow(order).to receive_messages :approved? => true
94
- end
95
-
96
- it "should leave order in complete state" do
97
- order.finalize!
98
- expect(order.state).to eq 'complete'
99
- end
100
- end
101
- end
102
-
103
- context "order is not considered risky" do
104
- before do
105
- allow(order).to receive_messages :is_risky? => false
106
- end
107
-
108
- it "should set completed_at" do
109
- order.finalize!
110
- expect(order.completed_at).to be_present
111
- end
112
- end
113
- end
114
- end
@@ -1,5 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::Order, :type => :model do
4
- let(:order) { stub_model(Spree::Order) }
5
- end
@@ -1,214 +0,0 @@
1
- require 'spec_helper'
2
-
3
- module Spree
4
- describe Spree::Order, :type => :model do
5
- let(:order) { stub_model(Spree::Order) }
6
- let(:updater) { Spree::OrderUpdater.new(order) }
7
-
8
- context "processing payments" do
9
- before do
10
- # So that Payment#purchase! is called during processing
11
- Spree::Config[:auto_capture] = true
12
-
13
- allow(order).to receive_message_chain(:line_items, :empty?).and_return(false)
14
- allow(order).to receive_messages :total => 100
15
- end
16
-
17
- it 'processes all checkout payments' do
18
- payment_1 = create(:payment, :amount => 50)
19
- payment_2 = create(:payment, :amount => 50)
20
- allow(order).to receive(:unprocessed_payments).and_return([payment_1, payment_2])
21
-
22
- order.process_payments!
23
- updater.update_payment_state
24
- expect(order.payment_state).to eq('paid')
25
-
26
- expect(payment_1).to be_completed
27
- expect(payment_2).to be_completed
28
- end
29
-
30
- it 'does not go over total for order' do
31
- payment_1 = create(:payment, :amount => 50)
32
- payment_2 = create(:payment, :amount => 50)
33
- payment_3 = create(:payment, :amount => 50)
34
- allow(order).to receive(:unprocessed_payments).and_return([payment_1, payment_2, payment_3])
35
-
36
- order.process_payments!
37
- updater.update_payment_state
38
- expect(order.payment_state).to eq('paid')
39
-
40
- expect(payment_1).to be_completed
41
- expect(payment_2).to be_completed
42
- expect(payment_3).to be_checkout
43
- end
44
-
45
- it "does not use failed payments" do
46
- payment_1 = create(:payment, :amount => 50)
47
- payment_2 = create(:payment, :amount => 50, :state => 'failed')
48
- allow(order).to receive(:pending_payments).and_return([payment_1])
49
-
50
- expect(payment_2).not_to receive(:process!)
51
-
52
- order.process_payments!
53
- end
54
- end
55
-
56
- context "ensure source attributes stick around" do
57
- # For the reason of this test, please see spree/spree_gateway#132
58
- it "does not have inverse_of defined" do
59
- expect(Spree::Order.reflections['payments'].options[:inverse_of]).to be_nil
60
- end
61
-
62
- it "keeps source attributes after updating" do
63
- persisted_order = Spree::Order.create
64
- credit_card_payment_method = create(:credit_card_payment_method)
65
- attributes = {
66
- :payments_attributes => [
67
- {
68
- :payment_method_id => credit_card_payment_method.id,
69
- :source_attributes => {
70
- :name => "Ryan Bigg",
71
- :number => "41111111111111111111",
72
- :expiry => "01 / 15",
73
- :verification_value => "123"
74
- }
75
- }
76
- ]
77
- }
78
-
79
- persisted_order.update_attributes(attributes)
80
- expect(persisted_order.unprocessed_payments.last.source.number).to be_present
81
- end
82
- end
83
-
84
- context "checking if order is paid" do
85
- context "payment_state is paid" do
86
- before { allow(order).to receive_messages payment_state: 'paid' }
87
- it { expect(order).to be_paid }
88
- end
89
-
90
- context "payment_state is credit_owned" do
91
- before { allow(order).to receive_messages payment_state: 'credit_owed' }
92
- it { expect(order).to be_paid }
93
- end
94
- end
95
-
96
- context "#process_payments!" do
97
- let(:payment) { stub_model(Spree::Payment) }
98
- before { allow(order).to receive_messages unprocessed_payments: [payment], total: 10 }
99
-
100
- it "should process the payments" do
101
- expect(payment).to receive(:process!)
102
- expect(order.process_payments!).to be_truthy
103
- end
104
-
105
- # Regression spec for https://github.com/spree/spree/issues/5436
106
- it 'should raise an error if there are no payments to process' do
107
- allow(order).to receive_messages unprocessed_payments: []
108
- expect(payment).to_not receive(:process!)
109
- expect(order.process_payments!).to be_falsey
110
- end
111
-
112
- context "when a payment raises a GatewayError" do
113
- before { expect(payment).to receive(:process!).and_raise(Spree::Core::GatewayError) }
114
-
115
- it "should return true when configured to allow checkout on gateway failures" do
116
- Spree::Config.set :allow_checkout_on_gateway_error => true
117
- expect(order.process_payments!).to be true
118
- end
119
-
120
- it "should return false when not configured to allow checkout on gateway failures" do
121
- Spree::Config.set :allow_checkout_on_gateway_error => false
122
- expect(order.process_payments!).to be false
123
- end
124
- end
125
- end
126
-
127
- context "#authorize_payments!" do
128
- let(:payment) { stub_model(Spree::Payment) }
129
- before { allow(order).to receive_messages :unprocessed_payments => [payment], :total => 10 }
130
- subject { order.authorize_payments! }
131
-
132
- it "processes payments with attempt_authorization!" do
133
- expect(payment).to receive(:authorize!)
134
- subject
135
- end
136
-
137
- it { is_expected.to be_truthy }
138
- end
139
-
140
- context "#capture_payments!" do
141
- let(:payment) { stub_model(Spree::Payment) }
142
- before { allow(order).to receive_messages :unprocessed_payments => [payment], :total => 10 }
143
- subject { order.capture_payments! }
144
-
145
- it "processes payments with attempt_authorization!" do
146
- expect(payment).to receive(:purchase!)
147
- subject
148
- end
149
-
150
- it { is_expected.to be_truthy }
151
- end
152
-
153
- context "#outstanding_balance" do
154
- it "should return positive amount when payment_total is less than total" do
155
- order.payment_total = 20.20
156
- order.total = 30.30
157
- expect(order.outstanding_balance).to eq(10.10)
158
- end
159
- it "should return negative amount when payment_total is greater than total" do
160
- order.total = 8.20
161
- order.payment_total = 10.20
162
- expect(order.outstanding_balance).to be_within(0.001).of(-2.00)
163
- end
164
- it 'should incorporate refund reimbursements' do
165
- # Creates an order w/total 10
166
- reimbursement = create :reimbursement
167
- # Set the payment amount to actually be the order total of 10
168
- reimbursement.order.payments.first.update_column :amount, 10
169
- # Creates a refund of 10
170
- create :refund, amount: 10,
171
- payment: reimbursement.order.payments.first,
172
- reimbursement: reimbursement
173
- order = reimbursement.order.reload
174
- # Update the order totals so payment_total goes to 0 reflecting the refund..
175
- order.update_with_updater!
176
- # Order Total - (Payment Total + Reimbursed)
177
- # 10 - (0 + 10) = 0
178
- expect(order.outstanding_balance).to eq 0
179
- end
180
- end
181
-
182
- context "#outstanding_balance?" do
183
- it "should be true when total greater than payment_total" do
184
- order.total = 10.10
185
- order.payment_total = 9.50
186
- expect(order.outstanding_balance?).to be true
187
- end
188
-
189
- it "should be true when total less than payment_total" do
190
- order.total = 8.25
191
- order.payment_total = 10.44
192
- expect(order.outstanding_balance?).to be true
193
- end
194
-
195
- it "should be false when total equals payment_total" do
196
- order.total = 10.10
197
- order.payment_total = 10.10
198
- expect(order.outstanding_balance?).to be false
199
- end
200
- end
201
-
202
- context "payment required?" do
203
- context "total is zero" do
204
- before { allow(order).to receive_messages(total: 0) }
205
- it { expect(order.payment_required?).to be false }
206
- end
207
-
208
- context "total > zero" do
209
- before { allow(order).to receive_messages(total: 1) }
210
- it { expect(order.payment_required?).to be true }
211
- end
212
- end
213
- end
214
- end
@@ -1,84 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::Order, :type => :model do
4
- let(:order) { stub_model('Spree::Order') }
5
-
6
- describe ".is_risky?" do
7
- context "Not risky order" do
8
- let(:order) { FactoryGirl.create(:order, payments: [payment]) }
9
- context "with avs_response == D" do
10
- let(:payment) { FactoryGirl.create(:payment, avs_response: "D") }
11
- it "is not considered risky" do
12
- expect(order.is_risky?).to eq(false)
13
- end
14
- end
15
-
16
- context "with avs_response == M" do
17
- let(:payment) { FactoryGirl.create(:payment, avs_response: "M") }
18
- it "is not considered risky" do
19
- expect(order.is_risky?).to eq(false)
20
- end
21
- end
22
-
23
- context "with avs_response == ''" do
24
- let(:payment) { FactoryGirl.create(:payment, avs_response: "") }
25
- it "is not considered risky" do
26
- expect(order.is_risky?).to eq(false)
27
- end
28
- end
29
-
30
- context "with cvv_response_code == M" do
31
- let(:payment) { FactoryGirl.create(:payment, cvv_response_code: "M") }
32
- it "is not considered risky" do
33
- expect(order.is_risky?).to eq(false)
34
- end
35
- end
36
-
37
- context "with cvv_response_message == ''" do
38
- let(:payment) { FactoryGirl.create(:payment, cvv_response_message: "") }
39
- it "is not considered risky" do
40
- expect(order.is_risky?).to eq(false)
41
- end
42
- end
43
- end
44
-
45
- context "Risky order" do
46
- context "AVS response message" do
47
- let(:order) { FactoryGirl.create(:order, payments: [FactoryGirl.create(:payment, avs_response: "A")]) }
48
- it "returns true if the order has an avs_response" do
49
- expect(order.is_risky?).to eq(true)
50
- end
51
- end
52
-
53
- context "CVV response code" do
54
- let(:order) { FactoryGirl.create(:order, payments: [FactoryGirl.create(:payment, cvv_response_code: "N")]) }
55
- it "returns true if the order has an cvv_response_code" do
56
- expect(order.is_risky?).to eq(true)
57
- end
58
- end
59
-
60
- context "state == 'failed'" do
61
- let(:order) { FactoryGirl.create(:order, payments: [FactoryGirl.create(:payment, state: 'failed')]) }
62
- it "returns true if the order has state == 'failed'" do
63
- expect(order.is_risky?).to eq(true)
64
- end
65
- end
66
- end
67
- end
68
-
69
- context "is considered risky" do
70
- let(:order) do
71
- order = FactoryGirl.create(:completed_order_with_pending_payment)
72
- order.considered_risky!
73
- order
74
- end
75
-
76
- it "can be approved by a user" do
77
- expect(order).to receive(:approve!)
78
- order.approved_by(stub_model(Spree::LegacyUser, id: 1))
79
- expect(order.approver_id).to eq(1)
80
- expect(order.approved_at).to be_present
81
- expect(order.approved?).to be true
82
- end
83
- end
84
- end