spree_core 4.2.5 → 4.3.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/app/finders/concerns/spree/product_filterable.rb +9 -0
- data/app/finders/spree/cms_pages/find.rb +41 -0
- data/app/finders/spree/menus/find.rb +11 -0
- data/app/finders/spree/option_values/find_available.rb +20 -0
- data/app/finders/spree/orders/find_complete.rb +14 -2
- data/app/finders/spree/orders/find_current.rb +1 -13
- data/app/finders/spree/product_properties/find_available.rb +20 -0
- data/app/finders/spree/products/find.rb +80 -21
- data/app/finders/spree/stores/find_current.rb +24 -0
- data/app/finders/spree/taxons/find.rb +22 -6
- data/app/helpers/spree/base_helper.rb +69 -7
- data/app/helpers/spree/locale_helper.rb +5 -1
- data/app/helpers/spree/products_helper.rb +7 -3
- data/app/models/concerns/spree/display_link.rb +42 -0
- data/app/models/concerns/spree/display_money.rb +6 -2
- data/app/models/concerns/spree/filter_param.rb +21 -0
- data/app/models/concerns/spree/image_methods.rb +24 -0
- data/app/models/concerns/spree/memoized_data.rb +24 -0
- data/app/models/concerns/spree/multi_store_resource.rb +24 -0
- data/app/models/concerns/spree/product_scopes.rb +71 -8
- data/app/models/concerns/spree/single_store_resource.rb +19 -0
- data/app/models/concerns/spree/user_address.rb +19 -0
- data/app/models/concerns/spree/user_methods.rb +14 -12
- data/app/models/concerns/spree/user_payment_source.rb +1 -1
- data/app/models/concerns/spree/user_reporting.rb +35 -10
- data/app/models/concerns/spree/user_roles.rb +25 -0
- data/app/models/spree/ability.rb +3 -1
- data/app/models/spree/address.rb +27 -6
- data/app/models/spree/app_configuration.rb +8 -0
- data/app/models/spree/app_dependencies.rb +20 -6
- data/app/models/spree/base.rb +18 -0
- data/app/models/spree/classification.rb +3 -0
- data/app/models/spree/cms/pages/feature_page.rb +7 -0
- data/app/models/spree/cms/pages/homepage.rb +20 -0
- data/app/models/spree/cms/pages/standard_page.rb +4 -0
- data/app/models/spree/cms/sections/featured_article.rb +22 -0
- data/app/models/spree/cms/sections/hero_image.rb +38 -0
- data/app/models/spree/cms/sections/image_gallery.rb +103 -0
- data/app/models/spree/cms/sections/product_carousel.rb +14 -0
- data/app/models/spree/cms/sections/rich_text_content.rb +13 -0
- data/app/models/spree/cms/sections/side_by_side_images.rb +74 -0
- data/app/models/spree/cms_page.rb +66 -0
- data/app/models/spree/cms_section.rb +69 -0
- data/app/models/spree/country.rb +14 -6
- data/app/models/spree/credit_card.rb +2 -8
- data/app/models/spree/customer_return.rb +8 -2
- data/app/models/spree/gateway/bogus.rb +6 -4
- data/app/models/spree/icon.rb +9 -0
- data/app/models/spree/image/configuration/active_storage.rb +2 -0
- data/app/models/spree/image.rb +5 -24
- data/app/models/spree/inventory_unit.rb +1 -1
- data/app/models/spree/line_item.rb +1 -1
- data/app/models/spree/menu.rb +63 -0
- data/app/models/spree/menu_item.rb +76 -0
- data/app/models/spree/option_type.rb +1 -1
- data/app/models/spree/option_value.rb +11 -0
- data/app/models/spree/option_value_variant.rb +1 -1
- data/app/models/spree/order/address_book.rb +3 -5
- data/app/models/spree/order/currency_updater.rb +1 -1
- data/app/models/spree/order/emails.rb +32 -0
- data/app/models/spree/order/payments.rb +1 -1
- data/app/models/spree/order/store_credit.rb +1 -1
- data/app/models/spree/order.rb +46 -45
- data/app/models/spree/payment.rb +7 -0
- data/app/models/spree/payment_method.rb +16 -0
- data/app/models/spree/preferences/preferable.rb +12 -0
- data/app/models/spree/preferences/preferable_class_methods.rb +10 -1
- data/app/models/spree/product.rb +37 -30
- data/app/models/spree/product_property.rb +19 -4
- data/app/models/spree/promotion/rules/country.rb +1 -1
- data/app/models/spree/promotion/rules/first_order.rb +4 -3
- data/app/models/spree/promotion/rules/taxon.rb +10 -7
- data/app/models/spree/promotion.rb +6 -15
- data/app/models/spree/promotion_handler/cart.rb +7 -2
- data/app/models/spree/promotion_handler/coupon.rb +5 -4
- data/app/models/spree/promotion_handler/free_shipping.rb +5 -6
- data/app/models/spree/promotion_handler/page.rb +3 -2
- data/app/models/spree/promotion_handler/promotion_duplicator.rb +1 -0
- data/app/models/spree/promotion_rule.rb +2 -0
- data/app/models/spree/property.rb +28 -1
- data/app/models/spree/reimbursement.rb +3 -1
- data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +2 -1
- data/app/models/spree/shipment_handler.rb +4 -2
- data/app/models/spree/stock/quantifier.rb +6 -6
- data/app/models/spree/stock_location.rb +9 -0
- data/app/models/spree/store.rb +90 -7
- data/app/models/spree/store_credit.rb +7 -3
- data/app/models/spree/store_credit_event.rb +2 -2
- data/app/models/spree/store_payment_method.rb +11 -0
- data/app/models/spree/store_product.rb +11 -0
- data/app/models/spree/store_promotion.rb +11 -0
- data/app/models/spree/taxon.rb +22 -1
- data/app/models/spree/taxon_image/configuration/active_storage.rb +2 -0
- data/app/models/spree/taxon_image.rb +1 -0
- data/app/models/spree/taxonomy.rb +3 -1
- data/app/models/spree/variant.rb +21 -6
- data/app/presenters/spree/filters/options_presenter.rb +47 -0
- data/app/presenters/spree/filters/price_presenter.rb +22 -0
- data/app/presenters/spree/filters/price_range_presenter.rb +29 -0
- data/app/presenters/spree/filters/properties_presenter.rb +23 -0
- data/app/presenters/spree/filters/property_presenter.rb +42 -0
- data/app/presenters/spree/filters/quantified_price_range_presenter.rb +44 -0
- data/app/services/spree/account/addresses/create.rb +1 -0
- data/app/services/spree/account/addresses/helper.rb +6 -0
- data/app/services/spree/account/addresses/update.rb +9 -3
- data/app/services/spree/account/create.rb +17 -0
- data/app/services/spree/account/update.rb +15 -0
- data/app/services/spree/build_localized_redirect_url.rb +1 -1
- data/app/services/spree/cart/associate.rb +16 -0
- data/app/services/spree/cart/change_currency.rb +27 -0
- data/app/services/spree/cart/create.rb +5 -3
- data/app/services/spree/cart/destroy.rb +40 -0
- data/app/services/spree/cart/empty.rb +36 -0
- data/app/services/spree/cart/estimate_shipping_rates.rb +3 -3
- data/app/services/spree/checkout/add_store_credit.rb +1 -1
- data/app/services/spree/classifications/reposition.rb +18 -0
- data/app/services/spree/credit_cards/destroy.rb +41 -0
- data/app/sorters/spree/base_sorter.rb +23 -11
- data/app/sorters/spree/products/sort.rb +23 -7
- data/app/validators/db_maximum_length_validator.rb +5 -0
- data/app/validators/email_validator.rb +3 -1
- data/config/initializers/active_storage.rb +2 -0
- data/config/locales/en.yml +177 -3
- data/config/routes.rb +0 -5
- data/db/migrate/20201023152810_add_filterable_to_spree_properties.rb +8 -0
- data/db/migrate/20210407200948_create_spree_menus.rb +16 -0
- data/db/migrate/20210408092939_create_spree_menu_items.rb +31 -0
- data/db/migrate/20210504163720_add_filter_param_to_spree_product_properties.rb +8 -0
- data/db/migrate/20210505114659_add_filter_param_to_spree_properties.rb +8 -0
- data/db/migrate/20210512191732_create_spree_cms_pages.rb +24 -0
- data/db/migrate/20210514204251_create_spree_cms_sections.rb +22 -0
- data/db/migrate/20210527094055_create_spree_products_stores.rb +36 -0
- data/db/migrate/20210608045519_ensure_store_default_country_is_set.rb +5 -0
- data/db/migrate/20210702112334_add_missing_timestamp_columns.rb +46 -0
- data/db/migrate/20210713131614_add_unique_index_on_property_id_and_product_id_to_product_properties.rb +29 -0
- data/db/migrate/20210715091956_add_store_id_to_spree_store_credits.rb +10 -0
- data/db/migrate/20210716093151_add_store_id_to_spree_taxonomies.rb +11 -0
- data/db/migrate/20210716104141_add_index_on_name_parent_id_and_taxonomy_id_on_spree_taxons.rb +31 -0
- data/db/migrate/20210721120857_add_index_on_permalink_parent_id_and_taxonomy_id_on_spree_taxons.rb +31 -0
- data/db/migrate/20210721125657_create_spree_promotions_stores.rb +29 -0
- data/db/migrate/20210722090705_add_store_id_to_spree_customer_returns.rb +11 -0
- data/db/migrate/20210726065456_change_integer_id_columns_into_bigint.rb +305 -0
- data/db/migrate/20210730154425_fix_promotion_code_and_path_unique_indexes.rb +9 -0
- data/lib/generators/spree/dummy/dummy_generator.rb +11 -6
- data/lib/generators/spree/dummy/templates/rails/test.rb +2 -0
- data/lib/generators/spree/dummy_model/templates/model.rb.tt +1 -1
- data/lib/generators/spree/install/install_generator.rb +12 -24
- data/lib/spree/core/components.rb +8 -0
- data/lib/spree/core/controller_helpers/auth.rb +7 -1
- data/lib/spree/core/controller_helpers/common.rb +1 -1
- data/lib/spree/core/controller_helpers/order.rb +4 -4
- data/lib/spree/core/controller_helpers/search.rb +1 -0
- data/lib/spree/core/controller_helpers/store.rb +24 -1
- data/lib/spree/core/engine.rb +6 -0
- data/lib/spree/core/importer/product.rb +3 -1
- data/lib/spree/core/product_duplicator.rb +1 -0
- data/lib/spree/core/search/base.rb +17 -22
- data/lib/spree/core/version.rb +1 -1
- data/lib/spree/core.rb +8 -4
- data/lib/spree/i18n.rb +1 -1
- data/lib/spree/money.rb +2 -1
- data/lib/spree/permitted_attributes.rb +21 -3
- data/lib/spree/testing_support/authorization_helpers.rb +6 -3
- data/lib/spree/testing_support/capybara_config.rb +3 -1
- data/lib/spree/testing_support/common_rake.rb +17 -4
- data/lib/spree/testing_support/extension_rake.rb +2 -2
- data/lib/spree/testing_support/factories/address_factory.rb +1 -1
- data/lib/spree/testing_support/factories/classification_factory.rb +8 -0
- data/lib/spree/testing_support/factories/cms_page_factory.rb +20 -0
- data/lib/spree/testing_support/factories/cms_section_factory.rb +31 -0
- data/lib/spree/testing_support/factories/customer_return_factory.rb +24 -17
- data/lib/spree/testing_support/factories/icon_factory.rb +7 -0
- data/lib/spree/testing_support/factories/line_item_factory.rb +6 -2
- data/lib/spree/testing_support/factories/menu_factory.rb +16 -0
- data/lib/spree/testing_support/factories/menu_item_factory.rb +10 -0
- data/lib/spree/testing_support/factories/options_factory.rb +5 -0
- data/lib/spree/testing_support/factories/order_factory.rb +11 -2
- data/lib/spree/testing_support/factories/payment_method_factory.rb +6 -2
- data/lib/spree/testing_support/factories/product_factory.rb +17 -1
- data/lib/spree/testing_support/factories/product_property_factory.rb +1 -1
- data/lib/spree/testing_support/factories/promotion_factory.rb +18 -9
- data/lib/spree/testing_support/factories/property_factory.rb +22 -0
- data/lib/spree/testing_support/factories/stock_location_factory.rb +5 -4
- data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -0
- data/lib/spree/testing_support/factories/store_factory.rb +11 -0
- data/lib/spree/testing_support/factories/taxon_factory.rb +3 -1
- data/lib/spree/testing_support/factories/taxon_image_factory.rb +7 -0
- data/lib/spree/testing_support/factories/taxonomy_factory.rb +1 -0
- data/lib/spree/testing_support/factories/user_factory.rb +7 -2
- data/lib/spree/testing_support/factories/variant_factory.rb +2 -2
- data/lib/spree/testing_support/flatpickr_capybara.rb +58 -35
- data/lib/spree/testing_support/locale_helpers.rb +1 -1
- data/lib/spree/testing_support/order_walkthrough.rb +9 -9
- data/lib/spree/testing_support/rspec_retry_config.rb +5 -0
- data/lib/tasks/core.rake +1 -1
- data/spec/fixtures/favicon.ico +0 -0
- data/spec/fixtures/files/icon_256x256.gif +0 -0
- data/spec/fixtures/files/icon_256x256.png +0 -0
- data/spec/fixtures/files/icon_512x512.png +0 -0
- data/spec/fixtures/files/img_256x128.png +0 -0
- data/spree_core.gemspec +12 -11
- metadata +211 -159
- data/app/assets/images/logo/spree_50.png +0 -0
- data/app/assets/images/noimage/large.png +0 -0
- data/app/assets/images/noimage/mini.png +0 -0
- data/app/assets/images/noimage/product.png +0 -0
- data/app/assets/images/noimage/small.png +0 -0
- data/app/assets/javascripts/spree.js +0 -78
- data/app/controllers/spree/errors_controller.rb +0 -11
- data/app/helpers/spree/mail_helper.rb +0 -29
- data/app/mailers/spree/base_mailer.rb +0 -46
- data/app/mailers/spree/order_mailer.rb +0 -26
- data/app/mailers/spree/reimbursement_mailer.rb +0 -12
- data/app/mailers/spree/shipment_mailer.rb +0 -12
- data/app/mailers/spree/test_mailer.rb +0 -8
- data/app/models/spree/validations/db_maximum_length_validator.rb +0 -22
- data/app/views/layouts/spree/base_mailer.html.erb +0 -46
- data/app/views/spree/errors/forbidden.html.erb +0 -0
- data/app/views/spree/errors/unauthorized.html.erb +0 -0
- data/app/views/spree/order_mailer/cancel_email.html.erb +0 -24
- data/app/views/spree/order_mailer/cancel_email.text.erb +0 -38
- data/app/views/spree/order_mailer/confirm_email.html.erb +0 -23
- data/app/views/spree/order_mailer/confirm_email.text.erb +0 -39
- data/app/views/spree/order_mailer/store_owner_notification_email.html.erb +0 -23
- data/app/views/spree/order_mailer/store_owner_notification_email.text.erb +0 -38
- data/app/views/spree/reimbursement_mailer/reimbursement_email.html.erb +0 -56
- data/app/views/spree/reimbursement_mailer/reimbursement_email.text.erb +0 -24
- data/app/views/spree/shared/_base_mailer_footer.html.erb +0 -12
- data/app/views/spree/shared/_base_mailer_header.html.erb +0 -13
- data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +0 -456
- data/app/views/spree/shared/_error_messages.html.erb +0 -11
- data/app/views/spree/shared/_mailer_line_item.html.erb +0 -16
- data/app/views/spree/shared/_paths.html.erb +0 -8
- data/app/views/spree/shared/_purchased_items_table.html.erb +0 -69
- data/app/views/spree/shared/purchased_items_table/_adjustment.html.erb +0 -13
- data/app/views/spree/shared/purchased_items_table/_line_item.html.erb +0 -27
- data/app/views/spree/shared/purchased_items_table/_subtotal.html.erb +0 -13
- data/app/views/spree/shared/purchased_items_table/_total.html.erb +0 -13
- data/app/views/spree/shipment_mailer/shipped_email.html.erb +0 -36
- data/app/views/spree/shipment_mailer/shipped_email.text.erb +0 -17
- 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/assets.rb +0 -2
- data/config/initializers/premailer_assets.rb +0 -1
- data/config/initializers/premailer_rails.rb +0 -3
- data/db/migrate/20140805171219_make_existing_credit_cards_default.rb +0 -10
- data/lib/generators/spree/dummy/templates/initializers/bullet.rb +0 -5
- data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -15
- data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -16
- data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -16
- data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -16
- data/lib/generators/spree/mailers_preview/mailers_preview_generator.rb +0 -23
- data/lib/generators/spree/mailers_preview/templates/mailers/previews/order_preview.rb +0 -13
- data/lib/generators/spree/mailers_preview/templates/mailers/previews/reimbursement_preview.rb +0 -5
- data/lib/generators/spree/mailers_preview/templates/mailers/previews/shipment_preview.rb +0 -5
- data/lib/generators/spree/mailers_preview/templates/mailers/previews/user_preview.rb +0 -11
- data/lib/tasks/email.rake +0 -10
- data/vendor/assets/javascripts/cleave.js +0 -1669
- data/vendor/assets/javascripts/fetch.umd.js +0 -531
- data/vendor/assets/javascripts/jquery.payment.js +0 -652
- data/vendor/assets/javascripts/jsuri.js +0 -458
- data/vendor/assets/javascripts/polyfill.min.js +0 -1
|
@@ -19,6 +19,15 @@ FactoryBot.define do
|
|
|
19
19
|
factory :promotion, class: Spree::Promotion do
|
|
20
20
|
name { 'Promo' }
|
|
21
21
|
|
|
22
|
+
before(:create) do |promotion, _evaluator|
|
|
23
|
+
if promotion.stores.empty?
|
|
24
|
+
default_store = Spree::Store.default.persisted? ? Spree::Store.default : nil
|
|
25
|
+
store = default_store || create(:store)
|
|
26
|
+
|
|
27
|
+
promotion.stores << [store]
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
22
31
|
trait :with_line_item_adjustment do
|
|
23
32
|
transient do
|
|
24
33
|
adjustment_rate { 10 }
|
|
@@ -57,17 +66,17 @@ FactoryBot.define do
|
|
|
57
66
|
|
|
58
67
|
factory :promotion_with_order_adjustment, traits: [:with_order_adjustment]
|
|
59
68
|
factory :promotion_with_item_total_rule, traits: [:with_item_total_rule]
|
|
60
|
-
end
|
|
61
69
|
|
|
62
|
-
|
|
63
|
-
|
|
70
|
+
factory :free_shipping_promotion do
|
|
71
|
+
name { 'Free Shipping Promotion' }
|
|
64
72
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
73
|
+
after(:create) do |promotion|
|
|
74
|
+
action = Spree::Promotion::Actions::FreeShipping.new
|
|
75
|
+
action.promotion = promotion
|
|
76
|
+
action.save
|
|
77
|
+
end
|
|
70
78
|
|
|
71
|
-
|
|
79
|
+
factory :free_shipping_promotion_with_item_total_rule, traits: [:with_item_total_rule]
|
|
80
|
+
end
|
|
72
81
|
end
|
|
73
82
|
end
|
|
@@ -2,5 +2,27 @@ FactoryBot.define do
|
|
|
2
2
|
factory :property, class: Spree::Property do
|
|
3
3
|
name { 'baseball_cap_color' }
|
|
4
4
|
presentation { 'cap color' }
|
|
5
|
+
|
|
6
|
+
trait :filterable do
|
|
7
|
+
filterable { true }
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
trait :brand do
|
|
11
|
+
name { 'brand' }
|
|
12
|
+
presentation { 'Brand' }
|
|
13
|
+
filter_param { 'brand' }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
trait :manufacturer do
|
|
17
|
+
name { 'manufacturer' }
|
|
18
|
+
presentation { 'Manufacturer' }
|
|
19
|
+
filter_param { 'manufacturer' }
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
trait :material do
|
|
23
|
+
name { 'material' }
|
|
24
|
+
presentation { 'Material' }
|
|
25
|
+
filter_param { 'material' }
|
|
26
|
+
end
|
|
5
27
|
end
|
|
6
28
|
end
|
|
@@ -17,11 +17,12 @@ FactoryBot.define do
|
|
|
17
17
|
after(:create) do |stock_location, _evaluator|
|
|
18
18
|
# variant will add itself to all stock_locations in an after_create
|
|
19
19
|
# creating a product will automatically create a master variant
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
store = create(:store)
|
|
21
|
+
product_1 = create(:product, stores: [store])
|
|
22
|
+
product_2 = create(:product, stores: [store])
|
|
22
23
|
|
|
23
|
-
stock_location.stock_items.where(variant_id: product_1.
|
|
24
|
-
stock_location.stock_items.where(variant_id: product_2.
|
|
24
|
+
stock_location.stock_items.where(variant_id: product_1.master.id).first.adjust_count_on_hand(10)
|
|
25
|
+
stock_location.stock_items.where(variant_id: product_2.master.id).first.adjust_count_on_hand(20)
|
|
25
26
|
end
|
|
26
27
|
end
|
|
27
28
|
end
|
|
@@ -12,5 +12,16 @@ FactoryBot.define do
|
|
|
12
12
|
facebook { 'spreecommerce' }
|
|
13
13
|
twitter { 'spreecommerce' }
|
|
14
14
|
instagram { 'spreecommerce' }
|
|
15
|
+
|
|
16
|
+
trait :with_favicon do
|
|
17
|
+
transient do
|
|
18
|
+
filepath { Spree::Core::Engine.root.join('spec', 'fixtures', 'favicon.ico') }
|
|
19
|
+
image_type { 'image/x-icon' }
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
favicon_image do
|
|
23
|
+
Rack::Test::UploadedFile.new(filepath, image_type)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
15
26
|
end
|
|
16
27
|
end
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
FactoryBot.define do
|
|
2
2
|
factory :taxon, class: Spree::Taxon do
|
|
3
3
|
sequence(:name) { |n| "taxon_#{n}" }
|
|
4
|
-
|
|
4
|
+
|
|
5
|
+
association :taxonomy, strategy: :create
|
|
6
|
+
association :icon, factory: :taxon_image
|
|
5
7
|
parent_id { taxonomy.root.id }
|
|
6
8
|
end
|
|
7
9
|
end
|
|
@@ -15,8 +15,13 @@ FactoryBot.define do
|
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
factory :user_with_addresses, aliases: [:user_with_addreses] do
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
after(:create) do |user|
|
|
19
|
+
user.ship_address = create(:address, user: user)
|
|
20
|
+
user.bill_address = create(:address, user: user)
|
|
21
|
+
user.addresses << user.ship_address
|
|
22
|
+
user.addresses << user.bill_address
|
|
23
|
+
user.save
|
|
24
|
+
end
|
|
20
25
|
end
|
|
21
26
|
end
|
|
22
27
|
end
|
|
@@ -12,7 +12,7 @@ FactoryBot.define do
|
|
|
12
12
|
is_master { 0 }
|
|
13
13
|
track_inventory { true }
|
|
14
14
|
|
|
15
|
-
product { |p| p.association(:base_product) }
|
|
15
|
+
product { |p| p.association(:base_product, stores: [create(:store)]) }
|
|
16
16
|
option_values { [create(:option_value)] }
|
|
17
17
|
|
|
18
18
|
# ensure stock item will be created for this variant
|
|
@@ -20,7 +20,7 @@ FactoryBot.define do
|
|
|
20
20
|
|
|
21
21
|
factory :variant do
|
|
22
22
|
# on_hand 5
|
|
23
|
-
product { |p| p.association(:product) }
|
|
23
|
+
product { |p| p.association(:product, stores: [create(:store)]) }
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
factory :master_variant do
|
|
@@ -1,78 +1,93 @@
|
|
|
1
1
|
module Spree
|
|
2
2
|
module TestingSupport
|
|
3
3
|
module FlatpickrCapybara
|
|
4
|
-
def fill_in_date_manually(label_text,
|
|
4
|
+
def fill_in_date_manually(label_text, options = {})
|
|
5
5
|
with_open_flatpickr(label_text) do |field|
|
|
6
|
-
fill_in field[:id], with:
|
|
6
|
+
fill_in field[:id], with: string_date(options)
|
|
7
7
|
end
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
def fill_in_date_picker(label_text,
|
|
10
|
+
def fill_in_date_picker(label_text, options = {})
|
|
11
|
+
if options[:hour].blank? && options[:minute].blank?
|
|
12
|
+
flatpickr_date_only(label_text, options)
|
|
13
|
+
else
|
|
14
|
+
flatpickr_date_time(label_text, options)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def fill_in_date_with_js(label_text, options = {})
|
|
19
|
+
date_field = find("input[id='#{label_text}']")
|
|
20
|
+
script = "document.querySelector('#{date_field}').flatpickr().setDate('#{string_date(options)}');"
|
|
21
|
+
|
|
22
|
+
page.execute_script(script)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def flatpickr_date_only(label_text, options = {})
|
|
11
28
|
within_open_flatpickr(label_text) do
|
|
12
29
|
within_flatpickr_months do
|
|
13
|
-
fill_in_flatpickr_year(
|
|
30
|
+
fill_in_flatpickr_year(options[:year].to_i)
|
|
31
|
+
sleep(0.25) # Pause to let JavaScript adjust the month selector in the flatpickr cal in relation to any related FROM...TO cal.
|
|
14
32
|
|
|
15
|
-
select_flatpickr_month(
|
|
33
|
+
select_flatpickr_month(options[:month].to_i)
|
|
34
|
+
sleep(0.25) # Pause to let JavaScript adjust the day selection area in the flatpickr cal in relation to any related FROM...TO cal.
|
|
16
35
|
|
|
17
|
-
click_on_flatpickr_day(
|
|
36
|
+
click_on_flatpickr_day(options[:day].to_i)
|
|
18
37
|
end
|
|
19
38
|
end
|
|
20
39
|
end
|
|
21
40
|
|
|
22
|
-
def
|
|
41
|
+
def flatpickr_date_time(label_text, options = {})
|
|
23
42
|
within_open_flatpickr(label_text) do
|
|
24
43
|
within_flatpickr_months do
|
|
25
|
-
fill_in_flatpickr_year(
|
|
44
|
+
fill_in_flatpickr_year(options[:year].to_i)
|
|
45
|
+
sleep(0.25) # Pause to let JavaScript adjust the month selector in the flatpickr cal in relation to any related FROM...TO cal.
|
|
26
46
|
|
|
27
|
-
select_flatpickr_month(
|
|
47
|
+
select_flatpickr_month(options[:month].to_i)
|
|
48
|
+
sleep(0.25) # Pause to let JavaScript adjust the day selection area in the flatpickr cal in relation to any related FROM...TO cal.
|
|
28
49
|
|
|
29
|
-
click_on_flatpickr_day(
|
|
50
|
+
click_on_flatpickr_day(options[:day].to_i)
|
|
30
51
|
end
|
|
31
52
|
|
|
32
53
|
within_flatpickr_time do
|
|
33
|
-
select_flatpickr_hour(
|
|
34
|
-
|
|
35
|
-
select_flatpickr_min(with.split('-')[4])
|
|
54
|
+
select_flatpickr_hour(options[:hour].to_i)
|
|
55
|
+
select_flatpickr_min(options[:minute].to_i)
|
|
36
56
|
end
|
|
37
57
|
end
|
|
38
58
|
end
|
|
39
59
|
|
|
40
|
-
def fill_in_date_with_js(label_text, with:)
|
|
41
|
-
date_field = find("input[id='#{label_text}']")
|
|
42
|
-
script = "document.querySelector('#{date_field}').flatpickr().setDate('#{with}');"
|
|
43
|
-
|
|
44
|
-
page.execute_script(script)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
private
|
|
48
|
-
|
|
49
60
|
def with_open_flatpickr(label_text)
|
|
50
61
|
field_label = find_field(id: label_text, type: :hidden)
|
|
51
62
|
|
|
52
63
|
date_field = field_label.sibling('.flatpickr-alt-input')
|
|
53
|
-
date_field.click # Open the
|
|
64
|
+
date_field.click # Open the flatpickr cal.
|
|
65
|
+
sleep(0.25) # Pause to let JavaScript populate DOM with an open flatpickr cal.
|
|
54
66
|
|
|
55
|
-
yield(date_field)
|
|
67
|
+
yield(date_field) # Complete required action within the open flatpickr cal.
|
|
56
68
|
|
|
57
|
-
date_field.send_keys :tab # Close the date
|
|
69
|
+
date_field.send_keys :tab # Close the date flatpickr cal.
|
|
70
|
+
sleep(0.25) # Pause to let JavaScript adjust any DOM values in relation to any related FROM...TO cal.
|
|
58
71
|
end
|
|
59
72
|
|
|
60
|
-
def within_open_flatpickr(label_text)
|
|
73
|
+
def within_open_flatpickr(label_text, &block)
|
|
61
74
|
with_open_flatpickr(label_text) do
|
|
62
|
-
within find(
|
|
75
|
+
within find('.flatpickr-calendar.open', &block)
|
|
63
76
|
end
|
|
64
77
|
end
|
|
65
78
|
|
|
66
|
-
def within_flatpickr_months
|
|
67
|
-
within find('.flatpickr-months .flatpickr-month .flatpickr-current-month')
|
|
79
|
+
def within_flatpickr_months(&block)
|
|
80
|
+
within find('.flatpickr-months > .flatpickr-month > .flatpickr-current-month', &block)
|
|
68
81
|
end
|
|
69
82
|
|
|
70
|
-
def within_flatpickr_time
|
|
71
|
-
within find('.flatpickr-time')
|
|
83
|
+
def within_flatpickr_time(&block)
|
|
84
|
+
within find('.flatpickr-time', &block)
|
|
72
85
|
end
|
|
73
86
|
|
|
74
87
|
def select_flatpickr_month(month)
|
|
75
|
-
|
|
88
|
+
accurate_month = (month.to_i - 1)
|
|
89
|
+
|
|
90
|
+
find("select.flatpickr-monthDropdown-months > option[value='#{accurate_month}']").select_option
|
|
76
91
|
end
|
|
77
92
|
|
|
78
93
|
def fill_in_flatpickr_year(year)
|
|
@@ -81,12 +96,12 @@ module Spree
|
|
|
81
96
|
|
|
82
97
|
def click_on_flatpickr_day(day)
|
|
83
98
|
within_flatpickr_days do
|
|
84
|
-
find('
|
|
99
|
+
find('.flatpickr-day:not(.prevMonthDay):not(.nextMonthDay)', text: day, exact_text: true).click
|
|
85
100
|
end
|
|
86
101
|
end
|
|
87
102
|
|
|
88
|
-
def within_flatpickr_days
|
|
89
|
-
within find('.flatpickr-innerContainer > .flatpickr-rContainer > .flatpickr-days
|
|
103
|
+
def within_flatpickr_days(&block)
|
|
104
|
+
within find('.flatpickr-innerContainer > .flatpickr-rContainer > .flatpickr-days > .dayContainer', &block)
|
|
90
105
|
end
|
|
91
106
|
|
|
92
107
|
def select_flatpickr_hour(hour)
|
|
@@ -96,6 +111,14 @@ module Spree
|
|
|
96
111
|
def select_flatpickr_min(min)
|
|
97
112
|
find('input.flatpickr-minute').set(min)
|
|
98
113
|
end
|
|
114
|
+
|
|
115
|
+
def string_date(options)
|
|
116
|
+
if options[:hour].present? && options[:minute].present?
|
|
117
|
+
"#{options[:year]}-#{options[:month]}-#{options[:day]}-#{options[:hour]}-#{options[:minute]}"
|
|
118
|
+
else
|
|
119
|
+
"#{options[:year]}-#{options[:month]}-#{options[:day]}"
|
|
120
|
+
end
|
|
121
|
+
end
|
|
99
122
|
end
|
|
100
123
|
end
|
|
101
124
|
end
|
|
@@ -48,7 +48,7 @@ module Spree
|
|
|
48
48
|
remember_me: 'Se souvenir de moi',
|
|
49
49
|
my_account: 'Mon compte',
|
|
50
50
|
my_orders: 'Mes commandes',
|
|
51
|
-
|
|
51
|
+
logged_in_successfully: 'Connexion réussie'
|
|
52
52
|
})
|
|
53
53
|
end
|
|
54
54
|
# rubocop:enable Layout/ArgumentAlignment
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
class OrderWalkthrough
|
|
2
|
-
def self.up_to(state)
|
|
3
|
-
store
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
2
|
+
def self.up_to(state, store = nil)
|
|
3
|
+
store ||= if Spree::Store.exists?
|
|
4
|
+
# Ensure the default store is used
|
|
5
|
+
Spree::Store.default || FactoryBot.create(:store, default: true)
|
|
6
|
+
else
|
|
7
|
+
# Create a default store
|
|
8
|
+
FactoryBot.create(:store, default: true)
|
|
9
|
+
end
|
|
10
10
|
|
|
11
11
|
# A payment method must exist for an order to proceed through the Address state
|
|
12
12
|
unless Spree::PaymentMethod.exists?
|
|
@@ -28,7 +28,7 @@ class OrderWalkthrough
|
|
|
28
28
|
end
|
|
29
29
|
end
|
|
30
30
|
|
|
31
|
-
order =
|
|
31
|
+
order = store.orders.create!(email: 'spree@example.com')
|
|
32
32
|
add_line_item!(order)
|
|
33
33
|
order.next!
|
|
34
34
|
|
|
@@ -7,4 +7,9 @@ RSpec.configure do |config|
|
|
|
7
7
|
config.around :each, type: :feature do |ex|
|
|
8
8
|
ex.run_with_retry retry: ENV.fetch('RSPEC_RETRY_RETRY_COUNT', 3).to_i
|
|
9
9
|
end
|
|
10
|
+
|
|
11
|
+
# callback to be run between retries
|
|
12
|
+
config.retry_callback = proc do |ex|
|
|
13
|
+
Rails.cache.clear
|
|
14
|
+
end
|
|
10
15
|
end
|
data/lib/tasks/core.rake
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
data/spree_core.gemspec
CHANGED
|
@@ -8,15 +8,15 @@ Gem::Specification.new do |s|
|
|
|
8
8
|
s.version = Spree.version
|
|
9
9
|
s.authors = ['Sean Schofield', 'Spark Solutions']
|
|
10
10
|
s.email = 'hello@spreecommerce.org'
|
|
11
|
-
s.summary = 'The bare bones necessary for Spree
|
|
12
|
-
s.description = '
|
|
11
|
+
s.summary = 'The bare bones necessary for Spree'
|
|
12
|
+
s.description = 'Spree Models, Helpers, Services and core libraries'
|
|
13
13
|
s.homepage = 'https://spreecommerce.org'
|
|
14
14
|
s.license = 'BSD-3-Clause'
|
|
15
15
|
|
|
16
16
|
s.metadata = {
|
|
17
17
|
"bug_tracker_uri" => "https://github.com/spree/spree/issues",
|
|
18
18
|
"changelog_uri" => "https://github.com/spree/spree/releases/tag/v#{s.version}",
|
|
19
|
-
"documentation_uri" => "https://
|
|
19
|
+
"documentation_uri" => "https://dev-docs.spreecommerce.org/",
|
|
20
20
|
"source_code_uri" => "https://github.com/spree/spree/tree/v#{s.version}",
|
|
21
21
|
}
|
|
22
22
|
|
|
@@ -26,8 +26,16 @@ Gem::Specification.new do |s|
|
|
|
26
26
|
s.files = `git ls-files`.split("\n").reject { |f| f.match(/^spec/) && !f.match(/^spec\/fixtures/) }
|
|
27
27
|
s.require_path = 'lib'
|
|
28
28
|
|
|
29
|
+
%w[
|
|
30
|
+
actionpack actionview activejob activemodel activerecord
|
|
31
|
+
activestorage activesupport railties
|
|
32
|
+
].each do |rails_gem|
|
|
33
|
+
s.add_dependency rails_gem, '>= 5.2'
|
|
34
|
+
end
|
|
35
|
+
|
|
29
36
|
s.add_dependency 'activemerchant', '~> 1.67'
|
|
30
37
|
s.add_dependency 'acts_as_list', '>= 0.8'
|
|
38
|
+
s.add_dependency 'auto_strip_attributes', '~> 2.6'
|
|
31
39
|
s.add_dependency 'awesome_nested_set', '~> 3.3', '>= 3.3.1'
|
|
32
40
|
s.add_dependency 'carmen', '>= 1.0'
|
|
33
41
|
s.add_dependency 'cancancan', '~> 3.2'
|
|
@@ -37,20 +45,13 @@ Gem::Specification.new do |s|
|
|
|
37
45
|
s.add_dependency 'money', '~> 6.13'
|
|
38
46
|
s.add_dependency 'monetize', '~> 1.9'
|
|
39
47
|
s.add_dependency 'paranoia', '~> 2.4'
|
|
40
|
-
s.add_dependency 'premailer-rails'
|
|
41
|
-
s.add_dependency 'rails', '>= 5.2', '< 6.2'
|
|
42
48
|
s.add_dependency 'ransack', '~> 2.3'
|
|
43
|
-
s.add_dependency 'responders'
|
|
44
49
|
s.add_dependency 'rexml'
|
|
45
50
|
s.add_dependency 'state_machines-activerecord', '~> 0.6'
|
|
46
51
|
s.add_dependency 'state_machines-activemodel', '~> 0.7'
|
|
47
52
|
s.add_dependency 'stringex'
|
|
48
|
-
s.add_dependency '
|
|
49
|
-
s.add_dependency 'sprockets', '~> 3.7'
|
|
50
|
-
s.add_dependency 'sprockets-rails'
|
|
53
|
+
s.add_dependency 'validates_zipcode'
|
|
51
54
|
s.add_dependency 'mini_magick', '~> 4.9', '>= 4.9.4'
|
|
52
55
|
s.add_dependency 'image_processing', '~> 1.2'
|
|
53
56
|
s.add_dependency 'active_storage_validations', '~> 0.9'
|
|
54
|
-
|
|
55
|
-
s.add_development_dependency 'email_spec', '~> 2.2'
|
|
56
57
|
end
|