spree_core 5.3.4 → 5.4.0.beta2
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/finders/spree/orders/find_complete.rb +33 -2
- data/app/finders/spree/products/find.rb +1 -28
- data/app/finders/spree/stores/find_default.rb +17 -0
- data/app/finders/spree/variants/visible_finder.rb +1 -0
- data/app/helpers/spree/addresses_helper.rb +1 -2
- data/app/helpers/spree/base_helper.rb +6 -58
- data/app/mailers/spree/base_mailer.rb +4 -3
- data/app/models/concerns/spree/adjustment_source.rb +0 -8
- data/app/models/concerns/spree/admin_user_methods.rb +32 -2
- data/app/models/concerns/spree/image_methods.rb +4 -0
- data/app/models/concerns/spree/metadata.rb +10 -0
- data/app/models/concerns/spree/number_as_param.rb +5 -3
- data/app/models/concerns/spree/prefixed_id.rb +82 -0
- data/app/models/concerns/spree/product_scopes.rb +35 -65
- data/app/models/concerns/spree/publishable.rb +47 -47
- data/app/models/concerns/spree/{multi_store_resource.rb → store_scoped_resource.rb} +1 -10
- data/app/models/concerns/spree/stores/markets.rb +124 -0
- data/app/models/concerns/spree/user_methods.rb +7 -7
- data/app/models/concerns/spree/user_payment_source.rb +2 -0
- data/app/models/concerns/spree/user_roles.rb +1 -0
- data/app/models/concerns/spree/vat_price_calculation.rb +2 -2
- data/app/models/spree/ability.rb +18 -5
- data/app/models/spree/address.rb +33 -2
- data/app/models/spree/adjustable/promotion_accumulator.rb +1 -1
- data/app/models/spree/adjustment.rb +3 -20
- data/app/models/spree/api_key.rb +102 -0
- data/app/models/spree/asset.rb +2 -0
- data/app/models/spree/authentication/strategies/base_strategy.rb +55 -0
- data/app/models/spree/authentication/strategies/email_password_strategy.rb +47 -0
- data/app/models/spree/base.rb +1 -0
- data/app/models/spree/calculator.rb +2 -0
- data/app/models/spree/country.rb +60 -0
- data/app/models/spree/coupon_code.rb +2 -0
- data/app/models/spree/credit_card.rb +2 -27
- data/app/models/spree/current.rb +45 -4
- data/app/models/spree/customer_group.rb +2 -0
- data/app/models/spree/customer_return.rb +2 -0
- data/app/models/spree/digital.rb +2 -0
- data/app/models/spree/digital_link.rb +2 -0
- data/app/models/spree/export.rb +3 -2
- data/app/models/spree/exports/products.rb +0 -6
- data/app/models/spree/fulfilment_changer.rb +8 -2
- data/app/models/spree/gateway/bogus.rb +69 -9
- data/app/models/spree/gateway.rb +0 -3
- data/app/models/spree/gateway_customer.rb +2 -0
- data/app/models/spree/gift_card.rb +2 -0
- data/app/models/spree/gift_card_batch.rb +6 -0
- data/app/models/spree/image/configuration/active_storage.rb +0 -2
- data/app/models/spree/image.rb +25 -31
- data/app/models/spree/import.rb +5 -3
- data/app/models/spree/import_mapping.rb +2 -0
- data/app/models/spree/import_row.rb +2 -0
- data/app/models/spree/import_schemas/customers.rb +21 -0
- data/app/models/spree/imports/customers.rb +9 -0
- data/app/models/spree/integration.rb +2 -0
- data/app/models/spree/inventory_unit.rb +2 -0
- data/app/models/spree/invitation.rb +6 -6
- data/app/models/spree/legacy_admin_user.rb +31 -0
- data/app/models/spree/legacy_user.rb +19 -1
- data/app/models/spree/line_item.rb +15 -4
- data/app/models/spree/log_entry.rb +10 -5
- data/app/models/spree/market.rb +83 -0
- data/app/models/spree/market_country.rb +25 -0
- data/app/models/spree/metafield.rb +2 -0
- data/app/models/spree/metafield_definition.rb +2 -0
- data/app/models/spree/newsletter_subscriber.rb +2 -0
- data/app/models/spree/option_type.rb +2 -0
- data/app/models/spree/option_value.rb +2 -0
- data/app/models/spree/order/address_book.rb +2 -1
- data/app/models/spree/order/checkout.rb +0 -18
- data/app/models/spree/order.rb +93 -56
- data/app/models/spree/payment/gateway_options.rb +2 -2
- data/app/models/spree/payment/processing.rb +5 -5
- data/app/models/spree/payment.rb +7 -2
- data/app/models/spree/payment_capture_event.rb +2 -0
- data/app/models/spree/payment_connection_error.rb +3 -0
- data/app/models/spree/payment_method/check.rb +1 -1
- data/app/models/spree/payment_method/store_credit.rb +5 -5
- data/app/models/spree/payment_method.rb +59 -1
- data/app/models/spree/payment_response.rb +70 -0
- data/app/models/spree/payment_session.rb +109 -0
- data/app/models/spree/payment_sessions/bogus.rb +4 -0
- data/app/models/spree/payment_setup_session.rb +79 -0
- data/app/models/spree/payment_source.rb +2 -0
- data/app/models/spree/permission_sets/default_customer.rb +19 -5
- data/app/models/spree/permission_sets/product_display.rb +0 -2
- data/app/models/spree/permission_sets/product_management.rb +0 -2
- data/app/models/spree/policy.rb +2 -0
- data/app/models/spree/price.rb +26 -2
- data/app/models/spree/price_list.rb +2 -0
- data/app/models/spree/price_rule.rb +2 -0
- data/app/models/spree/price_rules/market_rule.rb +19 -0
- data/app/models/spree/product.rb +45 -101
- data/app/models/spree/promotion/rules/country.rb +1 -1
- data/app/models/spree/promotion.rb +5 -15
- data/app/models/spree/promotion_action.rb +2 -0
- data/app/models/spree/promotion_category.rb +2 -0
- data/app/models/spree/promotion_handler/coupon.rb +3 -3
- data/app/models/spree/promotion_rule.rb +2 -0
- data/app/models/spree/prototype.rb +2 -3
- data/app/models/spree/refund.rb +8 -2
- data/app/models/spree/refund_reason.rb +2 -0
- data/app/models/spree/reimbursement/credit.rb +2 -0
- data/app/models/spree/reimbursement.rb +2 -0
- data/app/models/spree/reimbursement_type.rb +2 -0
- data/app/models/spree/report.rb +3 -1
- data/app/models/spree/return_authorization.rb +2 -0
- data/app/models/spree/return_authorization_reason.rb +2 -0
- data/app/models/spree/return_item.rb +2 -0
- data/app/models/spree/role.rb +2 -0
- data/app/models/spree/shipment/emails.rb +1 -0
- data/app/models/spree/shipment.rb +11 -1
- data/app/models/spree/shipping_category.rb +5 -3
- data/app/models/spree/shipping_method.rb +2 -0
- data/app/models/spree/shipping_method_category.rb +2 -0
- data/app/models/spree/shipping_rate.rb +2 -0
- data/app/models/spree/state_change.rb +2 -0
- data/app/models/spree/stock_item.rb +2 -0
- data/app/models/spree/stock_location.rb +2 -0
- data/app/models/spree/stock_movement.rb +2 -0
- data/app/models/spree/stock_transfer.rb +2 -1
- data/app/models/spree/store.rb +111 -219
- data/app/models/spree/store_credit.rb +6 -0
- data/app/models/spree/store_credit_category.rb +2 -0
- data/app/models/spree/store_credit_event.rb +2 -0
- data/app/models/spree/store_credit_type.rb +2 -0
- data/app/models/spree/store_product.rb +2 -0
- data/app/models/spree/tax_category.rb +3 -11
- data/app/models/spree/tax_rate.rb +2 -0
- data/app/models/spree/taxon.rb +2 -15
- data/app/models/spree/taxon_rule.rb +2 -0
- data/app/models/spree/taxonomy.rb +2 -0
- data/app/models/spree/user_identity.rb +81 -0
- data/app/models/spree/variant.rb +15 -43
- data/app/models/spree/webhook_delivery.rb +2 -0
- data/app/models/spree/webhook_endpoint.rb +2 -0
- data/app/models/spree/wished_item.rb +15 -0
- data/app/models/spree/wishlist.rb +2 -8
- data/app/models/spree/zone.rb +3 -10
- data/app/presenters/spree/filters/price_presenter.rb +1 -0
- data/app/presenters/spree/filters/price_range_presenter.rb +1 -0
- data/app/presenters/spree/filters/quantified_price_range_presenter.rb +1 -0
- data/app/presenters/spree/product_summary_presenter.rb +1 -0
- data/app/services/spree/addresses/helper.rb +22 -3
- data/app/services/spree/cart/add_item.rb +8 -4
- data/app/services/spree/cart/associate.rb +19 -6
- data/app/services/spree/cart/create.rb +13 -2
- data/app/services/spree/checkout/select_shipping_method.rb +13 -1
- data/app/services/spree/classifications/reposition.rb +5 -0
- data/app/services/spree/imports/row_processors/customer.rb +70 -0
- data/app/services/spree/orders/approve.rb +5 -3
- data/app/services/spree/orders/cancel.rb +9 -4
- data/app/services/spree/products/duplicator.rb +0 -12
- data/app/services/spree/products/prepare_nested_attributes.rb +1 -13
- data/app/services/spree/sample_data/import_runner.rb +54 -0
- data/app/services/spree/sample_data/loader.rb +78 -0
- data/app/services/spree/seeds/admin_user.rb +2 -3
- data/app/services/spree/seeds/all.rb +1 -0
- data/app/services/spree/seeds/api_keys.rb +16 -0
- data/app/services/spree/seeds/stores.rb +2 -4
- data/app/sorters/spree/orders/sort.rb +4 -0
- data/app/subscribers/spree/product_metrics_subscriber.rb +4 -4
- data/config/brakeman.ignore +120 -0
- data/config/locales/en.yml +23 -21
- data/db/migrate/20210914000000_spree_four_three.rb +0 -38
- data/db/migrate/20210915064329_add_metadata_to_spree_multiple_tables.rb +0 -1
- data/db/migrate/20250923141900_create_spree_user_identities.rb +17 -0
- data/db/migrate/20260123000000_create_spree_api_keys.rb +19 -0
- data/db/migrate/20260131000000_add_thumbnail_id_to_spree_variants_and_products.rb +9 -0
- data/db/migrate/20260213000000_create_spree_payment_sessions.rb +27 -0
- data/db/migrate/20260218000000_create_spree_payment_setup_sessions.rb +24 -0
- data/db/migrate/20260220000000_create_spree_markets.rb +29 -0
- data/db/migrate/20260226000000_add_locale_to_spree_orders.rb +5 -0
- data/db/migrate/20260226100000_add_token_digest_to_spree_api_keys.rb +21 -0
- data/db/sample_data/customers.csv +21 -0
- data/db/sample_data/metafield_definitions.rb +7 -0
- data/db/sample_data/orders.rb +131 -0
- data/db/sample_data/payment_methods.rb +17 -0
- data/db/sample_data/products.csv +1083 -0
- data/db/sample_data/promotions.rb +8 -0
- data/db/sample_data/shipping_methods.rb +39 -0
- data/lib/generators/spree/authentication/devise/devise_generator.rb +2 -2
- data/lib/generators/spree/authentication/dummy/dummy_generator.rb +54 -0
- data/lib/generators/spree/authentication/dummy/templates/authentication_helpers.rb.tt +52 -0
- data/lib/generators/spree/authentication/dummy/templates/create_spree_admin_users.rb.tt +33 -0
- data/lib/generators/spree/cursor_rules/templates/spree_rules.mdc +1 -3
- data/lib/generators/spree/dummy/dummy_generator.rb +1 -1
- data/lib/spree/core/configuration.rb +1 -3
- data/lib/spree/core/controller_helpers/common.rb +6 -0
- data/lib/spree/core/controller_helpers/currency.rb +5 -0
- data/lib/spree/core/controller_helpers/order.rb +5 -1
- data/lib/spree/core/controller_helpers/store.rb +1 -1
- data/lib/spree/core/controller_helpers/strong_parameters.rb +1 -2
- data/lib/spree/core/dependencies.rb +3 -11
- data/lib/spree/core/engine.rb +17 -17
- data/lib/spree/core/pricing/context.rb +6 -3
- data/lib/spree/core/pricing/resolver.rb +1 -9
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core.rb +14 -29
- data/lib/spree/database_type_utilities.rb +7 -0
- data/lib/spree/events.rb +17 -10
- data/lib/spree/money.rb +2 -9
- data/lib/spree/permitted_attributes.rb +20 -20
- data/lib/spree/testing_support/capybara_config.rb +2 -2
- data/lib/spree/testing_support/common_rake.rb +15 -4
- data/lib/spree/testing_support/factories/api_key_factory.rb +19 -0
- data/lib/spree/testing_support/factories/custom_domain_factory.rb +7 -5
- data/lib/spree/testing_support/factories/import_factory.rb +12 -0
- data/lib/spree/testing_support/factories/market_factory.rb +35 -0
- data/lib/spree/testing_support/factories/order_factory.rb +4 -1
- data/lib/spree/testing_support/factories/payment_method_factory.rb +3 -6
- data/lib/spree/testing_support/factories/payment_session_factory.rb +47 -0
- data/lib/spree/testing_support/factories/payment_setup_session_factory.rb +31 -0
- data/lib/spree/testing_support/factories/price_rule_factory.rb +10 -0
- data/lib/spree/testing_support/factories/product_factory.rb +0 -7
- data/lib/spree/testing_support/factories/prototype_factory.rb +0 -2
- data/lib/spree/testing_support/factories/user_identity_factory.rb +15 -0
- data/lib/spree/testing_support/store.rb +3 -2
- data/lib/spree/webhooks.rb +7 -7
- data/lib/tasks/core.rake +0 -265
- data/lib/tasks/images.rake +20 -0
- data/lib/tasks/markets.rake +40 -0
- data/lib/tasks/sample_data.rake +15 -0
- data/spec/fixtures/files/customers_import.csv +4 -0
- metadata +101 -154
- data/LICENSE.md +0 -57
- data/app/finders/spree/posts/find.rb +0 -137
- data/app/finders/spree/product_properties/find_available.rb +0 -20
- data/app/finders/spree/stores/find_current.rb +0 -28
- data/app/helpers/spree/mail_helper.rb +0 -27
- data/app/mailers/spree/test_mailer.rb +0 -8
- data/app/models/action_text/video_embed.rb +0 -13
- data/app/models/concerns/spree/has_one_link.rb +0 -42
- data/app/models/concerns/spree/linkable.rb +0 -9
- data/app/models/concerns/spree/previewable.rb +0 -17
- data/app/models/spree/custom_domain.rb +0 -59
- data/app/models/spree/data_feed/google.rb +0 -15
- data/app/models/spree/data_feed.rb +0 -40
- data/app/models/spree/gateway/bogus_simple.rb +0 -24
- data/app/models/spree/post.rb +0 -106
- data/app/models/spree/post_category.rb +0 -44
- data/app/models/spree/product_property.rb +0 -51
- data/app/models/spree/property.rb +0 -86
- data/app/models/spree/property_prototype.rb +0 -9
- data/app/models/spree/store_favicon_image.rb +0 -20
- data/app/models/spree/store_logo.rb +0 -4
- data/app/models/spree/store_mailer_logo.rb +0 -7
- data/app/models/spree/taxon_image/configuration/active_storage.rb +0 -26
- data/app/models/spree/taxon_image.rb +0 -20
- data/app/presenters/spree/filters/properties_presenter.rb +0 -23
- data/app/presenters/spree/filters/property_presenter.rb +0 -42
- data/app/serializers/spree/events/asset_serializer.rb +0 -22
- data/app/serializers/spree/events/base_serializer.rb +0 -61
- data/app/serializers/spree/events/customer_return_serializer.rb +0 -20
- data/app/serializers/spree/events/digital_link_serializer.rb +0 -20
- data/app/serializers/spree/events/digital_serializer.rb +0 -18
- data/app/serializers/spree/events/export_serializer.rb +0 -22
- data/app/serializers/spree/events/gift_card_batch_serializer.rb +0 -24
- data/app/serializers/spree/events/gift_card_serializer.rb +0 -29
- data/app/serializers/spree/events/image_serializer.rb +0 -9
- data/app/serializers/spree/events/import_row_serializer.rb +0 -23
- data/app/serializers/spree/events/import_serializer.rb +0 -24
- data/app/serializers/spree/events/invitation_serializer.rb +0 -28
- data/app/serializers/spree/events/line_item_serializer.rb +0 -31
- data/app/serializers/spree/events/newsletter_subscriber_serializer.rb +0 -21
- data/app/serializers/spree/events/order_serializer.rb +0 -39
- data/app/serializers/spree/events/payment_serializer.rb +0 -24
- data/app/serializers/spree/events/post_category_serializer.rb +0 -20
- data/app/serializers/spree/events/post_serializer.rb +0 -26
- data/app/serializers/spree/events/price_serializer.rb +0 -22
- data/app/serializers/spree/events/product_serializer.rb +0 -24
- data/app/serializers/spree/events/promotion_serializer.rb +0 -32
- data/app/serializers/spree/events/refund_serializer.rb +0 -23
- data/app/serializers/spree/events/reimbursement_serializer.rb +0 -22
- data/app/serializers/spree/events/report_serializer.rb +0 -23
- data/app/serializers/spree/events/return_authorization_serializer.rb +0 -22
- data/app/serializers/spree/events/return_item_serializer.rb +0 -27
- data/app/serializers/spree/events/shipment_serializer.rb +0 -24
- data/app/serializers/spree/events/stock_item_serializer.rb +0 -22
- data/app/serializers/spree/events/stock_movement_serializer.rb +0 -22
- data/app/serializers/spree/events/stock_transfer_serializer.rb +0 -22
- data/app/serializers/spree/events/store_credit_serializer.rb +0 -30
- data/app/serializers/spree/events/user_serializer.rb +0 -18
- data/app/serializers/spree/events/variant_serializer.rb +0 -34
- data/app/serializers/spree/events/wished_item_serializer.rb +0 -20
- data/app/serializers/spree/events/wishlist_serializer.rb +0 -22
- data/app/services/spree/data_feeds/google/optional_attributes.rb +0 -23
- data/app/services/spree/data_feeds/google/optional_sub_attributes.rb +0 -21
- data/app/services/spree/data_feeds/google/products_list.rb +0 -14
- data/app/services/spree/data_feeds/google/required_attributes.rb +0 -68
- data/app/services/spree/data_feeds/google/rss.rb +0 -109
- data/app/sorters/spree/posts/sort.rb +0 -40
- data/app/views/action_text/video_embeds/_thumbnail.html.erb +0 -1
- data/app/views/action_text/video_embeds/_video_embed.html.erb +0 -3
- data/app/views/layouts/action_text/contents/_content.html.erb +0 -3
- data/app/views/spree/test_mailer/test_email.html.erb +0 -40
- data/app/views/spree/test_mailer/test_email.text.erb +0 -4
- data/config/initializers/oembed.rb +0 -1
- data/db/migrate/20221229132350_create_spree_data_feed_settings.rb +0 -14
- data/db/migrate/20230109084253_create_product_property_translations.rb +0 -24
- data/db/migrate/20230109105943_create_property_translations.rb +0 -24
- data/db/migrate/20230415155958_rename_data_feed_settings_table.rb +0 -5
- data/db/migrate/20230415160828_rename_data_feed_table_columns.rb +0 -7
- data/db/migrate/20230415161226_add_indexes_to_data_feeds_table.rb +0 -5
- data/db/migrate/20230512094803_rename_data_feeds_column_provider_to_type.rb +0 -5
- data/db/migrate/20240914153106_add_display_on_to_spree_properties.rb +0 -5
- data/db/migrate/20240915144935_add_position_to_spree_properties.rb +0 -6
- data/db/migrate/20250121160028_create_spree_posts_and_spree_post_categories.rb +0 -33
- data/db/migrate/20250127083740_add_kind_to_spree_properties.rb +0 -5
- data/db/migrate/20250217171018_create_action_text_video_embeds.rb +0 -11
- data/db/migrate/20250305121657_remove_spree_posts_indices.rb +0 -7
- data/db/migrate/20250730154601_add_unique_index_on_spree_properties_name.rb +0 -24
- data/lib/spree/core/controller_helpers/search.rb +0 -17
- data/lib/spree/core/product_filters.rb +0 -204
- data/lib/spree/core/query_filters/comparable.rb +0 -46
- data/lib/spree/core/query_filters/date.rb +0 -8
- data/lib/spree/core/query_filters/number.rb +0 -8
- data/lib/spree/core/query_filters/text.rb +0 -32
- data/lib/spree/core/query_filters.rb +0 -11
- data/lib/spree/core/search/base.rb +0 -144
- data/lib/spree/testing_support/factories/favicon_image_factory.rb +0 -9
- data/lib/spree/testing_support/factories/google_data_feed_factory.rb +0 -7
- data/lib/spree/testing_support/factories/post_category_factory.rb +0 -7
- data/lib/spree/testing_support/factories/post_factory.rb +0 -22
- data/lib/spree/testing_support/factories/product_property_factory.rb +0 -7
- data/lib/spree/testing_support/factories/property_factory.rb +0 -28
- data/lib/spree/testing_support/factories/taxon_image_factory.rb +0 -9
- data/lib/spree/testing_support/flash.rb +0 -25
- data/lib/spree/testing_support/flatpickr_capybara.rb +0 -124
- data/lib/tasks/exchanges.rake +0 -66
data/lib/spree/core.rb
CHANGED
|
@@ -11,13 +11,14 @@ require 'action_cable/engine'
|
|
|
11
11
|
require 'mail'
|
|
12
12
|
require 'action_mailer/railtie'
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
require 'acts_as_list'
|
|
16
16
|
require 'acts-as-taggable-on'
|
|
17
17
|
require 'awesome_nested_set'
|
|
18
18
|
require 'cancan'
|
|
19
19
|
require 'countries/global'
|
|
20
20
|
require 'friendly_id'
|
|
21
|
+
require 'jwt'
|
|
21
22
|
require 'monetize'
|
|
22
23
|
require 'mobility'
|
|
23
24
|
require 'name_of_person'
|
|
@@ -25,12 +26,12 @@ require 'paranoia'
|
|
|
25
26
|
require 'ransack'
|
|
26
27
|
require 'state_machines-activerecord'
|
|
27
28
|
require 'active_storage_validations'
|
|
28
|
-
require 'request_store'
|
|
29
29
|
require 'wannabe_bool'
|
|
30
30
|
require 'geocoder'
|
|
31
|
-
|
|
31
|
+
|
|
32
32
|
require 'safely_block'
|
|
33
33
|
require 'ar_lazy_preload'
|
|
34
|
+
require 'sqids'
|
|
34
35
|
|
|
35
36
|
# This is required because ActiveModel::Validations#invalid? conflicts with the
|
|
36
37
|
# invalid state of a Payment. In the future this should be removed.
|
|
@@ -40,7 +41,7 @@ module Spree
|
|
|
40
41
|
mattr_accessor :base_class, :user_class, :admin_user_class,
|
|
41
42
|
:private_storage_service_name, :public_storage_service_name,
|
|
42
43
|
:cdn_host, :root_domain, :searcher_class, :events_adapter_class, :queues,
|
|
43
|
-
:google_places_api_key
|
|
44
|
+
:google_places_api_key
|
|
44
45
|
|
|
45
46
|
def self.base_class(constantize: true)
|
|
46
47
|
@@base_class ||= 'Spree::Base'
|
|
@@ -60,8 +61,6 @@ module Spree
|
|
|
60
61
|
end
|
|
61
62
|
|
|
62
63
|
def self.admin_user_class(constantize: true)
|
|
63
|
-
@@admin_user_class ||= @@user_class
|
|
64
|
-
|
|
65
64
|
if @@admin_user_class.is_a?(Class)
|
|
66
65
|
raise 'Spree.admin_user_class MUST be a String or Symbol object, not a Class object.'
|
|
67
66
|
elsif @@admin_user_class.is_a?(String) || @@admin_user_class.is_a?(Symbol)
|
|
@@ -109,18 +108,19 @@ module Spree
|
|
|
109
108
|
themes: :default,
|
|
110
109
|
addresses: :default,
|
|
111
110
|
gift_cards: :default,
|
|
112
|
-
webhooks: :default
|
|
111
|
+
webhooks: :default,
|
|
112
|
+
api_keys: :default
|
|
113
113
|
)
|
|
114
114
|
end
|
|
115
115
|
|
|
116
|
-
|
|
117
|
-
|
|
116
|
+
# @deprecated Spree.searcher_class is deprecated and will be removed in Spree 5.5.
|
|
117
|
+
def self.searcher_class=(value)
|
|
118
|
+
Spree::Deprecation.warn('Spree.searcher_class is deprecated and will be removed in Spree 5.5. Please remove it from your initializer.')
|
|
119
|
+
@@searcher_class = value
|
|
120
|
+
end
|
|
118
121
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
elsif @@searcher_class.is_a?(String) || @@searcher_class.is_a?(Symbol)
|
|
122
|
-
constantize ? @@searcher_class.to_s.constantize : @@searcher_class.to_s
|
|
123
|
-
end
|
|
122
|
+
def self.searcher_class(constantize: true)
|
|
123
|
+
@@searcher_class
|
|
124
124
|
end
|
|
125
125
|
|
|
126
126
|
# Returns the events adapter class used for publishing and subscribing to events.
|
|
@@ -144,10 +144,6 @@ module Spree
|
|
|
144
144
|
@@google_places_api_key
|
|
145
145
|
end
|
|
146
146
|
|
|
147
|
-
def self.screenshot_api_token
|
|
148
|
-
@@screenshot_api_token
|
|
149
|
-
end
|
|
150
|
-
|
|
151
147
|
def self.always_use_translations?
|
|
152
148
|
Spree::Config.always_use_translations
|
|
153
149
|
end
|
|
@@ -246,14 +242,6 @@ module Spree
|
|
|
246
242
|
Rails.application.config.spree.line_item_comparison_hooks = value
|
|
247
243
|
end
|
|
248
244
|
|
|
249
|
-
def self.data_feed_types
|
|
250
|
-
Rails.application.config.spree.data_feed_types
|
|
251
|
-
end
|
|
252
|
-
|
|
253
|
-
def self.data_feed_types=(value)
|
|
254
|
-
Rails.application.config.spree.data_feed_types = value
|
|
255
|
-
end
|
|
256
|
-
|
|
257
245
|
def self.export_types
|
|
258
246
|
Rails.application.config.spree.export_types
|
|
259
247
|
end
|
|
@@ -414,7 +402,6 @@ module Spree
|
|
|
414
402
|
end
|
|
415
403
|
|
|
416
404
|
module Core
|
|
417
|
-
autoload :ProductFilters, 'spree/core/product_filters'
|
|
418
405
|
autoload :TokenGenerator, 'spree/core/token_generator'
|
|
419
406
|
|
|
420
407
|
class GatewayError < RuntimeError; end
|
|
@@ -441,11 +428,9 @@ require 'spree/webhooks'
|
|
|
441
428
|
|
|
442
429
|
require 'spree/core/partials'
|
|
443
430
|
require 'spree/core/importer'
|
|
444
|
-
require 'spree/core/query_filters'
|
|
445
431
|
require 'spree/core/controller_helpers/auth'
|
|
446
432
|
require 'spree/core/controller_helpers/common'
|
|
447
433
|
require 'spree/core/controller_helpers/order'
|
|
448
|
-
require 'spree/core/controller_helpers/search'
|
|
449
434
|
require 'spree/core/controller_helpers/store'
|
|
450
435
|
require 'spree/core/controller_helpers/strong_parameters'
|
|
451
436
|
require 'spree/core/controller_helpers/locale'
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
module Spree
|
|
2
|
+
# @deprecated Use the integer constant directly instead, eg. `2_147_483_647` for 4-byte signed integer max.
|
|
3
|
+
# This module will be removed in Spree 5.5.
|
|
2
4
|
module DatabaseTypeUtilities
|
|
3
5
|
# Maximum value for a 4-byte signed integer (default database integer type)
|
|
4
6
|
INTEGER_MAX = (2**31) - 1
|
|
5
7
|
|
|
6
8
|
def self.maximum_value_for(data_type)
|
|
9
|
+
Spree::Deprecation.warn(
|
|
10
|
+
'Spree::DatabaseTypeUtilities.maximum_value_for is deprecated and will be removed in Spree 5.5. ' \
|
|
11
|
+
'Use the integer constant directly instead, eg. 2_147_483_647 for 4-byte signed integer max.'
|
|
12
|
+
)
|
|
13
|
+
|
|
7
14
|
case data_type
|
|
8
15
|
when :integer
|
|
9
16
|
INTEGER_MAX
|
data/lib/spree/events.rb
CHANGED
|
@@ -177,10 +177,11 @@ module Spree
|
|
|
177
177
|
# Check if events are enabled
|
|
178
178
|
#
|
|
179
179
|
# Events can be temporarily disabled using Spree::Events.disable { ... }
|
|
180
|
+
# or globally with Spree::Events.disable!
|
|
180
181
|
#
|
|
181
182
|
# @return [Boolean]
|
|
182
183
|
def enabled?
|
|
183
|
-
!
|
|
184
|
+
!@globally_disabled && !Thread.current[:spree_events_disabled]
|
|
184
185
|
end
|
|
185
186
|
|
|
186
187
|
# Temporarily disable events within a block
|
|
@@ -195,18 +196,21 @@ module Spree
|
|
|
195
196
|
# end
|
|
196
197
|
#
|
|
197
198
|
def disable
|
|
198
|
-
previous =
|
|
199
|
-
|
|
199
|
+
previous = Thread.current[:spree_events_disabled]
|
|
200
|
+
Thread.current[:spree_events_disabled] = true
|
|
200
201
|
yield
|
|
201
202
|
ensure
|
|
202
|
-
|
|
203
|
+
Thread.current[:spree_events_disabled] = previous
|
|
203
204
|
end
|
|
204
205
|
|
|
205
206
|
# Globally disable events
|
|
206
|
-
#
|
|
207
|
+
#
|
|
208
|
+
# Uses a class-level flag that is not affected by per-request cleanup.
|
|
209
|
+
# Useful for disabling events for the entire test suite.
|
|
210
|
+
#
|
|
207
211
|
# @return [void]
|
|
208
212
|
def disable!
|
|
209
|
-
|
|
213
|
+
@globally_disabled = true
|
|
210
214
|
end
|
|
211
215
|
|
|
212
216
|
# Temporarily enable events within a block
|
|
@@ -222,18 +226,21 @@ module Spree
|
|
|
222
226
|
# end
|
|
223
227
|
#
|
|
224
228
|
def enable
|
|
225
|
-
|
|
226
|
-
|
|
229
|
+
previous_global = @globally_disabled
|
|
230
|
+
previous_thread = Thread.current[:spree_events_disabled]
|
|
231
|
+
@globally_disabled = false
|
|
232
|
+
Thread.current[:spree_events_disabled] = false
|
|
227
233
|
yield
|
|
228
234
|
ensure
|
|
229
|
-
|
|
235
|
+
@globally_disabled = previous_global
|
|
236
|
+
Thread.current[:spree_events_disabled] = previous_thread
|
|
230
237
|
end
|
|
231
238
|
|
|
232
239
|
# Globally enable events
|
|
233
240
|
# Useful for testing
|
|
234
241
|
# @return [void]
|
|
235
242
|
def enable!
|
|
236
|
-
|
|
243
|
+
@globally_disabled = false
|
|
237
244
|
end
|
|
238
245
|
end
|
|
239
246
|
end
|
data/lib/spree/money.rb
CHANGED
|
@@ -51,17 +51,10 @@ module Spree
|
|
|
51
51
|
# 1) prevent blank, breaking spaces
|
|
52
52
|
# 2) prevent escaping of HTML character entities
|
|
53
53
|
def to_html(opts = { html: true })
|
|
54
|
-
# html option is deprecated and we need to fallback to html_wrap
|
|
55
|
-
opts[:html_wrap] = opts[:html]
|
|
56
54
|
opts.delete(:html)
|
|
57
55
|
|
|
58
|
-
output = money.format(options.merge(opts))
|
|
59
|
-
|
|
60
|
-
output.gsub!(/<\/?[^>]*>/, '') # we don't want wrap every element in span
|
|
61
|
-
output = output.sub(' ', ' ').html_safe
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
output
|
|
56
|
+
output = money.format(options.merge(opts).merge(html_wrap: false))
|
|
57
|
+
output.sub(' ', ' ').html_safe
|
|
65
58
|
end
|
|
66
59
|
|
|
67
60
|
def as_json(*)
|
|
@@ -2,6 +2,7 @@ module Spree
|
|
|
2
2
|
module PermittedAttributes
|
|
3
3
|
ATTRIBUTES = [
|
|
4
4
|
:address_attributes,
|
|
5
|
+
:api_key_attributes,
|
|
5
6
|
:asset_attributes,
|
|
6
7
|
:checkout_attributes,
|
|
7
8
|
:classification_attributes,
|
|
@@ -22,6 +23,7 @@ module Spree
|
|
|
22
23
|
:inventory_unit_attributes,
|
|
23
24
|
:invitation_attributes,
|
|
24
25
|
:line_item_attributes,
|
|
26
|
+
:market_attributes,
|
|
25
27
|
:menu_attributes,
|
|
26
28
|
:menu_item_attributes,
|
|
27
29
|
:metafield_attributes,
|
|
@@ -34,16 +36,14 @@ module Spree
|
|
|
34
36
|
:page_section_attributes,
|
|
35
37
|
:payment_attributes,
|
|
36
38
|
:payment_method_attributes,
|
|
39
|
+
:payment_session_attributes,
|
|
40
|
+
:payment_setup_session_attributes,
|
|
37
41
|
:policy_attributes,
|
|
38
|
-
:post_attributes,
|
|
39
|
-
:post_category_attributes,
|
|
40
42
|
:price_list_attributes,
|
|
41
43
|
:product_attributes,
|
|
42
44
|
:promotion_attributes,
|
|
43
45
|
:promotion_rule_attributes,
|
|
44
46
|
:promotion_action_attributes,
|
|
45
|
-
:product_properties_attributes,
|
|
46
|
-
:property_attributes,
|
|
47
47
|
:refund_attributes,
|
|
48
48
|
:refund_reason_attributes,
|
|
49
49
|
:reimbursement_attributes,
|
|
@@ -80,18 +80,20 @@ module Spree
|
|
|
80
80
|
|
|
81
81
|
@@address_attributes = [
|
|
82
82
|
:id, :firstname, :lastname, :first_name, :last_name,
|
|
83
|
-
:address1, :address2, :city, :country_iso, :country_id, :state_id,
|
|
83
|
+
:address1, :address2, :city, :country_iso, :state_abbr, :country_id, :state_id,
|
|
84
84
|
:zipcode, :phone, :state_name, :alternative_phone, :company,
|
|
85
85
|
:user_id, :deleted_at, :label, :quick_checkout,
|
|
86
86
|
{ country: [:iso, :name, :iso3, :iso_name],
|
|
87
87
|
state: [:name, :abbr] }
|
|
88
88
|
]
|
|
89
89
|
|
|
90
|
+
@@api_key_attributes = [:name, :key_type]
|
|
91
|
+
|
|
90
92
|
@@asset_attributes = [:type, :viewable_id, :viewable_type, :attachment, :alt, :position]
|
|
91
93
|
|
|
92
94
|
@@checkout_attributes = [
|
|
93
95
|
:coupon_code, :email, :shipping_method_id, :special_instructions, :use_billing, :use_shipping,
|
|
94
|
-
:user_id, :bill_address_id, :ship_address_id, :accept_marketing, :signup_for_an_account, :currency,
|
|
96
|
+
:user_id, :bill_address_id, :ship_address_id, :accept_marketing, :signup_for_an_account, :currency, :locale,
|
|
95
97
|
:internal_note
|
|
96
98
|
]
|
|
97
99
|
|
|
@@ -134,7 +136,10 @@ module Spree
|
|
|
134
136
|
|
|
135
137
|
@@invitation_attributes = [:email, :expires_at, :role_id]
|
|
136
138
|
|
|
137
|
-
@@line_item_attributes = [:id, :variant_id, :quantity]
|
|
139
|
+
@@line_item_attributes = [:id, :variant_id, :quantity, { metadata: {} }]
|
|
140
|
+
|
|
141
|
+
@@market_attributes = [:name, :currency, :default_locale, :supported_locales,
|
|
142
|
+
:tax_inclusive, :default, :position, country_ids: []]
|
|
138
143
|
|
|
139
144
|
@@menu_attributes = [:name, :locale, :location]
|
|
140
145
|
|
|
@@ -162,16 +167,14 @@ module Spree
|
|
|
162
167
|
|
|
163
168
|
@@payment_method_attributes = [:name, :type, :description, :active, :display_on, :auto_capture, :position]
|
|
164
169
|
|
|
165
|
-
@@
|
|
170
|
+
@@payment_session_attributes = [:amount, :payment_method_id, { external_data: {} }]
|
|
166
171
|
|
|
167
|
-
@@
|
|
172
|
+
@@payment_setup_session_attributes = [:payment_method_id, { external_data: {} }]
|
|
168
173
|
|
|
169
|
-
@@
|
|
174
|
+
@@policy_attributes = [:name, :slug, :body]
|
|
170
175
|
|
|
171
176
|
@@price_list_attributes = [:name, :description, :match_policy, :starts_at, :ends_at, :status, :position]
|
|
172
177
|
|
|
173
|
-
@@product_properties_attributes = [:property_name, :property_id, :value, :position, :_destroy]
|
|
174
|
-
|
|
175
178
|
@@product_attributes = [
|
|
176
179
|
:name, :description, :available_on, :make_active_at, :discontinue_on, :permalink, :meta_description,
|
|
177
180
|
:meta_keywords, :meta_title, :price, :sku, :deleted_at, :prototype_id,
|
|
@@ -197,8 +200,6 @@ module Spree
|
|
|
197
200
|
|
|
198
201
|
@@promotion_action_attributes = [:type, :calculator_type, calculator_attributes: {}, promotion_action_line_items_attributes: [:id, :promotion_action_id, :variant_id, :quantity, :_destroy]]
|
|
199
202
|
|
|
200
|
-
@@property_attributes = [:name, :presentation, :position, :kind, :display_on]
|
|
201
|
-
|
|
202
203
|
@@refund_attributes = [:amount, :refund_reason_id]
|
|
203
204
|
|
|
204
205
|
@@refund_reason_attributes = [:name, :active, :mutable]
|
|
@@ -262,19 +263,18 @@ module Spree
|
|
|
262
263
|
stock_movements_attributes: [:variant_id, :quantity, :originator_id, :stock_item_id]]
|
|
263
264
|
|
|
264
265
|
@@store_attributes = [:name, :url, :seo_title, :code, :meta_keywords,
|
|
265
|
-
:meta_description, :default_currency, :mail_from_address,
|
|
266
|
+
:meta_description, :default_currency, :default_country_iso, :mail_from_address,
|
|
266
267
|
:customer_support_email, :description, :address, :contact_phone,
|
|
267
|
-
:supported_locales, :default_locale, :
|
|
268
|
-
:new_order_notifications_email, :
|
|
269
|
-
:preferred_timezone, :preferred_weight_unit, :preferred_unit_system,
|
|
268
|
+
:supported_locales, :default_locale, :supported_currencies,
|
|
269
|
+
:new_order_notifications_email, :seo_robots,
|
|
270
|
+
:preferred_admin_locale, :preferred_timezone, :preferred_weight_unit, :preferred_unit_system,
|
|
270
271
|
:preferred_digital_asset_authorized_clicks, :preferred_digital_asset_authorized_days,
|
|
271
272
|
:preferred_limit_digital_download_count, :preferred_limit_digital_download_days,
|
|
272
273
|
:preferred_digital_asset_link_expire_time,
|
|
273
274
|
:logo, :mailer_logo, :social_logo, :favicon_image,
|
|
274
|
-
:import_products_from_store_id, :import_payment_methods_from_store_id,
|
|
275
275
|
:checkout_message, :preferred_guest_checkout,
|
|
276
276
|
:customer_terms_of_service, :customer_privacy_policy,
|
|
277
|
-
:customer_returns_policy, :customer_shipping_policy
|
|
277
|
+
:customer_returns_policy, :customer_shipping_policy]
|
|
278
278
|
|
|
279
279
|
@@store_credit_attributes = %i[amount currency category_id memo]
|
|
280
280
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
require 'capybara-screenshot/rspec'
|
|
2
2
|
|
|
3
3
|
Capybara.configure do |config|
|
|
4
|
-
config.save_path = ENV['
|
|
4
|
+
config.save_path = ENV['CI_ARTIFACTS'] if ENV['CI_ARTIFACTS']
|
|
5
5
|
config.server = :puma
|
|
6
6
|
config.default_driver = :rack_test
|
|
7
7
|
config.javascript_driver = :selenium_chrome_headless
|
|
@@ -27,7 +27,7 @@ Capybara.register_driver :selenium_chrome_headless do |app|
|
|
|
27
27
|
options.add_argument '--window-size=1920,1080'
|
|
28
28
|
options.add_argument '--disable-search-engine-choice-screen'
|
|
29
29
|
|
|
30
|
-
# Required for running in
|
|
30
|
+
# Required for running in CI containers
|
|
31
31
|
options.add_argument '--no-sandbox'
|
|
32
32
|
options.add_argument '--disable-dev-shm-usage'
|
|
33
33
|
|
|
@@ -4,14 +4,25 @@ require 'generators/spree/dummy_model/dummy_model_generator'
|
|
|
4
4
|
desc 'Generates a dummy app for testing'
|
|
5
5
|
namespace :common do
|
|
6
6
|
task :test_app, [:authentication, :user_class, :admin_user_class, :css, :javascript, :install_admin, :install_storefront] do |_t, args|
|
|
7
|
-
|
|
7
|
+
# Support both Rake::TaskArguments (via invoke) and Hash (via execute)
|
|
8
|
+
# When using execute with a Hash, args IS the hash directly
|
|
9
|
+
defaults = {
|
|
8
10
|
authentication: 'dummy',
|
|
9
11
|
user_class: 'Spree::LegacyUser',
|
|
12
|
+
admin_user_class: 'Spree::LegacyAdminUser',
|
|
10
13
|
install_storefront: false,
|
|
11
14
|
install_admin: false,
|
|
12
15
|
javascript: false,
|
|
13
16
|
css: false
|
|
14
|
-
|
|
17
|
+
}
|
|
18
|
+
# Rake::TaskArguments#with_defaults modifies in-place
|
|
19
|
+
# ActiveSupport adds Hash#with_defaults which returns a new hash, so check for Rake::TaskArguments specifically
|
|
20
|
+
if args.is_a?(Rake::TaskArguments)
|
|
21
|
+
args.with_defaults(defaults)
|
|
22
|
+
else
|
|
23
|
+
# Hash passed via execute - use reverse_merge! to merge defaults in place
|
|
24
|
+
args.reverse_merge!(defaults)
|
|
25
|
+
end
|
|
15
26
|
require ENV['LIB_NAME'].to_s
|
|
16
27
|
|
|
17
28
|
# Convert to booleans (supports both string and boolean values for backwards compatibility)
|
|
@@ -60,8 +71,8 @@ namespace :common do
|
|
|
60
71
|
core_gems = %w[spree/core spree/api]
|
|
61
72
|
root_gemfile = File.expand_path('../../../../Gemfile', __dir__)
|
|
62
73
|
use_root_gemfile = core_gems.include?(ENV['LIB_NAME']) &&
|
|
63
|
-
|
|
64
|
-
|
|
74
|
+
File.exist?(root_gemfile) &&
|
|
75
|
+
File.exist?(File.expand_path('../../../../spree.gemspec', __dir__))
|
|
65
76
|
bundle_exec = use_root_gemfile ? "bundle exec --gemfile=#{root_gemfile}" : 'bundle exec'
|
|
66
77
|
puts 'Running Spree install generator...'
|
|
67
78
|
system("#{bundle_exec} rails g spree:install --force --auto-accept --migrate=false --seed=false --sample=false --user_class=#{args[:user_class]} --admin_user_class=#{args[:admin_user_class]} --authentication=#{args[:authentication]}")
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
FactoryBot.define do
|
|
2
|
+
factory :api_key, class: Spree::ApiKey do
|
|
3
|
+
name { FFaker::Lorem.word }
|
|
4
|
+
key_type { 'publishable' }
|
|
5
|
+
store
|
|
6
|
+
|
|
7
|
+
trait :publishable do
|
|
8
|
+
key_type { 'publishable' }
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
trait :secret do
|
|
12
|
+
key_type { 'secret' }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
trait :revoked do
|
|
16
|
+
revoked_at { Time.current }
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
if defined?(Spree::CustomDomain)
|
|
2
|
+
FactoryBot.define do
|
|
3
|
+
factory :custom_domain, class: Spree::CustomDomain do
|
|
4
|
+
url { FFaker::Internet.domain_name }
|
|
5
|
+
association :store, factory: :store
|
|
6
|
+
default { true }
|
|
7
|
+
end
|
|
6
8
|
end
|
|
7
9
|
end
|
|
@@ -16,5 +16,17 @@ FactoryBot.define do
|
|
|
16
16
|
)
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
|
+
|
|
20
|
+
factory :customer_import, class: 'Spree::Imports::Customers', parent: :import do
|
|
21
|
+
type { 'Spree::Imports::Customers' }
|
|
22
|
+
|
|
23
|
+
after(:create) do |import|
|
|
24
|
+
import.attachment.attach(
|
|
25
|
+
io: File.open(Spree::Core::Engine.root.join('spec', 'fixtures', 'files', 'customers_import.csv')),
|
|
26
|
+
filename: 'customers_import.csv',
|
|
27
|
+
content_type: 'text/csv'
|
|
28
|
+
)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
19
31
|
end
|
|
20
32
|
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
FactoryBot.define do
|
|
2
|
+
factory :market, class: Spree::Market do
|
|
3
|
+
sequence(:name) { |n| "Market #{n}" }
|
|
4
|
+
currency { 'USD' }
|
|
5
|
+
default_locale { 'en' }
|
|
6
|
+
store
|
|
7
|
+
countries { [association(:country)] }
|
|
8
|
+
|
|
9
|
+
after(:build) do |market|
|
|
10
|
+
if market.countries.any?
|
|
11
|
+
zone = Spree::Zone.find_or_create_by!(name: 'Test Shipping Zone') do |z|
|
|
12
|
+
z.kind = 'country'
|
|
13
|
+
end
|
|
14
|
+
market.countries.each do |country|
|
|
15
|
+
zone.zone_members.find_or_create_by!(zoneable: country)
|
|
16
|
+
end
|
|
17
|
+
if zone.shipping_methods.empty?
|
|
18
|
+
shipping_category = Spree::ShippingCategory.first || FactoryBot.create(:shipping_category)
|
|
19
|
+
FactoryBot.create(:shipping_method, zones: [zone], shipping_categories: [shipping_category])
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
trait :default do
|
|
25
|
+
default { true }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
trait :eu do
|
|
29
|
+
name { 'Europe' }
|
|
30
|
+
currency { 'EUR' }
|
|
31
|
+
default_locale { 'de' }
|
|
32
|
+
tax_inclusive { true }
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -5,6 +5,7 @@ FactoryBot.define do
|
|
|
5
5
|
completed_at { nil }
|
|
6
6
|
email { user&.email }
|
|
7
7
|
currency { 'USD' }
|
|
8
|
+
locale { 'en' }
|
|
8
9
|
|
|
9
10
|
transient do
|
|
10
11
|
line_items_price { BigDecimal(10) }
|
|
@@ -75,8 +76,10 @@ FactoryBot.define do
|
|
|
75
76
|
state { 'complete' }
|
|
76
77
|
|
|
77
78
|
after(:create) do |order, evaluator|
|
|
78
|
-
order.
|
|
79
|
+
# Set completed_at before refreshing shipment rates so order.completed? returns true
|
|
80
|
+
# This prevents the shipping rate selection from recalculating order totals
|
|
79
81
|
order.update_column(:completed_at, order.completed_at || Time.current)
|
|
82
|
+
order.refresh_shipment_rates(evaluator.shipping_method_filter)
|
|
80
83
|
end
|
|
81
84
|
|
|
82
85
|
factory :completed_order_with_pending_payment do
|
|
@@ -23,12 +23,7 @@ FactoryBot.define do
|
|
|
23
23
|
name { 'Credit Card' }
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
# Leaving this factory in place with bogus in case anyone is using it.
|
|
28
|
-
factory :simple_credit_card_payment_method, parent: :payment_method, class: Spree::Gateway::BogusSimple do
|
|
29
|
-
type { 'Spree::Gateway::BogusSimple' }
|
|
30
|
-
name { 'Credit Card' }
|
|
31
|
-
end
|
|
26
|
+
factory :simple_credit_card_payment_method, parent: :credit_card_payment_method
|
|
32
27
|
|
|
33
28
|
factory :store_credit_payment_method, parent: :payment_method, class: Spree::PaymentMethod::StoreCredit do
|
|
34
29
|
type { 'Spree::PaymentMethod::StoreCredit' }
|
|
@@ -42,4 +37,6 @@ FactoryBot.define do
|
|
|
42
37
|
type { 'Spree::Gateway::CustomPaymentSourceMethod' }
|
|
43
38
|
name { 'Custom' }
|
|
44
39
|
end
|
|
40
|
+
|
|
41
|
+
factory :bogus_payment_method, parent: :credit_card_payment_method
|
|
45
42
|
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
FactoryBot.define do
|
|
2
|
+
factory :payment_session, class: 'Spree::PaymentSession' do
|
|
3
|
+
order
|
|
4
|
+
payment_method { create(:credit_card_payment_method, stores: [order.store]) }
|
|
5
|
+
amount { order.total }
|
|
6
|
+
currency { order.currency }
|
|
7
|
+
status { 'pending' }
|
|
8
|
+
external_id { "ps_test_#{SecureRandom.hex(12)}" }
|
|
9
|
+
external_data { {} }
|
|
10
|
+
|
|
11
|
+
trait :processing do
|
|
12
|
+
status { 'processing' }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
trait :completed do
|
|
16
|
+
status { 'completed' }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
trait :failed do
|
|
20
|
+
status { 'failed' }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
trait :canceled do
|
|
24
|
+
status { 'canceled' }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
trait :expired do
|
|
28
|
+
status { 'expired' }
|
|
29
|
+
expires_at { 1.hour.ago }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
trait :with_expiration do
|
|
33
|
+
expires_at { 24.hours.from_now }
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
trait :with_customer do
|
|
37
|
+
customer { order.user || create(:user) }
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
factory :bogus_payment_session, class: 'Spree::PaymentSessions::Bogus' do
|
|
41
|
+
type { 'Spree::PaymentSessions::Bogus' }
|
|
42
|
+
payment_method { create(:bogus_payment_method, stores: [order.store]) }
|
|
43
|
+
external_id { "bogus_#{SecureRandom.hex(12)}" }
|
|
44
|
+
external_data { { 'client_secret' => "bogus_secret_#{SecureRandom.hex(8)}" } }
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
FactoryBot.define do
|
|
2
|
+
factory :payment_setup_session, class: 'Spree::PaymentSetupSession' do
|
|
3
|
+
customer { create(:user) }
|
|
4
|
+
payment_method { create(:credit_card_payment_method) }
|
|
5
|
+
status { 'pending' }
|
|
6
|
+
external_id { "seti_test_#{SecureRandom.hex(12)}" }
|
|
7
|
+
external_client_secret { "seti_secret_#{SecureRandom.hex(12)}" }
|
|
8
|
+
external_data { {} }
|
|
9
|
+
|
|
10
|
+
trait :processing do
|
|
11
|
+
status { 'processing' }
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
trait :completed do
|
|
15
|
+
status { 'completed' }
|
|
16
|
+
payment_source { create(:credit_card, user: customer) }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
trait :failed do
|
|
20
|
+
status { 'failed' }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
trait :canceled do
|
|
24
|
+
status { 'canceled' }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
trait :expired do
|
|
28
|
+
status { 'expired' }
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -45,5 +45,15 @@ FactoryBot.define do
|
|
|
45
45
|
customer_group_ids { [] }
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
|
+
|
|
49
|
+
factory :market_price_rule, class: Spree::PriceRules::MarketRule do
|
|
50
|
+
after(:build) do |rule, evaluator|
|
|
51
|
+
rule.preferred_market_ids = evaluator.market_ids if evaluator.respond_to?(:market_ids)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
transient do
|
|
55
|
+
market_ids { [] }
|
|
56
|
+
end
|
|
57
|
+
end
|
|
48
58
|
end
|
|
49
59
|
end
|
|
@@ -50,13 +50,6 @@ FactoryBot.define do
|
|
|
50
50
|
factory :product_with_option_types do
|
|
51
51
|
after(:create) { |product| create(:product_option_type, product: product) }
|
|
52
52
|
end
|
|
53
|
-
factory :product_with_properties do
|
|
54
|
-
after(:create) do |product|
|
|
55
|
-
property = create(:property, :brand)
|
|
56
|
-
create(:product_property, product: product, property: property, value: 'Epsilon')
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
|
|
60
53
|
factory :digital_product do
|
|
61
54
|
track_inventory { false }
|
|
62
55
|
shipping_category { |r| Spree::ShippingCategory.digital || r.association(:digital_shipping_category) }
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
FactoryBot.define do
|
|
2
2
|
factory :prototype, class: Spree::Prototype do
|
|
3
3
|
name { 'Baseball Cap' }
|
|
4
|
-
properties { [build(:property)] }
|
|
5
4
|
end
|
|
6
5
|
factory :prototype_with_option_types, class: Spree::Prototype do
|
|
7
6
|
name { 'Baseball Cap' }
|
|
8
|
-
properties { [build(:property)] }
|
|
9
7
|
option_types { [build(:option_type)] }
|
|
10
8
|
end
|
|
11
9
|
end
|