solidus_core 4.6.1 → 4.7.0
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/Rakefile +13 -13
- data/app/controllers/spree/base_controller.rb +2 -2
- data/app/helpers/spree/base_helper.rb +24 -24
- data/app/helpers/spree/checkout_helper.rb +7 -7
- data/app/helpers/spree/core/controller_helpers/auth.rb +1 -1
- data/app/helpers/spree/core/controller_helpers/common.rb +3 -2
- data/app/helpers/spree/core/controller_helpers/order.rb +3 -5
- data/app/helpers/spree/core/controller_helpers/payment_parameters.rb +1 -2
- data/app/helpers/spree/core/controller_helpers/strong_parameters.rb +10 -10
- data/app/helpers/spree/products_helper.rb +5 -5
- data/app/helpers/spree/store_helper.rb +1 -1
- data/app/mailers/spree/carton_mailer.rb +3 -3
- data/app/mailers/spree/order_mailer.rb +4 -4
- data/app/mailers/spree/reimbursement_mailer.rb +2 -2
- data/app/models/concerns/spree/active_storage_adapter/attachment.rb +5 -5
- data/app/models/concerns/spree/active_storage_adapter/normalization.rb +5 -5
- data/app/models/concerns/spree/active_storage_adapter.rb +2 -2
- data/app/models/concerns/spree/adjustment_source.rb +4 -4
- data/app/models/concerns/spree/display_money.rb +2 -2
- data/app/models/concerns/spree/named_type.rb +1 -1
- data/app/models/concerns/spree/ordered_property_value_list.rb +2 -2
- data/app/models/concerns/spree/preferences/persistable.rb +1 -1
- data/app/models/concerns/spree/ransackable_attributes.rb +1 -0
- data/app/models/concerns/spree/soft_deletable.rb +2 -1
- data/app/models/concerns/spree/state_change_tracking.rb +11 -7
- data/app/models/concerns/spree/user_address_book.rb +12 -12
- data/app/models/concerns/spree/user_methods.rb +9 -9
- data/app/models/concerns/spree/user_reporting.rb +1 -0
- data/app/models/spree/ability.rb +1 -1
- data/app/models/spree/address/name.rb +1 -1
- data/app/models/spree/address.rb +7 -7
- data/app/models/spree/adjustment.rb +11 -10
- data/app/models/spree/adjustment_reason.rb +2 -2
- data/app/models/spree/billing_integration.rb +2 -2
- data/app/models/spree/calculator/default_tax.rb +2 -2
- data/app/models/spree/calculator/flat_fee.rb +1 -1
- data/app/models/spree/calculator/flat_rate.rb +2 -2
- data/app/models/spree/calculator/returns/default_refund_amount.rb +3 -3
- data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +2 -2
- data/app/models/spree/calculator/shipping/flat_rate.rb +3 -3
- data/app/models/spree/calculator/shipping/flexi_rate.rb +8 -8
- data/app/models/spree/calculator/shipping/per_item.rb +3 -3
- data/app/models/spree/calculator/shipping/price_sack.rb +3 -3
- data/app/models/spree/calculator.rb +31 -6
- data/app/models/spree/carton.rb +4 -4
- data/app/models/spree/classification.rb +2 -2
- data/app/models/spree/core/state_machines/order/class_methods.rb +3 -3
- data/app/models/spree/core/state_machines/return_item/acceptance_status.rb +1 -1
- data/app/models/spree/country.rb +1 -1
- data/app/models/spree/credit_card.rb +27 -27
- data/app/models/spree/customer_return.rb +5 -4
- data/app/models/spree/distributed_amounts_handler.rb +1 -1
- data/app/models/spree/fulfilment_changer.rb +22 -22
- data/app/models/spree/image/active_storage_attachment.rb +2 -2
- data/app/models/spree/image/paperclip_attachment.rb +8 -8
- data/app/models/spree/in_memory_order_updater.rb +262 -0
- data/app/models/spree/inventory_unit.rb +11 -11
- data/app/models/spree/item_total.rb +1 -1
- data/app/models/spree/legacy_user.rb +2 -2
- data/app/models/spree/line_item.rb +21 -11
- data/app/models/spree/log_entry.rb +3 -3
- data/app/models/spree/mergeable_orders_finder.rb +44 -0
- data/app/models/spree/money.rb +2 -1
- data/app/models/spree/null_promotion_adjuster.rb +1 -1
- data/app/models/spree/option_type.rb +1 -1
- data/app/models/spree/option_value.rb +2 -2
- data/app/models/spree/order/number_generator.rb +1 -1
- data/app/models/spree/order.rb +66 -64
- data/app/models/spree/order_cancellations.rb +1 -3
- data/app/models/spree/order_inventory.rb +5 -8
- data/app/models/spree/order_mutex.rb +1 -1
- data/app/models/spree/order_shipping.rb +1 -1
- data/app/models/spree/order_updater.rb +59 -37
- data/app/models/spree/payment/cancellation.rb +2 -2
- data/app/models/spree/payment/processing.rb +22 -22
- data/app/models/spree/payment.rb +26 -26
- data/app/models/spree/payment_capture_event.rb +2 -2
- data/app/models/spree/payment_create.rb +1 -1
- data/app/models/spree/payment_method/bogus_credit_card.rb +18 -18
- data/app/models/spree/payment_method/check.rb +3 -3
- data/app/models/spree/payment_method/credit_card.rb +1 -1
- data/app/models/spree/payment_method/simple_bogus_credit_card.rb +3 -3
- data/app/models/spree/payment_method/store_credit.rb +13 -13
- data/app/models/spree/payment_method.rb +12 -11
- data/app/models/spree/payment_source.rb +2 -2
- data/app/models/spree/permission_sets/dashboard_display.rb +3 -3
- data/app/models/spree/permission_sets/default_customer.rb +1 -1
- data/app/models/spree/preference.rb +1 -1
- data/app/models/spree/price.rb +7 -6
- data/app/models/spree/product/scopes.rb +23 -23
- data/app/models/spree/product.rb +37 -41
- data/app/models/spree/product_option_type.rb +2 -2
- data/app/models/spree/product_property.rb +3 -3
- data/app/models/spree/refund.rb +10 -10
- data/app/models/spree/refund_reason.rb +2 -2
- data/app/models/spree/reimbursement/credit.rb +1 -1
- data/app/models/spree/reimbursement.rb +8 -8
- data/app/models/spree/reimbursement_tax_calculator.rb +1 -1
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +1 -1
- data/app/models/spree/reimbursement_type.rb +2 -2
- data/app/models/spree/return_authorization.rb +7 -6
- data/app/models/spree/return_item/eligibility_validator/base_validator.rb +2 -2
- data/app/models/spree/return_item/eligibility_validator/default.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/inventory_shipped.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/order_completed.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/rma_required.rb +1 -1
- data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +1 -1
- data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +6 -6
- data/app/models/spree/return_item.rb +31 -30
- data/app/models/spree/return_reason.rb +1 -1
- data/app/models/spree/role.rb +1 -1
- data/app/models/spree/role_user.rb +1 -1
- data/app/models/spree/shipment.rb +37 -29
- data/app/models/spree/shipping_method.rb +9 -9
- data/app/models/spree/shipping_method_category.rb +2 -2
- data/app/models/spree/shipping_rate.rb +12 -10
- data/app/models/spree/shipping_rate_tax.rb +5 -4
- data/app/models/spree/simple_order_contents.rb +2 -2
- data/app/models/spree/state.rb +1 -1
- data/app/models/spree/state_change_tracker.rb +31 -0
- data/app/models/spree/stock/availability.rb +9 -9
- data/app/models/spree/stock/availability_validator.rb +3 -3
- data/app/models/spree/stock/differentiator.rb +2 -2
- data/app/models/spree/stock/estimator.rb +4 -4
- data/app/models/spree/stock/inventory_validator.rb +1 -1
- data/app/models/spree/stock/package.rb +3 -3
- data/app/models/spree/stock_item.rb +5 -5
- data/app/models/spree/stock_location.rb +6 -6
- data/app/models/spree/stock_movement.rb +2 -2
- data/app/models/spree/stock_quantities.rb +2 -2
- data/app/models/spree/store.rb +3 -3
- data/app/models/spree/store_credit.rb +30 -29
- data/app/models/spree/store_credit_category.rb +2 -2
- data/app/models/spree/store_credit_event.rb +6 -6
- data/app/models/spree/store_credit_reason.rb +1 -1
- data/app/models/spree/store_credit_type.rb +3 -3
- data/app/models/spree/store_selector/by_server_name.rb +1 -1
- data/app/models/spree/store_selector/legacy.rb +1 -1
- data/app/models/spree/tax/item_tax.rb +1 -0
- data/app/models/spree/tax/order_tax.rb +1 -0
- data/app/models/spree/tax_category.rb +3 -3
- data/app/models/spree/tax_rate.rb +5 -5
- data/app/models/spree/tax_rate_tax_category.rb +2 -2
- data/app/models/spree/taxon/active_storage_attachment.rb +2 -2
- data/app/models/spree/taxon/paperclip_attachment.rb +4 -4
- data/app/models/spree/taxon.rb +16 -17
- data/app/models/spree/taxon_brand_selector.rb +3 -3
- data/app/models/spree/unauthorized_redirect_handler.rb +1 -1
- data/app/models/spree/unit_cancel.rb +4 -4
- data/app/models/spree/user_address.rb +3 -3
- data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +6 -8
- data/app/models/spree/user_last_url_storer.rb +1 -1
- data/app/models/spree/variant/price_selector.rb +1 -1
- data/app/models/spree/variant/scopes.rb +9 -9
- data/app/models/spree/variant.rb +25 -25
- data/app/models/spree/variant_property_rule.rb +2 -2
- data/app/models/spree/variant_property_rule_condition.rb +1 -1
- data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +4 -4
- data/app/models/spree/wallet/default_payment_builder.rb +1 -1
- data/app/models/spree/wallet_payment_source.rb +2 -2
- data/app/models/spree/zone.rb +18 -18
- data/app/models/spree/zone_member.rb +1 -1
- data/app/subscribers/spree/carton_shipped_mailer_subscriber.rb +2 -2
- data/app/subscribers/spree/order_cancel_mailer_subscriber.rb +2 -2
- data/app/subscribers/spree/order_confirmation_mailer_subscriber.rb +2 -2
- data/app/subscribers/spree/order_inventory_cancellation_mailer_subscriber.rb +2 -2
- data/app/subscribers/spree/reimbursement_mailer_subscriber.rb +2 -2
- data/config/initializers/assets.rb +1 -1
- data/config/initializers/db_query_matchers.rb +9 -0
- data/config/initializers/friendly_id.rb +2 -2
- data/config/initializers/inflections.rb +1 -1
- data/config/initializers/money.rb +1 -1
- data/config/locales/en.yml +1 -0
- data/db/default/spree/countries.rb +7 -7
- data/db/default/spree/return_reasons.rb +11 -11
- data/db/default/spree/stock_locations.rb +1 -1
- data/db/default/spree/store_credit.rb +3 -4
- data/db/default/spree/stores.rb +1 -1
- data/db/default/spree/zones.rb +5 -5
- data/db/migrate/20160101010000_solidus_one_four.rb +16 -16
- data/db/migrate/20160420044191_create_spree_wallet_payment_sources.rb +3 -3
- data/db/migrate/20160420181916_migrate_credit_cards_to_wallet_payment_sources.rb +7 -6
- data/db/migrate/20161014221052_add_available_to_columns_and_remove_display_on_from_payment_methods.rb +10 -10
- data/db/migrate/20161123154034_add_available_to_users_and_remove_display_on_from_shipping_methods.rb +6 -6
- data/db/migrate/20161129035810_add_index_to_spree_payments_number.rb +1 -1
- data/db/migrate/20170319191942_remove_order_id_from_inventory_units.rb +4 -4
- data/db/migrate/20180322142651_add_amount_remaining_to_store_credit_events.rb +9 -16
- data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +1 -0
- data/db/migrate/20210815004823_add_unique_index_to_option_values_variants.rb +3 -3
- data/db/migrate/20250207104016_add_primary_taxon_to_products.rb +1 -1
- data/db/migrate/20250214094207_add_reverse_charge_status_to_store.rb +1 -1
- data/db/migrate/20250225051308_add_vat_id_email_and_reverse_charge_status_to_addresses.rb +1 -1
- data/db/migrate/20250605105424_add_shipping_category_foreign_keys.rb +3 -3
- data/db/seeds.rb +3 -3
- data/lib/generators/solidus/install/app_templates/authentication/custom.rb +2 -2
- data/lib/generators/solidus/install/app_templates/authentication/devise.rb +3 -3
- data/lib/generators/solidus/install/app_templates/authentication/existing.rb +3 -1
- data/lib/generators/solidus/install/app_templates/frontend/starter.rb +1 -1
- data/lib/generators/solidus/install/app_templates/payment_method/braintree.rb +1 -1
- data/lib/generators/solidus/install/app_templates/payment_method/paypal.rb +1 -1
- data/lib/generators/solidus/install/app_templates/payment_method/stripe.rb +2 -2
- data/lib/generators/solidus/install/install_generator.rb +51 -51
- data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +3 -0
- data/lib/generators/solidus/update/update_generator.rb +29 -29
- data/lib/generators/spree/custom_user/custom_user_generator.rb +6 -6
- data/lib/generators/spree/dummy/dummy_generator.rb +22 -24
- data/lib/generators/spree/dummy/templates/rails/boot.rb +3 -3
- data/lib/generators/spree/dummy/templates/rails/test.rb +4 -4
- data/lib/solidus_core.rb +1 -1
- data/lib/spree/app_configuration.rb +66 -47
- data/lib/spree/bus.rb +1 -1
- data/lib/spree/config.rb +1 -1
- data/lib/spree/core/active_merchant_dependencies.rb +8 -8
- data/lib/spree/core/class_constantizer.rb +1 -1
- data/lib/spree/core/engine.rb +15 -15
- data/lib/spree/core/environment.rb +1 -1
- data/lib/spree/core/environment_extension.rb +2 -2
- data/lib/spree/core/importer/order.rb +15 -15
- data/lib/spree/core/importer/product.rb +4 -4
- data/lib/spree/core/importer.rb +2 -2
- data/lib/spree/core/null_promotion_configuration.rb +7 -7
- data/lib/spree/core/permalinks.rb +1 -1
- data/lib/spree/core/product_filters.rb +94 -93
- data/lib/spree/core/role_configuration.rb +3 -3
- data/lib/spree/core/search/base.rb +5 -6
- data/lib/spree/core/search/variant.rb +3 -3
- data/lib/spree/core/stock_configuration.rb +10 -49
- data/lib/spree/core/validators/email.rb +1 -1
- data/lib/spree/core/version.rb +3 -3
- data/lib/spree/core/versioned_value.rb +4 -6
- data/lib/spree/core.rb +49 -49
- data/lib/spree/deprecated_instance_variable_proxy.rb +1 -1
- data/lib/spree/deprecation.rb +1 -1
- data/lib/spree/deprecator.rb +2 -2
- data/lib/spree/i18n.rb +2 -2
- data/lib/spree/localized_number.rb +3 -3
- data/lib/spree/manipulative_query_monitor.rb +19 -0
- data/lib/spree/migrations.rb +2 -2
- data/lib/spree/permitted_attributes.rb +10 -10
- data/lib/spree/preferences/configuration.rb +5 -5
- data/lib/spree/preferences/preferable.rb +8 -10
- data/lib/spree/preferences/preferable_class_methods.rb +16 -16
- data/lib/spree/preferences/preference_differentiator.rb +1 -1
- data/lib/spree/preferences/scoped_store.rb +2 -2
- data/lib/spree/preferences/static_model_preferences.rb +2 -2
- data/lib/spree/preferences/store.rb +6 -6
- data/lib/spree/testing_support/ability_helpers.rb +30 -30
- data/lib/spree/testing_support/authorization_helpers.rb +6 -5
- data/lib/spree/testing_support/blacklist_urls.rb +1 -1
- data/lib/spree/testing_support/bus_helpers.rb +1 -1
- data/lib/spree/testing_support/capybara_driver.rb +1 -1
- data/lib/spree/testing_support/capybara_ext.rb +12 -12
- data/lib/spree/testing_support/common_rake.rb +17 -16
- data/lib/spree/testing_support/dummy_ability.rb +1 -1
- data/lib/spree/testing_support/dummy_app/migrations.rb +1 -1
- data/lib/spree/testing_support/dummy_app/rake_tasks.rb +5 -5
- data/lib/spree/testing_support/dummy_app/routes.rb +1 -1
- data/lib/spree/testing_support/dummy_app.rb +34 -34
- data/lib/spree/testing_support/extension_rake.rb +2 -2
- data/lib/spree/testing_support/factories/address_factory.rb +12 -12
- data/lib/spree/testing_support/factories/adjustment_factory.rb +7 -7
- data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/calculator_factory.rb +6 -6
- data/lib/spree/testing_support/factories/carton_factory.rb +1 -1
- data/lib/spree/testing_support/factories/country_factory.rb +3 -3
- data/lib/spree/testing_support/factories/credit_card_factory.rb +3 -3
- data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -2
- data/lib/spree/testing_support/factories/image_factory.rb +2 -2
- data/lib/spree/testing_support/factories/inventory_unit_factory.rb +4 -4
- data/lib/spree/testing_support/factories/line_item_factory.rb +2 -2
- data/lib/spree/testing_support/factories/option_type_factory.rb +2 -2
- data/lib/spree/testing_support/factories/option_value_factory.rb +2 -2
- data/lib/spree/testing_support/factories/order_factory.rb +16 -16
- data/lib/spree/testing_support/factories/payment_factory.rb +9 -9
- data/lib/spree/testing_support/factories/payment_method_factory.rb +10 -10
- data/lib/spree/testing_support/factories/price_factory.rb +2 -2
- data/lib/spree/testing_support/factories/product_factory.rb +2 -2
- data/lib/spree/testing_support/factories/product_option_type_factory.rb +1 -1
- data/lib/spree/testing_support/factories/product_property_factory.rb +1 -1
- data/lib/spree/testing_support/factories/property_factory.rb +3 -3
- data/lib/spree/testing_support/factories/refund_factory.rb +2 -2
- data/lib/spree/testing_support/factories/refund_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
- data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +1 -1
- data/lib/spree/testing_support/factories/return_authorization_factory.rb +3 -3
- data/lib/spree/testing_support/factories/return_item_factory.rb +1 -1
- data/lib/spree/testing_support/factories/return_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/role_factory.rb +2 -2
- data/lib/spree/testing_support/factories/shipment_factory.rb +3 -3
- data/lib/spree/testing_support/factories/shipping_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/shipping_method_factory.rb +7 -7
- data/lib/spree/testing_support/factories/shipping_rate_factory.rb +1 -1
- data/lib/spree/testing_support/factories/state_factory.rb +4 -4
- data/lib/spree/testing_support/factories/stock_item_factory.rb +1 -1
- data/lib/spree/testing_support/factories/stock_location_factory.rb +7 -7
- data/lib/spree/testing_support/factories/stock_movement_factory.rb +3 -3
- data/lib/spree/testing_support/factories/stock_package_factory.rb +3 -3
- data/lib/spree/testing_support/factories/store_credit_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_event_factory.rb +8 -8
- data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +1 -1
- data/lib/spree/testing_support/factories/store_credit_type_factory.rb +6 -6
- data/lib/spree/testing_support/factories/store_factory.rb +2 -2
- data/lib/spree/testing_support/factories/tax_category_factory.rb +1 -1
- data/lib/spree/testing_support/factories/tax_rate_factory.rb +1 -1
- data/lib/spree/testing_support/factories/taxon_factory.rb +3 -3
- data/lib/spree/testing_support/factories/taxonomy_factory.rb +1 -1
- data/lib/spree/testing_support/factories/user_factory.rb +2 -2
- data/lib/spree/testing_support/factories/variant_factory.rb +2 -2
- data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +1 -1
- data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +1 -1
- data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +1 -1
- data/lib/spree/testing_support/factories/zone_factory.rb +3 -3
- data/lib/spree/testing_support/factory_bot.rb +1 -1
- data/lib/spree/testing_support/flaky.rb +3 -2
- data/lib/spree/testing_support/flash.rb +2 -2
- data/lib/spree/testing_support/order_walkthrough.rb +7 -7
- data/lib/spree/testing_support/preferences.rb +1 -1
- data/lib/spree/testing_support/rake.rb +1 -1
- data/lib/spree/testing_support/shared_examples/calculator.rb +1 -1
- data/lib/spree/testing_support/shared_examples/gallery.rb +7 -7
- data/lib/spree/testing_support/shared_examples/order_factory.rb +9 -9
- data/lib/spree/testing_support/shared_examples/state_change_tracking.rb +25 -0
- data/lib/spree/testing_support/shared_examples/working_factory.rb +1 -1
- data/lib/spree/testing_support/translations.rb +1 -1
- data/lib/spree_core.rb +1 -1
- data/lib/tasks/payment_method.rake +2 -2
- data/solidus_core.gemspec +49 -49
- metadata +62 -54
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
FactoryBot.define do
|
|
4
|
-
factory :inventory_unit, class:
|
|
4
|
+
factory :inventory_unit, class: "Spree::InventoryUnit" do
|
|
5
5
|
transient do
|
|
6
6
|
order { nil }
|
|
7
7
|
stock_location { nil }
|
|
@@ -15,12 +15,12 @@ FactoryBot.define do
|
|
|
15
15
|
build(:line_item, variant:)
|
|
16
16
|
end
|
|
17
17
|
end
|
|
18
|
-
state {
|
|
18
|
+
state { "on_hand" }
|
|
19
19
|
shipment do
|
|
20
20
|
if stock_location
|
|
21
|
-
build(:shipment, state:
|
|
21
|
+
build(:shipment, state: "pending", order: line_item.order, stock_location:)
|
|
22
22
|
else
|
|
23
|
-
build(:shipment, state:
|
|
23
|
+
build(:shipment, state: "pending", order: line_item.order)
|
|
24
24
|
end
|
|
25
25
|
end
|
|
26
26
|
# return_authorization
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
FactoryBot.define do
|
|
4
|
-
factory :line_item, class:
|
|
4
|
+
factory :line_item, class: "Spree::LineItem" do
|
|
5
5
|
quantity { 1 }
|
|
6
|
-
price { BigDecimal(
|
|
6
|
+
price { BigDecimal("10.00") }
|
|
7
7
|
order
|
|
8
8
|
transient do
|
|
9
9
|
product { nil }
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
FactoryBot.define do
|
|
4
|
-
factory :option_type, class:
|
|
4
|
+
factory :option_type, class: "Spree::OptionType" do
|
|
5
5
|
sequence(:name) { |n| "foo-size-#{n}" }
|
|
6
|
-
presentation {
|
|
6
|
+
presentation { "Size" }
|
|
7
7
|
end
|
|
8
8
|
end
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
FactoryBot.define do
|
|
4
|
-
factory :option_value, class:
|
|
4
|
+
factory :option_value, class: "Spree::OptionValue" do
|
|
5
5
|
sequence(:name) { |n| "Size-#{n}" }
|
|
6
6
|
|
|
7
|
-
presentation {
|
|
7
|
+
presentation { "S" }
|
|
8
8
|
option_type
|
|
9
9
|
end
|
|
10
10
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
FactoryBot.define do
|
|
4
|
-
factory :order, class:
|
|
4
|
+
factory :order, class: "Spree::Order" do
|
|
5
5
|
user
|
|
6
6
|
bill_address
|
|
7
7
|
ship_address
|
|
@@ -43,12 +43,12 @@ 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 = {
|
|
46
|
+
attributes = {order:, price: evaluator.line_items_price}.merge(attributes).tap do |attrs|
|
|
47
47
|
tax_category = attributes.delete(:tax_category)
|
|
48
48
|
if attrs[:variant] && tax_category
|
|
49
|
-
attrs[:variant].update(tax_category:
|
|
49
|
+
attrs[:variant].update(tax_category:)
|
|
50
50
|
elsif tax_category
|
|
51
|
-
attrs[:variant] = create(:variant, tax_category:
|
|
51
|
+
attrs[:variant] = create(:variant, tax_category:)
|
|
52
52
|
end
|
|
53
53
|
end
|
|
54
54
|
|
|
@@ -63,8 +63,8 @@ FactoryBot.define do
|
|
|
63
63
|
end
|
|
64
64
|
|
|
65
65
|
factory :order_ready_to_complete do
|
|
66
|
-
state {
|
|
67
|
-
payment_state {
|
|
66
|
+
state { "confirm" }
|
|
67
|
+
payment_state { "checkout" }
|
|
68
68
|
|
|
69
69
|
transient do
|
|
70
70
|
payment_type { :credit_card_payment }
|
|
@@ -85,33 +85,33 @@ FactoryBot.define do
|
|
|
85
85
|
transient do
|
|
86
86
|
completed_at { Time.current }
|
|
87
87
|
end
|
|
88
|
-
state {
|
|
88
|
+
state { "complete" }
|
|
89
89
|
|
|
90
90
|
after(:create) do |order, evaluator|
|
|
91
91
|
order.shipments.each do |shipment|
|
|
92
|
-
shipment.inventory_units.update_all state:
|
|
92
|
+
shipment.inventory_units.update_all state: "on_hand", pending: false
|
|
93
93
|
end
|
|
94
94
|
order.update_column(:completed_at, evaluator.completed_at)
|
|
95
95
|
end
|
|
96
96
|
|
|
97
97
|
factory :completed_order_with_pending_payment do
|
|
98
98
|
after(:create) do |order|
|
|
99
|
-
create(:payment, amount: order.total, order:, state:
|
|
99
|
+
create(:payment, amount: order.total, order:, state: "pending")
|
|
100
100
|
end
|
|
101
101
|
end
|
|
102
102
|
|
|
103
103
|
factory :order_ready_to_ship do
|
|
104
|
-
payment_state {
|
|
105
|
-
shipment_state {
|
|
104
|
+
payment_state { "paid" }
|
|
105
|
+
shipment_state { "ready" }
|
|
106
106
|
|
|
107
107
|
transient do
|
|
108
108
|
payment_type { :credit_card_payment }
|
|
109
109
|
end
|
|
110
110
|
|
|
111
111
|
after(:create) do |order, evaluator|
|
|
112
|
-
create(evaluator.payment_type, amount: order.total, order:, state:
|
|
112
|
+
create(evaluator.payment_type, amount: order.total, order:, state: "completed")
|
|
113
113
|
order.shipments.each do |shipment|
|
|
114
|
-
shipment.update_column(
|
|
114
|
+
shipment.update_column("state", "ready")
|
|
115
115
|
end
|
|
116
116
|
order.reload
|
|
117
117
|
end
|
|
@@ -122,8 +122,8 @@ FactoryBot.define do
|
|
|
122
122
|
end
|
|
123
123
|
after(:create) do |order, evaluator|
|
|
124
124
|
order.shipments.each do |shipment|
|
|
125
|
-
shipment.inventory_units.update_all state:
|
|
126
|
-
shipment.update_columns(state:
|
|
125
|
+
shipment.inventory_units.update_all state: "shipped"
|
|
126
|
+
shipment.update_columns(state: "shipped", shipped_at: Time.current)
|
|
127
127
|
next unless evaluator.with_cartons
|
|
128
128
|
Spree::Carton.create!(
|
|
129
129
|
stock_location: shipment.stock_location,
|
|
@@ -134,7 +134,7 @@ FactoryBot.define do
|
|
|
134
134
|
)
|
|
135
135
|
end
|
|
136
136
|
# We need to update the shipment_state after all callbacks have run
|
|
137
|
-
order.update_columns(shipment_state:
|
|
137
|
+
order.update_columns(shipment_state: "shipped")
|
|
138
138
|
order.reload
|
|
139
139
|
end
|
|
140
140
|
end
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
FactoryBot.define do
|
|
4
|
-
factory :payment, aliases: [:credit_card_payment], class:
|
|
4
|
+
factory :payment, aliases: [:credit_card_payment], class: "Spree::Payment" do
|
|
5
5
|
association(:payment_method, factory: :credit_card_payment_method)
|
|
6
6
|
source { create(:credit_card, user: order.user, address: order.bill_address) }
|
|
7
7
|
order
|
|
8
|
-
state {
|
|
9
|
-
response_code {
|
|
8
|
+
state { "checkout" }
|
|
9
|
+
response_code { "12345" }
|
|
10
10
|
|
|
11
11
|
trait :completed do
|
|
12
|
-
state {
|
|
12
|
+
state { "completed" }
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
trait :failing do
|
|
16
|
-
response_code {
|
|
17
|
-
association(:source, :failing, {
|
|
16
|
+
response_code { "00000" }
|
|
17
|
+
association(:source, :failing, {factory: :credit_card})
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
factory :payment_with_refund do
|
|
@@ -24,7 +24,7 @@ FactoryBot.define do
|
|
|
24
24
|
|
|
25
25
|
amount { refund_amount }
|
|
26
26
|
|
|
27
|
-
state {
|
|
27
|
+
state { "completed" }
|
|
28
28
|
|
|
29
29
|
refunds { build_list :refund, 1, amount: refund_amount }
|
|
30
30
|
end
|
|
@@ -34,12 +34,12 @@ FactoryBot.define do
|
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
-
factory :check_payment, class:
|
|
37
|
+
factory :check_payment, class: "Spree::Payment" do
|
|
38
38
|
association(:payment_method, factory: :check_payment_method)
|
|
39
39
|
order
|
|
40
40
|
end
|
|
41
41
|
|
|
42
|
-
factory :store_credit_payment, class:
|
|
42
|
+
factory :store_credit_payment, class: "Spree::Payment", parent: :payment do
|
|
43
43
|
association(:payment_method, factory: :store_credit_payment_method)
|
|
44
44
|
association(:source, factory: :store_credit)
|
|
45
45
|
end
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
FactoryBot.define do
|
|
4
|
-
factory :payment_method, aliases: [:credit_card_payment_method], class:
|
|
5
|
-
name {
|
|
4
|
+
factory :payment_method, aliases: [:credit_card_payment_method], class: "Spree::PaymentMethod::BogusCreditCard" do
|
|
5
|
+
name { "Credit Card" }
|
|
6
6
|
available_to_admin { true }
|
|
7
7
|
available_to_users { true }
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
factory :check_payment_method, class:
|
|
11
|
-
name {
|
|
10
|
+
factory :check_payment_method, class: "Spree::PaymentMethod::Check" do
|
|
11
|
+
name { "Check" }
|
|
12
12
|
available_to_admin { true }
|
|
13
13
|
available_to_users { true }
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
# authorize.net was moved to spree_gateway.
|
|
17
17
|
# Leaving this factory in place with bogus in case anyone is using it.
|
|
18
|
-
factory :simple_credit_card_payment_method, class:
|
|
19
|
-
name {
|
|
18
|
+
factory :simple_credit_card_payment_method, class: "Spree::PaymentMethod::SimpleBogusCreditCard" do
|
|
19
|
+
name { "Credit Card" }
|
|
20
20
|
available_to_admin { true }
|
|
21
21
|
available_to_users { true }
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
factory :store_credit_payment_method, class:
|
|
25
|
-
name
|
|
26
|
-
description
|
|
27
|
-
active
|
|
24
|
+
factory :store_credit_payment_method, class: "Spree::PaymentMethod::StoreCredit" do
|
|
25
|
+
name { "Store Credit" }
|
|
26
|
+
description { "Store Credit" }
|
|
27
|
+
active { true }
|
|
28
28
|
available_to_admin { false }
|
|
29
29
|
available_to_users { false }
|
|
30
30
|
auto_capture { true }
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
FactoryBot.define do
|
|
4
|
-
factory :base_product, class:
|
|
4
|
+
factory :base_product, class: "Spree::Product" do
|
|
5
5
|
sequence(:name) { |n| "Product ##{n} - #{Kernel.rand(9999)}" }
|
|
6
6
|
description { "As seen on TV!" }
|
|
7
7
|
price { 19.99 }
|
|
@@ -18,7 +18,7 @@ FactoryBot.define do
|
|
|
18
18
|
before(:create) { create(:stock_location) if Spree::StockLocation.count == 0 }
|
|
19
19
|
|
|
20
20
|
factory :custom_product do
|
|
21
|
-
name {
|
|
21
|
+
name { "Custom Product" }
|
|
22
22
|
price { 17.99 }
|
|
23
23
|
|
|
24
24
|
tax_category { |r| Spree::TaxCategory.first || r.association(:tax_category) }
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
FactoryBot.define do
|
|
4
|
-
factory :property, class:
|
|
5
|
-
name {
|
|
6
|
-
presentation {
|
|
4
|
+
factory :property, class: "Spree::Property" do
|
|
5
|
+
name { "baseball_cap_color" }
|
|
6
|
+
presentation { "cap color" }
|
|
7
7
|
end
|
|
8
8
|
end
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
FactoryBot.define do
|
|
4
4
|
sequence(:refund_transaction_id) { |n| "fake-refund-transaction-#{n}" }
|
|
5
5
|
|
|
6
|
-
factory :refund, class:
|
|
6
|
+
factory :refund, class: "Spree::Refund" do
|
|
7
7
|
transient do
|
|
8
8
|
payment_amount { 100 }
|
|
9
9
|
end
|
|
@@ -11,7 +11,7 @@ FactoryBot.define do
|
|
|
11
11
|
amount { 100.00 }
|
|
12
12
|
transaction_id { generate(:refund_transaction_id) }
|
|
13
13
|
payment do
|
|
14
|
-
association(:payment, state:
|
|
14
|
+
association(:payment, state: "completed", amount: payment_amount)
|
|
15
15
|
end
|
|
16
16
|
association(:reason, factory: :refund_reason)
|
|
17
17
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
FactoryBot.define do
|
|
4
|
-
factory :reimbursement_type, class:
|
|
4
|
+
factory :reimbursement_type, class: "Spree::ReimbursementType" do
|
|
5
5
|
sequence(:name) { |n| "Reimbursement Type #{n}" }
|
|
6
6
|
active { true }
|
|
7
7
|
mutable { true }
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
FactoryBot.define do
|
|
4
|
-
factory :return_authorization, class:
|
|
4
|
+
factory :return_authorization, class: "Spree::ReturnAuthorization" do
|
|
5
5
|
association(:order, factory: :shipped_order)
|
|
6
6
|
association(:stock_location, factory: :stock_location)
|
|
7
7
|
association(:reason, factory: :return_reason)
|
|
8
|
-
memo {
|
|
8
|
+
memo { "Items were broken" }
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
factory :new_return_authorization, class:
|
|
11
|
+
factory :new_return_authorization, class: "Spree::ReturnAuthorization" do
|
|
12
12
|
association(:order, factory: :shipped_order)
|
|
13
13
|
association(:stock_location, factory: :stock_location)
|
|
14
14
|
association(:reason, factory: :return_reason)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
FactoryBot.define do
|
|
4
|
-
factory :return_item, class:
|
|
4
|
+
factory :return_item, class: "Spree::ReturnItem" do
|
|
5
5
|
association(:inventory_unit, factory: :inventory_unit, state: :shipped)
|
|
6
6
|
association(:return_reason, factory: :return_reason)
|
|
7
7
|
return_authorization do |_return_item|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
FactoryBot.define do
|
|
4
|
-
factory :role, class:
|
|
4
|
+
factory :role, class: "Spree::Role" do
|
|
5
5
|
sequence(:name) { |n| "Role ##{n}" }
|
|
6
6
|
|
|
7
7
|
factory :admin_role do
|
|
8
|
-
name {
|
|
8
|
+
name { "admin" }
|
|
9
9
|
end
|
|
10
10
|
end
|
|
11
11
|
end
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
FactoryBot.define do
|
|
4
|
-
factory :shipment, class:
|
|
5
|
-
tracking {
|
|
4
|
+
factory :shipment, class: "Spree::Shipment" do
|
|
5
|
+
tracking { "U10000" }
|
|
6
6
|
cost { 100.00 }
|
|
7
|
-
state {
|
|
7
|
+
state { "pending" }
|
|
8
8
|
order
|
|
9
9
|
stock_location
|
|
10
10
|
|
|
@@ -6,16 +6,16 @@ FactoryBot.define do
|
|
|
6
6
|
aliases: [
|
|
7
7
|
:base_shipping_method
|
|
8
8
|
],
|
|
9
|
-
class:
|
|
9
|
+
class: "Spree::ShippingMethod"
|
|
10
10
|
) do
|
|
11
11
|
zones do
|
|
12
|
-
[Spree::Zone.find_by(name:
|
|
12
|
+
[Spree::Zone.find_by(name: "GlobalZone") || FactoryBot.create(:global_zone)]
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
name {
|
|
16
|
-
code {
|
|
17
|
-
carrier {
|
|
18
|
-
service_level {
|
|
15
|
+
name { "UPS Ground" }
|
|
16
|
+
code { "UPS_GROUND" }
|
|
17
|
+
carrier { "UPS" }
|
|
18
|
+
service_level { "1DAYGROUND" }
|
|
19
19
|
|
|
20
20
|
calculator { |s| s.association(:shipping_calculator, strategy: :build, preferred_amount: s.cost, preferred_currency: s.currency) }
|
|
21
21
|
|
|
@@ -30,7 +30,7 @@ FactoryBot.define do
|
|
|
30
30
|
end
|
|
31
31
|
end
|
|
32
32
|
|
|
33
|
-
factory :free_shipping_method, class:
|
|
33
|
+
factory :free_shipping_method, class: "Spree::ShippingMethod" do
|
|
34
34
|
cost { nil }
|
|
35
35
|
association(:calculator, factory: :shipping_no_amount_calculator, strategy: :build)
|
|
36
36
|
end
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
FactoryBot.define do
|
|
4
|
-
factory :state, class:
|
|
4
|
+
factory :state, class: "Spree::State" do
|
|
5
5
|
transient do
|
|
6
|
-
country_iso {
|
|
7
|
-
state_code {
|
|
6
|
+
country_iso { "US" }
|
|
7
|
+
state_code { "AL" }
|
|
8
8
|
|
|
9
9
|
carmen_subregion do
|
|
10
10
|
carmen_country = Carmen::Country.coded(country.iso)
|
|
@@ -17,7 +17,7 @@ FactoryBot.define do
|
|
|
17
17
|
carmen_regions = carmen_regions.flat_map(&:subregions) if carmen_regions.first.subregions?
|
|
18
18
|
region_collection = Carmen::RegionCollection.new(carmen_regions)
|
|
19
19
|
|
|
20
|
-
region_collection.coded(state_code) || region_collection.
|
|
20
|
+
region_collection.coded(state_code) || region_collection.min_by(&:name)
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
FactoryBot.define do
|
|
4
|
-
factory :stock_item, class:
|
|
4
|
+
factory :stock_item, class: "Spree::StockItem" do
|
|
5
5
|
backorderable { true }
|
|
6
6
|
association :stock_location, factory: :stock_location_without_variant_propagation
|
|
7
7
|
variant
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
FactoryBot.define do
|
|
4
|
-
factory :stock_location, class:
|
|
5
|
-
name {
|
|
6
|
-
address1 {
|
|
7
|
-
city {
|
|
8
|
-
zipcode {
|
|
9
|
-
phone {
|
|
4
|
+
factory :stock_location, class: "Spree::StockLocation" do
|
|
5
|
+
name { "NY Warehouse" }
|
|
6
|
+
address1 { "1600 Pennsylvania Ave NW" }
|
|
7
|
+
city { "Washington" }
|
|
8
|
+
zipcode { "20500" }
|
|
9
|
+
phone { "(202) 456-1111" }
|
|
10
10
|
active { true }
|
|
11
11
|
backorderable_default { true }
|
|
12
12
|
|
|
13
|
-
country
|
|
13
|
+
country { |stock_location| Spree::Country.first || stock_location.association(:country) }
|
|
14
14
|
state do |stock_location|
|
|
15
15
|
carmen_country = Carmen::Country.coded(stock_location.country.iso)
|
|
16
16
|
if carmen_country.subregions?
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
FactoryBot.define do
|
|
4
|
-
factory :stock_movement, class:
|
|
4
|
+
factory :stock_movement, class: "Spree::StockMovement" do
|
|
5
5
|
quantity { 1 }
|
|
6
|
-
action {
|
|
6
|
+
action { "sold" }
|
|
7
7
|
stock_item
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
trait :received do
|
|
11
|
-
action {
|
|
11
|
+
action { "received" }
|
|
12
12
|
end
|
|
13
13
|
end
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
FactoryBot.define do
|
|
4
|
-
factory :stock_package, class:
|
|
4
|
+
factory :stock_package, class: "Spree::Stock::Package" do
|
|
5
5
|
skip_create
|
|
6
6
|
|
|
7
7
|
transient do
|
|
8
8
|
stock_location { build(:stock_location) }
|
|
9
|
-
contents
|
|
9
|
+
contents { [] }
|
|
10
10
|
variants_contents { {} }
|
|
11
11
|
end
|
|
12
12
|
|
|
@@ -19,7 +19,7 @@ FactoryBot.define do
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
factory :stock_package_fulfilled do
|
|
22
|
-
transient { variants_contents { {
|
|
22
|
+
transient { variants_contents { {build(:variant) => 2} } }
|
|
23
23
|
end
|
|
24
24
|
end
|
|
25
25
|
end
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
FactoryBot.define do
|
|
4
|
-
factory :store_credit_event, class:
|
|
4
|
+
factory :store_credit_event, class: "Spree::StoreCreditEvent" do
|
|
5
5
|
store_credit
|
|
6
|
-
amount
|
|
6
|
+
amount { 100.00 }
|
|
7
7
|
authorization_code { "#{store_credit.id}-SC-20140602164814476128" }
|
|
8
|
-
action
|
|
8
|
+
action { Spree::StoreCredit::AUTHORIZE_ACTION }
|
|
9
9
|
|
|
10
|
-
factory :store_credit_auth_event, class:
|
|
11
|
-
action
|
|
10
|
+
factory :store_credit_auth_event, class: "Spree::StoreCreditEvent" do
|
|
11
|
+
action { Spree::StoreCredit::AUTHORIZE_ACTION }
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
factory :store_credit_capture_event do
|
|
15
|
-
action
|
|
15
|
+
action { Spree::StoreCredit::CAPTURE_ACTION }
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
factory :store_credit_adjustment_event do
|
|
19
|
-
action
|
|
19
|
+
action { Spree::StoreCredit::ADJUSTMENT_ACTION }
|
|
20
20
|
store_credit_reason { create(:store_credit_reason) }
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
factory :store_credit_invalidate_event do
|
|
24
|
-
action
|
|
24
|
+
action { Spree::StoreCredit::INVALIDATE_ACTION }
|
|
25
25
|
store_credit_reason { create(:store_credit_reason) }
|
|
26
26
|
end
|
|
27
27
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
FactoryBot.define do
|
|
4
|
-
factory :store_credit, class:
|
|
4
|
+
factory :store_credit, class: "Spree::StoreCredit" do
|
|
5
5
|
association :user, strategy: :create
|
|
6
6
|
association :created_by, factory: :user, strategy: :create
|
|
7
7
|
association :category, factory: :store_credit_category, strategy: :create
|