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
data/lib/spree/i18n.rb CHANGED
@@ -20,7 +20,7 @@ module Spree
20
20
  locales_from_i18n = I18n.available_locales
21
21
  locales =
22
22
  if defined?(SpreeI18n)
23
- (SpreeI18n::Locale.all << :en).map(&:to_s)
23
+ (SpreeI18n::Locale.all << :en).map(&:to_sym)
24
24
  else
25
25
  [Rails.application.config.i18n.default_locale, I18n.locale, :en]
26
26
  end
data/lib/spree/money.rb CHANGED
@@ -5,7 +5,7 @@ Money.rounding_mode = BigDecimal::ROUND_HALF_UP
5
5
 
6
6
  module Spree
7
7
  class Money
8
- class <<self
8
+ class << self
9
9
  attr_accessor :default_formatting_rules
10
10
  end
11
11
 
@@ -16,6 +16,7 @@ module Spree
16
16
  }
17
17
 
18
18
  attr_reader :money
19
+
19
20
  delegate :cents, :currency, to: :money
20
21
 
21
22
  def initialize(amount, options = {})
@@ -2,11 +2,14 @@ module Spree
2
2
  module PermittedAttributes
3
3
  ATTRIBUTES = [
4
4
  :address_attributes,
5
+ :classification_attributes,
5
6
  :checkout_attributes,
6
7
  :customer_return_attributes,
7
8
  :image_attributes,
8
9
  :inventory_unit_attributes,
9
10
  :line_item_attributes,
11
+ :menu_attributes,
12
+ :menu_item_attributes,
10
13
  :option_type_attributes,
11
14
  :option_value_attributes,
12
15
  :payment_attributes,
@@ -24,7 +27,9 @@ module Spree
24
27
  :taxon_attributes,
25
28
  :taxonomy_attributes,
26
29
  :user_attributes,
27
- :variant_attributes
30
+ :variant_attributes,
31
+ :cms_page_attributes,
32
+ :cms_section_attributes
28
33
  ]
29
34
 
30
35
  mattr_reader *ATTRIBUTES
@@ -43,6 +48,14 @@ module Spree
43
48
  :user_id, :bill_address_id, :ship_address_id
44
49
  ]
45
50
 
51
+ @@classification_attributes = [
52
+ :position, :taxon_id, :product_id
53
+ ]
54
+
55
+ @@cms_page_attributes = [:title, :meta_title, :content, :meta_description, :visible, :slug, :locale]
56
+
57
+ @@cms_section_attributes = [:name, :content, :settings, :fit, :destination]
58
+
46
59
  @@customer_return_attributes = [:stock_location_id, return_items_attributes: [:id, :inventory_unit_id, :return_authorization_id, :returned, :pre_tax_amount, :acceptance_status, :exchange_variant_id, :resellable]]
47
60
 
48
61
  @@image_attributes = [:alt, :attachment, :position, :viewable_type, :viewable_id]
@@ -51,6 +64,11 @@ module Spree
51
64
 
52
65
  @@line_item_attributes = [:id, :variant_id, :quantity]
53
66
 
67
+ @@menu_attributes = [:name, :locale, :location]
68
+
69
+ @@menu_item_attributes = [:name, :subtite, :destination, :new_window, :item_type,
70
+ :linked_resource_type, :linked_resource_id, :code, :menu_id]
71
+
54
72
  @@option_type_attributes = [:name, :presentation, :option_values_attributes]
55
73
 
56
74
  @@option_value_attributes = [:name, :presentation]
@@ -101,7 +119,7 @@ module Spree
101
119
  :customer_support_email, :facebook, :twitter, :instagram,
102
120
  :description, :address, :contact_phone, :supported_locales,
103
121
  :default_locale, :default_country_id, :supported_currencies,
104
- :new_order_notifications_email, :mailer_logo, :checkout_zone_id, :seo_robots]
122
+ :new_order_notifications_email, :mailer_logo, :favicon_image, :checkout_zone_id, :seo_robots]
105
123
 
