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.
Files changed (263) hide show
  1. checksums.yaml +4 -4
  2. data/app/finders/concerns/spree/product_filterable.rb +9 -0
  3. data/app/finders/spree/cms_pages/find.rb +41 -0
  4. data/app/finders/spree/menus/find.rb +11 -0
  5. data/app/finders/spree/option_values/find_available.rb +20 -0
  6. data/app/finders/spree/orders/find_complete.rb +14 -2
  7. data/app/finders/spree/orders/find_current.rb +1 -13
  8. data/app/finders/spree/product_properties/find_available.rb +20 -0
  9. data/app/finders/spree/products/find.rb +80 -21
  10. data/app/finders/spree/stores/find_current.rb +24 -0
  11. data/app/finders/spree/taxons/find.rb +22 -6
  12. data/app/helpers/spree/base_helper.rb +69 -7
  13. data/app/helpers/spree/locale_helper.rb +5 -1
  14. data/app/helpers/spree/products_helper.rb +7 -3
  15. data/app/models/concerns/spree/display_link.rb +42 -0
  16. data/app/models/concerns/spree/display_money.rb +6 -2
  17. data/app/models/concerns/spree/filter_param.rb +21 -0
  18. data/app/models/concerns/spree/image_methods.rb +24 -0
  19. data/app/models/concerns/spree/memoized_data.rb +24 -0
  20. data/app/models/concerns/spree/multi_store_resource.rb +24 -0
  21. data/app/models/concerns/spree/product_scopes.rb +71 -8
  22. data/app/models/concerns/spree/single_store_resource.rb +19 -0
  23. data/app/models/concerns/spree/user_address.rb +19 -0
  24. data/app/models/concerns/spree/user_methods.rb +14 -12
  25. data/app/models/concerns/spree/user_payment_source.rb +1 -1
  26. data/app/models/concerns/spree/user_reporting.rb +35 -10
  27. data/app/models/concerns/spree/user_roles.rb +25 -0
  28. data/app/models/spree/ability.rb +3 -1
  29. data/app/models/spree/address.rb +27 -6
  30. data/app/models/spree/app_configuration.rb +8 -0
  31. data/app/models/spree/app_dependencies.rb +20 -6
  32. data/app/models/spree/base.rb +18 -0
  33. data/app/models/spree/classification.rb +3 -0
  34. data/app/models/spree/cms/pages/feature_page.rb +7 -0
  35. data/app/models/spree/cms/pages/homepage.rb +20 -0
  36. data/app/models/spree/cms/pages/standard_page.rb +4 -0
  37. data/app/models/spree/cms/sections/featured_article.rb +22 -0
  38. data/app/models/spree/cms/sections/hero_image.rb +38 -0
  39. data/app/models/spree/cms/sections/image_gallery.rb +103 -0
  40. data/app/models/spree/cms/sections/product_carousel.rb +14 -0
  41. data/app/models/spree/cms/sections/rich_text_content.rb +13 -0
  42. data/app/models/spree/cms/sections/side_by_side_images.rb +74 -0
  43. data/app/models/spree/cms_page.rb +66 -0
  44. data/app/models/spree/cms_section.rb +69 -0
  45. data/app/models/spree/country.rb +14 -6
  46. data/app/models/spree/credit_card.rb +2 -8
  47. data/app/models/spree/customer_return.rb +8 -2
  48. data/app/models/spree/gateway/bogus.rb +6 -4
  49. data/app/models/spree/icon.rb +9 -0
  50. data/app/models/spree/image/configuration/active_storage.rb +2 -0
  51. data/app/models/spree/image.rb +5 -24
  52. data/app/models/spree/inventory_unit.rb +1 -1
  53. data/app/models/spree/line_item.rb +1 -1
  54. data/app/models/spree/menu.rb +63 -0
  55. data/app/models/spree/menu_item.rb +76 -0
  56. data/app/models/spree/option_type.rb +1 -1
  57. data/app/models/spree/option_value.rb +11 -0
  58. data/app/models/spree/option_value_variant.rb +1 -1
  59. data/app/models/spree/order/address_book.rb +3 -5
  60. data/app/models/spree/order/currency_updater.rb +1 -1
  61. data/app/models/spree/order/emails.rb +32 -0
  62. data/app/models/spree/order/payments.rb +1 -1
  63. data/app/models/spree/order/store_credit.rb +1 -1
  64. data/app/models/spree/order.rb +46 -45
  65. data/app/models/spree/payment.rb +7 -0
  66. data/app/models/spree/payment_method.rb +16 -0
  67. data/app/models/spree/preferences/preferable.rb +12 -0
  68. data/app/models/spree/preferences/preferable_class_methods.rb +10 -1
  69. data/app/models/spree/product.rb +37 -30
  70. data/app/models/spree/product_property.rb +19 -4
  71. data/app/models/spree/promotion/rules/country.rb +1 -1
  72. data/app/models/spree/promotion/rules/first_order.rb +4 -3
  73. data/app/models/spree/promotion/rules/taxon.rb +10 -7
  74. data/app/models/spree/promotion.rb +6 -15
  75. data/app/models/spree/promotion_handler/cart.rb +7 -2
  76. data/app/models/spree/promotion_handler/coupon.rb +5 -4
  77. data/app/models/spree/promotion_handler/free_shipping.rb +5 -6
  78. data/app/models/spree/promotion_handler/page.rb +3 -2
  79. data/app/models/spree/promotion_handler/promotion_duplicator.rb +1 -0
  80. data/app/models/spree/promotion_rule.rb +2 -0
  81. data/app/models/spree/property.rb +28 -1
  82. data/app/models/spree/reimbursement.rb +3 -1
  83. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +2 -1
  84. data/app/models/spree/shipment_handler.rb +4 -2
  85. data/app/models/spree/stock/quantifier.rb +6 -6
  86. data/app/models/spree/stock_location.rb +9 -0
  87. data/app/models/spree/store.rb +90 -7
  88. data/app/models/spree/store_credit.rb +7 -3
  89. data/app/models/spree/store_credit_event.rb +2 -2
  90. data/app/models/spree/store_payment_method.rb +11 -0
  91. data/app/models/spree/store_product.rb +11 -0
  92. data/app/models/spree/store_promotion.rb +11 -0
  93. data/app/models/spree/taxon.rb +22 -1
  94. data/app/models/spree/taxon_image/configuration/active_storage.rb +2 -0
  95. data/app/models/spree/taxon_image.rb +1 -0
  96. data/app/models/spree/taxonomy.rb +3 -1
  97. data/app/models/spree/variant.rb +21 -6
  98. data/app/presenters/spree/filters/options_presenter.rb +47 -0
  99. data/app/presenters/spree/filters/price_presenter.rb +22 -0
  100. data/app/presenters/spree/filters/price_range_presenter.rb +29 -0
  101. data/app/presenters/spree/filters/properties_presenter.rb +23 -0
  102. data/app/presenters/spree/filters/property_presenter.rb +42 -0
  103. data/app/presenters/spree/filters/quantified_price_range_presenter.rb +44 -0
  104. data/app/services/spree/account/addresses/create.rb +1 -0
  105. data/app/services/spree/account/addresses/helper.rb +6 -0
  106. data/app/services/spree/account/addresses/update.rb +9 -3
  107. data/app/services/spree/account/create.rb +17 -0
  108. data/app/services/spree/account/update.rb +15 -0
  109. data/app/services/spree/build_localized_redirect_url.rb +1 -1
  110. data/app/services/spree/cart/associate.rb +16 -0
  111. data/app/services/spree/cart/change_currency.rb +27 -0
  112. data/app/services/spree/cart/create.rb +5 -3
  113. data/app/services/spree/cart/destroy.rb +40 -0
  114. data/app/services/spree/cart/empty.rb +36 -0
  115. data/app/services/spree/cart/estimate_shipping_rates.rb +3 -3
  116. data/app/services/spree/checkout/add_store_credit.rb +1 -1
  117. data/app/services/spree/classifications/reposition.rb +18 -0
  118. data/app/services/spree/credit_cards/destroy.rb +41 -0
  119. data/app/sorters/spree/base_sorter.rb +23 -11
  120. data/app/sorters/spree/products/sort.rb +23 -7
  121. data/app/validators/db_maximum_length_validator.rb +5 -0
  122. data/app/validators/email_validator.rb +3 -1
  123. data/config/initializers/active_storage.rb +2 -0
  124. data/config/locales/en.yml +177 -3
  125. data/config/routes.rb +0 -5
  126. data/db/migrate/20201023152810_add_filterable_to_spree_properties.rb +8 -0
  127. data/db/migrate/20210407200948_create_spree_menus.rb +16 -0
  128. data/db/migrate/20210408092939_create_spree_menu_items.rb +31 -0
  129. data/db/migrate/20210504163720_add_filter_param_to_spree_product_properties.rb +8 -0
  130. data/db/migrate/20210505114659_add_filter_param_to_spree_properties.rb +8 -0
  131. data/db/migrate/20210512191732_create_spree_cms_pages.rb +24 -0
  132. data/db/migrate/20210514204251_create_spree_cms_sections.rb +22 -0
  133. data/db/migrate/20210527094055_create_spree_products_stores.rb +36 -0
  134. data/db/migrate/20210608045519_ensure_store_default_country_is_set.rb +5 -0
  135. data/db/migrate/20210702112334_add_missing_timestamp_columns.rb +46 -0
  136. data/db/migrate/20210713131614_add_unique_index_on_property_id_and_product_id_to_product_properties.rb +29 -0
  137. data/db/migrate/20210715091956_add_store_id_to_spree_store_credits.rb +10 -0
  138. data/db/migrate/20210716093151_add_store_id_to_spree_taxonomies.rb +11 -0
  139. data/db/migrate/20210716104141_add_index_on_name_parent_id_and_taxonomy_id_on_spree_taxons.rb +31 -0
  140. data/db/migrate/20210721120857_add_index_on_permalink_parent_id_and_taxonomy_id_on_spree_taxons.rb +31 -0
  141. data/db/migrate/20210721125657_create_spree_promotions_stores.rb +29 -0
  142. data/db/migrate/20210722090705_add_store_id_to_spree_customer_returns.rb +11 -0
  143. data/db/migrate/20210726065456_change_integer_id_columns_into_bigint.rb +305 -0
  144. data/db/migrate/20210730154425_fix_promotion_code_and_path_unique_indexes.rb +9 -0
  145. data/lib/generators/spree/dummy/dummy_generator.rb +11 -6
  146. data/lib/generators/spree/dummy/templates/rails/test.rb +2 -0
  147. data/lib/generators/spree/dummy_model/templates/model.rb.tt +1 -1
  148. data/lib/generators/spree/install/install_generator.rb +12 -24
  149. data/lib/spree/core/components.rb +8 -0
  150. data/lib/spree/core/controller_helpers/auth.rb +7 -1
  151. data/lib/spree/core/controller_helpers/common.rb +1 -1
  152. data/lib/spree/core/controller_helpers/order.rb +4 -4
  153. data/lib/spree/core/controller_helpers/search.rb +1 -0
  154. data/lib/spree/core/controller_helpers/store.rb +24 -1
  155. data/lib/spree/core/engine.rb +6 -0
  156. data/lib/spree/core/importer/product.rb +3 -1
  157. data/lib/spree/core/product_duplicator.rb +1 -0
  158. data/lib/spree/core/search/base.rb +17 -22
  159. data/lib/spree/core/version.rb +1 -1
  160. data/lib/spree/core.rb +8 -4
  161. data/lib/spree/i18n.rb +1 -1
  162. data/lib/spree/money.rb +2 -1
  163. data/lib/spree/permitted_attributes.rb +21 -3
  164. data/lib/spree/testing_support/authorization_helpers.rb +6 -3
  165. data/lib/spree/testing_support/capybara_config.rb +3 -1
  166. data/lib/spree/testing_support/common_rake.rb +17 -4
  167. data/lib/spree/testing_support/extension_rake.rb +2 -2
  168. data/lib/spree/testing_support/factories/address_factory.rb +1 -1
  169. data/lib/spree/testing_support/factories/classification_factory.rb +8 -0
  170. data/lib/spree/testing_support/factories/cms_page_factory.rb +20 -0
  171. data/lib/spree/testing_support/factories/cms_section_factory.rb +31 -0
  172. data/lib/spree/testing_support/factories/customer_return_factory.rb +24 -17
  173. data/lib/spree/testing_support/factories/icon_factory.rb +7 -0
  174. data/lib/spree/testing_support/factories/line_item_factory.rb +6 -2
  175. data/lib/spree/testing_support/factories/menu_factory.rb +16 -0
  176. data/lib/spree/testing_support/factories/menu_item_factory.rb +10 -0
  177. data/lib/spree/testing_support/factories/options_factory.rb +5 -0
  178. data/lib/spree/testing_support/factories/order_factory.rb +11 -2
  179. data/lib/spree/testing_support/factories/payment_method_factory.rb +6 -2
  180. data/lib/spree/testing_support/factories/product_factory.rb +17 -1
  181. data/lib/spree/testing_support/factories/product_property_factory.rb +1 -1
  182. data/lib/spree/testing_support/factories/promotion_factory.rb +18 -9
  183. data/lib/spree/testing_support/factories/property_factory.rb +22 -0
  184. data/lib/spree/testing_support/factories/stock_location_factory.rb +5 -4
  185. data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -0
  186. data/lib/spree/testing_support/factories/store_factory.rb +11 -0
  187. data/lib/spree/testing_support/factories/taxon_factory.rb +3 -1
  188. data/lib/spree/testing_support/factories/taxon_image_factory.rb +7 -0
  189. data/lib/spree/testing_support/factories/taxonomy_factory.rb +1 -0
  190. data/lib/spree/testing_support/factories/user_factory.rb +7 -2
  191. data/lib/spree/testing_support/factories/variant_factory.rb +2 -2
  192. data/lib/spree/testing_support/flatpickr_capybara.rb +58 -35
  193. data/lib/spree/testing_support/locale_helpers.rb +1 -1
  194. data/lib/spree/testing_support/order_walkthrough.rb +9 -9
  195. data/lib/spree/testing_support/rspec_retry_config.rb +5 -0
  196. data/lib/tasks/core.rake +1 -1
  197. data/spec/fixtures/favicon.ico +0 -0
  198. data/spec/fixtures/files/icon_256x256.gif +0 -0
  199. data/spec/fixtures/files/icon_256x256.png +0 -0
  200. data/spec/fixtures/files/icon_512x512.png +0 -0
  201. data/spec/fixtures/files/img_256x128.png +0 -0
  202. data/spree_core.gemspec +12 -11
  203. metadata +211 -159
  204. data/app/assets/images/logo/spree_50.png +0 -0
  205. data/app/assets/images/noimage/large.png +0 -0
  206. data/app/assets/images/noimage/mini.png +0 -0
  207. data/app/assets/images/noimage/product.png +0 -0
  208. data/app/assets/images/noimage/small.png +0 -0
  209. data/app/assets/javascripts/spree.js +0 -78
  210. data/app/controllers/spree/errors_controller.rb +0 -11
  211. data/app/helpers/spree/mail_helper.rb +0 -29
  212. data/app/mailers/spree/base_mailer.rb +0 -46
  213. data/app/mailers/spree/order_mailer.rb +0 -26
  214. data/app/mailers/spree/reimbursement_mailer.rb +0 -12
  215. data/app/mailers/spree/shipment_mailer.rb +0 -12
  216. data/app/mailers/spree/test_mailer.rb +0 -8
  217. data/app/models/spree/validations/db_maximum_length_validator.rb +0 -22
  218. data/app/views/layouts/spree/base_mailer.html.erb +0 -46
  219. data/app/views/spree/errors/forbidden.html.erb +0 -0
  220. data/app/views/spree/errors/unauthorized.html.erb +0 -0
  221. data/app/views/spree/order_mailer/cancel_email.html.erb +0 -24
  222. data/app/views/spree/order_mailer/cancel_email.text.erb +0 -38
  223. data/app/views/spree/order_mailer/confirm_email.html.erb +0 -23
  224. data/app/views/spree/order_mailer/confirm_email.text.erb +0 -39
  225. data/app/views/spree/order_mailer/store_owner_notification_email.html.erb +0 -23
  226. data/app/views/spree/order_mailer/store_owner_notification_email.text.erb +0 -38
  227. data/app/views/spree/reimbursement_mailer/reimbursement_email.html.erb +0 -56
  228. data/app/views/spree/reimbursement_mailer/reimbursement_email.text.erb +0 -24
  229. data/app/views/spree/shared/_base_mailer_footer.html.erb +0 -12
  230. data/app/views/spree/shared/_base_mailer_header.html.erb +0 -13
  231. data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +0 -456
  232. data/app/views/spree/shared/_error_messages.html.erb +0 -11
  233. data/app/views/spree/shared/_mailer_line_item.html.erb +0 -16
  234. data/app/views/spree/shared/_paths.html.erb +0 -8
  235. data/app/views/spree/shared/_purchased_items_table.html.erb +0 -69
  236. data/app/views/spree/shared/purchased_items_table/_adjustment.html.erb +0 -13
  237. data/app/views/spree/shared/purchased_items_table/_line_item.html.erb +0 -27
  238. data/app/views/spree/shared/purchased_items_table/_subtotal.html.erb +0 -13
  239. data/app/views/spree/shared/purchased_items_table/_total.html.erb +0 -13
  240. data/app/views/spree/shipment_mailer/shipped_email.html.erb +0 -36
  241. data/app/views/spree/shipment_mailer/shipped_email.text.erb +0 -17
  242. data/app/views/spree/test_mailer/test_email.html.erb +0 -40
  243. data/app/views/spree/test_mailer/test_email.text.erb +0 -4
  244. data/config/initializers/assets.rb +0 -2
  245. data/config/initializers/premailer_assets.rb +0 -1
  246. data/config/initializers/premailer_rails.rb +0 -3
  247. data/db/migrate/20140805171219_make_existing_credit_cards_default.rb +0 -10
  248. data/lib/generators/spree/dummy/templates/initializers/bullet.rb +0 -5
  249. data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -15
  250. data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -16
  251. data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -16
  252. data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -16
  253. data/lib/generators/spree/mailers_preview/mailers_preview_generator.rb +0 -23
  254. data/lib/generators/spree/mailers_preview/templates/mailers/previews/order_preview.rb +0 -13
  255. data/lib/generators/spree/mailers_preview/templates/mailers/previews/reimbursement_preview.rb +0 -5
  256. data/lib/generators/spree/mailers_preview/templates/mailers/previews/shipment_preview.rb +0 -5
  257. data/lib/generators/spree/mailers_preview/templates/mailers/previews/user_preview.rb +0 -11
  258. data/lib/tasks/email.rake +0 -10
  259. data/vendor/assets/javascripts/cleave.js +0 -1669
  260. data/vendor/assets/javascripts/fetch.umd.js +0 -531
  261. data/vendor/assets/javascripts/jquery.payment.js +0 -652
  262. data/vendor/assets/javascripts/jsuri.js +0 -458
  263. data/vendor/assets/javascripts/polyfill.min.js +0 -1
