spree_core 3.2.1 → 3.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/spree/core/version.rb +1 -1
- data/spree_core.gemspec +1 -1
- metadata +3 -206
- data/spec/fixtures/microdata.html +0 -22
- data/spec/fixtures/microdata_itemref.html +0 -15
- data/spec/fixtures/microdata_no_itemscope.html +0 -20
- data/spec/fixtures/thinking-cat.jpg +0 -0
- data/spec/helpers/base_helper_spec.rb +0 -200
- data/spec/helpers/products_helper_spec.rb +0 -289
- data/spec/lib/calculated_adjustments_spec.rb +0 -7
- data/spec/lib/i18n_spec.rb +0 -123
- data/spec/lib/search/base_spec.rb +0 -86
- data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -103
- data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -110
- data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -17
- data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -72
- data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -39
- data/spec/lib/spree/core/delegate_belongs_to_spec.rb +0 -22
- data/spec/lib/spree/core/importer/order_spec.rb +0 -605
- data/spec/lib/spree/core/number_generator_spec.rb +0 -175
- data/spec/lib/spree/core/token_generator_spec.rb +0 -24
- data/spec/lib/spree/core/validators/email_spec.rb +0 -53
- data/spec/lib/spree/core_spec.rb +0 -23
- data/spec/lib/spree/localized_number_spec.rb +0 -48
- data/spec/lib/spree/migrations_spec.rb +0 -36
- data/spec/lib/spree/money_spec.rb +0 -122
- data/spec/lib/tasks/exchanges_spec.rb +0 -136
- data/spec/mailers/order_mailer_spec.rb +0 -122
- data/spec/mailers/reimbursement_mailer_spec.rb +0 -47
- data/spec/mailers/shipment_mailer_spec.rb +0 -81
- data/spec/mailers/test_mailer_spec.rb +0 -38
- data/spec/models/option_type_prototype_spec.rb +0 -9
- data/spec/models/spree/ability_spec.rb +0 -251
- data/spec/models/spree/address_spec.rb +0 -402
- data/spec/models/spree/adjustable/adjuster/base_spec.rb +0 -10
- data/spec/models/spree/adjustable/adjuster/promotion_spec.rb +0 -211
- data/spec/models/spree/adjustable/adjuster/tax_spec.rb +0 -86
- data/spec/models/spree/adjustable/adjustments_updater_spec.rb +0 -26
- data/spec/models/spree/adjustment_spec.rb +0 -189
- data/spec/models/spree/app_configuration_spec.rb +0 -26
- data/spec/models/spree/asset_spec.rb +0 -28
- data/spec/models/spree/calculator/default_tax_spec.rb +0 -152
- data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -25
- data/spec/models/spree/calculator/flat_rate_spec.rb +0 -47
- data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -41
- data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -15
- data/spec/models/spree/calculator/price_sack_spec.rb +0 -30
- data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -47
- data/spec/models/spree/calculator/shipping.rb +0 -8
- data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -23
- data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -13
- data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -52
- data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -20
- data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -29
- data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -40
- data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -51
- data/spec/models/spree/calculator_spec.rb +0 -69
- data/spec/models/spree/classification_spec.rb +0 -93
- data/spec/models/spree/concerns/display_money_spec.rb +0 -43
- data/spec/models/spree/concerns/user_methods_spec.rb +0 -82
- data/spec/models/spree/concerns/vat_price_calculation_spec.rb +0 -66
- data/spec/models/spree/country_spec.rb +0 -55
- data/spec/models/spree/credit_card_spec.rb +0 -328
- data/spec/models/spree/customer_return_spec.rb +0 -240
- data/spec/models/spree/exchange_spec.rb +0 -75
- data/spec/models/spree/gateway/bogus_simple.rb +0 -20
- data/spec/models/spree/gateway/bogus_spec.rb +0 -13
- data/spec/models/spree/gateway_spec.rb +0 -61
- data/spec/models/spree/image_spec.rb +0 -8
- data/spec/models/spree/inventory_unit_spec.rb +0 -256
- data/spec/models/spree/line_item_spec.rb +0 -346
- data/spec/models/spree/option_type_spec.rb +0 -14
- data/spec/models/spree/option_value_spec.rb +0 -18
- data/spec/models/spree/order/address_spec.rb +0 -50
- data/spec/models/spree/order/adjustments_spec.rb +0 -29
- data/spec/models/spree/order/callbacks_spec.rb +0 -42
- data/spec/models/spree/order/checkout_spec.rb +0 -770
- data/spec/models/spree/order/currency_updater_spec.rb +0 -32
- data/spec/models/spree/order/finalizing_spec.rb +0 -114
- data/spec/models/spree/order/helpers_spec.rb +0 -5
- data/spec/models/spree/order/payment_spec.rb +0 -214
- data/spec/models/spree/order/risk_assessment_spec.rb +0 -84
- data/spec/models/spree/order/shipments_spec.rb +0 -43
- data/spec/models/spree/order/state_machine_spec.rb +0 -212
- data/spec/models/spree/order/store_credit_spec.rb +0 -426
- data/spec/models/spree/order/tax_spec.rb +0 -84
- data/spec/models/spree/order/totals_spec.rb +0 -24
- data/spec/models/spree/order/updating_spec.rb +0 -18
- data/spec/models/spree/order/validations_spec.rb +0 -15
- data/spec/models/spree/order_contents_spec.rb +0 -297
- data/spec/models/spree/order_inventory_spec.rb +0 -239
- data/spec/models/spree/order_merger_spec.rb +0 -135
- data/spec/models/spree/order_spec.rb +0 -1046
- data/spec/models/spree/order_updater_spec.rb +0 -305
- data/spec/models/spree/payment/gateway_options_spec.rb +0 -127
- data/spec/models/spree/payment/store_credit_spec.rb +0 -60
- data/spec/models/spree/payment_method/store_credit_spec.rb +0 -291
- data/spec/models/spree/payment_method_spec.rb +0 -103
- data/spec/models/spree/payment_spec.rb +0 -919
- data/spec/models/spree/preference_spec.rb +0 -80
- data/spec/models/spree/preferences/configuration_spec.rb +0 -30
- data/spec/models/spree/preferences/preferable_spec.rb +0 -344
- data/spec/models/spree/preferences/scoped_store_spec.rb +0 -58
- data/spec/models/spree/preferences/store_spec.rb +0 -46
- data/spec/models/spree/price_spec.rb +0 -128
- data/spec/models/spree/product/scopes_spec.rb +0 -183
- data/spec/models/spree/product_duplicator_spec.rb +0 -103
- data/spec/models/spree/product_filter_spec.rb +0 -26
- data/spec/models/spree/product_option_type_spec.rb +0 -9
- data/spec/models/spree/product_promotion_rule_spec.rb +0 -9
- data/spec/models/spree/product_property_spec.rb +0 -26
- data/spec/models/spree/product_spec.rb +0 -629
- data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -113
- data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -148
- data/spec/models/spree/promotion/actions/create_line_items_spec.rb +0 -86
- data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -36
- data/spec/models/spree/promotion/rules/country_spec.rb +0 -36
- data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -75
- data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -282
- data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -42
- data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -90
- data/spec/models/spree/promotion/rules/product_spec.rb +0 -143
- data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -102
- data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -27
- data/spec/models/spree/promotion/rules/user_spec.rb +0 -45
- data/spec/models/spree/promotion_action_spec.rb +0 -10
- data/spec/models/spree/promotion_category_spec.rb +0 -17
- data/spec/models/spree/promotion_handler/cart_spec.rb +0 -102
- data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -323
- data/spec/models/spree/promotion_handler/free_shipping_spec.rb +0 -48
- data/spec/models/spree/promotion_handler/page_spec.rb +0 -44
- data/spec/models/spree/promotion_rule_spec.rb +0 -29
- data/spec/models/spree/promotion_rule_taxon_spec.rb +0 -9
- data/spec/models/spree/promotion_rule_user_spec.rb +0 -9
- data/spec/models/spree/promotion_spec.rb +0 -679
- data/spec/models/spree/property_prototype_spec.rb +0 -9
- data/spec/models/spree/property_spec.rb +0 -5
- data/spec/models/spree/prototype_spec.rb +0 -5
- data/spec/models/spree/prototype_taxon_spec.rb +0 -9
- data/spec/models/spree/refund_reason_spec.rb +0 -20
- data/spec/models/spree/refund_spec.rb +0 -195
- data/spec/models/spree/reimbursement/credit_spec.rb +0 -36
- data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -140
- data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -83
- data/spec/models/spree/reimbursement_performer_spec.rb +0 -30
- data/spec/models/spree/reimbursement_spec.rb +0 -188
- data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -63
- data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -53
- data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -46
- data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -55
- data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -101
- data/spec/models/spree/return_authorization_reason_spec.rb +0 -7
- data/spec/models/spree/return_authorization_spec.rb +0 -230
- data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -77
- data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -58
- data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -61
- data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -32
- data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -29
- data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -35
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -65
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
- data/spec/models/spree/return_item_spec.rb +0 -731
- data/spec/models/spree/returns_calculator_spec.rb +0 -14
- data/spec/models/spree/role_spec.rb +0 -7
- data/spec/models/spree/shipment_spec.rb +0 -742
- data/spec/models/spree/shipping_calculator_spec.rb +0 -45
- data/spec/models/spree/shipping_category_spec.rb +0 -19
- data/spec/models/spree/shipping_method_spec.rb +0 -95
- data/spec/models/spree/shipping_rate_spec.rb +0 -140
- data/spec/models/spree/state_spec.rb +0 -29
- data/spec/models/spree/stock/availability_validator_spec.rb +0 -36
- data/spec/models/spree/stock/content_item_spec.rb +0 -31
- data/spec/models/spree/stock/coordinator_spec.rb +0 -61
- data/spec/models/spree/stock/differentiator_spec.rb +0 -39
- data/spec/models/spree/stock/estimator_spec.rb +0 -202
- data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -38
- data/spec/models/spree/stock/package_spec.rb +0 -182
- data/spec/models/spree/stock/packer_spec.rb +0 -70
- data/spec/models/spree/stock/prioritizer_spec.rb +0 -125
- data/spec/models/spree/stock/quantifier_spec.rb +0 -126
- data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -29
- data/spec/models/spree/stock/splitter/base_spec.rb +0 -21
- data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -47
- data/spec/models/spree/stock/splitter/weight_spec.rb +0 -32
- data/spec/models/spree/stock_item_spec.rb +0 -432
- data/spec/models/spree/stock_location_spec.rb +0 -243
- data/spec/models/spree/stock_movement_spec.rb +0 -120
- data/spec/models/spree/stock_transfer_spec.rb +0 -50
- data/spec/models/spree/store_credit_event_spec.rb +0 -101
- data/spec/models/spree/store_credit_spec.rb +0 -786
- data/spec/models/spree/store_spec.rb +0 -78
- data/spec/models/spree/tax_category_spec.rb +0 -32
- data/spec/models/spree/tax_rate_spec.rb +0 -561
- data/spec/models/spree/taxon_spec.rb +0 -85
- data/spec/models/spree/taxonomy_spec.rb +0 -18
- data/spec/models/spree/tracker_spec.rb +0 -21
- data/spec/models/spree/user_spec.rb +0 -203
- data/spec/models/spree/variant_spec.rb +0 -818
- data/spec/models/spree/zone_member_spec.rb +0 -38
- data/spec/models/spree/zone_spec.rb +0 -472
- data/spec/spec_helper.rb +0 -79
- data/spec/support/big_decimal.rb +0 -5
- data/spec/support/concerns/adjustment_source.rb +0 -23
- data/spec/support/concerns/default_price.rb +0 -37
- data/spec/support/rake.rb +0 -13
- data/spec/support/test_gateway.rb +0 -2
|
@@ -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,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
|