106
124
  @@store_credit_attributes = %i[amount currency category_id memo]
107
125
 
@@ -113,7 +131,7 @@ module Spree
113
131
  ]
114
132
 
115
133
  # TODO: Should probably use something like Spree.user_class.attributes
116
- @@user_attributes = [:email, :password, :password_confirmation]
134
+ @@user_attributes = [:email, :bill_address_id, :ship_address_id, :password, :password_confirmation]
117
135
 
118
136
  @@variant_attributes = [
119
137
  :name, :presentation, :cost_price, :discontinue_on, :lock_version,
@@ -37,10 +37,13 @@ module Spree
37
37
  ability_class.register_ability(ability)
38
38
  end
39
39
 
40
+ let(:admin_token) { Doorkeeper::AccessToken.create!(scopes: 'admin read write').token }
41
+
40
42
  before do
41
- allow(Spree.user_class).to receive(:find_by).
42
- with(hash_including(:spree_api_key)).
43
- and_return(Spree.user_class.new)
43
+ allow(Spree.user_class).to receive(:find_by).and_return(Spree.user_class.new)
44
+ if defined?(Spree::Admin)
45
+ allow_any_instance_of(Spree::Admin::BaseController).to receive(:admin_oauth_token).and_return(admin_token)
46
+ end
44
47
  end
45
48
  end
46
49
 
@@ -22,5 +22,7 @@ else
22
22
  driver.browser.save_screenshot(path)
23
23
  end
24
24
  end
25
- Capybara.default_max_wait_time = 45
25
+ Capybara.default_max_wait_time = ENV.fetch('CAPYBARA_MAX_WAIT_TIME', 45).to_i
26
26
  Capybara.server = :puma
27
+
28
+ Capybara.always_include_port = true
@@ -8,14 +8,25 @@ require 'generators/spree/dummy_model/dummy_model_generator'
8
8
  desc 'Generates a dummy app for testing'
9
9
  namespace :common do
10
10
  task :test_app, :user_class do |_t, args|
11
- args.with_defaults(user_class: 'Spree::LegacyUser')
11
+ args.with_defaults(user_class: 'Spree::LegacyUser', install_storefront: 'false', install_admin: 'false')
12
12
  require ENV['LIB_NAME'].to_s
13
13
 
14
14
  ENV['RAILS_ENV'] = 'test'
15
15
  Rails.env = 'test'
16
16
 
17
17
  Spree::DummyGenerator.start ["--lib_name=#{ENV['LIB_NAME']}", '--quiet']
18
- Spree::InstallGenerator.start ["--lib_name=#{ENV['LIB_NAME']}", '--auto-accept', '--migrate=false', '--seed=false', '--sample=false', '--quiet', '--copy_storefront=false', '--install_storefront=false', "--user_class=#{args[:user_class]}"]
18
+ Spree::InstallGenerator.start [
19
+ "--lib_name=#{ENV['LIB_NAME']}",
20
+ '--auto-accept',
21
+ '--migrate=false',
22
+ '--seed=false',
23
+ '--sample=false',
24
+ '--quiet',
25
+ '--copy_storefront=false',
26
+ "--install_storefront=#{args[:install_storefront]}",
27
+ "--install_admin=#{args[:install_admin]}",
28
+ "--user_class=#{args[:user_class]}"
29
+ ]
19
30
 
20
31
  puts 'Setting up dummy database...'
21
32
  system("bundle exec rake db:drop db:create > #{File::NULL}")
@@ -30,8 +41,10 @@ namespace :common do
30
41
  puts 'Skipping installation no generator to run...'
31
42
  end
32
43
 
33
- puts 'Precompiling assets...'
34
- system("bundle exec rake assets:precompile > #{File::NULL}")
44
+ unless ['spree/api', 'spree/core', 'spree/sample'].include?(ENV['LIB_NAME'])
45
+ puts 'Precompiling assets...'
46
+ system("bundle exec rake assets:precompile > #{File::NULL}")
47
+ end
35
48
  end
36
49
 
37
50
  task :seed do |_t|
@@ -2,8 +2,8 @@ require 'spree/testing_support/common_rake'
2
2
 
3
3
  desc 'Generates a dummy app for testing an extension'
4
4
  namespace :extension do
5
- task :test_app, [:user_class] do |_t, _args|
5
+ task :test_app, [:user_class] do |_t, args|
6
6
  Spree::DummyGeneratorHelper.inject_extension_requirements = true
7
- Rake::Task['common:test_app'].invoke
7
+ Rake::Task['common:test_app'].execute(args.with_defaults(install_admin: true, install_storefront: true))
8
8
  end
9
9
  end
@@ -3,7 +3,7 @@ FactoryBot.define do
3
3
  firstname { 'John' }
4
4
  lastname { 'Doe' }
5
5
  company { 'Company' }
6
- address1 { '10 Lovely Street' }
6
+ sequence(:address1) { |n| "#{n} Lovely Street" }
7
7
  address2 { 'Northwest' }
8
8
  city { 'Herndon' }
9
9
  zipcode { '35005' }
@@ -0,0 +1,8 @@
1
+ FactoryBot.define do
2
+ factory :classification, class: Spree::Classification do
3
+ product
4
+ taxon
5
+
6
+ position { 1 }
7
+ end
8
+ end
@@ -0,0 +1,20 @@
1
+ FactoryBot.define do
2
+ factory :base_cms_page, class: Spree::CmsPage do
3
+ title { generate(:random_string) }
4
+ locale { 'en' }
5
+
6
+ store
7
+
8
+ factory :cms_homepage do
9
+ type { 'Spree::Cms::Pages::Homepage' }
10
+ end
11
+
12
+ factory :cms_standard_page do
13
+ type { 'Spree::Cms::Pages::StandardPage' }
14
+ end
15
+
16
+ factory :cms_feature_page do
17
+ type { 'Spree::Cms::Pages::FeaturePage' }
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,31 @@
1
+ FactoryBot.define do
2
+ factory :cms_section, class: Spree::CmsSection do
3
+ name { generate(:random_string) }
4
+
5
+ association :cms_page, factory: :base_cms_page
6
+
7
+ factory :cms_hero_image_section do
8
+ type { 'Spree::Cms::Sections::HeroImage' }
9
+ end
10
+
11
+ factory :cms_featured_article_section do
12
+ type { 'Spree::Cms::Sections::FeaturedArticle' }
13
+ end
14
+
15
+ factory :cms_product_carousel_section do
16
+ type { 'Spree::Cms::Sections::ProductCarousel' }
17
+ end
18
+
19
+ factory :cms_image_gallery_section do
20
+ type { 'Spree::Cms::Sections::ImageGallery' }
21
+ end
22
+
23
+ factory :cms_side_by_side_images_section do
24
+ type { 'Spree::Cms::Sections::SideBySideImages' }
25
+ end
26
+
27
+ factory :cms_rich_text_content_section do
28
+ type { 'Spree::Cms::Sections::RichTextContent' }
29
+ end
30
+ end
31
+ end
@@ -1,29 +1,36 @@
1
1
  FactoryBot.define do
2
- factory :customer_return, class: Spree::CustomerReturn do
2
+ # for the case when you want to supply existing return items instead of generating some
3
+ factory :customer_return_without_return_items, class: Spree::CustomerReturn do
3
4
  association(:stock_location, factory: :stock_location)
4
5
 
5
- transient do
6
- line_items_count { 1 }
7
- return_items_count { line_items_count }
6
+ before(:create) do |customer_return, _evaluator|
7
+ if customer_return.store.nil?
8
+ default_store = Spree::Store.default.persisted? ? Spree::Store.default : nil
9
+ store = default_store || create(:store)
10
+
11
+ customer_return.store = store
12
+ end
8
13
  end
9
14
 
10
- before(:create) do |customer_return, evaluator|
11
- shipped_order = create(:shipped_order, line_items_count: evaluator.line_items_count)
15
+ factory :customer_return, class: Spree::CustomerReturn do
16
+ transient do
17
+ line_items_count { 1 }
18
+ return_items_count { line_items_count }
19
+ end
20
+
21
+ before(:create) do |customer_return, evaluator|
22
+ shipped_order = create(:shipped_order, line_items_count: evaluator.line_items_count, store: customer_return.store)
12
23
 
13
- shipped_order.inventory_units.take(evaluator.return_items_count).each do |inventory_unit|
14
- customer_return.return_items << build(:return_item, inventory_unit: inventory_unit)
24
+ shipped_order.inventory_units.take(evaluator.return_items_count).each do |inventory_unit|
25
+ customer_return.return_items << build(:return_item, inventory_unit: inventory_unit)
26
+ end
15
27
  end
16
- end
17
28
 
18
- factory :customer_return_with_accepted_items do
19
- after(:create) do |customer_return|
20
- customer_return.return_items.each(&:accept!)
29
+ factory :customer_return_with_accepted_items do
30
+ after(:create) do |customer_return|
31
+ customer_return.return_items.each(&:accept!)
32
+ end
21
33
  end
22
34
  end
23
35
  end
24
-
25
- # for the case when you want to supply existing return items instead of generating some
26
- factory :customer_return_without_return_items, class: Spree::CustomerReturn do
27
- association(:stock_location, factory: :stock_location)
28
- end
29
36
  end
@@ -0,0 +1,7 @@
1
+ FactoryBot.define do
2
+ factory :icon, class: Spree::Icon do
3
+ before(:create) do |icon|
4
+ icon.attachment.attach(io: File.new(Spree::Core::Engine.root + 'spec/fixtures' + 'thinking-cat.jpg'), filename: 'thinking-cat.jpg')
5
+ end
6
+ end
7
+ end
@@ -4,8 +4,12 @@ FactoryBot.define do
4
4
  quantity { 1 }
5
5
  price { BigDecimal('10.00') }
6
6
  currency { order.currency }
7
- transient do
8
- association :product
7
+ product do
8
+ if order&.store&.present?
9
+ create(:product, stores: [order.store])
10
+ else
11
+ create(:product)
12
+ end
9
13
  end
10
14
  variant { product.master }
11
15
  end
@@ -0,0 +1,16 @@
1
+ FactoryBot.define do
2
+ factory :menu, class: Spree::Menu do
3
+ name { generate(:random_string) }
4
+ locale { 'en' }
5
+ location { 'Header' }
6
+
7
+ before(:create) do |menu|
8
+ if menu.store.nil?
9
+ default_store = Spree::Store.default.persisted? ? Spree::Store.default : nil
10
+ store = default_store || create(:store)
11
+
12
+ menu.store = store
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,10 @@
1
+ FactoryBot.define do
2
+ factory :menu_item, class: Spree::MenuItem do
3
+ sequence(:name) { |n| "Link no. #{n} To Somewhere" }
4
+ item_type { 'Link' }
5
+ linked_resource_type { 'URL' }
6
+
7
+ menu
8
+ icon
9
+ end
10
+ end
@@ -5,6 +5,11 @@ FactoryBot.define do
5
5
  option_type
6
6
  end
7
7
 
8
+ factory :option_value_variant, class: Spree::OptionValueVariant do
9
+ option_value
10
+ variant
11
+ end
12
+
8
13
  factory :option_type, class: Spree::OptionType do
9
14
  sequence(:name) { |n| "foo-size-#{n}" }
10
15
  presentation { 'Size' }
@@ -2,13 +2,22 @@ FactoryBot.define do
2
2
  factory :order, class: Spree::Order do
3
3
  user
4
4
  bill_address
5
- store
6
5
  completed_at { nil }
7
- email { user.email }
6
+ email { user&.email }
8
7
  currency { 'USD' }
9
8
 
10
9
  transient do
11
10
  line_items_price { BigDecimal(10) }
11
+ attach_to_default_store { true }
12
+ end
13
+
14
+ before(:create) do |order|
15
+ unless order.store.present?
16
+ default_store = Spree::Store.default.persisted? ? Spree::Store.default : nil
17
+ store = default_store || create(:store)
18
+
19
+ order.store = store
20
+ end
12
21
  end
13
22
 
14
23
  factory :order_with_totals do
@@ -1,5 +1,6 @@
1
1
  FactoryBot.define do
2
2
  factory :payment_method, class: Spree::PaymentMethod do
3
+ type { 'Spree::PaymentMethod' }
3
4
  name { 'Test' }
4
5
 
5
6
  before(:create) do |payment_method|
@@ -7,26 +8,29 @@ FactoryBot.define do
7
8
  default_store = Spree::Store.default.persisted? ? Spree::Store.default : nil
8
9
  store = default_store || create(:store)
9
10
 
10
- payment_method.stores << [store]
11
+ payment_method.stores << store
11
12
  end
12
13
  end
13
14
  end
14
15
 
15
16
  factory :check_payment_method, parent: :payment_method, class: Spree::PaymentMethod::Check do
17
+ type { 'Spree::PaymentMethod::Check' }
16
18
  name { 'Check' }
17
19
  end
18
20
 
19
21
  factory :credit_card_payment_method, parent: :payment_method, class: Spree::Gateway::Bogus do
22
+ type { 'Spree::Gateway::Bogus' }
20
23
  name { 'Credit Card' }
21
24
  end
22
25
 
23
26
  # authorize.net was moved to spree_gateway.
24
27
  # Leaving this factory in place with bogus in case anyone is using it.
25
28
  factory :simple_credit_card_payment_method, parent: :payment_method, class: Spree::Gateway::BogusSimple do
29
+ type { 'Spree::Gateway::BogusSimple' }
26
30
  name { 'Credit Card' }
27
31
  end
28
32
 
29
- factory :store_credit_payment_method, class: Spree::PaymentMethod::StoreCredit do
33
+ factory :store_credit_payment_method, parent: :payment_method, class: Spree::PaymentMethod::StoreCredit do
30
34
  type { 'Spree::PaymentMethod::StoreCredit' }
31
35
  name { 'Store Credit' }
32
36
  description { 'Store Credit' }
@@ -10,7 +10,17 @@ FactoryBot.define do
10
10
  shipping_category { |r| Spree::ShippingCategory.first || r.association(:shipping_category) }
11
11
 
12
12
  # ensure stock item will be created for this products master
13
- before(:create) { create(:stock_location) unless Spree::StockLocation.any? }
13
+ # also attach this product to the default store if no stores are passed in
14
+ before(:create) do |product|
15
+ create(:stock_location) unless Spree::StockLocation.any?
16
+
17
+ if product.stores.empty?
18
+ default_store = Spree::Store.default.persisted? ? Spree::Store.default : nil
19
+ store = default_store || create(:store)
20
+
21
+ product.stores << [store]
22
+ end
23
+ end
14
24
 
15
25
  factory :custom_product do
16
26
  name { 'Custom Product' }
@@ -26,6 +36,12 @@ FactoryBot.define do
26
36
  after :create do |product|
27
37
  product.master.stock_items.first.adjust_count_on_hand(10)
28
38
  end
39
+
40
+ trait :without_backorder do
41
+ after :create do |product|
42
+ product.master.stock_items.update_all(backorderable: false)
43
+ end
44
+ end
29
45
  end
30
46
 
31
47
  factory :product_with_option_types do