solidus_core 2.4.2 → 2.5.0.beta1
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 +5 -5
- data/README.md +1 -5
- data/Rakefile +23 -6
- data/app/helpers/spree/base_helper.rb +15 -10
- data/app/helpers/spree/checkout_helper.rb +1 -1
- data/app/helpers/spree/products_helper.rb +2 -2
- data/app/mailers/spree/carton_mailer.rb +2 -2
- data/app/mailers/spree/order_mailer.rb +4 -4
- data/app/mailers/spree/reimbursement_mailer.rb +2 -2
- data/app/mailers/spree/test_mailer.rb +1 -1
- data/app/models/concerns/spree/adjustment_source.rb +17 -11
- data/app/models/concerns/spree/calculated_adjustments.rb +2 -2
- data/app/models/spree/ability.rb +1 -1
- data/app/models/spree/address.rb +7 -0
- data/app/models/spree/adjustment.rb +6 -2
- data/app/models/spree/calculator.rb +1 -1
- data/app/models/spree/calculator/flexi_rate.rb +1 -0
- data/app/models/spree/calculator/free_shipping.rb +2 -0
- data/app/models/spree/calculator/percent_on_line_item.rb +6 -6
- data/app/models/spree/calculator/percent_per_item.rb +2 -0
- data/app/models/spree/calculator/returns/default_refund_amount.rb +4 -4
- data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +1 -0
- data/app/models/spree/calculator/shipping/flat_rate.rb +1 -0
- data/app/models/spree/calculator/shipping/flexi_rate.rb +1 -0
- data/app/models/spree/calculator/shipping/per_item.rb +1 -0
- data/app/models/spree/calculator/shipping/price_sack.rb +1 -0
- data/app/models/spree/classification.rb +1 -1
- data/app/models/spree/customer_return.rb +1 -1
- data/app/models/spree/inventory_unit.rb +8 -2
- data/app/models/spree/log_entry.rb +0 -11
- data/app/models/spree/order.rb +31 -16
- data/app/models/spree/order_contents.rb +0 -14
- data/app/models/spree/order_shipping.rb +0 -5
- data/app/models/spree/order_updater.rb +0 -4
- data/app/models/spree/payment.rb +6 -1
- data/app/models/spree/payment/processing.rb +4 -4
- data/app/models/spree/payment_method.rb +8 -3
- data/app/models/spree/payment_method/credit_card.rb +1 -1
- data/app/models/spree/payment_method/store_credit.rb +4 -4
- data/app/models/spree/price.rb +7 -1
- data/app/models/spree/product.rb +34 -6
- data/app/models/spree/product/scopes.rb +2 -2
- data/app/models/spree/promotion.rb +1 -2
- data/app/models/spree/promotion/actions/create_adjustment.rb +3 -2
- data/app/models/spree/promotion/actions/create_item_adjustments.rb +7 -8
- data/app/models/spree/promotion/actions/free_shipping.rb +1 -1
- data/app/models/spree/promotion/rules/taxon.rb +25 -24
- data/app/models/spree/promotion_action.rb +7 -1
- data/app/models/spree/promotion_chooser.rb +1 -1
- data/app/models/spree/promotion_code.rb +3 -3
- data/app/models/spree/promotion_handler/coupon.rb +8 -29
- data/app/models/spree/promotion_rule.rb +1 -1
- data/app/models/spree/refund.rb +3 -3
- data/app/models/spree/reimbursement.rb +1 -1
- data/app/models/spree/return_authorization.rb +2 -2
- data/app/models/spree/return_item.rb +3 -3
- data/app/models/spree/return_item/eligibility_validator/base_validator.rb +2 -2
- data/app/models/spree/return_item/eligibility_validator/inventory_shipped.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/order_completed.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/rma_required.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +1 -1
- data/app/models/spree/shipment.rb +16 -6
- data/app/models/spree/shipping_method.rb +7 -0
- data/app/models/spree/shipping_rate.rb +6 -6
- data/app/models/spree/shipping_rate_tax.rb +2 -2
- data/app/models/spree/stock/availability_validator.rb +2 -2
- data/app/models/spree/stock/estimator.rb +9 -1
- data/app/models/spree/stock/inventory_unit_builder.rb +1 -2
- data/app/models/spree/stock/inventory_validator.rb +2 -2
- data/app/models/spree/stock/package.rb +1 -1
- data/app/models/spree/stock/simple_coordinator.rb +2 -2
- data/app/models/spree/stock_item.rb +6 -0
- data/app/models/spree/stock_location.rb +2 -2
- data/app/models/spree/store_credit.rb +19 -12
- data/app/models/spree/store_credit_category.rb +1 -1
- data/app/models/spree/store_credit_event.rb +7 -1
- data/app/models/spree/tax/shipping_rate_taxer.rb +1 -1
- data/app/models/spree/tax_calculator/shipping_rate.rb +12 -3
- data/app/models/spree/tax_rate.rb +10 -3
- data/app/models/spree/taxon.rb +14 -4
- data/app/models/spree/taxonomy.rb +1 -1
- data/app/models/spree/unit_cancel.rb +1 -1
- data/app/models/spree/variant.rb +33 -1
- data/app/models/spree/variant/price_selector.rb +1 -1
- data/app/models/spree/variant/pricing_options.rb +1 -1
- data/app/models/spree/variant/scopes.rb +1 -1
- data/app/models/spree/variant/vat_price_generator.rb +1 -1
- data/app/views/spree/carton_mailer/shipped_email.html.erb +6 -6
- data/app/views/spree/carton_mailer/shipped_email.text.erb +6 -6
- data/app/views/spree/order_mailer/cancel_email.html.erb +5 -5
- data/app/views/spree/order_mailer/cancel_email.text.erb +5 -5
- data/app/views/spree/order_mailer/confirm_email.html.erb +9 -9
- data/app/views/spree/order_mailer/confirm_email.text.erb +9 -9
- data/app/views/spree/order_mailer/inventory_cancellation_email.html.erb +3 -3
- data/app/views/spree/order_mailer/inventory_cancellation_email.text.erb +3 -3
- data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_errored.text.erb +1 -1
- data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_finished.text.erb +1 -1
- data/app/views/spree/reimbursement_mailer/reimbursement_email.html.erb +5 -5
- data/app/views/spree/reimbursement_mailer/reimbursement_email.text.erb +5 -5
- data/app/views/spree/shared/_error_messages.html.erb +2 -2
- data/app/views/spree/test_mailer/test_email.html.erb +2 -2
- data/app/views/spree/test_mailer/test_email.text.erb +2 -2
- data/config/initializers/assets.rb +3 -1
- data/config/locales/en.yml +44 -48
- data/db/default/spree/store_credit.rb +1 -1
- data/db/default/spree/stores.rb +7 -8
- data/db/migrate/20160101010000_solidus_one_four.rb +4 -46
- data/db/migrate/20170317035819_add_lft_and_rgt_indexes_to_taxons.rb +6 -0
- data/db/migrate/20170319191942_remove_order_id_from_inventory_units.rb +28 -0
- data/db/migrate/20170608074534_rename_bogus_gateways.rb +4 -2
- data/db/migrate/20170831201542_remove_default_tax_from_spree_zones.rb +1 -1
- data/lib/generators/spree/custom_user/custom_user_generator.rb +11 -22
- data/lib/generators/spree/install/install_generator.rb +10 -5
- data/lib/spree/app_configuration.rb +103 -5
- data/lib/spree/core.rb +3 -2
- data/lib/spree/core/active_merchant_dependencies.rb +11 -0
- data/lib/spree/core/controller_helpers/auth.rb +3 -1
- data/lib/spree/core/controller_helpers/common.rb +3 -7
- data/lib/spree/core/engine.rb +18 -100
- data/lib/spree/core/environment.rb +3 -3
- data/lib/spree/core/importer/order.rb +0 -1
- data/lib/spree/core/permalinks.rb +9 -15
- data/lib/spree/core/product_filters.rb +5 -3
- data/lib/spree/core/role_configuration.rb +23 -7
- data/lib/spree/core/search/base.rb +16 -13
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/paranoia_deprecations.rb +19 -0
- data/lib/spree/permission_sets.rb +0 -4
- data/lib/spree/permitted_attributes.rb +0 -3
- data/lib/spree/preferences/preferable.rb +70 -34
- data/lib/spree/preferences/preferable_class_methods.rb +22 -0
- data/lib/spree/testing_support/authorization_helpers.rb +2 -0
- data/lib/spree/testing_support/common_rake.rb +0 -1
- data/lib/spree/testing_support/dummy_app.rb +100 -0
- data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/backend/all.js +10 -0
- data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/frontend/all.js +10 -0
- data/lib/spree/testing_support/dummy_app/assets/stylesheets/spree/backend/all.css +9 -0
- data/lib/spree/testing_support/dummy_app/assets/stylesheets/spree/frontend/all.css +9 -0
- data/lib/spree/testing_support/dummy_app/database.yml +31 -0
- data/lib/spree/testing_support/dummy_app/migrations.rb +35 -0
- data/lib/spree/testing_support/dummy_app/rake_tasks.rb +60 -0
- data/lib/spree/testing_support/dummy_app/views/layouts/application.html.erb +1 -0
- data/lib/spree/testing_support/factories.rb +1 -1
- data/lib/spree/testing_support/factories/address_factory.rb +2 -2
- data/lib/spree/testing_support/factories/adjustment_factory.rb +2 -2
- data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/calculator_factory.rb +1 -1
- data/lib/spree/testing_support/factories/carton_factory.rb +1 -1
- data/lib/spree/testing_support/factories/country_factory.rb +1 -1
- data/lib/spree/testing_support/factories/credit_card_factory.rb +1 -1
- data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -2
- data/lib/spree/testing_support/factories/image_factory.rb +1 -1
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +13 -4
- data/lib/spree/testing_support/factories/line_item_factory.rb +1 -1
- data/lib/spree/testing_support/factories/option_type_factory.rb +1 -1
- data/lib/spree/testing_support/factories/option_value_factory.rb +1 -1
- data/lib/spree/testing_support/factories/order_factory.rb +5 -1
- data/lib/spree/testing_support/factories/order_promotion_factory.rb +1 -1
- data/lib/spree/testing_support/factories/payment_factory.rb +1 -1
- data/lib/spree/testing_support/factories/payment_method_factory.rb +1 -1
- data/lib/spree/testing_support/factories/price_factory.rb +1 -1
- data/lib/spree/testing_support/factories/product_factory.rb +1 -1
- data/lib/spree/testing_support/factories/product_option_type_factory.rb +1 -1
- data/lib/spree/testing_support/factories/product_property_factory.rb +1 -1
- data/lib/spree/testing_support/factories/promotion_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/promotion_code_factory.rb +2 -2
- data/lib/spree/testing_support/factories/promotion_factory.rb +1 -1
- data/lib/spree/testing_support/factories/property_factory.rb +1 -1
- data/lib/spree/testing_support/factories/refund_factory.rb +1 -1
- data/lib/spree/testing_support/factories/refund_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
- data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +1 -1
- data/lib/spree/testing_support/factories/return_authorization_factory.rb +1 -1
- data/lib/spree/testing_support/factories/return_item_factory.rb +1 -1
- data/lib/spree/testing_support/factories/return_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/role_factory.rb +1 -1
- data/lib/spree/testing_support/factories/shipment_factory.rb +1 -2
- data/lib/spree/testing_support/factories/shipping_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +2 -2
- data/lib/spree/testing_support/factories/shipping_rate_factory.rb +1 -1
- data/lib/spree/testing_support/factories/state_factory.rb +1 -7
- data/lib/spree/testing_support/factories/stock_item_factory.rb +1 -1
- data/lib/spree/testing_support/factories/stock_location_factory.rb +1 -1
- data/lib/spree/testing_support/factories/stock_movement_factory.rb +1 -1
- data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_type_factory.rb +2 -2
- data/lib/spree/testing_support/factories/store_credit_update_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_factory.rb +1 -1
- data/lib/spree/testing_support/factories/tax_category_factory.rb +1 -2
- data/lib/spree/testing_support/factories/tax_rate_factory.rb +1 -1
- data/lib/spree/testing_support/factories/taxon_factory.rb +1 -1
- data/lib/spree/testing_support/factories/taxonomy_factory.rb +1 -1
- data/lib/spree/testing_support/factories/user_factory.rb +4 -10
- data/lib/spree/testing_support/factories/variant_factory.rb +1 -1
- data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +1 -1
- data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +1 -1
- data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +1 -1
- data/lib/spree/testing_support/factories/zone_factory.rb +2 -4
- data/lib/spree/testing_support/flash.rb +2 -2
- data/lib/spree/testing_support/order_walkthrough.rb +9 -9
- data/lib/spree/testing_support/preferences.rb +4 -0
- data/lib/spree/testing_support/sequences.rb +3 -12
- data/solidus_core.gemspec +12 -8
- data/spec/helpers/base_helper_spec.rb +19 -3
- data/spec/helpers/products_helper_spec.rb +1 -1
- data/spec/lib/calculated_adjustments_spec.rb +20 -0
- data/spec/lib/i18n_spec.rb +4 -69
- data/spec/lib/search/base_spec.rb +1 -0
- data/spec/lib/search/variant_spec.rb +4 -4
- data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +6 -6
- data/spec/lib/spree/core/importer/order_spec.rb +2 -2
- data/spec/lib/spree/core/role_configuration_spec.rb +6 -9
- data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +12 -8
- data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +1 -1
- data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +1 -1
- data/spec/mailers/carton_mailer_spec.rb +3 -7
- data/spec/mailers/order_mailer_spec.rb +7 -11
- data/spec/mailers/reimbursement_mailer_spec.rb +1 -5
- data/spec/mailers/test_mailer_spec.rb +0 -4
- data/spec/models/spree/ability_spec.rb +2 -1
- data/spec/models/spree/address_spec.rb +32 -19
- data/spec/models/spree/app_configuration_spec.rb +1 -1
- data/spec/models/spree/calculator/distributed_amount_spec.rb +1 -1
- data/spec/models/spree/calculator/percent_on_line_item_spec.rb +8 -10
- data/spec/models/spree/calculator/percent_per_item_spec.rb +4 -4
- data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +10 -3
- data/spec/models/spree/classification_spec.rb +19 -0
- data/spec/models/spree/credit_card_spec.rb +1 -1
- data/spec/models/spree/customer_return_spec.rb +17 -6
- data/spec/models/spree/distributed_amounts_handler_spec.rb +1 -1
- data/spec/models/spree/exchange_spec.rb +1 -1
- data/spec/models/spree/inventory_unit_spec.rb +3 -7
- data/spec/models/spree/line_item_spec.rb +6 -6
- data/spec/models/spree/option_value_spec.rb +11 -6
- data/spec/models/spree/order/callbacks_spec.rb +2 -2
- data/spec/models/spree/order/checkout_spec.rb +31 -31
- data/spec/models/spree/order/risk_assessment_spec.rb +9 -9
- data/spec/models/spree/order_contents_spec.rb +1 -9
- data/spec/models/spree/order_inventory_spec.rb +2 -2
- data/spec/models/spree/order_mutex_spec.rb +3 -1
- data/spec/models/spree/order_shipping_spec.rb +7 -4
- data/spec/models/spree/order_spec.rb +36 -13
- data/spec/models/spree/order_taxation_spec.rb +7 -7
- data/spec/models/spree/order_updater_spec.rb +6 -4
- data/spec/models/spree/payment/cancellation_spec.rb +1 -1
- data/spec/models/spree/payment_create_spec.rb +2 -2
- data/spec/models/spree/payment_method/store_credit_spec.rb +13 -13
- data/spec/models/spree/payment_spec.rb +23 -4
- data/spec/models/spree/preferences/preferable_spec.rb +44 -0
- data/spec/models/spree/preferences/statically_configurable_spec.rb +1 -0
- data/spec/models/spree/price_spec.rb +6 -4
- data/spec/models/spree/product/scopes_spec.rb +1 -1
- data/spec/models/spree/product_spec.rb +49 -9
- data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +13 -3
- data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +146 -134
- data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +6 -6
- data/spec/models/spree/promotion/rules/taxon_spec.rb +14 -14
- data/spec/models/spree/promotion_code_spec.rb +31 -19
- data/spec/models/spree/promotion_handler/coupon_spec.rb +42 -17
- data/spec/models/spree/promotion_handler/shipping_spec.rb +1 -6
- data/spec/models/spree/promotion_spec.rb +14 -14
- data/spec/models/spree/refund_spec.rb +1 -1
- data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +1 -1
- data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +1 -1
- data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +3 -2
- data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +1 -1
- data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +2 -2
- data/spec/models/spree/return_item_spec.rb +6 -6
- data/spec/models/spree/shipment_spec.rb +14 -10
- data/spec/models/spree/shipping_manifest_spec.rb +22 -9
- data/spec/models/spree/shipping_method_spec.rb +9 -5
- data/spec/models/spree/stock/availability_spec.rb +16 -2
- data/spec/models/spree/stock/estimator_spec.rb +11 -12
- data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -4
- data/spec/models/spree/stock/package_spec.rb +3 -2
- data/spec/models/spree/stock/simple_coordinator_spec.rb +1 -24
- data/spec/models/spree/stock_item_spec.rb +6 -6
- data/spec/models/spree/stock_location_spec.rb +16 -3
- data/spec/models/spree/store_credit_spec.rb +12 -6
- data/spec/models/spree/tax/taxation_integration_spec.rb +6 -6
- data/spec/models/spree/tax_calculator/default_spec.rb +7 -7
- data/spec/models/spree/taxon_spec.rb +42 -19
- data/spec/models/spree/variant/vat_price_generator_spec.rb +1 -1
- data/spec/models/spree/variant_spec.rb +69 -11
- data/spec/rails_helper.rb +7 -13
- data/spec/spec_helper.rb +3 -12
- data/spec/support/concerns/default_price.rb +1 -1
- data/spec/support/dummy_ability.rb +2 -0
- metadata +144 -73
- data/Gemfile +0 -3
- data/app/models/spree/order_stock_location.rb +0 -15
- data/app/models/spree/stock_transfer.rb +0 -110
- data/app/models/spree/transfer_item.rb +0 -54
- data/lib/generators/spree/custom_user/templates/initializer.rb.tt +0 -1
- data/lib/spree/permission_sets/restricted_stock_transfer_display.rb +0 -17
- data/lib/spree/permission_sets/restricted_stock_transfer_management.rb +0 -52
- data/lib/spree/permission_sets/stock_transfer_display.rb +0 -10
- data/lib/spree/permission_sets/stock_transfer_management.rb +0 -11
- data/lib/spree/testing_support/factories/stock_transfer_factory.rb +0 -28
- data/lib/spree/testing_support/i18n.rb +0 -97
- data/spec/lib/spree/core/testing_support/factories/stock_transfer_factory_spec.rb +0 -12
- data/spec/models/spree/order_stock_location_spec.rb +0 -18
- data/spec/models/spree/permission_sets/restricted_stock_transfer_display_spec.rb +0 -49
- data/spec/models/spree/permission_sets/restricted_stock_transfer_management_spec.rb +0 -218
- data/spec/models/spree/permission_sets/stock_transfer_display_spec.rb +0 -23
- data/spec/models/spree/permission_sets/stock_transfer_management_spec.rb +0 -23
- data/spec/models/spree/stock_transfer_spec.rb +0 -308
- data/spec/models/spree/transfer_item_spec.rb +0 -275
- data/spec/support/test_gateway.rb +0 -2
|
@@ -232,7 +232,7 @@ RSpec.describe Spree::Promotion, type: :model do
|
|
|
232
232
|
let(:usage_limit) { 1 }
|
|
233
233
|
context "on a different order" do
|
|
234
234
|
before do
|
|
235
|
-
|
|
235
|
+
FactoryBot.create(
|
|
236
236
|
:completed_order_with_promotion,
|
|
237
237
|
promotion: promotion
|
|
238
238
|
)
|
|
@@ -253,7 +253,7 @@ RSpec.describe Spree::Promotion, type: :model do
|
|
|
253
253
|
|
|
254
254
|
context "with an order-level adjustment" do
|
|
255
255
|
let(:promotion) do
|
|
256
|
-
|
|
256
|
+
FactoryBot.create(
|
|
257
257
|
:promotion,
|
|
258
258
|
:with_order_adjustment,
|
|
259
259
|
code: "discount",
|
|
@@ -261,7 +261,7 @@ RSpec.describe Spree::Promotion, type: :model do
|
|
|
261
261
|
)
|
|
262
262
|
end
|
|
263
263
|
let(:promotable) do
|
|
264
|
-
|
|
264
|
+
FactoryBot.create(
|
|
265
265
|
:completed_order_with_promotion,
|
|
266
266
|
promotion: promotion
|
|
267
267
|
)
|
|
@@ -271,7 +271,7 @@ RSpec.describe Spree::Promotion, type: :model do
|
|
|
271
271
|
|
|
272
272
|
context "with an item-level adjustment" do
|
|
273
273
|
let(:promotion) do
|
|
274
|
-
|
|
274
|
+
FactoryBot.create(
|
|
275
275
|
:promotion,
|
|
276
276
|
:with_line_item_adjustment,
|
|
277
277
|
code: "discount",
|
|
@@ -286,7 +286,7 @@ RSpec.describe Spree::Promotion, type: :model do
|
|
|
286
286
|
})
|
|
287
287
|
end
|
|
288
288
|
context "when there are multiple line items" do
|
|
289
|
-
let(:order) {
|
|
289
|
+
let(:order) { FactoryBot.create(:order_with_line_items, line_items_count: 2) }
|
|
290
290
|
describe "the first item" do
|
|
291
291
|
let(:promotable) { order.line_items.first }
|
|
292
292
|
it_behaves_like "it should"
|
|
@@ -297,7 +297,7 @@ RSpec.describe Spree::Promotion, type: :model do
|
|
|
297
297
|
end
|
|
298
298
|
end
|
|
299
299
|
context "when there is a single line item" do
|
|
300
|
-
let(:order) {
|
|
300
|
+
let(:order) { FactoryBot.create(:order_with_line_items) }
|
|
301
301
|
let(:promotable) { order.line_items.first }
|
|
302
302
|
it_behaves_like "it should"
|
|
303
303
|
end
|
|
@@ -306,7 +306,7 @@ RSpec.describe Spree::Promotion, type: :model do
|
|
|
306
306
|
|
|
307
307
|
describe "#usage_count" do
|
|
308
308
|
let(:promotion) do
|
|
309
|
-
|
|
309
|
+
FactoryBot.create(
|
|
310
310
|
:promotion,
|
|
311
311
|
:with_order_adjustment,
|
|
312
312
|
code: "discount"
|
|
@@ -316,13 +316,13 @@ RSpec.describe Spree::Promotion, type: :model do
|
|
|
316
316
|
subject { promotion.usage_count }
|
|
317
317
|
|
|
318
318
|
context "when the code is applied to a non-complete order" do
|
|
319
|
-
let(:order) {
|
|
319
|
+
let(:order) { FactoryBot.create(:order_with_line_items) }
|
|
320
320
|
before { promotion.activate(order: order, promotion_code: promotion.codes.first) }
|
|
321
321
|
it { is_expected.to eq 0 }
|
|
322
322
|
end
|
|
323
323
|
context "when the code is applied to a complete order" do
|
|
324
324
|
let!(:order) do
|
|
325
|
-
|
|
325
|
+
FactoryBot.create(
|
|
326
326
|
:completed_order_with_promotion,
|
|
327
327
|
promotion: promotion
|
|
328
328
|
)
|
|
@@ -487,11 +487,11 @@ RSpec.describe Spree::Promotion, type: :model do
|
|
|
487
487
|
end
|
|
488
488
|
|
|
489
489
|
context "when the promotion's usage limit is exceeded" do
|
|
490
|
-
let(:order) {
|
|
491
|
-
let(:promotion) {
|
|
490
|
+
let(:order) { FactoryBot.create(:completed_order_with_promotion, promotion: promotion) }
|
|
491
|
+
let(:promotion) { FactoryBot.create(:promotion, :with_order_adjustment) }
|
|
492
492
|
|
|
493
493
|
before do
|
|
494
|
-
|
|
494
|
+
FactoryBot.create(
|
|
495
495
|
:completed_order_with_promotion,
|
|
496
496
|
promotion: promotion
|
|
497
497
|
)
|
|
@@ -504,12 +504,12 @@ RSpec.describe Spree::Promotion, type: :model do
|
|
|
504
504
|
end
|
|
505
505
|
|
|
506
506
|
context "when the promotion code's usage limit is exceeded" do
|
|
507
|
-
let(:order) {
|
|
507
|
+
let(:order) { FactoryBot.create(:completed_order_with_promotion, promotion: promotion) }
|
|
508
508
|
let(:promotion) { create(:promotion, :with_order_adjustment, code: 'abc123', per_code_usage_limit: 1) }
|
|
509
509
|
let(:promotion_code) { promotion.codes.first }
|
|
510
510
|
|
|
511
511
|
before do
|
|
512
|
-
|
|
512
|
+
FactoryBot.create(
|
|
513
513
|
:completed_order_with_promotion,
|
|
514
514
|
promotion: promotion
|
|
515
515
|
)
|
|
@@ -145,7 +145,7 @@ RSpec.describe Spree::Refund, type: :model do
|
|
|
145
145
|
end
|
|
146
146
|
|
|
147
147
|
it 'raises Spree::Core::GatewayError' do
|
|
148
|
-
expect { subject }.to raise_error(Spree::Core::GatewayError,
|
|
148
|
+
expect { subject }.to raise_error(Spree::Core::GatewayError, I18n.t('spree.unable_to_connect_to_gateway'))
|
|
149
149
|
end
|
|
150
150
|
end
|
|
151
151
|
|
|
@@ -24,7 +24,7 @@ RSpec.describe Spree::ReturnItem::EligibilityValidator::InventoryShipped do
|
|
|
24
24
|
|
|
25
25
|
it "sets an error" do
|
|
26
26
|
subject
|
|
27
|
-
expect(validator.errors[:inventory_unit_shipped]).to eq
|
|
27
|
+
expect(validator.errors[:inventory_unit_shipped]).to eq I18n.t('spree.return_item_inventory_unit_ineligible')
|
|
28
28
|
end
|
|
29
29
|
end
|
|
30
30
|
end
|
|
@@ -16,7 +16,7 @@ RSpec.describe Spree::ReturnItem::EligibilityValidator::NoReimbursements do
|
|
|
16
16
|
|
|
17
17
|
it "sets an error" do
|
|
18
18
|
subject
|
|
19
|
-
expect(validator.errors[:inventory_unit_reimbursed]).to eq
|
|
19
|
+
expect(validator.errors[:inventory_unit_reimbursed]).to eq I18n.t('spree.return_item_inventory_unit_reimbursed')
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
context "but the return item has been expired" do
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
require 'rails_helper'
|
|
2
2
|
|
|
3
3
|
RSpec.describe Spree::ReturnItem::EligibilityValidator::OrderCompleted do
|
|
4
|
-
let(:
|
|
4
|
+
let(:shipment) { create(:shipment, order: order) }
|
|
5
|
+
let(:inventory_unit) { create(:inventory_unit, shipment: shipment) }
|
|
5
6
|
let(:return_item) { create(:return_item, inventory_unit: inventory_unit) }
|
|
6
7
|
let(:validator) { Spree::ReturnItem::EligibilityValidator::OrderCompleted.new(return_item) }
|
|
7
8
|
|
|
@@ -25,7 +26,7 @@ RSpec.describe Spree::ReturnItem::EligibilityValidator::OrderCompleted do
|
|
|
25
26
|
|
|
26
27
|
it "sets an error" do
|
|
27
28
|
subject
|
|
28
|
-
expect(validator.errors[:order_not_completed]).to eq
|
|
29
|
+
expect(validator.errors[:order_not_completed]).to eq I18n.t('spree.return_item_order_not_completed')
|
|
29
30
|
end
|
|
30
31
|
end
|
|
31
32
|
end
|
|
@@ -22,7 +22,7 @@ RSpec.describe Spree::ReturnItem::EligibilityValidator::RMARequired, type: :mode
|
|
|
22
22
|
|
|
23
23
|
it "sets an error" do
|
|
24
24
|
subject
|
|
25
|
-
expect(validator.errors[:rma_required]).to eq
|
|
25
|
+
expect(validator.errors[:rma_required]).to eq I18n.t('spree.return_item_rma_ineligible')
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
28
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
require 'rails_helper'
|
|
2
2
|
|
|
3
3
|
RSpec.describe Spree::ReturnItem::EligibilityValidator::TimeSincePurchase, type: :model do
|
|
4
|
-
let(:inventory_unit) { create(:inventory_unit,
|
|
4
|
+
let(:inventory_unit) { create(:inventory_unit, shipment: create(:shipped_order).shipments.first) }
|
|
5
5
|
let(:return_item) { create(:return_item, inventory_unit: inventory_unit) }
|
|
6
6
|
let(:validator) { Spree::ReturnItem::EligibilityValidator::TimeSincePurchase.new(return_item) }
|
|
7
7
|
|
|
@@ -28,7 +28,7 @@ RSpec.describe Spree::ReturnItem::EligibilityValidator::TimeSincePurchase, type:
|
|
|
28
28
|
|
|
29
29
|
it "sets an error" do
|
|
30
30
|
subject
|
|
31
|
-
expect(validator.errors[:number_of_days]).to eq
|
|
31
|
+
expect(validator.errors[:number_of_days]).to eq I18n.t('spree.return_item_time_period_ineligible')
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
34
|
end
|
|
@@ -19,7 +19,7 @@ RSpec.describe Spree::ReturnItem, type: :model do
|
|
|
19
19
|
describe '#receive!' do
|
|
20
20
|
let(:now) { Time.current }
|
|
21
21
|
let(:order) { create(:shipped_order) }
|
|
22
|
-
let(:inventory_unit) { create(:inventory_unit,
|
|
22
|
+
let(:inventory_unit) { create(:inventory_unit, state: 'shipped') }
|
|
23
23
|
let!(:customer_return) { create(:customer_return_without_return_items, return_items: [return_item], stock_location_id: inventory_unit.shipment.stock_location_id) }
|
|
24
24
|
let(:return_item) { create(:return_item, inventory_unit: inventory_unit) }
|
|
25
25
|
|
|
@@ -45,7 +45,7 @@ RSpec.describe Spree::ReturnItem, type: :model do
|
|
|
45
45
|
let!(:return_item_with_dupe_inventory_unit) { create(:return_item, inventory_unit: inventory_unit, reception_status: 'received') }
|
|
46
46
|
|
|
47
47
|
before do
|
|
48
|
-
|
|
48
|
+
expect { subject }.to raise_error { StateMachines::InvalidTransition }
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
it 'does not receive the return item' do
|
|
@@ -58,7 +58,7 @@ RSpec.describe Spree::ReturnItem, type: :model do
|
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
context 'when the received item is actually the exchange (aka customer changed mind about exchange)' do
|
|
61
|
-
let(:exchange_inventory_unit) { create(:inventory_unit,
|
|
61
|
+
let(:exchange_inventory_unit) { create(:inventory_unit, state: 'shipped') }
|
|
62
62
|
let!(:return_item_with_exchange) { create(:return_item, inventory_unit: inventory_unit, exchange_inventory_unit: exchange_inventory_unit) }
|
|
63
63
|
let!(:return_item_in_lieu) { create(:return_item, inventory_unit: exchange_inventory_unit) }
|
|
64
64
|
|
|
@@ -112,7 +112,7 @@ RSpec.describe Spree::ReturnItem, type: :model do
|
|
|
112
112
|
end
|
|
113
113
|
|
|
114
114
|
context "when the inventory unit's variant does not yet have a stock item for the stock location it was returned to" do
|
|
115
|
-
before { inventory_unit.variant.stock_items.
|
|
115
|
+
before { inventory_unit.variant.stock_items.each(&:really_destroy!) }
|
|
116
116
|
|
|
117
117
|
it "creates a new stock item for the inventory unit with a count of 1" do
|
|
118
118
|
expect { subject }.to change(Spree::StockItem, :count).by(1)
|
|
@@ -222,7 +222,8 @@ RSpec.describe Spree::ReturnItem, type: :model do
|
|
|
222
222
|
end
|
|
223
223
|
|
|
224
224
|
describe "#receive" do
|
|
225
|
-
let(:
|
|
225
|
+
let(:order) { create(:shipped_order) }
|
|
226
|
+
let(:inventory_unit) { create(:inventory_unit, shipment: order.shipments.first) }
|
|
226
227
|
let(:return_item) { create(:return_item, reception_status: status, inventory_unit: inventory_unit) }
|
|
227
228
|
|
|
228
229
|
subject { return_item.receive! }
|
|
@@ -602,7 +603,6 @@ RSpec.describe Spree::ReturnItem, type: :model do
|
|
|
602
603
|
expect(subject).not_to be_persisted
|
|
603
604
|
expect(subject.original_return_item).to eq return_item
|
|
604
605
|
expect(subject.line_item).to eq return_item.inventory_unit.line_item
|
|
605
|
-
expect(subject.order).to eq return_item.inventory_unit.order
|
|
606
606
|
end
|
|
607
607
|
end
|
|
608
608
|
end
|
|
@@ -196,7 +196,7 @@ RSpec.describe Spree::Shipment, type: :model do
|
|
|
196
196
|
end
|
|
197
197
|
|
|
198
198
|
context "variant was removed" do
|
|
199
|
-
before { variant.
|
|
199
|
+
before { variant.discard }
|
|
200
200
|
|
|
201
201
|
it "still returns variant expected" do
|
|
202
202
|
expect(shipment.manifest.first.variant).to eq variant
|
|
@@ -264,6 +264,7 @@ RSpec.describe Spree::Shipment, type: :model do
|
|
|
264
264
|
end
|
|
265
265
|
|
|
266
266
|
before do
|
|
267
|
+
allow(line_item).to receive(:order) { order }
|
|
267
268
|
allow(shipment).to receive(:inventory_units) { inventory_units }
|
|
268
269
|
allow(inventory_units).to receive_message_chain(:includes, :joins).and_return inventory_units
|
|
269
270
|
end
|
|
@@ -525,14 +526,6 @@ RSpec.describe Spree::Shipment, type: :model do
|
|
|
525
526
|
allow(shipment).to receive_messages(require_inventory: false, update_order: true, state: state)
|
|
526
527
|
end
|
|
527
528
|
|
|
528
|
-
it "should call fulfill_order_with_stock_location" do
|
|
529
|
-
expect(Spree::OrderStockLocation).to(
|
|
530
|
-
receive(:fulfill_for_order_with_stock_location).
|
|
531
|
-
with(order, stock_location)
|
|
532
|
-
)
|
|
533
|
-
shipment.ship!
|
|
534
|
-
end
|
|
535
|
-
|
|
536
529
|
it "finalizes adjustments" do
|
|
537
530
|
shipment.adjustments.each do |adjustment|
|
|
538
531
|
expect(adjustment).to receive(:finalize!)
|
|
@@ -658,7 +651,7 @@ RSpec.describe Spree::Shipment, type: :model do
|
|
|
658
651
|
let(:inventory_units) { double }
|
|
659
652
|
|
|
660
653
|
let(:params) do
|
|
661
|
-
{ variant_id: variant.id, state: 'on_hand',
|
|
654
|
+
{ variant_id: variant.id, state: 'on_hand', line_item_id: line_item.id }
|
|
662
655
|
end
|
|
663
656
|
|
|
664
657
|
before { allow(shipment).to receive_messages inventory_units: inventory_units }
|
|
@@ -816,6 +809,14 @@ RSpec.describe Spree::Shipment, type: :model do
|
|
|
816
809
|
let!(:air_shipping_method) { create(:shipping_method, name: "Air") }
|
|
817
810
|
let(:new_rate) { shipment.shipping_rates.create!(shipping_method: air_shipping_method) }
|
|
818
811
|
|
|
812
|
+
context 'selecting the same id' do
|
|
813
|
+
it 'keeps the same shipping rate selected' do
|
|
814
|
+
expect {
|
|
815
|
+
shipment.selected_shipping_rate_id = shipping_rate.id
|
|
816
|
+
}.not_to change { shipping_rate.selected }.from(true)
|
|
817
|
+
end
|
|
818
|
+
end
|
|
819
|
+
|
|
819
820
|
context 'when the id exists' do
|
|
820
821
|
it 'sets the new shipping rate as selected' do
|
|
821
822
|
expect {
|
|
@@ -835,6 +836,9 @@ RSpec.describe Spree::Shipment, type: :model do
|
|
|
835
836
|
expect {
|
|
836
837
|
shipment.selected_shipping_rate_id = -1
|
|
837
838
|
}.to raise_error(ArgumentError)
|
|
839
|
+
|
|
840
|
+
# Should not change selection
|
|
841
|
+
expect(shipping_rate.reload).to be_selected
|
|
838
842
|
end
|
|
839
843
|
end
|
|
840
844
|
end
|
|
@@ -6,16 +6,14 @@ module Spree
|
|
|
6
6
|
let(:order) { Order.create! }
|
|
7
7
|
let(:variant) { create :variant }
|
|
8
8
|
let!(:shipment) { create(:shipment, state: 'pending', order: order) }
|
|
9
|
-
|
|
9
|
+
subject(:manifest) { described_class.new(inventory_units: inventory_units) }
|
|
10
10
|
|
|
11
11
|
def build_unit(variant, attrs = {})
|
|
12
|
-
attrs = {
|
|
13
|
-
attrs[:line_item] =
|
|
12
|
+
attrs = { variant: variant, shipment: shipment }.merge(attrs)
|
|
13
|
+
attrs[:line_item] = order.contents.add(variant)
|
|
14
14
|
InventoryUnit.new(attrs)
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
subject{ manifest }
|
|
18
|
-
|
|
19
17
|
describe "#items" do
|
|
20
18
|
context 'empty' do
|
|
21
19
|
let(:inventory_units) { [] }
|
|
@@ -68,9 +66,15 @@ module Spree
|
|
|
68
66
|
end
|
|
69
67
|
|
|
70
68
|
describe "#for_order" do
|
|
71
|
-
let!(:order2) {
|
|
69
|
+
let!(:order2) { create(:order_with_line_items) }
|
|
72
70
|
context 'single unit' do
|
|
73
|
-
let(:inventory_units) { [
|
|
71
|
+
let(:inventory_units) { [inventory_unit] }
|
|
72
|
+
let(:inventory_unit) { build_unit(variant) }
|
|
73
|
+
|
|
74
|
+
before do
|
|
75
|
+
allow(inventory_unit).to receive(:order_id) { order.id }
|
|
76
|
+
end
|
|
77
|
+
|
|
74
78
|
it "has single ManifestItem in correct order" do
|
|
75
79
|
expect(manifest.for_order(order).items.count).to eq 1
|
|
76
80
|
end
|
|
@@ -81,13 +85,22 @@ module Spree
|
|
|
81
85
|
end
|
|
82
86
|
|
|
83
87
|
context 'one units in each order' do
|
|
84
|
-
let(:
|
|
88
|
+
let(:order_2) { build_stubbed(:order) }
|
|
89
|
+
let(:inventory_units) { [inventory_unit_one, inventory_unit_two] }
|
|
90
|
+
let(:inventory_unit_one) { build_unit(variant) }
|
|
91
|
+
let(:inventory_unit_two) { build_unit(variant) }
|
|
92
|
+
|
|
93
|
+
before do
|
|
94
|
+
allow(inventory_unit_one).to receive(:order_id) { order.id }
|
|
95
|
+
allow(inventory_unit_two).to receive(:order_id) { order_2.id }
|
|
96
|
+
end
|
|
97
|
+
|
|
85
98
|
it "has single ManifestItem in first order" do
|
|
86
99
|
expect(manifest.for_order(order).items.count).to eq 1
|
|
87
100
|
end
|
|
88
101
|
|
|
89
102
|
it "has single ManifestItem in second order" do
|
|
90
|
-
expect(manifest.for_order(
|
|
103
|
+
expect(manifest.for_order(order_2).items.count).to eq 1
|
|
91
104
|
end
|
|
92
105
|
end
|
|
93
106
|
end
|
|
@@ -22,17 +22,21 @@ RSpec.describe Spree::ShippingMethod, type: :model do
|
|
|
22
22
|
before { subject.valid? }
|
|
23
23
|
|
|
24
24
|
it "validates presence of name" do
|
|
25
|
-
expect(subject.
|
|
25
|
+
expect(subject.errors[:name].size).to eq(1)
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
context "shipping category" do
|
|
29
29
|
it "validates presence of at least one" do
|
|
30
|
-
expect(subject.
|
|
30
|
+
expect(subject.errors[:base].size).to eq(1)
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
context "one associated" do
|
|
34
|
-
before
|
|
35
|
-
|
|
34
|
+
before do
|
|
35
|
+
subject.shipping_categories.push create(:shipping_category)
|
|
36
|
+
subject.valid?
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it { expect(subject.errors[:base].size).to eq(0) }
|
|
36
40
|
end
|
|
37
41
|
end
|
|
38
42
|
end
|
|
@@ -59,7 +63,7 @@ RSpec.describe Spree::ShippingMethod, type: :model do
|
|
|
59
63
|
context "soft deletion" do
|
|
60
64
|
let(:shipping_method) { create(:shipping_method) }
|
|
61
65
|
it "soft-deletes when destroy is called" do
|
|
62
|
-
shipping_method.
|
|
66
|
+
shipping_method.discard
|
|
63
67
|
expect(shipping_method.deleted_at).not_to be_blank
|
|
64
68
|
end
|
|
65
69
|
end
|
|
@@ -51,7 +51,15 @@ module Spree::Stock
|
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
context 'with no stock_item' do
|
|
54
|
-
before { stock_item.
|
|
54
|
+
before { stock_item.really_destroy! }
|
|
55
|
+
|
|
56
|
+
it "returns empty hash" do
|
|
57
|
+
expect(subject).to eq({})
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
context 'with soft-deleted stock_item' do
|
|
62
|
+
before { stock_item.discard }
|
|
55
63
|
|
|
56
64
|
it "returns empty hash" do
|
|
57
65
|
expect(subject).to eq({})
|
|
@@ -116,8 +124,14 @@ module Spree::Stock
|
|
|
116
124
|
end
|
|
117
125
|
end
|
|
118
126
|
|
|
127
|
+
context 'with soft-deleted stock_item' do
|
|
128
|
+
before { stock_item.discard }
|
|
129
|
+
|
|
130
|
+
it { is_expected.to eq({}) }
|
|
131
|
+
end
|
|
132
|
+
|
|
119
133
|
context 'with no stock_item' do
|
|
120
|
-
before { stock_item.
|
|
134
|
+
before { stock_item.really_destroy! }
|
|
121
135
|
|
|
122
136
|
it { is_expected.to eq({}) }
|
|
123
137
|
end
|
|
@@ -83,7 +83,7 @@ module Spree
|
|
|
83
83
|
end
|
|
84
84
|
|
|
85
85
|
it "sorts shipping rates by cost" do
|
|
86
|
-
ShippingMethod.
|
|
86
|
+
ShippingMethod.all.each(&:really_destroy!)
|
|
87
87
|
create(:shipping_method, cost: 5)
|
|
88
88
|
create(:shipping_method, cost: 3)
|
|
89
89
|
create(:shipping_method, cost: 4)
|
|
@@ -92,7 +92,7 @@ module Spree
|
|
|
92
92
|
end
|
|
93
93
|
|
|
94
94
|
context "general shipping methods" do
|
|
95
|
-
before { Spree::ShippingMethod.
|
|
95
|
+
before { Spree::ShippingMethod.all.each(&:really_destroy!) }
|
|
96
96
|
|
|
97
97
|
context 'with two shipping methods of different cost' do
|
|
98
98
|
let!(:shipping_methods) do
|
|
@@ -125,7 +125,7 @@ module Spree
|
|
|
125
125
|
end
|
|
126
126
|
|
|
127
127
|
context "involves backend only shipping methods" do
|
|
128
|
-
before{ Spree::ShippingMethod.
|
|
128
|
+
before{ Spree::ShippingMethod.all.each(&:really_destroy!) }
|
|
129
129
|
let!(:backend_method) { create(:shipping_method, available_to_users: false, cost: 0.00) }
|
|
130
130
|
let!(:generic_method) { create(:shipping_method, cost: 5.00) }
|
|
131
131
|
|
|
@@ -189,20 +189,19 @@ module Spree
|
|
|
189
189
|
end
|
|
190
190
|
|
|
191
191
|
it 'uses the configured shipping rate taxer' do
|
|
192
|
-
class Spree::Tax::
|
|
193
|
-
def initialize
|
|
192
|
+
class Spree::Tax::TestTaxCalculator
|
|
193
|
+
def initialize(_order)
|
|
194
194
|
end
|
|
195
195
|
|
|
196
|
-
def
|
|
197
|
-
|
|
196
|
+
def calculate(_shipping_rate)
|
|
197
|
+
[
|
|
198
|
+
Spree::Tax::ItemTax.new(label: "TAX", amount: 5)
|
|
199
|
+
]
|
|
198
200
|
end
|
|
199
201
|
end
|
|
200
|
-
Spree::Config.
|
|
201
|
-
|
|
202
|
-
shipping_rate = Spree::ShippingRate.new
|
|
203
|
-
allow(Spree::ShippingRate).to receive(:new).and_return(shipping_rate)
|
|
202
|
+
Spree::Config.shipping_rate_tax_calculator_class = Spree::Tax::TestTaxCalculator
|
|
204
203
|
|
|
205
|
-
expect(Spree::Tax::
|
|
204
|
+
expect(Spree::Tax::TestTaxCalculator).to receive(:new).and_call_original
|
|
206
205
|
subject.shipping_rates(package)
|
|
207
206
|
end
|
|
208
207
|
end
|