solidus_core 4.3.4 → 4.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/helpers/spree/base_helper.rb +2 -2
- 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/ordered_property_value_list.rb +2 -2
- data/app/models/concerns/spree/user_address_book.rb +4 -4
- data/app/models/concerns/spree/user_methods.rb +3 -3
- data/app/models/spree/address.rb +6 -6
- data/app/models/spree/adjustment.rb +13 -66
- data/app/models/spree/calculator/returns/default_refund_amount.rb +1 -1
- data/app/models/spree/carton.rb +2 -2
- data/app/models/spree/credit_card.rb +6 -6
- 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/line_item.rb +1 -1
- 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/order.rb +15 -22
- data/app/models/spree/order_cancellations.rb +8 -8
- data/app/models/spree/order_mutex.rb +2 -2
- data/app/models/spree/order_shipping.rb +9 -9
- data/app/models/spree/order_updater.rb +6 -10
- data/app/models/spree/payment/processing.rb +2 -2
- data/app/models/spree/payment.rb +2 -2
- data/app/models/spree/payment_create.rb +1 -1
- data/app/models/spree/payment_method/store_credit.rb +1 -1
- data/app/models/spree/payment_source.rb +5 -1
- data/app/models/spree/permission_set.rb +11 -0
- data/app/models/spree/product.rb +7 -28
- data/app/models/spree/refund.rb +1 -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/return_item.rb +9 -9
- data/app/models/spree/role.rb +3 -1
- data/app/models/spree/role_permission.rb +8 -0
- data/app/models/spree/shipment.rb +7 -7
- data/app/models/spree/shipping_category.rb +2 -0
- data/app/models/spree/shipping_rate.rb +1 -1
- data/app/models/spree/{order_contents.rb → simple_order_contents.rb} +4 -11
- 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 +1 -1
- data/app/models/spree/stock_location.rb +5 -5
- data/app/models/spree/store.rb +1 -1
- data/app/models/spree/store_credit.rb +17 -15
- data/app/models/spree/store_credit_event.rb +3 -3
- data/app/models/spree/tax_calculator/default.rb +2 -2
- 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 +3 -3
- data/app/models/spree/taxonomy.rb +2 -2
- data/app/models/spree/unit_cancel.rb +1 -2
- data/app/models/spree/variant/vat_price_generator.rb +1 -1
- data/app/models/spree/variant.rb +7 -2
- 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/config/locales/en.yml +4 -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 -117
- 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/seeds.rb +1 -0
- data/lib/generators/solidus/install/app_templates/frontend/starter.rb +1 -1
- data/lib/generators/solidus/update/update_generator.rb +1 -1
- data/lib/generators/spree/dummy/templates/rails/test.rb +6 -1
- data/lib/spree/app_configuration.rb +53 -84
- data/lib/spree/core/class_constantizer.rb +2 -2
- data/lib/spree/core/controller_helpers/payment_parameters.rb +1 -1
- data/lib/spree/core/engine.rb +1 -0
- 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/order.rb +0 -1
- data/lib/spree/core/validators/email.rb +1 -1
- data/lib/spree/core/version.rb +2 -2
- data/lib/spree/core.rb +2 -6
- 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/permission_sets/base.rb +13 -1
- data/lib/spree/permission_sets/configuration_display.rb +10 -0
- data/lib/spree/permission_sets/configuration_management.rb +10 -0
- data/lib/spree/permission_sets/dashboard_display.rb +12 -0
- data/lib/spree/permission_sets/default_customer.rb +11 -1
- data/lib/spree/permission_sets/order_display.rb +10 -0
- data/lib/spree/permission_sets/order_management.rb +10 -0
- data/lib/spree/permission_sets/product_display.rb +10 -0
- data/lib/spree/permission_sets/product_management.rb +10 -0
- data/lib/spree/permission_sets/restricted_stock_display.rb +10 -0
- data/lib/spree/permission_sets/restricted_stock_management.rb +10 -0
- data/lib/spree/permission_sets/stock_display.rb +10 -0
- data/lib/spree/permission_sets/stock_management.rb +10 -0
- data/lib/spree/permission_sets/super_user.rb +10 -0
- data/lib/spree/permission_sets/user_display.rb +10 -0
- data/lib/spree/permission_sets/user_management.rb +10 -0
- data/lib/spree/permission_sets.rb +0 -2
- data/lib/spree/permitted_attributes.rb +2 -2
- data/lib/spree/preferences/store.rb +2 -2
- data/lib/spree/testing_support/capybara_ext.rb +1 -1
- data/lib/spree/testing_support/dummy_ability.rb +7 -0
- data/lib/spree/testing_support/dummy_app/database.yml +2 -2
- data/lib/spree/testing_support/dummy_app/migrations.rb +8 -15
- data/lib/spree/testing_support/dummy_app/rake_tasks.rb +2 -2
- data/lib/spree/testing_support/dummy_app.rb +17 -12
- 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 +5 -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 +6 -6
- metadata +60 -91
- 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/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/minimum_quantity.rb +0 -59
- 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_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/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/db/migrate/20231027084517_add_order_promotions_foreign_key.rb +0 -10
- data/db/migrate/20231031175215_add_promotion_order_promotion_foreign_key.rb +0 -10
- 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/ransack_4_1_patch.rb +0 -16
- 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
@@ -18,11 +18,23 @@ module Spree
|
|
18
18
|
end
|
19
19
|
|
20
20
|
# Activate permissions on the ability. Put your can and cannot statements here.
|
21
|
-
# Must be
|
21
|
+
# Must be overridden by subclasses
|
22
22
|
def activate!
|
23
23
|
raise NotImplementedError.new
|
24
24
|
end
|
25
25
|
|
26
|
+
# Provide the permission set privilege in the form of a :symbol.
|
27
|
+
# Must be overridden by subclasses.
|
28
|
+
def self.privilege
|
29
|
+
raise NotImplementedError, "Subclass #{name} must define a privilege using `self.privilege :symbol`"
|
30
|
+
end
|
31
|
+
|
32
|
+
# Provide the permission set category in the form of a :symbol.
|
33
|
+
# Must be overridden by subclasses.
|
34
|
+
def self.category
|
35
|
+
raise NotImplementedError, "Subclass #{name} must define a category using `self.category :symbol`"
|
36
|
+
end
|
37
|
+
|
26
38
|
private
|
27
39
|
|
28
40
|
attr_reader :ability
|
@@ -22,6 +22,16 @@ module Spree
|
|
22
22
|
# - Reimbursement types
|
23
23
|
# - Return reasons
|
24
24
|
class ConfigurationDisplay < PermissionSets::Base
|
25
|
+
class << self
|
26
|
+
def privilege
|
27
|
+
:display
|
28
|
+
end
|
29
|
+
|
30
|
+
def category
|
31
|
+
:configuration
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
25
35
|
def activate!
|
26
36
|
can [:read, :admin], Spree::TaxCategory
|
27
37
|
can [:read, :admin], Spree::TaxRate
|
@@ -21,6 +21,16 @@ module Spree
|
|
21
21
|
# - Reimbursement types
|
22
22
|
# - Return reasons
|
23
23
|
class ConfigurationManagement < PermissionSets::Base
|
24
|
+
class << self
|
25
|
+
def privilege
|
26
|
+
:management
|
27
|
+
end
|
28
|
+
|
29
|
+
def category
|
30
|
+
:configuration
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
24
34
|
def activate!
|
25
35
|
can :manage, Spree::TaxCategory
|
26
36
|
can :manage, Spree::TaxRate
|
@@ -8,7 +8,19 @@ module Spree
|
|
8
8
|
# which may or not contain sensitive information depending on
|
9
9
|
# customizations.
|
10
10
|
class DashboardDisplay < PermissionSets::Base
|
11
|
+
class << self
|
12
|
+
def privilege
|
13
|
+
:other
|
14
|
+
end
|
15
|
+
|
16
|
+
def category
|
17
|
+
:dashboard_display
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
11
21
|
def activate!
|
22
|
+
Spree.deprecator.warn "The #{self.class.name} module is deprecated. " \
|
23
|
+
"If you still use dashboards, please copy all controllers and views from #{self.class.name} to your application."
|
12
24
|
can [:admin, :home], :dashboards
|
13
25
|
end
|
14
26
|
end
|
@@ -32,6 +32,16 @@ module Spree
|
|
32
32
|
# with the same user, as well as reading and updating the user record and
|
33
33
|
# their associated cards.
|
34
34
|
class DefaultCustomer < PermissionSets::Base
|
35
|
+
class << self
|
36
|
+
def privilege
|
37
|
+
:other
|
38
|
+
end
|
39
|
+
|
40
|
+
def category
|
41
|
+
:default_customer
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
35
45
|
def activate!
|
36
46
|
can :read, Country
|
37
47
|
can :read, OptionType
|
@@ -44,7 +54,7 @@ module Spree
|
|
44
54
|
# via API, just like with show and update
|
45
55
|
(order.guest_token.present? && token == order.guest_token)
|
46
56
|
end
|
47
|
-
can [:show, :update], Order, Order.where(user:
|
57
|
+
can [:show, :update], Order, Order.where(user:) do |order, token|
|
48
58
|
order.user == user || (order.guest_token.present? && token == order.guest_token)
|
49
59
|
end
|
50
60
|
cannot :update, Order do |order|
|
@@ -22,6 +22,16 @@ module Spree
|
|
22
22
|
# However, it does not allow any modifications to be made to any of these
|
23
23
|
# resources.
|
24
24
|
class OrderDisplay < PermissionSets::Base
|
25
|
+
class << self
|
26
|
+
def privilege
|
27
|
+
:display
|
28
|
+
end
|
29
|
+
|
30
|
+
def category
|
31
|
+
:order
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
25
35
|
def activate!
|
26
36
|
can [:read, :admin, :edit, :cart], Spree::Order
|
27
37
|
can [:read, :admin], Spree::Payment
|
@@ -21,6 +21,16 @@ module Spree
|
|
21
21
|
#
|
22
22
|
# It also allows reading reimbursement types, but not modifying them.
|
23
23
|
class OrderManagement < PermissionSets::Base
|
24
|
+
class << self
|
25
|
+
def privilege
|
26
|
+
:management
|
27
|
+
end
|
28
|
+
|
29
|
+
def category
|
30
|
+
:order
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
24
34
|
def activate!
|
25
35
|
can :read, Spree::ReimbursementType
|
26
36
|
can :manage, Spree::Order
|
@@ -17,6 +17,16 @@ module Spree
|
|
17
17
|
# - Taxonomies
|
18
18
|
# - Taxons
|
19
19
|
class ProductDisplay < PermissionSets::Base
|
20
|
+
class << self
|
21
|
+
def privilege
|
22
|
+
:display
|
23
|
+
end
|
24
|
+
|
25
|
+
def category
|
26
|
+
:product
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
20
30
|
def activate!
|
21
31
|
can [:read, :admin, :edit], Spree::Product
|
22
32
|
can [:read, :admin], Spree::Image
|
@@ -19,6 +19,16 @@ module Spree
|
|
19
19
|
# - Classifications
|
20
20
|
# - Prices
|
21
21
|
class ProductManagement < PermissionSets::Base
|
22
|
+
class << self
|
23
|
+
def privilege
|
24
|
+
:management
|
25
|
+
end
|
26
|
+
|
27
|
+
def category
|
28
|
+
:product
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
22
32
|
def activate!
|
23
33
|
can :manage, Spree::Classification
|
24
34
|
can :manage, Spree::Image
|
@@ -8,6 +8,16 @@ module Spree
|
|
8
8
|
# locations, both of them limited to locations they have access to.
|
9
9
|
# Permissions are also granted for the admin panel for items.
|
10
10
|
class RestrictedStockDisplay < PermissionSets::Base
|
11
|
+
class << self
|
12
|
+
def privilege
|
13
|
+
:display
|
14
|
+
end
|
15
|
+
|
16
|
+
def category
|
17
|
+
:restricted_stock
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
11
21
|
def activate!
|
12
22
|
can [:read, :admin], Spree::StockItem, stock_location_id: location_ids
|
13
23
|
can :read, Spree::StockLocation, id: location_ids
|
@@ -8,6 +8,16 @@ module Spree
|
|
8
8
|
# access to their locations. Those locations are also readable by the
|
9
9
|
# corresponding ability.
|
10
10
|
class RestrictedStockManagement < PermissionSets::Base
|
11
|
+
class << self
|
12
|
+
def privilege
|
13
|
+
:management
|
14
|
+
end
|
15
|
+
|
16
|
+
def category
|
17
|
+
:restricted_stock
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
11
21
|
def activate!
|
12
22
|
can :manage, Spree::StockItem, stock_location_id: location_ids
|
13
23
|
can :read, Spree::StockLocation, id: location_ids
|
@@ -7,6 +7,16 @@ module Spree
|
|
7
7
|
# This permission set allows users to view information about stock items
|
8
8
|
# (also from the admin panel) and stock locations.
|
9
9
|
class StockDisplay < PermissionSets::Base
|
10
|
+
class << self
|
11
|
+
def privilege
|
12
|
+
:display
|
13
|
+
end
|
14
|
+
|
15
|
+
def category
|
16
|
+
:stock
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
10
20
|
def activate!
|
11
21
|
can [:read, :admin], Spree::StockItem
|
12
22
|
can :read, Spree::StockLocation
|
@@ -7,6 +7,16 @@ module Spree
|
|
7
7
|
# This permission set grants full control over all stock items and read
|
8
8
|
# access to locations.
|
9
9
|
class StockManagement < PermissionSets::Base
|
10
|
+
class << self
|
11
|
+
def privilege
|
12
|
+
:management
|
13
|
+
end
|
14
|
+
|
15
|
+
def category
|
16
|
+
:stock
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
10
20
|
def activate!
|
11
21
|
can :manage, Spree::StockItem
|
12
22
|
can :read, Spree::StockLocation
|
@@ -8,6 +8,16 @@ module Spree
|
|
8
8
|
#
|
9
9
|
# It grants permission to perform any read or write action on any resource.
|
10
10
|
class SuperUser < PermissionSets::Base
|
11
|
+
class << self
|
12
|
+
def privilege
|
13
|
+
:other
|
14
|
+
end
|
15
|
+
|
16
|
+
def category
|
17
|
+
:super_user
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
11
21
|
def activate!
|
12
22
|
can :manage, :all
|
13
23
|
end
|
@@ -7,6 +7,16 @@ module Spree
|
|
7
7
|
# This permission set allows users to view all related information about
|
8
8
|
# users, roles and store credits, also from the admin panel.
|
9
9
|
class UserDisplay < PermissionSets::Base
|
10
|
+
class << self
|
11
|
+
def privilege
|
12
|
+
:display
|
13
|
+
end
|
14
|
+
|
15
|
+
def category
|
16
|
+
:user
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
10
20
|
def activate!
|
11
21
|
can [:read, :admin, :edit, :addresses, :orders, :items], Spree.user_class
|
12
22
|
can [:read, :admin], Spree::StoreCredit
|
@@ -12,6 +12,16 @@ module Spree
|
|
12
12
|
# - Roles
|
13
13
|
# - API keys
|
14
14
|
class UserManagement < PermissionSets::Base
|
15
|
+
class << self
|
16
|
+
def privilege
|
17
|
+
:management
|
18
|
+
end
|
19
|
+
|
20
|
+
def category
|
21
|
+
:user
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
15
25
|
def activate!
|
16
26
|
can [:admin, :read, :create, :update, :save_in_address_book, :remove_from_address_book, :addresses, :orders, :items], Spree.user_class
|
17
27
|
|
@@ -9,8 +9,6 @@ require 'spree/permission_sets/order_display'
|
|
9
9
|
require 'spree/permission_sets/order_management'
|
10
10
|
require 'spree/permission_sets/product_display'
|
11
11
|
require 'spree/permission_sets/product_management'
|
12
|
-
require 'spree/permission_sets/promotion_display'
|
13
|
-
require 'spree/permission_sets/promotion_management'
|
14
12
|
require 'spree/permission_sets/restricted_stock_display'
|
15
13
|
require 'spree/permission_sets/restricted_stock_management'
|
16
14
|
require 'spree/permission_sets/stock_display'
|
@@ -95,7 +95,7 @@ module Spree
|
|
95
95
|
:number, :month, :year, :expiry, :verification_value,
|
96
96
|
:first_name, :last_name, :cc_type, :gateway_customer_profile_id,
|
97
97
|
:gateway_payment_profile_id, :last_digits, :name, :encrypted_data,
|
98
|
-
:wallet_payment_source_id, address_attributes:
|
98
|
+
:wallet_payment_source_id, address_attributes:
|
99
99
|
]
|
100
100
|
|
101
101
|
@@stock_item_attributes = [:variant, :stock_location, :backorderable, :variant_id]
|
@@ -153,7 +153,7 @@ module Spree
|
|
153
153
|
|
154
154
|
@@checkout_payment_attributes = [
|
155
155
|
payments_attributes: payment_attributes + [
|
156
|
-
source_attributes:
|
156
|
+
source_attributes:
|
157
157
|
]
|
158
158
|
]
|
159
159
|
|
@@ -19,7 +19,7 @@ module Spree::Preferences
|
|
19
19
|
|
20
20
|
def exist?(key)
|
21
21
|
@cache.exist?(key) ||
|
22
|
-
should_persist? && Spree::Preference.where(key:
|
22
|
+
should_persist? && Spree::Preference.where(key:).exists?
|
23
23
|
end
|
24
24
|
|
25
25
|
def get(key)
|
@@ -35,7 +35,7 @@ module Spree::Preferences
|
|
35
35
|
# has been cleared from the cache
|
36
36
|
|
37
37
|
# does it exist in the database?
|
38
|
-
if preference = Spree::Preference.find_by(key:
|
38
|
+
if preference = Spree::Preference.find_by(key:)
|
39
39
|
# it does exist
|
40
40
|
val = preference.value
|
41
41
|
else
|
@@ -9,8 +9,8 @@
|
|
9
9
|
|
10
10
|
db_host =
|
11
11
|
case adapter
|
12
|
-
when '
|
13
|
-
when '
|
12
|
+
when 'mysql2' then ENV['DB_MYSQL_HOST'] || ENV['DB_HOST']
|
13
|
+
when 'postgresql' then ENV['DB_POSTGRES_HOST'] || ENV['DB_HOST']
|
14
14
|
else ENV['DB_HOST']
|
15
15
|
end
|
16
16
|
|
@@ -4,21 +4,6 @@ module DummyApp
|
|
4
4
|
module Migrations
|
5
5
|
extend self
|
6
6
|
|
7
|
-
# Ensure database exists
|
8
|
-
def database_exists?
|
9
|
-
ActiveRecord::Base.connection
|
10
|
-
rescue ActiveRecord::NoDatabaseError
|
11
|
-
false
|
12
|
-
else
|
13
|
-
true
|
14
|
-
end
|
15
|
-
|
16
|
-
def needs_migration?
|
17
|
-
return true if !database_exists?
|
18
|
-
|
19
|
-
ActiveRecord::Base.connection.migration_context.needs_migration?
|
20
|
-
end
|
21
|
-
|
22
7
|
def auto_migrate
|
23
8
|
if needs_migration?
|
24
9
|
puts "Configuration changed. Re-running migrations"
|
@@ -35,6 +20,14 @@ module DummyApp
|
|
35
20
|
|
36
21
|
private
|
37
22
|
|
23
|
+
def needs_migration?
|
24
|
+
ActiveRecord::Migration.check_all_pending!
|
25
|
+
rescue ActiveRecord::PendingMigrationError, ActiveRecord::NoDatabaseError
|
26
|
+
true
|
27
|
+
else
|
28
|
+
false
|
29
|
+
end
|
30
|
+
|
38
31
|
def sh(cmd)
|
39
32
|
puts cmd
|
40
33
|
system cmd
|
@@ -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
|
@@ -46,11 +56,6 @@ module DummyApp
|
|
46
56
|
class Application < ::Rails::Application
|
47
57
|
config.load_defaults("#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}")
|
48
58
|
|
49
|
-
if Rails.gem_version >= Gem::Version.new('7.1')
|
50
|
-
config.action_controller.raise_on_missing_callback_actions = true
|
51
|
-
config.action_dispatch.show_exceptions = :none
|
52
|
-
end
|
53
|
-
|
54
59
|
# Make the test environment more production-like:
|
55
60
|
config.action_controller.allow_forgery_protection = false
|
56
61
|
config.action_controller.default_protect_from_forgery = false
|
@@ -68,8 +73,13 @@ module DummyApp
|
|
68
73
|
config.cache_classes = true
|
69
74
|
|
70
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
|
71
82
|
config.consider_all_requests_local = true
|
72
|
-
config.action_dispatch.show_exceptions = false # Should be :none for Rails 7.1+
|
73
83
|
config.active_support.deprecation = :stderr
|
74
84
|
config.log_level = :debug
|
75
85
|
|
@@ -148,8 +158,3 @@ Spree.config do |config|
|
|
148
158
|
config.taxon_attachment_module = 'Spree::Taxon::PaperclipAttachment'
|
149
159
|
end
|
150
160
|
end
|
151
|
-
|
152
|
-
# Raise on deprecation warnings
|
153
|
-
if ENV['SOLIDUS_RAISE_DEPRECATIONS'].present?
|
154
|
-
Spree.deprecator.behavior = :raise
|
155
|
-
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,17 @@ 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)
|
47
47
|
create(:line_item, attributes)
|
48
48
|
end
|
49
49
|
order.line_items.reload
|
50
50
|
|
51
|
-
create(:shipment, order
|
51
|
+
create(:shipment, order:, cost: evaluator.shipment_cost, shipping_method: evaluator.shipping_method, stock_location: evaluator.stock_location)
|
52
52
|
order.shipments.reload
|
53
53
|
|
54
54
|
order.recalculate
|
55
55
|
end
|
56
56
|
|
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
57
|
factory :order_ready_to_complete do
|
77
58
|
state { 'confirm' }
|
78
59
|
payment_state { 'checkout' }
|
@@ -84,7 +65,7 @@ FactoryBot.define do
|
|
84
65
|
after(:create) do |order, evaluator|
|
85
66
|
create(evaluator.payment_type, {
|
86
67
|
amount: order.total,
|
87
|
-
order
|
68
|
+
order:,
|
88
69
|
state: order.payment_state
|
89
70
|
})
|
90
71
|
|
@@ -107,7 +88,7 @@ FactoryBot.define do
|
|
107
88
|
|
108
89
|
factory :completed_order_with_pending_payment do
|
109
90
|
after(:create) do |order|
|
110
|
-
create(:payment, amount: order.total, order
|
91
|
+
create(:payment, amount: order.total, order:, state: 'pending')
|
111
92
|
end
|
112
93
|
end
|
113
94
|
|
@@ -120,7 +101,7 @@ FactoryBot.define do
|
|
120
101
|
end
|
121
102
|
|
122
103
|
after(:create) do |order, evaluator|
|
123
|
-
create(evaluator.payment_type, amount: order.total, order
|
104
|
+
create(evaluator.payment_type, amount: order.total, order:, state: 'completed')
|
124
105
|
order.shipments.each do |shipment|
|
125
106
|
shipment.update_column('state', 'ready')
|
126
107
|
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
|
)
|