@@ -1,6 +1,6 @@
1
1
  FactoryBot.define do
2
2
  factory :product_property, class: Spree::ProductProperty do
3
- product
3
+ product { create(:product, stores: [create(:store)]) }
4
4
  property
5
5
  end
6
6
  end
@@ -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
- factory :free_shipping_promotion, class: Spree::Promotion do
63
- name { 'Free Shipping Promotion' }
70
+ factory :free_shipping_promotion do
71
+ name { 'Free Shipping Promotion' }
64
72
 
65
- after(:create) do |promotion|
66
- action = Spree::Promotion::Actions::FreeShipping.new
67
- action.promotion = promotion
68
- action.save
69
- end
73
+ after(:create) do |promotion|
74
+ action = Spree::Promotion::Actions::FreeShipping.new
75
+ action.promotion = promotion
76
+ action.save
77
+ end
70
78
 
71
- factory :free_shipping_promotion_with_item_total_rule, traits: [:with_item_total_rule]
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
- product_1 = create(:product)
21
- product_2 = create(:product)
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.master_id).first.adjust_count_on_hand(10)
24
- stock_location.stock_items.where(variant_id: product_2.master_id).first.adjust_count_on_hand(20)
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
@@ -8,6 +8,7 @@ FactoryBot.define do
8
8
  amount { 150.00 }
