solidus_core 4.1.6 → 4.5.1
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/app/assets/images/logo/solidus.svg +18 -1
- data/app/assets/images/logo/solidus_logo.png +0 -0
- data/app/helpers/spree/base_helper.rb +2 -2
- data/app/helpers/spree/core/controller_helpers/auth.rb +66 -0
- data/app/helpers/spree/core/controller_helpers/common.rb +82 -0
- data/app/helpers/spree/core/controller_helpers/order.rb +86 -0
- data/app/helpers/spree/core/controller_helpers/payment_parameters.rb +165 -0
- data/app/helpers/spree/core/controller_helpers/pricing.rb +19 -0
- data/app/helpers/spree/core/controller_helpers/search.rb +16 -0
- data/app/helpers/spree/core/controller_helpers/store.rb +19 -0
- data/app/helpers/spree/core/controller_helpers/strong_parameters.rb +74 -0
- data/app/mailers/spree/base_mailer.rb +1 -1
- data/app/mailers/spree/carton_mailer.rb +1 -1
- data/app/mailers/spree/order_mailer.rb +3 -3
- data/app/mailers/spree/reimbursement_mailer.rb +1 -1
- data/app/models/concerns/spree/active_storage_adapter/normalization.rb +1 -1
- data/app/models/concerns/spree/active_storage_adapter.rb +1 -1
- data/app/models/concerns/spree/display_money.rb +1 -1
- data/app/models/concerns/spree/metadata.rb +64 -0
- data/app/models/concerns/spree/named_type.rb +2 -0
- data/app/models/concerns/spree/ordered_property_value_list.rb +2 -2
- data/app/models/concerns/spree/user_address_book.rb +8 -9
- data/app/models/concerns/spree/user_methods.rb +3 -3
- data/app/models/spree/address.rb +10 -8
- data/app/models/spree/adjustment.rb +15 -65
- data/app/models/spree/adjustment_reason.rb +2 -0
- data/app/models/spree/calculator/returns/default_refund_amount.rb +1 -1
- data/app/models/spree/carton.rb +2 -2
- data/app/models/spree/core/state_machines/inventory_unit.rb +42 -0
- data/app/models/spree/core/state_machines/order/class_methods.rb +217 -0
- data/app/models/spree/core/state_machines/order.rb +42 -0
- data/app/models/spree/core/state_machines/payment.rb +61 -0
- data/app/models/spree/core/state_machines/reimbursement.rb +33 -0
- data/app/models/spree/core/state_machines/return_authorization.rb +32 -0
- data/app/models/spree/core/state_machines/return_item/acceptance_status.rb +51 -0
- data/app/models/spree/core/state_machines/return_item/reception_status.rb +42 -0
- data/app/models/spree/core/state_machines/shipment.rb +58 -0
- data/app/models/spree/credit_card.rb +12 -9
- data/app/models/spree/customer_return.rb +2 -0
- data/app/models/spree/deprecated_configurable_class.rb +40 -0
- data/app/models/spree/fulfilment_changer.rb +4 -4
- data/app/models/spree/inventory_unit.rb +2 -2
- data/app/models/spree/item_total.rb +28 -0
- data/app/models/spree/legacy_user.rb +1 -0
- data/app/models/spree/line_item.rb +22 -4
- data/app/models/spree/money.rb +120 -0
- data/app/models/spree/null_promotion_adjuster.rb +13 -0
- data/app/models/spree/null_promotion_advertiser.rb +9 -0
- data/app/models/spree/null_promotion_finder.rb +9 -0
- data/app/models/spree/null_promotion_handler.rb +44 -0
- data/app/models/spree/option_value.rb +1 -0
- data/app/models/spree/order.rb +54 -36
- data/app/models/spree/order_cancellations.rb +8 -8
- data/app/models/spree/order_inventory.rb +6 -4
- data/app/models/spree/order_merger.rb +1 -1
- data/app/models/spree/order_mutex.rb +2 -2
- data/app/models/spree/order_shipping.rb +9 -9
- data/app/models/spree/order_taxation.rb +1 -0
- data/app/models/spree/order_updater.rb +19 -40
- data/app/models/spree/payment/processing.rb +2 -2
- data/app/models/spree/payment.rb +3 -2
- data/app/models/spree/payment_create.rb +1 -1
- data/app/models/spree/payment_method/bogus_credit_card.rb +14 -9
- data/app/models/spree/payment_method/simple_bogus_credit_card.rb +12 -6
- data/app/models/spree/payment_method/store_credit.rb +1 -1
- data/app/models/spree/payment_method.rb +3 -1
- data/app/models/spree/payment_source.rb +5 -1
- data/app/models/spree/permission_set.rb +11 -0
- data/app/models/spree/permission_sets/base.rb +45 -0
- data/app/models/spree/permission_sets/configuration_display.rb +53 -0
- data/app/models/spree/permission_sets/configuration_management.rb +52 -0
- data/app/models/spree/permission_sets/dashboard_display.rb +28 -0
- data/app/models/spree/permission_sets/default_customer.rb +83 -0
- data/app/models/spree/permission_sets/order_display.rb +50 -0
- data/app/models/spree/permission_sets/order_management.rb +50 -0
- data/app/models/spree/permission_sets/product_display.rb +43 -0
- data/app/models/spree/permission_sets/product_management.rb +47 -0
- data/app/models/spree/permission_sets/restricted_stock_display.rb +33 -0
- data/app/models/spree/permission_sets/restricted_stock_management.rb +33 -0
- data/app/models/spree/permission_sets/stock_display.rb +26 -0
- data/app/models/spree/permission_sets/stock_management.rb +26 -0
- data/app/models/spree/permission_sets/super_user.rb +26 -0
- data/app/models/spree/permission_sets/user_display.rb +27 -0
- data/app/models/spree/permission_sets/user_management.rb +44 -0
- data/app/models/spree/preference.rb +1 -1
- data/app/models/spree/product.rb +13 -9
- data/app/models/spree/refund.rb +3 -1
- data/app/models/spree/refund_reason.rb +6 -1
- data/app/models/spree/reimbursement.rb +4 -4
- data/app/models/spree/reimbursement_performer.rb +3 -3
- data/app/models/spree/reimbursement_tax_calculator.rb +2 -2
- data/app/models/spree/reimbursement_type/credit.rb +1 -1
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +6 -6
- data/app/models/spree/reimbursement_type/store_credit.rb +1 -1
- data/app/models/spree/reimbursement_type.rb +6 -1
- data/app/models/spree/return_authorization.rb +2 -0
- data/app/models/spree/return_item.rb +10 -10
- data/app/models/spree/return_reason.rb +6 -1
- data/app/models/spree/role.rb +3 -1
- data/app/models/spree/role_permission.rb +8 -0
- data/app/models/spree/shipment.rb +9 -7
- data/app/models/spree/shipping_category.rb +2 -0
- data/app/models/spree/shipping_rate.rb +2 -3
- data/app/models/spree/{order_contents.rb → simple_order_contents.rb} +8 -12
- data/app/models/spree/stock/estimator.rb +1 -1
- data/app/models/spree/stock/inventory_unit_builder.rb +1 -1
- data/app/models/spree/stock/package.rb +2 -2
- data/app/models/spree/stock/simple_coordinator.rb +36 -22
- data/app/models/spree/stock_item.rb +1 -0
- data/app/models/spree/stock_location.rb +5 -5
- data/app/models/spree/store.rb +3 -1
- data/app/models/spree/store_credit.rb +17 -15
- data/app/models/spree/store_credit_event.rb +4 -3
- data/app/models/spree/store_credit_reason.rb +6 -1
- data/app/models/spree/store_selector/by_server_name.rb +1 -1
- data/app/models/spree/tax/tax_helpers.rb +12 -1
- data/app/models/spree/tax_calculator/default.rb +3 -3
- data/app/models/spree/tax_calculator/shipping_rate.rb +1 -1
- data/app/models/spree/tax_category.rb +3 -1
- data/app/models/spree/tax_rate.rb +7 -3
- data/app/models/spree/taxon.rb +22 -2
- data/app/models/spree/taxon_brand_selector.rb +22 -0
- data/app/models/spree/taxonomy.rb +2 -2
- data/app/models/spree/unauthorized_redirect_handler.rb +24 -0
- data/app/models/spree/unit_cancel.rb +1 -2
- data/app/models/spree/user_address.rb +9 -3
- data/app/models/spree/variant/scopes.rb +4 -0
- data/app/models/spree/variant/vat_price_generator.rb +1 -1
- data/app/models/spree/variant.rb +21 -8
- data/app/models/spree/wallet.rb +2 -2
- data/app/views/spree/order_mailer/cancel_email.html.erb +1 -1
- data/app/views/spree/order_mailer/cancel_email.text.erb +1 -1
- data/app/views/spree/order_mailer/confirm_email.html.erb +5 -5
- data/app/views/spree/order_mailer/confirm_email.text.erb +5 -5
- data/app/views/spree/order_mailer/inventory_cancellation_email.html.erb +0 -1
- data/config/locales/en.yml +33 -90
- data/db/default/spree/permission_sets.rb +10 -0
- data/db/default/spree/return_reasons.rb +3 -1
- data/db/default/spree/states.rb +1 -1
- data/db/migrate/20160101010000_solidus_one_four.rb +0 -127
- data/db/migrate/20220419170826_remove_archived_user_addresses.rb +12 -0
- data/db/migrate/20230427095534_drop_deprecated_address_id_from_shipments.rb +1 -1
- data/db/migrate/20240821173254_create_spree_permission_sets_in_core.rb +9 -0
- data/db/migrate/20240821173341_create_spree_roles_permissions_in_core.rb +9 -0
- data/db/migrate/20240821173641_add_description_to_spree_roles.rb +5 -0
- data/db/migrate/20240904152041_add_privilege_and_category_to_spree_permission_sets.rb +6 -0
- data/db/migrate/20250129061658_add_metadata_to_spree_resources.rb +28 -0
- data/db/migrate/20250201172950_add_gtin_and_condition_to_spree_variant.rb +6 -0
- data/db/migrate/20250207104016_add_primary_taxon_to_products.rb +7 -0
- data/db/migrate/20250221152004_add_metadata_to_users.rb +13 -0
- data/db/seeds.rb +1 -0
- data/lib/generators/solidus/install/app_templates/authentication/custom.rb +0 -5
- data/lib/generators/solidus/install/app_templates/frontend/starter.rb +1 -1
- data/lib/generators/solidus/install/install_generator.rb +64 -15
- data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +15 -12
- data/lib/generators/solidus/update/update_generator.rb +1 -1
- data/lib/generators/spree/dummy/dummy_generator.rb +1 -1
- data/lib/generators/spree/dummy/templates/rails/application.rb.tt +1 -1
- data/lib/generators/spree/dummy/templates/rails/database.yml +41 -93
- data/lib/generators/spree/dummy/templates/rails/manifest.js +3 -0
- data/lib/generators/spree/dummy/templates/rails/test.rb +6 -1
- data/lib/spree/app_configuration.rb +102 -67
- data/lib/spree/core/class_constantizer.rb +2 -2
- data/lib/spree/core/controller_helpers/auth.rb +5 -61
- data/lib/spree/core/controller_helpers/common.rb +5 -80
- data/lib/spree/core/controller_helpers/order.rb +5 -86
- data/lib/spree/core/controller_helpers/payment_parameters.rb +5 -163
- data/lib/spree/core/controller_helpers/pricing.rb +5 -17
- data/lib/spree/core/controller_helpers/search.rb +5 -14
- data/lib/spree/core/controller_helpers/store.rb +5 -17
- data/lib/spree/core/controller_helpers/strong_parameters.rb +5 -71
- data/lib/spree/core/engine.rb +13 -5
- data/lib/spree/core/environment/calculators.rb +35 -3
- data/lib/spree/core/environment/promotions.rb +25 -4
- data/lib/spree/core/environment_extension.rb +16 -2
- data/lib/spree/core/importer/order.rb +5 -5
- data/lib/spree/core/importer/product.rb +3 -3
- data/lib/spree/core/nested_class_set.rb +28 -0
- data/lib/spree/core/null_promotion_configuration.rb +84 -0
- data/lib/spree/core/product_filters.rb +1 -1
- data/lib/spree/core/search/variant.rb +2 -2
- data/lib/spree/core/state_machines/inventory_unit.rb +5 -40
- data/lib/spree/core/state_machines/order.rb +5 -251
- data/lib/spree/core/state_machines/payment.rb +5 -59
- data/lib/spree/core/state_machines/reimbursement.rb +5 -31
- data/lib/spree/core/state_machines/return_authorization.rb +5 -30
- data/lib/spree/core/state_machines/return_item/acceptance_status.rb +5 -49
- data/lib/spree/core/state_machines/return_item/reception_status.rb +5 -40
- data/lib/spree/core/state_machines/shipment.rb +5 -56
- data/lib/spree/core/state_machines.rb +48 -81
- data/lib/spree/core/validators/email.rb +1 -1
- data/lib/spree/core/version.rb +2 -2
- data/lib/spree/core.rb +2 -14
- data/lib/spree/deprecator.rb +9 -0
- data/lib/spree/i18n.rb +1 -1
- data/lib/spree/mailer_previews/carton_preview.rb +1 -1
- data/lib/spree/money.rb +5 -118
- data/lib/spree/permission_sets/base.rb +5 -30
- data/lib/spree/permission_sets/configuration_display.rb +5 -41
- data/lib/spree/permission_sets/configuration_management.rb +5 -40
- data/lib/spree/permission_sets/dashboard_display.rb +5 -14
- data/lib/spree/permission_sets/default_customer.rb +5 -71
- data/lib/spree/permission_sets/order_display.rb +5 -38
- data/lib/spree/permission_sets/order_management.rb +5 -38
- data/lib/spree/permission_sets/product_display.rb +5 -31
- data/lib/spree/permission_sets/product_management.rb +5 -35
- data/lib/spree/permission_sets/restricted_stock_display.rb +5 -21
- data/lib/spree/permission_sets/restricted_stock_management.rb +5 -21
- data/lib/spree/permission_sets/stock_display.rb +5 -14
- data/lib/spree/permission_sets/stock_management.rb +5 -14
- data/lib/spree/permission_sets/super_user.rb +5 -14
- data/lib/spree/permission_sets/user_display.rb +5 -15
- data/lib/spree/permission_sets/user_management.rb +5 -32
- data/lib/spree/permission_sets.rb +5 -18
- data/lib/spree/permitted_attributes.rb +21 -9
- data/lib/spree/preferences/configuration.rb +4 -0
- data/lib/spree/preferences/persistable.rb +7 -1
- data/lib/spree/preferences/store.rb +2 -2
- data/lib/spree/testing_support/capybara_ext.rb +11 -1
- data/lib/spree/testing_support/common_rake.rb +1 -0
- data/lib/spree/testing_support/dummy_ability.rb +7 -0
- data/lib/spree/testing_support/dummy_app/assets/stylesheets/solidus_admin/tailwind.css +1 -0
- data/lib/spree/testing_support/dummy_app/database.yml +37 -46
- data/lib/spree/testing_support/dummy_app/migrations.rb +8 -15
- data/lib/spree/testing_support/dummy_app/rake_tasks.rb +3 -6
- data/lib/spree/testing_support/dummy_app.rb +33 -19
- data/lib/spree/testing_support/factories/adjustment_factory.rb +1 -2
- data/lib/spree/testing_support/factories/calculator_factory.rb +1 -5
- data/lib/spree/testing_support/factories/carton_factory.rb +2 -2
- data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -2
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +3 -3
- data/lib/spree/testing_support/factories/order_factory.rb +13 -24
- data/lib/spree/testing_support/factories/product_factory.rb +1 -1
- data/lib/spree/testing_support/factories/shipment_factory.rb +1 -1
- data/lib/spree/testing_support/factories/stock_item_factory.rb +5 -1
- data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -1
- data/lib/spree/testing_support/factories/user_factory.rb +1 -1
- data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
- data/lib/spree/testing_support/order_walkthrough.rb +3 -3
- data/lib/spree/testing_support/shared_examples/calculator.rb +10 -0
- data/lib/spree/testing_support/shared_examples/order_factory.rb +141 -0
- data/lib/spree/testing_support/shared_examples/working_factory.rb +15 -0
- data/lib/tasks/colorado_delivery_fee.rake +2 -2
- data/solidus_core.gemspec +7 -10
- metadata +107 -109
- data/app/jobs/spree/promotion_code_batch_job.rb +0 -26
- data/app/mailers/spree/promotion_code_batch_mailer.rb +0 -15
- data/app/models/spree/calculator/distributed_amount.rb +0 -33
- data/app/models/spree/calculator/flat_percent_item_total.rb +0 -23
- data/app/models/spree/calculator/flexi_rate.rb +0 -22
- data/app/models/spree/calculator/percent_on_line_item.rb +0 -13
- data/app/models/spree/calculator/tiered_flat_rate.rb +0 -52
- data/app/models/spree/calculator/tiered_percent.rb +0 -62
- data/app/models/spree/line_item_action.rb +0 -8
- data/app/models/spree/order_promotion.rb +0 -27
- data/app/models/spree/promotion/actions/create_adjustment.rb +0 -81
- data/app/models/spree/promotion/actions/create_item_adjustments.rb +0 -98
- data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +0 -139
- data/app/models/spree/promotion/actions/free_shipping.rb +0 -59
- data/app/models/spree/promotion/order_adjustments_recalculator.rb +0 -92
- data/app/models/spree/promotion/rules/first_order.rb +0 -38
- data/app/models/spree/promotion/rules/first_repeat_purchase_since.rb +0 -36
- data/app/models/spree/promotion/rules/item_total.rb +0 -86
- data/app/models/spree/promotion/rules/nth_order.rb +0 -45
- data/app/models/spree/promotion/rules/one_use_per_user.rb +0 -25
- data/app/models/spree/promotion/rules/option_value.rb +0 -50
- data/app/models/spree/promotion/rules/product.rb +0 -86
- data/app/models/spree/promotion/rules/store.rb +0 -26
- data/app/models/spree/promotion/rules/taxon.rb +0 -91
- data/app/models/spree/promotion/rules/user.rb +0 -34
- data/app/models/spree/promotion/rules/user_logged_in.rb +0 -20
- data/app/models/spree/promotion/rules/user_role.rb +0 -45
- data/app/models/spree/promotion.rb +0 -271
- data/app/models/spree/promotion_action.rb +0 -47
- data/app/models/spree/promotion_category.rb +0 -8
- data/app/models/spree/promotion_chooser.rb +0 -34
- data/app/models/spree/promotion_code/batch_builder.rb +0 -64
- data/app/models/spree/promotion_code.rb +0 -54
- data/app/models/spree/promotion_code_batch.rb +0 -27
- data/app/models/spree/promotion_handler/cart.rb +0 -75
- data/app/models/spree/promotion_handler/coupon.rb +0 -123
- data/app/models/spree/promotion_handler/page.rb +0 -26
- data/app/models/spree/promotion_handler/shipping.rb +0 -61
- data/app/models/spree/promotion_rule.rb +0 -55
- data/app/models/spree/promotion_rule_role.rb +0 -8
- data/app/models/spree/promotion_rule_store.rb +0 -10
- data/app/models/spree/promotion_rule_taxon.rb +0 -8
- data/app/models/spree/promotion_rule_user.rb +0 -10
- data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_errored.text.erb +0 -2
- data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_finished.text.erb +0 -2
- data/bin/rails +0 -13
- data/db/migrate/20161017102621_create_spree_promotion_code_batch.rb +0 -38
- data/db/migrate/20180202190713_create_promotion_rule_stores.rb +0 -12
- data/db/migrate/20180328172631_add_join_characters_to_promotion_code_batch.rb +0 -11
- data/db/migrate/20190106184413_remove_code_from_spree_promotions.rb +0 -42
- data/db/migrate/20220317165036_set_promotions_with_any_policy_to_all_if_possible.rb +0 -20
- data/db/migrate/20230322085416_remove_match_policy_from_spree_promotion.rb +0 -5
- data/db/migrate/20230325132905_remove_unused_columns_from_promotion_rules.rb +0 -6
- data/db/migrate/20230325161633_drop_unused_promo_action_line_items.rb +0 -13
- data/lib/generators/spree/dummy/templates/rails/script/rails +0 -6
- data/lib/solidus/migrations/promotions_with_code_handlers.rb +0 -66
- data/lib/spree/permission_sets/promotion_display.rb +0 -25
- data/lib/spree/permission_sets/promotion_management.rb +0 -25
- data/lib/spree/testing_support/factories/order_promotion_factory.rb +0 -8
- data/lib/spree/testing_support/factories/promotion_category_factory.rb +0 -7
- data/lib/spree/testing_support/factories/promotion_code_factory.rb +0 -8
- data/lib/spree/testing_support/factories/promotion_factory.rb +0 -98
@@ -10,8 +10,8 @@ module DummyApp
|
|
10
10
|
require lib_name
|
11
11
|
require 'spree/testing_support/dummy_app'
|
12
12
|
DummyApp.setup(
|
13
|
-
gem_root
|
14
|
-
lib_name
|
13
|
+
gem_root:,
|
14
|
+
lib_name:,
|
15
15
|
auto_migrate: false
|
16
16
|
)
|
17
17
|
end
|
@@ -38,10 +38,7 @@ namespace :db do
|
|
38
38
|
# railties:install:migrations and then db:migrate.
|
39
39
|
# Migrations should be run one directory at a time
|
40
40
|
ActiveRecord::Migrator.migrations_paths.each do |path|
|
41
|
-
ActiveRecord::MigrationContext.new(
|
42
|
-
[path],
|
43
|
-
ActiveRecord::SchemaMigration
|
44
|
-
).migrate
|
41
|
+
ActiveRecord::MigrationContext.new([path]).migrate
|
45
42
|
end
|
46
43
|
|
47
44
|
ActiveRecord::Base.clear_cache!
|
@@ -20,6 +20,7 @@ end
|
|
20
20
|
|
21
21
|
# @private
|
22
22
|
class ApplicationRecord < ActiveRecord::Base
|
23
|
+
self.abstract_class = true
|
23
24
|
end
|
24
25
|
|
25
26
|
# @private
|
@@ -34,10 +35,19 @@ end
|
|
34
35
|
module DummyApp
|
35
36
|
def self.setup(gem_root:, lib_name:, auto_migrate: true)
|
36
37
|
ENV["LIB_NAME"] = lib_name
|
37
|
-
|
38
|
+
root = Pathname(gem_root).join('spec/dummy')
|
39
|
+
root.join("app/assets/config").mkpath
|
40
|
+
root.join("app/assets/config/manifest.js").write("// Intentionally empty\n")
|
38
41
|
|
42
|
+
DummyApp::Application.config.root = root
|
39
43
|
DummyApp::Application.initialize! unless DummyApp::Application.initialized?
|
40
44
|
|
45
|
+
# Raise on deprecation warnings.
|
46
|
+
# NOTE: This needs to happen after the application is initialized.
|
47
|
+
if ENV['SOLIDUS_RAISE_DEPRECATIONS'].present?
|
48
|
+
Spree.deprecator.behavior = :raise
|
49
|
+
end
|
50
|
+
|
41
51
|
if auto_migrate
|
42
52
|
DummyApp::Migrations.auto_migrate
|
43
53
|
end
|
@@ -45,6 +55,7 @@ module DummyApp
|
|
45
55
|
|
46
56
|
class Application < ::Rails::Application
|
47
57
|
config.load_defaults("#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}")
|
58
|
+
|
48
59
|
# Make the test environment more production-like:
|
49
60
|
config.action_controller.allow_forgery_protection = false
|
50
61
|
config.action_controller.default_protect_from_forgery = false
|
@@ -62,9 +73,14 @@ module DummyApp
|
|
62
73
|
config.cache_classes = true
|
63
74
|
|
64
75
|
# Make debugging easier:
|
76
|
+
if Rails.gem_version >= Gem::Version.new('7.1')
|
77
|
+
config.action_controller.raise_on_missing_callback_actions = true
|
78
|
+
config.action_dispatch.show_exceptions = :none
|
79
|
+
else
|
80
|
+
config.action_dispatch.show_exceptions = false
|
81
|
+
end
|
65
82
|
config.consider_all_requests_local = true
|
66
|
-
config.
|
67
|
-
config.active_support.deprecation = :stderr
|
83
|
+
config.active_support.deprecation = ENV['RAILS_DEPRECATIONS_BEHAVIOR'].presence&.to_sym || :stderr
|
68
84
|
config.log_level = :debug
|
69
85
|
|
70
86
|
# Improve test suite performance:
|
@@ -82,22 +98,24 @@ module DummyApp
|
|
82
98
|
config.secret_key_base = 'SECRET_TOKEN'
|
83
99
|
|
84
100
|
# Set the preview path within the dummy app:
|
85
|
-
|
101
|
+
if ActionMailer::Base.respond_to? :preview_paths # Rails 7.1+
|
102
|
+
config.action_mailer.preview_paths << File.expand_path('dummy_app/mailer_previews', __dir__)
|
103
|
+
else
|
104
|
+
config.action_mailer.preview_path = File.expand_path('dummy_app/mailer_previews', __dir__)
|
105
|
+
end
|
86
106
|
|
87
107
|
config.active_record.dump_schema_after_migration = false
|
88
108
|
|
89
109
|
# Configure active storage to use storage within tmp folder
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
root: Rails.root.join('tmp', 'storage')
|
96
|
-
}
|
110
|
+
initializer 'solidus.active_storage' do
|
111
|
+
config.active_storage.service_configurations = {
|
112
|
+
test: {
|
113
|
+
service: 'Disk',
|
114
|
+
root: Rails.root.join('tmp', 'storage')
|
97
115
|
}
|
98
|
-
|
99
|
-
|
100
|
-
|
116
|
+
}
|
117
|
+
config.active_storage.service = :test
|
118
|
+
config.active_storage.variant_processor = ENV.fetch('ACTIVE_STORAGE_VARIANT_PROCESSOR', :vips).to_sym
|
101
119
|
end
|
102
120
|
|
103
121
|
# Avoid issues if an old spec/dummy still exists
|
@@ -117,6 +135,7 @@ module DummyApp
|
|
117
135
|
|
118
136
|
config.assets.paths << File.expand_path('dummy_app/assets/javascripts', __dir__)
|
119
137
|
config.assets.paths << File.expand_path('dummy_app/assets/stylesheets', __dir__)
|
138
|
+
config.assets.css_compressor = nil
|
120
139
|
|
121
140
|
config.paths["config/database"] = File.expand_path('dummy_app/database.yml', __dir__)
|
122
141
|
config.paths['config/routes.rb'] = File.expand_path('dummy_app/routes.rb', __dir__)
|
@@ -139,8 +158,3 @@ Spree.config do |config|
|
|
139
158
|
config.taxon_attachment_module = 'Spree::Taxon::PaperclipAttachment'
|
140
159
|
end
|
141
160
|
end
|
142
|
-
|
143
|
-
# Raise on deprecation warnings
|
144
|
-
if ENV['SOLIDUS_RAISE_DEPRECATIONS'].present?
|
145
|
-
Spree.deprecator.behavior = :raise
|
146
|
-
end
|
@@ -7,7 +7,6 @@ FactoryBot.define do
|
|
7
7
|
amount { 100.0 }
|
8
8
|
label { 'Shipping' }
|
9
9
|
association(:source, factory: :tax_rate)
|
10
|
-
eligible { true }
|
11
10
|
|
12
11
|
after(:build) do |adjustment|
|
13
12
|
adjustments = adjustment.adjustable.adjustments
|
@@ -31,7 +30,7 @@ FactoryBot.define do
|
|
31
30
|
adjustment.source.tax_categories = []
|
32
31
|
end
|
33
32
|
adjustment.source.save
|
34
|
-
adjustment.
|
33
|
+
adjustment.update!(amount: adjustment.source.compute_amount(adjustment.adjustable))
|
35
34
|
end
|
36
35
|
end
|
37
36
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
FactoryBot.define do
|
4
|
-
factory :
|
4
|
+
factory :flat_rate_calculator, aliases: [:calculator], class: 'Spree::Calculator::FlatRate' do
|
5
5
|
preferred_amount { 10.0 }
|
6
6
|
end
|
7
7
|
|
@@ -22,8 +22,4 @@ FactoryBot.define do
|
|
22
22
|
factory :shipping_no_amount_calculator, class: 'Spree::Calculator::Shipping::FlatRate' do
|
23
23
|
preferred_amount { 0 }
|
24
24
|
end
|
25
|
-
|
26
|
-
factory :percent_on_item_calculator, class: 'Spree::Calculator::PercentOnLineItem' do
|
27
|
-
preferred_percent { 10 }
|
28
|
-
end
|
29
25
|
end
|
@@ -7,13 +7,13 @@ FactoryBot.define do
|
|
7
7
|
transient do
|
8
8
|
line_items_count { 1 }
|
9
9
|
return_items_count { line_items_count }
|
10
|
-
shipped_order { create :shipped_order, line_items_count:
|
10
|
+
shipped_order { create :shipped_order, line_items_count: }
|
11
11
|
return_authorization { create :return_authorization, order: shipped_order }
|
12
12
|
end
|
13
13
|
|
14
14
|
before(:create) do |customer_return, evaluator|
|
15
15
|
evaluator.shipped_order.inventory_units.take(evaluator.return_items_count).each do |inventory_unit|
|
16
|
-
customer_return.return_items << build(:return_item, inventory_unit
|
16
|
+
customer_return.return_items << build(:return_item, inventory_unit:, return_authorization: evaluator.return_authorization)
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -10,15 +10,15 @@ FactoryBot.define do
|
|
10
10
|
association :variant, strategy: :create
|
11
11
|
line_item do
|
12
12
|
if order
|
13
|
-
build(:line_item, variant
|
13
|
+
build(:line_item, variant:, order:)
|
14
14
|
else
|
15
|
-
build(:line_item, variant:
|
15
|
+
build(:line_item, variant:)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
state { 'on_hand' }
|
19
19
|
shipment do
|
20
20
|
if stock_location
|
21
|
-
build(:shipment, state: 'pending', order: line_item.order, stock_location:
|
21
|
+
build(:shipment, state: 'pending', order: line_item.order, stock_location:)
|
22
22
|
else
|
23
23
|
build(:shipment, state: 'pending', order: line_item.order)
|
24
24
|
end
|
@@ -43,36 +43,25 @@ FactoryBot.define do
|
|
43
43
|
evaluator.stock_location # must evaluate before creating line items
|
44
44
|
|
45
45
|
evaluator.line_items_attributes.each do |attributes|
|
46
|
-
attributes = { order
|
46
|
+
attributes = { order:, price: evaluator.line_items_price }.merge(attributes).tap do |attrs|
|
47
|
+
tax_category = attributes.delete(:tax_category)
|
48
|
+
if attrs[:variant] && tax_category
|
49
|
+
attrs[:variant].update(tax_category: )
|
50
|
+
elsif tax_category
|
51
|
+
attrs[:variant] = create(:variant, tax_category: )
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
47
55
|
create(:line_item, attributes)
|
48
56
|
end
|
49
57
|
order.line_items.reload
|
50
58
|
|
51
|
-
create(:shipment, order
|
59
|
+
create(:shipment, order:, cost: evaluator.shipment_cost, shipping_method: evaluator.shipping_method, stock_location: evaluator.stock_location)
|
52
60
|
order.shipments.reload
|
53
61
|
|
54
62
|
order.recalculate
|
55
63
|
end
|
56
64
|
|
57
|
-
factory :completed_order_with_promotion do
|
58
|
-
transient do
|
59
|
-
completed_at { Time.current }
|
60
|
-
promotion { nil }
|
61
|
-
end
|
62
|
-
|
63
|
-
after(:create) do |order, evaluator|
|
64
|
-
promotion = evaluator.promotion || create(:promotion, code: "test")
|
65
|
-
promotion_code = promotion.codes.first || create(:promotion_code, promotion: promotion)
|
66
|
-
|
67
|
-
promotion.activate(order: order, promotion_code: promotion_code)
|
68
|
-
order.order_promotions.create!(promotion: promotion, promotion_code: promotion_code)
|
69
|
-
|
70
|
-
# Complete the order after the promotion has been activated
|
71
|
-
order.update_column(:completed_at, evaluator.completed_at)
|
72
|
-
order.update_column(:state, "complete")
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
65
|
factory :order_ready_to_complete do
|
77
66
|
state { 'confirm' }
|
78
67
|
payment_state { 'checkout' }
|
@@ -84,7 +73,7 @@ FactoryBot.define do
|
|
84
73
|
after(:create) do |order, evaluator|
|
85
74
|
create(evaluator.payment_type, {
|
86
75
|
amount: order.total,
|
87
|
-
order
|
76
|
+
order:,
|
88
77
|
state: order.payment_state
|
89
78
|
})
|
90
79
|
|
@@ -107,7 +96,7 @@ FactoryBot.define do
|
|
107
96
|
|
108
97
|
factory :completed_order_with_pending_payment do
|
109
98
|
after(:create) do |order|
|
110
|
-
create(:payment, amount: order.total, order
|
99
|
+
create(:payment, amount: order.total, order:, state: 'pending')
|
111
100
|
end
|
112
101
|
end
|
113
102
|
|
@@ -120,7 +109,7 @@ FactoryBot.define do
|
|
120
109
|
end
|
121
110
|
|
122
111
|
after(:create) do |order, evaluator|
|
123
|
-
create(evaluator.payment_type, amount: order.total, order
|
112
|
+
create(evaluator.payment_type, amount: order.total, order:, state: 'completed')
|
124
113
|
order.shipments.each do |shipment|
|
125
114
|
shipment.update_column('state', 'ready')
|
126
115
|
end
|
@@ -15,7 +15,7 @@ FactoryBot.define do
|
|
15
15
|
after(:create) do |shipment, evaluator|
|
16
16
|
shipping_method = evaluator.shipping_method || create(:shipping_method, cost: evaluator.cost)
|
17
17
|
shipment.shipping_rates.create!(
|
18
|
-
shipping_method
|
18
|
+
shipping_method:,
|
19
19
|
cost: evaluator.cost,
|
20
20
|
selected: true
|
21
21
|
)
|
@@ -6,6 +6,10 @@ FactoryBot.define do
|
|
6
6
|
association :stock_location, factory: :stock_location_without_variant_propagation
|
7
7
|
variant
|
8
8
|
|
9
|
-
|
9
|
+
transient do
|
10
|
+
on_hand { 10 }
|
11
|
+
end
|
12
|
+
|
13
|
+
after(:create) { |object, evaluator| object.adjust_count_on_hand(evaluator.on_hand) }
|
10
14
|
end
|
11
15
|
end
|
@@ -14,7 +14,7 @@ FactoryBot.define do
|
|
14
14
|
|
15
15
|
after(:build) do |package, evaluator|
|
16
16
|
evaluator.variants_contents.each do |variant, count|
|
17
|
-
package.add_multiple build_list(:inventory_unit, count, variant
|
17
|
+
package.add_multiple build_list(:inventory_unit, count, variant:, stock_location: evaluator.stock_location)
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -4,7 +4,7 @@ module Spree
|
|
4
4
|
module TestingSupport
|
5
5
|
class OrderWalkthrough
|
6
6
|
def self.up_to(state, user: nil)
|
7
|
-
new.up_to(state, user:
|
7
|
+
new.up_to(state, user:)
|
8
8
|
end
|
9
9
|
|
10
10
|
def up_to(state, user: nil)
|
@@ -23,7 +23,7 @@ module Spree
|
|
23
23
|
end
|
24
24
|
|
25
25
|
order = Spree::Order.create!(
|
26
|
-
user
|
26
|
+
user:,
|
27
27
|
email: "solidus@example.com",
|
28
28
|
store: Spree::Store.first || ::FactoryBot.create(:store)
|
29
29
|
)
|
@@ -47,7 +47,7 @@ module Spree
|
|
47
47
|
private
|
48
48
|
|
49
49
|
def add_line_item!(order)
|
50
|
-
::FactoryBot.create(:line_item, order:
|
50
|
+
::FactoryBot.create(:line_item, order:)
|
51
51
|
order.reload
|
52
52
|
end
|
53
53
|
|
@@ -0,0 +1,141 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.shared_examples "shipping methods are assigned" do
|
4
|
+
context "given a shipping method" do
|
5
|
+
let(:shipping_method) { create(:shipping_method) }
|
6
|
+
|
7
|
+
it "assigns the shipping method when created" do
|
8
|
+
expect(
|
9
|
+
create(
|
10
|
+
factory,
|
11
|
+
shipping_method:
|
12
|
+
).shipments.map(&:shipping_method)
|
13
|
+
).to all(eq(shipping_method))
|
14
|
+
end
|
15
|
+
|
16
|
+
it "assigns the shipping method when built" do
|
17
|
+
expect(
|
18
|
+
build(
|
19
|
+
factory,
|
20
|
+
shipping_method:
|
21
|
+
).shipments.map(&:shipping_method)
|
22
|
+
).to all(eq(shipping_method))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
RSpec.shared_examples "an order with line items factory" do |expected_order_state, expected_inventory_unit_state|
|
28
|
+
# This factory cannot be built correctly because Shipment#set_up_inventory
|
29
|
+
# requires records to be saved.
|
30
|
+
context "when created" do
|
31
|
+
let(:stock_location) { create(:stock_location) }
|
32
|
+
let(:first_variant) { create(:variant) }
|
33
|
+
let(:second_variant) { create(:variant) }
|
34
|
+
let(:shipping_method) { create(:shipping_method) }
|
35
|
+
let(:order) do
|
36
|
+
create(
|
37
|
+
factory,
|
38
|
+
stock_location:,
|
39
|
+
line_items_attributes: [
|
40
|
+
{ variant: first_variant, quantity: 1, price: 1 },
|
41
|
+
{ variant: second_variant, quantity: 2, price: 2 }
|
42
|
+
],
|
43
|
+
shipment_cost: 3,
|
44
|
+
shipping_method:
|
45
|
+
)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "has the expected attributes" do
|
49
|
+
aggregate_failures "for line items" do
|
50
|
+
expect(order.line_items.count).to eq 2
|
51
|
+
expect(order.line_items[0]).to have_attributes(
|
52
|
+
quantity: 1,
|
53
|
+
price: 1.0
|
54
|
+
)
|
55
|
+
expect(order.line_items[1]).to have_attributes(
|
56
|
+
price: 2.0,
|
57
|
+
quantity: 2
|
58
|
+
)
|
59
|
+
end
|
60
|
+
|
61
|
+
aggregate_failures "for shipments" do
|
62
|
+
expect(order.shipments.count).to eq 1
|
63
|
+
expect(order.shipments[0]).to have_attributes(
|
64
|
+
amount: 3.0,
|
65
|
+
stock_location:
|
66
|
+
)
|
67
|
+
|
68
|
+
expect(order.shipments[0].shipping_method).to eq(shipping_method)
|
69
|
+
|
70
|
+
# Explicitly order by line item id, because otherwise these can be in
|
71
|
+
# an arbitrary order.
|
72
|
+
inventory_units = order.shipments[0].inventory_units.sort_by(&:line_item_id)
|
73
|
+
|
74
|
+
expect(inventory_units.count).to eq(3)
|
75
|
+
expect(inventory_units[0]).to have_attributes(
|
76
|
+
order:,
|
77
|
+
shipment: order.shipments[0],
|
78
|
+
line_item: order.line_items[0],
|
79
|
+
variant: order.line_items[0].variant,
|
80
|
+
state: expected_inventory_unit_state
|
81
|
+
)
|
82
|
+
expect(inventory_units[1]).to have_attributes(
|
83
|
+
order:,
|
84
|
+
shipment: order.shipments[0],
|
85
|
+
line_item: order.line_items[1],
|
86
|
+
variant: order.line_items[1].variant,
|
87
|
+
state: expected_inventory_unit_state
|
88
|
+
)
|
89
|
+
expect(inventory_units[2]).to have_attributes(
|
90
|
+
order:,
|
91
|
+
shipment: order.shipments[0],
|
92
|
+
line_item: order.line_items[1],
|
93
|
+
variant: order.line_items[1].variant,
|
94
|
+
state: expected_inventory_unit_state
|
95
|
+
)
|
96
|
+
end
|
97
|
+
|
98
|
+
expect(order).to have_attributes(
|
99
|
+
item_total: 5.0,
|
100
|
+
ship_total: 3.0,
|
101
|
+
total: 8.0,
|
102
|
+
state: expected_order_state
|
103
|
+
)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
context 'when shipments should be taxed' do
|
108
|
+
let!(:ship_address) { create(:address) }
|
109
|
+
let!(:tax_zone) { create(:global_zone) } # will include the above address
|
110
|
+
let!(:tax_rate) { create(:tax_rate, amount: 0.10, zone: tax_zone, tax_categories: [tax_category]) }
|
111
|
+
|
112
|
+
let(:tax_category) { create(:tax_category) }
|
113
|
+
let(:shipping_method) { create(:shipping_method, tax_category:, zones: [tax_zone]) }
|
114
|
+
|
115
|
+
it 'shipments get a tax adjustment' do
|
116
|
+
order = create(factory, ship_address:, shipping_method:)
|
117
|
+
shipment = order.shipments[0]
|
118
|
+
|
119
|
+
expect(shipment.additional_tax_total).to be > 0
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
RSpec.shared_examples 'supplied completed_at is respected' do
|
125
|
+
context 'when passed a completed_at timestamp' do
|
126
|
+
let(:completed_at) { 2.days.ago }
|
127
|
+
let(:order) { create(factory, completed_at:) }
|
128
|
+
|
129
|
+
it 'respects the timestamp' do
|
130
|
+
expect(order.completed_at).to be_within(5.seconds).of(completed_at)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
context 'when no completed_at timestamp is passed' do
|
135
|
+
let(:order) { create(factory) }
|
136
|
+
|
137
|
+
it 'defaults to the current time' do
|
138
|
+
expect(order.completed_at).to be_within(2.seconds).of(Time.current)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.shared_examples_for 'a working factory' do
|
4
|
+
it "builds successfully" do
|
5
|
+
expect(build(factory)).to be_a(factory_class)
|
6
|
+
end
|
7
|
+
|
8
|
+
it "creates successfully" do
|
9
|
+
expect(create(factory)).to be_a(factory_class)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "is creates a valid record" do
|
13
|
+
expect(create(factory)).to be_valid
|
14
|
+
end
|
15
|
+
end
|
@@ -16,8 +16,8 @@ namespace :taxes do
|
|
16
16
|
calculator = Spree::Calculator::FlatFee.new
|
17
17
|
rate = Spree::TaxRate.create!(
|
18
18
|
name: "Colorado Delivery Fee",
|
19
|
-
calculator
|
20
|
-
zone
|
19
|
+
calculator:,
|
20
|
+
zone:,
|
21
21
|
amount: 0.27,
|
22
22
|
show_rate_in_label: false,
|
23
23
|
level: "order"
|
data/solidus_core.gemspec
CHANGED
@@ -17,27 +17,24 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.metadata['rubygems_mfa_required'] = 'true'
|
18
18
|
|
19
19
|
s.files = `git ls-files -z`.split("\x0").reject do |f|
|
20
|
-
f.match(%r{^(spec|
|
20
|
+
f.match(%r{^(spec|bin)/})
|
21
21
|
end
|
22
22
|
|
23
|
-
s.required_ruby_version = '>= 3.
|
23
|
+
s.required_ruby_version = '>= 3.1.0'
|
24
24
|
s.required_rubygems_version = '>= 1.8.23'
|
25
25
|
|
26
26
|
%w[
|
27
27
|
actionmailer actionpack actionview activejob activemodel activerecord
|
28
28
|
activestorage activesupport railties
|
29
29
|
].each do |rails_dep|
|
30
|
-
s.add_dependency rails_dep, ['>= 7.0', '<
|
30
|
+
s.add_dependency rails_dep, ['>= 7.0', '< 8.1.0.beta1']
|
31
31
|
end
|
32
32
|
|
33
33
|
s.add_dependency 'activemerchant', '~> 1.66'
|
34
34
|
s.add_dependency 'acts_as_list', '< 2.0'
|
35
|
-
s.add_dependency 'awesome_nested_set', '~> 3.3'
|
35
|
+
s.add_dependency 'awesome_nested_set', ['~> 3.3', '>= 3.7.0']
|
36
36
|
s.add_dependency 'cancancan', ['>= 2.2', '< 4.0']
|
37
37
|
s.add_dependency 'carmen', '~> 1.1.0'
|
38
|
-
# Adding a constraint here to make sure Rails 7.0 does not crash on startup
|
39
|
-
# https://github.com/rails/rails/pull/54264
|
40
|
-
s.add_dependency 'concurrent-ruby', '< 1.3.5'
|
41
38
|
s.add_dependency 'discard', '~> 1.0'
|
42
39
|
s.add_dependency 'friendly_id', '~> 5.0'
|
43
40
|
s.add_dependency 'image_processing', '~> 1.10'
|
@@ -45,9 +42,9 @@ Gem::Specification.new do |s|
|
|
45
42
|
s.add_dependency 'mini_magick', '~> 4.10'
|
46
43
|
s.add_dependency 'monetize', '~> 1.8'
|
47
44
|
s.add_dependency 'kt-paperclip', ['>= 6.3', '< 8']
|
48
|
-
s.add_dependency 'psych', ['>= 4.0.1', '<
|
49
|
-
s.add_dependency 'ransack', '~>
|
50
|
-
s.add_dependency 'sprockets-rails'
|
45
|
+
s.add_dependency 'psych', ['>= 4.0.1', '< 6.0']
|
46
|
+
s.add_dependency 'ransack', ['~> 4.0', '< 5']
|
47
|
+
s.add_dependency 'sprockets-rails', '!= 3.5.0'
|
51
48
|
s.add_dependency 'state_machines-activerecord', '~> 0.6'
|
52
49
|
s.add_dependency 'omnes', '~> 0.2.2'
|
53
50
|
|