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,9 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Spree::PropertyPrototype do
|
|
4
|
-
describe 'Validations' do
|
|
5
|
-
it { is_expected.to validate_presence_of(:prototype) }
|
|
6
|
-
it { is_expected.to validate_presence_of(:property) }
|
|
7
|
-
it { is_expected.to validate_uniqueness_of(:prototype_id).scoped_to(:property_id).allow_nil }
|
|
8
|
-
end
|
|
9
|
-
end
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Spree::PrototypeTaxon do
|
|
4
|
-
describe 'Validations' do
|
|
5
|
-
it { is_expected.to validate_presence_of(:prototype) }
|
|
6
|
-
it { is_expected.to validate_presence_of(:taxon) }
|
|
7
|
-
it { is_expected.to validate_uniqueness_of(:prototype_id).scoped_to(:taxon_id).allow_nil }
|
|
8
|
-
end
|
|
9
|
-
end
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Spree::RefundReason do
|
|
4
|
-
describe 'Associations' do
|
|
5
|
-
it { is_expected.to have_many(:refunds).dependent(:restrict_with_error) }
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
describe 'Class Methods' do
|
|
9
|
-
describe '.return_processing_reason' do
|
|
10
|
-
context 'default refund reason present' do
|
|
11
|
-
let!(:default_refund_reason) { create(:default_refund_reason) }
|
|
12
|
-
it { expect(described_class.return_processing_reason).to eq(default_refund_reason) }
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
context 'default refund reason not present' do
|
|
16
|
-
it { expect(described_class.return_processing_reason).to eq(nil) }
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Spree::Refund, type: :model do
|
|
4
|
-
|
|
5
|
-
describe 'create' do
|
|
6
|
-
let(:amount) { 100.0 }
|
|
7
|
-
let(:amount_in_cents) { amount * 100 }
|
|
8
|
-
|
|
9
|
-
let(:authorization) { generate(:refund_transaction_id) }
|
|
10
|
-
|
|
11
|
-
let(:payment) { create(:payment, amount: payment_amount, payment_method: payment_method) }
|
|
12
|
-
let(:payment_amount) { amount*2 }
|
|
13
|
-
let(:payment_method) { create(:credit_card_payment_method) }
|
|
14
|
-
|
|
15
|
-
let(:refund_reason) { create(:refund_reason) }
|
|
16
|
-
|
|
17
|
-
let(:gateway_response) {
|
|
18
|
-
ActiveMerchant::Billing::Response.new(
|
|
19
|
-
gateway_response_success,
|
|
20
|
-
gateway_response_message,
|
|
21
|
-
gateway_response_params,
|
|
22
|
-
gateway_response_options
|
|
23
|
-
)
|
|
24
|
-
}
|
|
25
|
-
let(:gateway_response_success) { true }
|
|
26
|
-
let(:gateway_response_message) { "" }
|
|
27
|
-
let(:gateway_response_params) { {} }
|
|
28
|
-
let(:gateway_response_options) { {} }
|
|
29
|
-
|
|
30
|
-
subject { create(:refund, payment: payment, amount: amount, reason: refund_reason, transaction_id: nil) }
|
|
31
|
-
|
|
32
|
-
before do
|
|
33
|
-
allow(payment.payment_method)
|
|
34
|
-
.to receive(:credit)
|
|
35
|
-
.with(amount_in_cents, payment.source, payment.transaction_id, {originator: an_instance_of(Spree::Refund)})
|
|
36
|
-
.and_return(gateway_response)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
context "transaction id exists on creation" do
|
|
40
|
-
let(:transaction_id) { "12kfjas0" }
|
|
41
|
-
subject { create(:refund, payment: payment, amount: amount, reason: refund_reason, transaction_id: transaction_id) }
|
|
42
|
-
|
|
43
|
-
it "creates a refund record" do
|
|
44
|
-
expect{ subject }.to change { Spree::Refund.count }.by(1)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it "maintains the transaction id" do
|
|
48
|
-
expect(subject.reload.transaction_id).to eq transaction_id
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
it "saves the amount" do
|
|
52
|
-
expect(subject.reload.amount).to eq amount
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
it "creates a log entry" do
|
|
56
|
-
expect(subject.log_entries).to be_present
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
it "does not attempt to process a transaction" do
|
|
60
|
-
expect(payment.payment_method).not_to receive(:credit)
|
|
61
|
-
subject
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
context "processing is successful" do
|
|
67
|
-
let(:gateway_response_options) { { authorization: authorization } }
|
|
68
|
-
|
|
69
|
-
it 'should create a refund' do
|
|
70
|
-
expect{ subject }.to change{ Spree::Refund.count }.by(1)
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
it 'return the newly created refund' do
|
|
74
|
-
expect(subject).to be_a(Spree::Refund)
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
it 'should save the returned authorization value' do
|
|
78
|
-
expect(subject.reload.transaction_id).to eq authorization
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
it 'should save the passed amount as the refund amount' do
|
|
82
|
-
expect(subject.amount).to eq amount
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
it 'should create a log entry' do
|
|
86
|
-
expect(subject.log_entries).to be_present
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
it "attempts to process a transaction" do
|
|
90
|
-
expect(payment.payment_method).to receive(:credit).once
|
|
91
|
-
subject
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
it 'should update the payment total' do
|
|
95
|
-
expect(payment.order.updater).to receive(:update)
|
|
96
|
-
subject
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
context "processing fails" do
|
|
102
|
-
let(:gateway_response_success) { false }
|
|
103
|
-
let(:gateway_response_message) { "failure message" }
|
|
104
|
-
|
|
105
|
-
it 'should raise error and not create a refund' do
|
|
106
|
-
expect do
|
|
107
|
-
expect { subject }.to raise_error(Spree::Core::GatewayError, gateway_response_message)
|
|
108
|
-
end.to_not change{ Spree::Refund.count }
|
|
109
|
-
end
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
context 'without payment profiles supported' do
|
|
113
|
-
before do
|
|
114
|
-
allow(payment.payment_method).to receive(:payment_profiles_supported?) { false }
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
it 'should not supply the payment source' do
|
|
118
|
-
expect(payment.payment_method)
|
|
119
|
-
.to receive(:credit)
|
|
120
|
-
.with(amount * 100, payment.transaction_id, {originator: an_instance_of(Spree::Refund)})
|
|
121
|
-
.and_return(gateway_response)
|
|
122
|
-
|
|
123
|
-
subject
|
|
124
|
-
end
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
context 'with payment profiles supported' do
|
|
128
|
-
before do
|
|
129
|
-
allow(payment.payment_method).to receive(:payment_profiles_supported?) { true }
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
it 'should supply the payment source' do
|
|
133
|
-
expect(payment.payment_method)
|
|
134
|
-
.to receive(:credit)
|
|
135
|
-
.with(amount_in_cents, payment.source, payment.transaction_id, {originator: an_instance_of(Spree::Refund)})
|
|
136
|
-
.and_return(gateway_response)
|
|
137
|
-
|
|
138
|
-
subject
|
|
139
|
-
end
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
context 'with an activemerchant gateway connection error' do
|
|
143
|
-
before do
|
|
144
|
-
message = double("gateway_error")
|
|
145
|
-
expect(payment.payment_method).to receive(:credit).with(
|
|
146
|
-
amount_in_cents,
|
|
147
|
-
payment.source,
|
|
148
|
-
payment.transaction_id,
|
|
149
|
-
originator: an_instance_of(Spree::Refund)
|
|
150
|
-
).and_raise(ActiveMerchant::ConnectionError.new(message, nil))
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
it 'raises Spree::Core::GatewayError' do
|
|
154
|
-
expect { subject }.to raise_error(Spree::Core::GatewayError, Spree.t(:unable_to_connect_to_gateway))
|
|
155
|
-
end
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
context 'with amount too large' do
|
|
159
|
-
let(:payment_amount) { 10 }
|
|
160
|
-
let(:amount) { payment_amount*2 }
|
|
161
|
-
|
|
162
|
-
it 'is invalid' do
|
|
163
|
-
expect { subject }.to raise_error { |error|
|
|
164
|
-
expect(error).to be_a(ActiveRecord::RecordInvalid)
|
|
165
|
-
expect(error.record.errors.full_messages).to eq ["Amount #{I18n.t('activerecord.errors.models.spree/refund.attributes.amount.greater_than_allowed')}"]
|
|
166
|
-
}
|
|
167
|
-
end
|
|
168
|
-
end
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
describe 'total_amount_reimbursed_for' do
|
|
172
|
-
let(:customer_return) { reimbursement.customer_return}
|
|
173
|
-
let(:reimbursement) { create(:reimbursement) }
|
|
174
|
-
let!(:default_refund_reason) { Spree::RefundReason.find_or_create_by!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false) }
|
|
175
|
-
|
|
176
|
-
subject { Spree::Refund.total_amount_reimbursed_for(reimbursement) }
|
|
177
|
-
|
|
178
|
-
context 'with reimbursements performed' do
|
|
179
|
-
before { reimbursement.perform! }
|
|
180
|
-
|
|
181
|
-
it 'returns the total amount' do
|
|
182
|
-
amount = Spree::Refund.total_amount_reimbursed_for(reimbursement)
|
|
183
|
-
expect(amount).to be > 0
|
|
184
|
-
expect(amount).to eq reimbursement.total
|
|
185
|
-
end
|
|
186
|
-
end
|
|
187
|
-
|
|
188
|
-
context 'without reimbursements performed' do
|
|
189
|
-
it 'returns zero' do
|
|
190
|
-
amount = Spree::Refund.total_amount_reimbursed_for(reimbursement)
|
|
191
|
-
expect(amount).to eq 0
|
|
192
|
-
end
|
|
193
|
-
end
|
|
194
|
-
end
|
|
195
|
-
end
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
module Spree
|
|
4
|
-
describe Reimbursement::Credit, type: :model do
|
|
5
|
-
context 'class methods' do
|
|
6
|
-
describe '.total_amount_reimbursed_for' do
|
|
7
|
-
subject { Spree::Reimbursement::Credit.total_amount_reimbursed_for(reimbursement) }
|
|
8
|
-
|
|
9
|
-
let(:reimbursement) { create(:reimbursement) }
|
|
10
|
-
let(:credit_double) { double(amount: 99.99) }
|
|
11
|
-
|
|
12
|
-
before { allow(reimbursement).to receive(:credits).and_return([credit_double, credit_double])}
|
|
13
|
-
|
|
14
|
-
it 'should sum the amounts of all of the reimbursements credits' do
|
|
15
|
-
expect(subject).to eq BigDecimal.new('199.98')
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
describe '#description' do
|
|
21
|
-
let(:credit) { Spree::Reimbursement::Credit.new(amount: 100, creditable: mock_model(Spree::PaymentMethod::Check)) }
|
|
22
|
-
|
|
23
|
-
it "should be the creditable's class name" do
|
|
24
|
-
expect(credit.description).to eq 'Check'
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
describe '#display_amount' do
|
|
29
|
-
let(:credit) { Spree::Reimbursement::Credit.new(amount: 100) }
|
|
30
|
-
|
|
31
|
-
it 'should be a money object' do
|
|
32
|
-
expect(credit.display_amount).to eq Spree::Money.new(100, currency: "USD")
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
module Spree
|
|
4
|
-
describe Reimbursement::ReimbursementTypeEngine, type: :model do
|
|
5
|
-
describe '#calculate_reimbursement_types' do
|
|
6
|
-
let(:return_item) { create(:return_item) }
|
|
7
|
-
let(:return_items) { [ return_item ] }
|
|
8
|
-
let(:reimbursement_type_engine) { Spree::Reimbursement::ReimbursementTypeEngine.new(return_items) }
|
|
9
|
-
let(:expired_reimbursement_type) { Spree::ReimbursementType::OriginalPayment }
|
|
10
|
-
let(:override_reimbursement_type) { Spree::ReimbursementType::OriginalPayment.new }
|
|
11
|
-
let(:preferred_reimbursement_type) { Spree::ReimbursementType::OriginalPayment.new }
|
|
12
|
-
let(:calculated_reimbursement_types) { subject }
|
|
13
|
-
let(:all_reimbursement_types) {[
|
|
14
|
-
reimbursement_type_engine.default_reimbursement_type,
|
|
15
|
-
reimbursement_type_engine.exchange_reimbursement_type,
|
|
16
|
-
expired_reimbursement_type,
|
|
17
|
-
override_reimbursement_type,
|
|
18
|
-
preferred_reimbursement_type
|
|
19
|
-
]}
|
|
20
|
-
|
|
21
|
-
subject { reimbursement_type_engine.calculate_reimbursement_types }
|
|
22
|
-
|
|
23
|
-
shared_examples_for "reimbursement type hash" do
|
|
24
|
-
it "contain all keys that respond to reimburse" do
|
|
25
|
-
calculated_reimbursement_types.keys.each do |r_type|
|
|
26
|
-
expect(r_type).to respond_to :reimburse
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
before do
|
|
32
|
-
reimbursement_type_engine.expired_reimbursement_type = expired_reimbursement_type
|
|
33
|
-
allow(return_item.inventory_unit.shipment).to receive(:shipped_at).and_return(Date.yesterday)
|
|
34
|
-
allow(return_item).to receive(:exchange_required?).and_return(false)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
context 'the return item requires exchange' do
|
|
38
|
-
before { allow(return_item).to receive(:exchange_required?).and_return(true) }
|
|
39
|
-
|
|
40
|
-
it 'returns a hash with the exchange reimbursement type associated to the return items' do
|
|
41
|
-
expect(calculated_reimbursement_types[reimbursement_type_engine.exchange_reimbursement_type]).to eq(return_items)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
it 'the return items are not included in any of the other reimbursement types' do
|
|
45
|
-
(all_reimbursement_types - [reimbursement_type_engine.exchange_reimbursement_type]).each do |r_type|
|
|
46
|
-
expect(calculated_reimbursement_types[r_type]).to eq([])
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
it_should_behave_like 'reimbursement type hash'
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
context 'the return item does not require exchange' do
|
|
54
|
-
context 'the return item has an override reimbursement type' do
|
|
55
|
-
before { allow(return_item).to receive(:override_reimbursement_type).and_return(override_reimbursement_type) }
|
|
56
|
-
|
|
57
|
-
it 'returns a hash with the override reimbursement type associated to the return items' do
|
|
58
|
-
expect(calculated_reimbursement_types[override_reimbursement_type.class]).to eq(return_items)
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
it 'the return items are not included in any of the other reimbursement types' do
|
|
62
|
-
(all_reimbursement_types - [override_reimbursement_type.class]).each do |r_type|
|
|
63
|
-
expect(calculated_reimbursement_types[r_type]).to eq([])
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
it_should_behave_like 'reimbursement type hash'
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
context 'the return item does not have an override reimbursement type' do
|
|
71
|
-
context 'the return item has a preferred reimbursement type' do
|
|
72
|
-
before { allow(return_item).to receive(:preferred_reimbursement_type).and_return(preferred_reimbursement_type) }
|
|
73
|
-
|
|
74
|
-
context 'the reimbursement type is not valid for the return item' do
|
|
75
|
-
before { expect(reimbursement_type_engine).to receive(:valid_preferred_reimbursement_type?).and_return(false) }
|
|
76
|
-
|
|
77
|
-
it 'returns a hash with no return items associated to the preferred reimbursement type' do
|
|
78
|
-
expect(calculated_reimbursement_types[preferred_reimbursement_type]).to eq([])
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
it 'the return items are not included in any of the other reimbursement types' do
|
|
82
|
-
(all_reimbursement_types - [preferred_reimbursement_type]).each do |r_type|
|
|
83
|
-
expect(calculated_reimbursement_types[r_type]).to eq([])
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
it_should_behave_like 'reimbursement type hash'
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
context 'the reimbursement type is valid for the return item' do
|
|
91
|
-
it 'returns a hash with the expired reimbursement type associated to the return items' do
|
|
92
|
-
expect(calculated_reimbursement_types[preferred_reimbursement_type.class]).to eq(return_items)
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
it 'the return items are not included in any of the other reimbursement types' do
|
|
96
|
-
(all_reimbursement_types - [preferred_reimbursement_type.class]).each do |r_type|
|
|
97
|
-
expect(calculated_reimbursement_types[r_type]).to eq([])
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
it_should_behave_like 'reimbursement type hash'
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
context 'the return item does not have a preferred reimbursement type' do
|
|
106
|
-
context 'the return item is past the time constraint' do
|
|
107
|
-
before { allow(reimbursement_type_engine).to receive(:past_reimbursable_time_period?).and_return(true) }
|
|
108
|
-
|
|
109
|
-
it 'returns a hash with the expired reimbursement type associated to the return items' do
|
|
110
|
-
expect(calculated_reimbursement_types[expired_reimbursement_type]).to eq(return_items)
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
it 'the return items are not included in any of the other reimbursement types' do
|
|
114
|
-
(all_reimbursement_types - [expired_reimbursement_type]).each do |r_type|
|
|
115
|
-
expect(calculated_reimbursement_types[r_type]).to eq([])
|
|
116
|
-
end
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
it_should_behave_like 'reimbursement type hash'
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
context 'the return item is within the time constraint' do
|
|
123
|
-
it 'returns a hash with the default reimbursement type associated to the return items' do
|
|
124
|
-
expect(calculated_reimbursement_types[reimbursement_type_engine.default_reimbursement_type]).to eq(return_items)
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
it 'the return items are not included in any of the other reimbursement types' do
|
|
128
|
-
(all_reimbursement_types - [reimbursement_type_engine.default_reimbursement_type]).each do |r_type|
|
|
129
|
-
expect(calculated_reimbursement_types[r_type]).to eq([])
|
|
130
|
-
end
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
it_should_behave_like 'reimbursement type hash'
|
|
134
|
-
end
|
|
135
|
-
end
|
|
136
|
-
end
|
|
137
|
-
end
|
|
138
|
-
end
|
|
139
|
-
end
|
|
140
|
-
end
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
module Spree
|
|
4
|
-
describe Reimbursement::ReimbursementTypeValidator, type: :model do
|
|
5
|
-
class DummyClass
|
|
6
|
-
include Spree::Reimbursement::ReimbursementTypeValidator
|
|
7
|
-
|
|
8
|
-
class_attribute :expired_reimbursement_type
|
|
9
|
-
self.expired_reimbursement_type = Spree::ReimbursementType::Credit
|
|
10
|
-
|
|
11
|
-
class_attribute :refund_time_constraint
|
|
12
|
-
self.refund_time_constraint = 90.days
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
let(:return_item) do
|
|
16
|
-
create(
|
|
17
|
-
:return_item,
|
|
18
|
-
preferred_reimbursement_type: preferred_reimbursement_type
|
|
19
|
-
)
|
|
20
|
-
end
|
|
21
|
-
let(:dummy) { DummyClass.new }
|
|
22
|
-
let(:preferred_reimbursement_type) { Spree::ReimbursementType::Credit.new }
|
|
23
|
-
|
|
24
|
-
describe '#valid_preferred_reimbursement_type?' do
|
|
25
|
-
before do
|
|
26
|
-
allow(dummy).to receive(:past_reimbursable_time_period?).and_return(true)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
subject { dummy.valid_preferred_reimbursement_type?(return_item) }
|
|
30
|
-
|
|
31
|
-
context 'is valid' do
|
|
32
|
-
it 'if it is not past the reimbursable time period' do
|
|
33
|
-
allow(dummy).to receive(:past_reimbursable_time_period?).and_return(false)
|
|
34
|
-
expect(subject).to be true
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it 'if the return items preferred method of reimbursement is the expired method of reimbursement' do
|
|
38
|
-
expect(subject).to be true
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
context 'is invalid' do
|
|
43
|
-
it 'if the return item is past the eligible time period and the preferred method of reimbursement is not the expired method of reimbursement' do
|
|
44
|
-
return_item.preferred_reimbursement_type =
|
|
45
|
-
Spree::ReimbursementType::OriginalPayment.new
|
|
46
|
-
expect(subject).to be false
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
describe '#past_reimbursable_time_period?' do
|
|
52
|
-
subject { dummy.past_reimbursable_time_period?(return_item) }
|
|
53
|
-
|
|
54
|
-
before do
|
|
55
|
-
allow(return_item).to receive_message_chain(:inventory_unit, :shipment, :shipped_at).and_return(shipped_at)
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
context 'it has not shipped' do
|
|
59
|
-
let(:shipped_at) { nil }
|
|
60
|
-
|
|
61
|
-
it 'is not past the reimbursable time period' do
|
|
62
|
-
expect(subject).to be_falsey
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
context 'it has shipped and it is more recent than the time constraint' do
|
|
67
|
-
let(:shipped_at) { (dummy.refund_time_constraint - 1.day).ago }
|
|
68
|
-
|
|
69
|
-
it 'is not past the reimbursable time period' do
|
|
70
|
-
expect(subject).to be false
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
context 'it has shipped and it is further in the past than the time constraint' do
|
|
75
|
-
let(:shipped_at) { (dummy.refund_time_constraint + 1.day).ago }
|
|
76
|
-
|
|
77
|
-
it 'is past the reimbursable time period' do
|
|
78
|
-
expect(subject).to be true
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|