solidus_core 1.0.2 → 1.0.3
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/CHANGELOG.md +1 -0
- data/Gemfile +3 -0
- data/Rakefile +16 -0
- data/script/rails +9 -0
- data/solidus_core.gemspec +48 -0
- data/spec/fixtures/thinking-cat.jpg +0 -0
- data/spec/helpers/base_helper_spec.rb +173 -0
- data/spec/helpers/order_helper_spec.rb +12 -0
- data/spec/helpers/products_helper_spec.rb +220 -0
- data/spec/helpers/taxons_helper_spec.rb +17 -0
- data/spec/lib/calculated_adjustments_spec.rb +7 -0
- data/spec/lib/i18n_spec.rb +123 -0
- data/spec/lib/search/base_spec.rb +86 -0
- data/spec/lib/search/variant_spec.rb +92 -0
- data/spec/lib/spree/core/controller_helpers/auth_spec.rb +66 -0
- data/spec/lib/spree/core/controller_helpers/order_spec.rb +92 -0
- data/spec/lib/spree/core/controller_helpers/search_spec.rb +17 -0
- data/spec/lib/spree/core/controller_helpers/store_spec.rb +16 -0
- data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +39 -0
- data/spec/lib/spree/core/current_store_spec.rb +36 -0
- data/spec/lib/spree/core/delegate_belongs_to_spec.rb +22 -0
- data/spec/lib/spree/core/importer/order_spec.rb +431 -0
- data/spec/lib/spree/core/role_configuration_spec.rb +138 -0
- data/spec/lib/spree/core/validators/email_spec.rb +48 -0
- data/spec/lib/spree/localized_number_spec.rb +38 -0
- data/spec/lib/spree/migrations_spec.rb +36 -0
- data/spec/lib/spree/money_spec.rb +127 -0
- data/spec/lib/tasks/exchanges_spec.rb +231 -0
- data/spec/lib/tasks/migrations/copy_shipped_shipments_to_cartons_spec.rb +115 -0
- data/spec/lib/tasks/order_capturing_spec.rb +56 -0
- data/spec/mailers/carton_mailer_spec.rb +43 -0
- data/spec/mailers/order_mailer_spec.rb +122 -0
- data/spec/mailers/reimbursement_mailer_spec.rb +40 -0
- data/spec/mailers/test_mailer_spec.rb +15 -0
- data/spec/models/spree/ability_spec.rb +276 -0
- data/spec/models/spree/address_spec.rb +250 -0
- data/spec/models/spree/adjustment_reason_spec.rb +13 -0
- data/spec/models/spree/adjustment_spec.rb +177 -0
- data/spec/models/spree/app_configuration_spec.rb +20 -0
- data/spec/models/spree/asset_spec.rb +24 -0
- data/spec/models/spree/calculator/default_tax_spec.rb +127 -0
- data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +25 -0
- data/spec/models/spree/calculator/flat_rate_spec.rb +47 -0
- data/spec/models/spree/calculator/flexi_rate_spec.rb +41 -0
- data/spec/models/spree/calculator/percent_on_line_item_spec.rb +15 -0
- data/spec/models/spree/calculator/price_sack_spec.rb +30 -0
- data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +51 -0
- data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +23 -0
- data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +13 -0
- data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +52 -0
- data/spec/models/spree/calculator/shipping/per_item_spec.rb +20 -0
- data/spec/models/spree/calculator/shipping/price_sack_spec.rb +30 -0
- data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +36 -0
- data/spec/models/spree/calculator/tiered_percent_spec.rb +47 -0
- data/spec/models/spree/calculator_spec.rb +36 -0
- data/spec/models/spree/carton_spec.rb +133 -0
- data/spec/models/spree/classification_spec.rb +15 -0
- data/spec/models/spree/concerns/display_money_spec.rb +43 -0
- data/spec/models/spree/concerns/user_methods_spec.rb +41 -0
- data/spec/models/spree/credit_card_spec.rb +334 -0
- data/spec/models/spree/customer_return_spec.rb +276 -0
- data/spec/models/spree/exchange_spec.rb +79 -0
- data/spec/models/spree/gateway/bogus_simple.rb +20 -0
- data/spec/models/spree/gateway/bogus_spec.rb +13 -0
- data/spec/models/spree/gateway_spec.rb +82 -0
- data/spec/models/spree/inventory_unit_spec.rb +307 -0
- data/spec/models/spree/item_adjustments_spec.rb +256 -0
- data/spec/models/spree/line_item_spec.rb +191 -0
- data/spec/models/spree/option_type_spec.rb +14 -0
- data/spec/models/spree/option_value_spec.rb +22 -0
- data/spec/models/spree/order/address_spec.rb +50 -0
- data/spec/models/spree/order/adjustments_spec.rb +39 -0
- data/spec/models/spree/order/callbacks_spec.rb +42 -0
- data/spec/models/spree/order/checkout_spec.rb +902 -0
- data/spec/models/spree/order/currency_updater_spec.rb +32 -0
- data/spec/models/spree/order/finalizing_spec.rb +111 -0
- data/spec/models/spree/order/payment_spec.rb +210 -0
- data/spec/models/spree/order/risk_assessment_spec.rb +68 -0
- data/spec/models/spree/order/state_machine_spec.rb +221 -0
- data/spec/models/spree/order/tax_spec.rb +84 -0
- data/spec/models/spree/order/totals_spec.rb +24 -0
- data/spec/models/spree/order/updating_spec.rb +18 -0
- data/spec/models/spree/order/validations_spec.rb +15 -0
- data/spec/models/spree/order_cancellations_spec.rb +120 -0
- data/spec/models/spree/order_capturing_spec.rb +116 -0
- data/spec/models/spree/order_contents_spec.rb +265 -0
- data/spec/models/spree/order_inventory_spec.rb +228 -0
- data/spec/models/spree/order_mutex_spec.rb +85 -0
- data/spec/models/spree/order_promotion_spec.rb +31 -0
- data/spec/models/spree/order_shipping_spec.rb +247 -0
- data/spec/models/spree/order_spec.rb +1412 -0
- data/spec/models/spree/order_stock_location_spec.rb +18 -0
- data/spec/models/spree/order_updater_spec.rb +299 -0
- data/spec/models/spree/payment_method/store_credit_spec.rb +294 -0
- data/spec/models/spree/payment_method_spec.rb +96 -0
- data/spec/models/spree/payment_spec.rb +1044 -0
- data/spec/models/spree/permission_sets/base_spec.rb +12 -0
- data/spec/models/spree/permission_sets/configuration_display.rb +82 -0
- data/spec/models/spree/permission_sets/configuration_management_spec.rb +50 -0
- data/spec/models/spree/permission_sets/dashboard_display_spec.rb +22 -0
- data/spec/models/spree/permission_sets/order_display_spec.rb +49 -0
- data/spec/models/spree/permission_sets/order_management_spec.rb +36 -0
- data/spec/models/spree/permission_sets/product_display_spec.rb +60 -0
- data/spec/models/spree/permission_sets/product_management_spec.rb +40 -0
- data/spec/models/spree/permission_sets/promotion_display_spec.rb +34 -0
- data/spec/models/spree/permission_sets/promotion_management_spec.rb +26 -0
- data/spec/models/spree/permission_sets/report_display_spec.rb +24 -0
- data/spec/models/spree/permission_sets/restricted_transfer_management_spec.rb +132 -0
- data/spec/models/spree/permission_sets/stock_display_spec.rb +26 -0
- data/spec/models/spree/permission_sets/stock_management_spec.rb +24 -0
- data/spec/models/spree/permission_sets/user_display_spec.rb +36 -0
- data/spec/models/spree/permission_sets/user_management_spec.rb +28 -0
- data/spec/models/spree/preference_spec.rb +80 -0
- data/spec/models/spree/preferences/configuration_spec.rb +30 -0
- data/spec/models/spree/preferences/preferable_spec.rb +294 -0
- data/spec/models/spree/preferences/scoped_store_spec.rb +58 -0
- data/spec/models/spree/preferences/static_model_preferences_spec.rb +78 -0
- data/spec/models/spree/preferences/statically_configurable_spec.rb +60 -0
- data/spec/models/spree/preferences/store_spec.rb +39 -0
- data/spec/models/spree/price_spec.rb +42 -0
- data/spec/models/spree/product/scopes_spec.rb +148 -0
- data/spec/models/spree/product_duplicator_spec.rb +103 -0
- data/spec/models/spree/product_filter_spec.rb +26 -0
- data/spec/models/spree/product_property_spec.rb +20 -0
- data/spec/models/spree/product_spec.rb +437 -0
- data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +96 -0
- data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +165 -0
- data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +115 -0
- data/spec/models/spree/promotion/actions/free_shipping_spec.rb +40 -0
- data/spec/models/spree/promotion/rules/first_order_spec.rb +75 -0
- data/spec/models/spree/promotion/rules/item_total_spec.rb +67 -0
- data/spec/models/spree/promotion/rules/nth_order_spec.rb +70 -0
- data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +42 -0
- data/spec/models/spree/promotion/rules/option_value_spec.rb +94 -0
- data/spec/models/spree/promotion/rules/product_spec.rb +143 -0
- data/spec/models/spree/promotion/rules/taxon_spec.rb +102 -0
- data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +27 -0
- data/spec/models/spree/promotion/rules/user_spec.rb +37 -0
- data/spec/models/spree/promotion_builder_spec.rb +118 -0
- data/spec/models/spree/promotion_category_spec.rb +17 -0
- data/spec/models/spree/promotion_code/code_builder_spec.rb +79 -0
- data/spec/models/spree/promotion_code_spec.rb +187 -0
- data/spec/models/spree/promotion_handler/cart_spec.rb +114 -0
- data/spec/models/spree/promotion_handler/coupon_spec.rb +335 -0
- data/spec/models/spree/promotion_handler/free_shipping_spec.rb +47 -0
- data/spec/models/spree/promotion_handler/page_spec.rb +44 -0
- data/spec/models/spree/promotion_rule_spec.rb +28 -0
- data/spec/models/spree/promotion_spec.rb +767 -0
- data/spec/models/spree/refund_spec.rb +204 -0
- data/spec/models/spree/reimbursement/credit_spec.rb +36 -0
- data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +140 -0
- data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +83 -0
- data/spec/models/spree/reimbursement_performer_spec.rb +30 -0
- data/spec/models/spree/reimbursement_spec.rb +231 -0
- data/spec/models/spree/reimbursement_tax_calculator_spec.rb +51 -0
- data/spec/models/spree/reimbursement_type/credit_spec.rb +53 -0
- data/spec/models/spree/reimbursement_type/exchange_spec.rb +46 -0
- data/spec/models/spree/reimbursement_type/original_payment_spec.rb +107 -0
- data/spec/models/spree/reimbursement_type/store_credit_spec.rb +97 -0
- data/spec/models/spree/return_authorization_spec.rb +290 -0
- data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +77 -0
- data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +58 -0
- data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +85 -0
- data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +32 -0
- data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +29 -0
- data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +35 -0
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +65 -0
- data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +43 -0
- data/spec/models/spree/return_item_spec.rb +775 -0
- data/spec/models/spree/returns_calculator_spec.rb +14 -0
- data/spec/models/spree/shipment_spec.rb +709 -0
- data/spec/models/spree/shipping_calculator_spec.rb +45 -0
- data/spec/models/spree/shipping_method_spec.rb +88 -0
- data/spec/models/spree/shipping_rate_spec.rb +142 -0
- data/spec/models/spree/state_spec.rb +14 -0
- data/spec/models/spree/stock/availability_validator_spec.rb +83 -0
- data/spec/models/spree/stock/coordinator_spec.rb +116 -0
- data/spec/models/spree/stock/differentiator_spec.rb +39 -0
- data/spec/models/spree/stock/estimator_spec.rb +146 -0
- data/spec/models/spree/stock/inventory_unit_builder_spec.rb +38 -0
- data/spec/models/spree/stock/package_spec.rb +163 -0
- data/spec/models/spree/stock/packer_spec.rb +91 -0
- data/spec/models/spree/stock/prioritizer_spec.rb +125 -0
- data/spec/models/spree/stock/quantifier_spec.rb +115 -0
- data/spec/models/spree/stock/splitter/backordered_spec.rb +29 -0
- data/spec/models/spree/stock/splitter/base_spec.rb +21 -0
- data/spec/models/spree/stock/splitter/shipping_category_spec.rb +50 -0
- data/spec/models/spree/stock/splitter/weight_spec.rb +29 -0
- data/spec/models/spree/stock_item_spec.rb +426 -0
- data/spec/models/spree/stock_location_spec.rb +279 -0
- data/spec/models/spree/stock_movement_spec.rb +56 -0
- data/spec/models/spree/stock_transfer_spec.rb +290 -0
- data/spec/models/spree/store_credit_category_spec.rb +17 -0
- data/spec/models/spree/store_credit_event_spec.rb +314 -0
- data/spec/models/spree/store_credit_spec.rb +876 -0
- data/spec/models/spree/store_spec.rb +55 -0
- data/spec/models/spree/tax_category_spec.rb +27 -0
- data/spec/models/spree/tax_rate_spec.rb +378 -0
- data/spec/models/spree/taxon_spec.rb +74 -0
- data/spec/models/spree/taxonomy_spec.rb +18 -0
- data/spec/models/spree/tracker_spec.rb +21 -0
- data/spec/models/spree/transfer_item_spec.rb +264 -0
- data/spec/models/spree/unit_cancel_spec.rb +148 -0
- data/spec/models/spree/user_spec.rb +223 -0
- data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +23 -0
- data/spec/models/spree/variant/scopes_spec.rb +55 -0
- data/spec/models/spree/variant_spec.rb +546 -0
- data/spec/models/spree/zone_spec.rb +305 -0
- data/spec/spec_helper.rb +78 -0
- data/spec/support/big_decimal.rb +5 -0
- data/spec/support/concerns/default_price.rb +34 -0
- data/spec/support/dummy_ability.rb +4 -0
- data/spec/support/test_gateway.rb +2 -0
- metadata +229 -3
- data/lib/spree/testing_support/rspec-activemodel-mocks_patch.rb +0 -8
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Spree::Asset, :type => :model do
|
|
4
|
+
describe "#viewable" do
|
|
5
|
+
it "touches association" do
|
|
6
|
+
product = build(:custom_product)
|
|
7
|
+
|
|
8
|
+
expect do
|
|
9
|
+
Spree::Asset.create! { |a| a.viewable = product.master }
|
|
10
|
+
end.to change { product.updated_at }
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
describe "#acts_as_list scope" do
|
|
15
|
+
it "should start from first position for different viewables" do
|
|
16
|
+
asset1 = Spree::Asset.create(viewable_type: 'Spree::Image', viewable_id: 1)
|
|
17
|
+
asset2 = Spree::Asset.create(viewable_type: 'Spree::LineItem', viewable_id: 1)
|
|
18
|
+
|
|
19
|
+
expect(asset1.position).to eq 1
|
|
20
|
+
expect(asset2.position).to eq 1
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Spree::Calculator::DefaultTax, :type => :model do
|
|
4
|
+
let!(:country) { create(:country) }
|
|
5
|
+
let!(:zone) { create(:zone, :name => "Country Zone", :default_tax => true, :zone_members => []) }
|
|
6
|
+
let!(:tax_category) { create(:tax_category, :tax_rates => []) }
|
|
7
|
+
let!(:rate) { create(:tax_rate, :tax_category => tax_category, :amount => 0.05, :included_in_price => included_in_price) }
|
|
8
|
+
let(:included_in_price) { false }
|
|
9
|
+
let!(:calculator) { Spree::Calculator::DefaultTax.new(:calculable => rate ) }
|
|
10
|
+
let!(:order) { create(:order) }
|
|
11
|
+
let!(:line_item) { create(:line_item, :price => 10, :quantity => 3, :tax_category => tax_category) }
|
|
12
|
+
let!(:shipment) { create(:shipment, :cost => 15) }
|
|
13
|
+
|
|
14
|
+
context "#compute" do
|
|
15
|
+
context "when given an order" do
|
|
16
|
+
let!(:line_item_1) { line_item }
|
|
17
|
+
let!(:line_item_2) { create(:line_item, :price => 10, :quantity => 3, :tax_category => tax_category) }
|
|
18
|
+
|
|
19
|
+
before do
|
|
20
|
+
allow(order).to receive_messages :line_items => [line_item_1, line_item_2]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
context "when no line items match the tax category" do
|
|
24
|
+
before do
|
|
25
|
+
line_item_1.tax_category = nil
|
|
26
|
+
line_item_2.tax_category = nil
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "should be 0" do
|
|
30
|
+
expect(calculator.compute(order)).to eq(0)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
context "when one item matches the tax category" do
|
|
35
|
+
before do
|
|
36
|
+
line_item_1.tax_category = tax_category
|
|
37
|
+
line_item_2.tax_category = nil
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "should be equal to the item total * rate" do
|
|
41
|
+
expect(calculator.compute(order)).to eq(1.5)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
context "correctly rounds to within two decimal places" do
|
|
45
|
+
before do
|
|
46
|
+
line_item_1.price = 10.333
|
|
47
|
+
line_item_1.quantity = 1
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
specify do
|
|
51
|
+
# Amount is 0.51665, which will be rounded to...
|
|
52
|
+
expect(calculator.compute(order)).to eq(0.52)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
context "when more than one item matches the tax category" do
|
|
59
|
+
it "should be equal to the sum of the item totals * rate" do
|
|
60
|
+
expect(calculator.compute(order)).to eq(3)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
context "when tax is included in price" do
|
|
65
|
+
let(:included_in_price) { true }
|
|
66
|
+
|
|
67
|
+
it "will return the deducted amount from the totals" do
|
|
68
|
+
# total price including 5% tax = $60
|
|
69
|
+
# ex pre-tax = $57.14
|
|
70
|
+
# 57.14 + %5 = 59.997 (or "close enough" to $60)
|
|
71
|
+
# 60 - 57.14 = $2.86
|
|
72
|
+
expect(calculator.compute(order).to_f).to eql 2.86
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
context "when tax is included in price" do
|
|
78
|
+
let(:included_in_price) { true }
|
|
79
|
+
context "when the variant matches the tax category" do
|
|
80
|
+
|
|
81
|
+
context "when line item is discounted" do
|
|
82
|
+
before do
|
|
83
|
+
line_item.promo_total = -1
|
|
84
|
+
Spree::TaxRate.store_pre_tax_amount(line_item, [rate])
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it "should be equal to the item's discounted total * rate" do
|
|
88
|
+
expect(calculator.compute(line_item)).to eql 1.38
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "should be equal to the item's full price * rate" do
|
|
93
|
+
Spree::TaxRate.store_pre_tax_amount(line_item, [rate])
|
|
94
|
+
expect(calculator.compute(line_item)).to eql 1.43
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
context "when tax is not included in price" do
|
|
100
|
+
context "when the line item is discounted" do
|
|
101
|
+
before { line_item.promo_total = -1 }
|
|
102
|
+
|
|
103
|
+
it "should be equal to the item's pre-tax total * rate" do
|
|
104
|
+
expect(calculator.compute(line_item)).to eq(1.45)
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
context "when the variant matches the tax category" do
|
|
109
|
+
it "should be equal to the item pre-tax total * rate" do
|
|
110
|
+
expect(calculator.compute(line_item)).to eq(1.50)
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
context "when given a shipment" do
|
|
116
|
+
it "should be 5% of 15" do
|
|
117
|
+
expect(calculator.compute(shipment)).to eq(0.75)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it "takes discounts into consideration" do
|
|
121
|
+
shipment.promo_total = -1
|
|
122
|
+
# 5% of 14
|
|
123
|
+
expect(calculator.compute(shipment)).to eq(0.7)
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Spree::Calculator::FlatPercentItemTotal, :type => :model do
|
|
4
|
+
let(:calculator) { Spree::Calculator::FlatPercentItemTotal.new }
|
|
5
|
+
let(:line_item) { mock_model Spree::LineItem }
|
|
6
|
+
|
|
7
|
+
before { allow(calculator).to receive_messages preferred_flat_percent: 10 }
|
|
8
|
+
|
|
9
|
+
context "compute" do
|
|
10
|
+
it "should round result correctly" do
|
|
11
|
+
allow(line_item).to receive_messages amount: 31.08
|
|
12
|
+
expect(calculator.compute(line_item)).to eq 3.11
|
|
13
|
+
|
|
14
|
+
allow(line_item).to receive_messages amount: 31.00
|
|
15
|
+
expect(calculator.compute(line_item)).to eq 3.10
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'returns object.amount if computed amount is greater' do
|
|
19
|
+
allow(calculator).to receive_messages preferred_flat_percent: 110
|
|
20
|
+
allow(line_item).to receive_messages amount: 30.00
|
|
21
|
+
|
|
22
|
+
expect(calculator.compute(line_item)).to eq 30.0
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Spree::Calculator::FlatRate, type: :model do
|
|
4
|
+
let(:calculator) { Spree::Calculator::FlatRate.new }
|
|
5
|
+
|
|
6
|
+
let(:order) do
|
|
7
|
+
mock_model(
|
|
8
|
+
Spree::Order, quantity: 10, currency: "USD"
|
|
9
|
+
)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
context "compute" do
|
|
13
|
+
it "should compute the amount as the rate when currency matches the order's currency" do
|
|
14
|
+
calculator.preferred_amount = 25.0
|
|
15
|
+
calculator.preferred_currency = "GBP"
|
|
16
|
+
allow(order).to receive_messages currency: "GBP"
|
|
17
|
+
expect(calculator.compute(order).round(2)).to eq(25.0)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "should compute the amount as 0 when currency does not match the order's currency" do
|
|
21
|
+
calculator.preferred_amount = 100.0
|
|
22
|
+
calculator.preferred_currency = "GBP"
|
|
23
|
+
allow(order).to receive_messages currency: "USD"
|
|
24
|
+
expect(calculator.compute(order).round(2)).to eq(0.0)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should compute the amount as 0 when currency is blank" do
|
|
28
|
+
calculator.preferred_amount = 100.0
|
|
29
|
+
calculator.preferred_currency = ""
|
|
30
|
+
allow(order).to receive_messages currency: "GBP"
|
|
31
|
+
expect(calculator.compute(order).round(2)).to eq(0.0)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "should compute the amount as the rate when the currencies use different casing" do
|
|
35
|
+
calculator.preferred_amount = 100.0
|
|
36
|
+
calculator.preferred_currency = "gBp"
|
|
37
|
+
allow(order).to receive_messages currency: "GBP"
|
|
38
|
+
expect(calculator.compute(order).round(2)).to eq(100.0)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "should compute the amount as 0 when there is no object" do
|
|
42
|
+
calculator.preferred_amount = 100.0
|
|
43
|
+
calculator.preferred_currency = "GBP"
|
|
44
|
+
expect(calculator.compute.round(2)).to eq(0.0)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Spree::Calculator::FlexiRate, :type => :model do
|
|
4
|
+
let(:calculator) { Spree::Calculator::FlexiRate.new }
|
|
5
|
+
|
|
6
|
+
let(:order) do
|
|
7
|
+
mock_model(
|
|
8
|
+
Spree::Order, quantity: 10
|
|
9
|
+
)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
context "compute" do
|
|
13
|
+
it "should compute amount correctly when all fees are 0" do
|
|
14
|
+
expect(calculator.compute(order).round(2)).to eq(0.0)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "should compute amount correctly when first_item has a value" do
|
|
18
|
+
allow(calculator).to receive_messages :preferred_first_item => 1.0
|
|
19
|
+
expect(calculator.compute(order).round(2)).to eq(1.0)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "should compute amount correctly when additional_items has a value" do
|
|
23
|
+
allow(calculator).to receive_messages :preferred_additional_item => 1.0
|
|
24
|
+
expect(calculator.compute(order).round(2)).to eq(9.0)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should compute amount correctly when additional_items and first_item have values" do
|
|
28
|
+
allow(calculator).to receive_messages :preferred_first_item => 5.0, :preferred_additional_item => 1.0
|
|
29
|
+
expect(calculator.compute(order).round(2)).to eq(14.0)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "should compute amount correctly when additional_items and first_item have values AND max items has value" do
|
|
33
|
+
allow(calculator).to receive_messages :preferred_first_item => 5.0, :preferred_additional_item => 1.0, :preferred_max_items => 3
|
|
34
|
+
expect(calculator.compute(order).round(2)).to eq(7.0)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "should allow creation of new object with all the attributes" do
|
|
38
|
+
Spree::Calculator::FlexiRate.new(:preferred_first_item => 1, :preferred_additional_item => 1, :preferred_max_items => 1)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module Spree
|
|
4
|
+
class Calculator
|
|
5
|
+
describe PercentOnLineItem, :type => :model do
|
|
6
|
+
let(:line_item) { double("LineItem", amount: 100) }
|
|
7
|
+
|
|
8
|
+
before { subject.preferred_percent = 15 }
|
|
9
|
+
|
|
10
|
+
it "computes based on item price and quantity" do
|
|
11
|
+
expect(subject.compute(line_item)).to eq 15
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Spree::Calculator::PriceSack, :type => :model do
|
|
4
|
+
let(:calculator) do
|
|
5
|
+
calculator = Spree::Calculator::PriceSack.new
|
|
6
|
+
calculator.preferred_minimal_amount = 5
|
|
7
|
+
calculator.preferred_normal_amount = 10
|
|
8
|
+
calculator.preferred_discount_amount = 1
|
|
9
|
+
calculator
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
let(:order) { stub_model(Spree::Order) }
|
|
13
|
+
let(:shipment) { stub_model(Spree::Shipment, :amount => 10) }
|
|
14
|
+
|
|
15
|
+
# Regression test for #714 and #739
|
|
16
|
+
it "computes with an order object" do
|
|
17
|
+
calculator.compute(order)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Regression test for #1156
|
|
21
|
+
it "computes with a shipment object" do
|
|
22
|
+
calculator.compute(shipment)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Regression test for #2055
|
|
26
|
+
it "computes the correct amount" do
|
|
27
|
+
expect(calculator.compute(2)).to eq(calculator.preferred_normal_amount)
|
|
28
|
+
expect(calculator.compute(6)).to eq(calculator.preferred_discount_amount)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Spree::Calculator::Returns::DefaultRefundAmount, :type => :model do
|
|
4
|
+
let(:order) { create(:order) }
|
|
5
|
+
let(:line_item_quantity) { 2 }
|
|
6
|
+
let(:pre_tax_amount) { 100.0 }
|
|
7
|
+
let(:line_item) { create(:line_item, price: 100.0, quantity: line_item_quantity, pre_tax_amount: pre_tax_amount) }
|
|
8
|
+
let(:inventory_unit) { build(:inventory_unit, order: order, line_item: line_item) }
|
|
9
|
+
let(:return_item) { build(:return_item, inventory_unit: inventory_unit ) }
|
|
10
|
+
let(:calculator) { Spree::Calculator::Returns::DefaultRefundAmount.new }
|
|
11
|
+
|
|
12
|
+
before { order.line_items << line_item }
|
|
13
|
+
|
|
14
|
+
subject { calculator.compute(return_item) }
|
|
15
|
+
|
|
16
|
+
context "not an exchange" do
|
|
17
|
+
context "no promotions or taxes" do
|
|
18
|
+
it { is_expected.to eq pre_tax_amount / line_item_quantity }
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
context "order adjustments" do
|
|
22
|
+
let(:adjustment_amount) { -10.0 }
|
|
23
|
+
|
|
24
|
+
before do
|
|
25
|
+
order.adjustments << create(:adjustment, order: order, amount: adjustment_amount, eligible: true, label: 'Adjustment', source_type: 'Spree::Order')
|
|
26
|
+
order.adjustments.first.update_attributes(amount: adjustment_amount)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it { is_expected.to eq (pre_tax_amount - adjustment_amount.abs) / line_item_quantity }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
context "shipping adjustments" do
|
|
33
|
+
let(:adjustment_total) { -50.0 }
|
|
34
|
+
|
|
35
|
+
before { order.shipments << Spree::Shipment.new(adjustment_total: adjustment_total) }
|
|
36
|
+
|
|
37
|
+
it { is_expected.to eq pre_tax_amount / line_item_quantity }
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
context "an exchange" do
|
|
42
|
+
let(:return_item) { build(:exchange_return_item) }
|
|
43
|
+
|
|
44
|
+
it { is_expected.to eq 0.0 }
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
context "pre_tax_amount is zero" do
|
|
48
|
+
let(:pre_tax_amount) { 0.0 }
|
|
49
|
+
it { is_expected.to eq 0.0 }
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module Spree
|
|
4
|
+
module Calculator::Shipping
|
|
5
|
+
describe FlatPercentItemTotal, :type => :model do
|
|
6
|
+
let(:variant1) { build(:variant, :price => 10.11) }
|
|
7
|
+
let(:variant2) { build(:variant, :price => 20.2222) }
|
|
8
|
+
|
|
9
|
+
let(:line_item1) { build(:line_item, variant: variant1) }
|
|
10
|
+
let(:line_item2) { build(:line_item, variant: variant2) }
|
|
11
|
+
|
|
12
|
+
let(:package) do
|
|
13
|
+
build(:stock_package, variants_contents: { variant1 => 2, variant2 => 1 })
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
subject { FlatPercentItemTotal.new(:preferred_flat_percent => 10) }
|
|
17
|
+
|
|
18
|
+
it "should round result correctly" do
|
|
19
|
+
expect(subject.compute(package)).to eq(4.04)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module Spree
|
|
4
|
+
module Calculator::Shipping
|
|
5
|
+
describe FlatRate, :type => :model do
|
|
6
|
+
subject { Calculator::Shipping::FlatRate.new(:preferred_amount => 4.00) }
|
|
7
|
+
|
|
8
|
+
it 'always returns the same rate' do
|
|
9
|
+
expect(subject.compute(build(:stock_package_fulfilled))).to eql 4.00
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module Spree
|
|
4
|
+
module Calculator::Shipping
|
|
5
|
+
describe FlexiRate, :type => :model do
|
|
6
|
+
let(:variant1) { build(:variant, :price => 10) }
|
|
7
|
+
let(:variant2) { build(:variant, :price => 20) }
|
|
8
|
+
|
|
9
|
+
let(:package) do
|
|
10
|
+
build(:stock_package, variants_contents: { variant1 => 4, variant2 => 6 })
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
let(:subject) { FlexiRate.new }
|
|
14
|
+
|
|
15
|
+
context "compute" do
|
|
16
|
+
it "should compute amount correctly when all fees are 0" do
|
|
17
|
+
expect(subject.compute(package).round(2)).to eq(0.0)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "should compute amount correctly when first_item has a value" do
|
|
21
|
+
subject.preferred_first_item = 1.0
|
|
22
|
+
expect(subject.compute(package).round(2)).to eq(1.0)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should compute amount correctly when additional_items has a value" do
|
|
26
|
+
subject.preferred_additional_item = 1.0
|
|
27
|
+
expect(subject.compute(package).round(2)).to eq(9.0)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "should compute amount correctly when additional_items and first_item have values" do
|
|
31
|
+
subject.preferred_first_item = 5.0
|
|
32
|
+
subject.preferred_additional_item = 1.0
|
|
33
|
+
expect(subject.compute(package).round(2)).to eq(14.0)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "should compute amount correctly when additional_items and first_item have values AND max items has value" do
|
|
37
|
+
subject.preferred_first_item = 5.0
|
|
38
|
+
subject.preferred_additional_item = 1.0
|
|
39
|
+
subject.preferred_max_items = 3
|
|
40
|
+
expect(subject.compute(package).round(2)).to eq(26.0)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "should allow creation of new object with all the attributes" do
|
|
44
|
+
FlexiRate.new(:preferred_first_item => 1,
|
|
45
|
+
:preferred_additional_item => 1,
|
|
46
|
+
:preferred_max_items => 1)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|