9
9
  currency { 'USD' }
10
10
  credit_type { create(:primary_credit_type) }
11
+ store { create(:store) }
11
12
  end
12
13
 
13
14
  factory :store_credits_order_without_user, class: Spree::Order do
@@ -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
- association(:taxonomy, strategy: :create)
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
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+ factory :taxon_image, class: Spree::TaxonImage do
3
+ before(:create) do |taxon_image|
4
+ taxon_image.attachment.attach(io: File.new(Spree::Core::Engine.root + 'spec/fixtures/thinking-cat.jpg'), filename: 'thinking-cat.jpg')
5
+ end
6
+ end
7
+ end
@@ -1,5 +1,6 @@
1
1
  FactoryBot.define do
2
2
  factory :taxonomy, class: Spree::Taxonomy do
3
3
  sequence(:name) { |n| "taxonomy_#{n}" }
4
+ store { Spree::Store.default }
4
5
  end
5
6
  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
- ship_address
19
- bill_address
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, with:)
4
+ def fill_in_date_manually(label_text, options = {})
5
5
  with_open_flatpickr(label_text) do |field|
6
- fill_in field[:id], with: 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, with:)
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(with.split('-')[0])
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(with.split('-')[1])
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(with.split('-')[2])
36
+ click_on_flatpickr_day(options[:day].to_i)
18
37
  end
19
38
  end
20
39
  end
21
40
 
22
- def fill_in_date_time_picker(label_text, with:)
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(with.split('-')[0])
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(with.split('-')[1])
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(with.split('-')[2])
50
+ click_on_flatpickr_day(options[:day].to_i)
30
51
  end
31
52
 
32
53
  within_flatpickr_time do
33
- select_flatpickr_hour(with.split('-')[3])
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 widget
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 picker widget
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(:xpath, "/html/body/div[contains(@class, 'flatpickr-calendar')]") { yield }
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') { yield }
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') { yield }
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
- find("select.flatpickr-monthDropdown-months > option:nth-child(#{month.to_i})").select_option
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('span', text: day).click
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') { yield }
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
- logged_in_succesfully: 'Connexion réussie'
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 = 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
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 = Spree::Order.create!(email: 'spree@example.com')
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
@@ -8,7 +8,7 @@ use rake db:load_file[/absolute/path/to/sample/filename.rb]}
8
8
  file = Pathname.new(args.file)
9
9
 
10
10
  puts "loading ruby #{file}"
11
- require file
11
+ load file
12
12
  end
13
13
 
14
14
  desc 'Loads fixtures from the the dir you specify using rake db:load_dir[loadfrom]'
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 = 'The bare bones necessary for Spree.'
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://guides.spreecommerce.org/",
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 'twitter_cldr', '>= 4.3'
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