solidus_core 2.11.10 → 3.3.1

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 (252) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +6 -2
  3. data/app/assets/javascripts/spree.js.erb +0 -51
  4. data/app/controllers/spree/base_controller.rb +1 -1
  5. data/app/helpers/spree/base_helper.rb +1 -1
  6. data/app/helpers/spree/products_helper.rb +2 -2
  7. data/app/helpers/spree/store_helper.rb +0 -11
  8. data/app/mailers/spree/carton_mailer.rb +1 -5
  9. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +30 -11
  10. data/app/models/concerns/spree/active_storage_adapter.rb +1 -1
  11. data/app/models/concerns/spree/adjustment_source.rb +0 -15
  12. data/app/models/concerns/spree/calculated_adjustments.rb +0 -18
  13. data/app/models/concerns/spree/default_price.rb +39 -10
  14. data/app/models/concerns/spree/ransackable_attributes.rb +24 -4
  15. data/app/models/concerns/spree/soft_deletable.rb +2 -4
  16. data/app/models/concerns/spree/user_address_book.rb +10 -37
  17. data/app/models/concerns/spree/user_methods.rb +38 -13
  18. data/app/models/spree/ability.rb +0 -37
  19. data/app/models/spree/address/name.rb +2 -20
  20. data/app/models/spree/address.rb +8 -186
  21. data/app/models/spree/adjustment.rb +7 -33
  22. data/app/models/spree/base.rb +0 -53
  23. data/app/models/spree/calculator/flat_fee.rb +21 -0
  24. data/app/models/spree/calculator/flexi_rate.rb +0 -5
  25. data/app/models/spree/calculator.rb +0 -7
  26. data/app/models/spree/carton.rb +1 -1
  27. data/app/models/spree/country.rb +2 -7
  28. data/app/models/spree/credit_card.rb +1 -28
  29. data/app/models/spree/customer_return.rb +5 -7
  30. data/app/models/spree/image/active_storage_attachment.rb +2 -7
  31. data/app/models/spree/image/paperclip_attachment.rb +2 -2
  32. data/app/models/spree/image.rb +0 -7
  33. data/app/models/spree/inventory_unit.rb +0 -21
  34. data/app/models/spree/line_item.rb +6 -49
  35. data/app/models/spree/log_entry.rb +74 -1
  36. data/app/models/spree/option_type.rb +1 -1
  37. data/app/models/spree/option_value.rb +10 -1
  38. data/app/models/spree/order/number_generator.rb +7 -1
  39. data/app/models/spree/order.rb +82 -170
  40. data/app/models/spree/order_cancellations.rb +4 -24
  41. data/app/models/spree/order_contents.rb +2 -1
  42. data/app/models/spree/order_inventory.rb +1 -1
  43. data/app/models/spree/order_merger.rb +2 -2
  44. data/app/models/spree/order_promotion.rb +1 -1
  45. data/app/models/spree/order_shipping.rb +6 -9
  46. data/app/models/spree/order_taxation.rb +6 -4
  47. data/app/models/spree/order_updater.rb +17 -16
  48. data/app/models/spree/payment/cancellation.rb +1 -1
  49. data/app/models/spree/payment/processing.rb +58 -55
  50. data/app/models/spree/payment.rb +0 -3
  51. data/app/models/spree/payment_create.rb +1 -13
  52. data/app/models/spree/payment_method/bogus_credit_card.rb +6 -7
  53. data/app/models/spree/payment_method/credit_card.rb +1 -3
  54. data/app/models/spree/payment_method/simple_bogus_credit_card.rb +8 -0
  55. data/app/models/spree/payment_method.rb +26 -110
  56. data/app/models/spree/price.rb +3 -3
  57. data/app/models/spree/product/scopes.rb +24 -33
  58. data/app/models/spree/product.rb +15 -42
  59. data/app/models/spree/product_property.rb +1 -1
  60. data/app/models/spree/promotion/actions/create_adjustment.rb +4 -3
  61. data/app/models/spree/promotion/actions/create_item_adjustments.rb +5 -9
  62. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +0 -3
  63. data/app/models/spree/promotion/actions/free_shipping.rb +1 -0
  64. data/app/models/spree/promotion/order_adjustments_recalculator.rb +92 -0
  65. data/app/models/spree/promotion/rules/item_total.rb +50 -6
  66. data/app/models/spree/promotion/rules/product.rb +20 -8
  67. data/app/models/spree/promotion/rules/store.rb +4 -0
  68. data/app/models/spree/promotion/rules/taxon.rb +6 -15
  69. data/app/models/spree/promotion/rules/user.rb +4 -0
  70. data/app/models/spree/promotion.rb +39 -32
  71. data/app/models/spree/promotion_action.rb +6 -9
  72. data/app/models/spree/promotion_code/batch_builder.rb +0 -14
  73. data/app/models/spree/promotion_code.rb +11 -7
  74. data/app/models/spree/promotion_handler/cart.rb +26 -6
  75. data/app/models/spree/promotion_rule.rb +5 -0
  76. data/app/models/spree/property.rb +1 -1
  77. data/app/models/spree/refund.rb +8 -52
  78. data/app/models/spree/reimbursement.rb +5 -43
  79. data/app/models/spree/reimbursement_performer.rb +2 -8
  80. data/app/models/spree/reimbursement_type/credit.rb +1 -4
  81. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +1 -2
  82. data/app/models/spree/reimbursement_type/store_credit.rb +1 -4
  83. data/app/models/spree/return_authorization.rb +2 -5
  84. data/app/models/spree/return_item.rb +4 -24
  85. data/app/models/spree/shipment.rb +3 -56
  86. data/app/models/spree/shipping_method.rb +0 -25
  87. data/app/models/spree/shipping_rate.rb +0 -2
  88. data/app/models/spree/shipping_rate_tax.rb +1 -1
  89. data/app/models/spree/state.rb +1 -5
  90. data/app/models/spree/stock/allocator/on_hand_first.rb +2 -2
  91. data/app/models/spree/stock/availability.rb +11 -3
  92. data/app/models/spree/stock/quantifier.rb +12 -8
  93. data/app/models/spree/stock/simple_coordinator.rb +8 -26
  94. data/app/models/spree/stock/splitter/base.rb +2 -7
  95. data/app/models/spree/stock_item.rb +2 -8
  96. data/app/models/spree/stock_location.rb +2 -2
  97. data/app/models/spree/stock_movement.rb +2 -2
  98. data/app/models/spree/store.rb +0 -12
  99. data/app/models/spree/store_credit.rb +14 -1
  100. data/app/models/spree/store_credit_category.rb +0 -32
  101. data/app/models/spree/store_credit_prioritizer.rb +17 -0
  102. data/app/models/spree/tax/item_tax.rb +3 -2
  103. data/app/models/spree/tax/order_tax.rb +3 -1
  104. data/app/models/spree/tax/tax_helpers.rb +2 -2
  105. data/app/models/spree/tax/tax_location.rb +4 -7
  106. data/app/models/spree/tax_calculator/default.rb +31 -0
  107. data/app/models/spree/tax_calculator/shipping_rate.rb +2 -13
  108. data/app/models/spree/tax_rate.rb +9 -27
  109. data/app/models/spree/taxon/active_storage_attachment.rb +2 -7
  110. data/app/models/spree/taxon/paperclip_attachment.rb +3 -8
  111. data/app/models/spree/taxon.rb +1 -12
  112. data/app/models/spree/taxonomy.rb +1 -1
  113. data/app/models/spree/user_address.rb +0 -5
  114. data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +1 -1
  115. data/app/models/spree/variant/price_selector.rb +34 -4
  116. data/app/models/spree/variant.rb +52 -66
  117. data/app/models/spree/zone.rb +1 -1
  118. data/app/subscribers/spree/mailer_subscriber.rb +4 -0
  119. data/app/subscribers/spree/order_mailer_subscriber.rb +35 -0
  120. data/config/i18n-tasks.yml +134 -0
  121. data/config/locales/en.yml +406 -263
  122. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +1 -1
  123. data/db/migrate/20201127212108_add_type_before_removal_to_spree_payment_methods.rb +7 -0
  124. data/db/migrate/20210312061050_change_column_null_on_prices.rb +7 -0
  125. data/db/migrate/20220317165036_set_promotions_with_any_policy_to_all_if_possible.rb +20 -0
  126. data/db/migrate/20220805202442_add_level_to_spree_tax_rates.rb +5 -0
  127. data/db/migrate/20221123152807_add_shipping_category_to_spree_variants.rb +5 -0
  128. data/db/seeds.rb +4 -1
  129. data/lib/generators/solidus/install/app_templates/authentication/custom.rb +21 -0
  130. data/lib/generators/solidus/install/app_templates/authentication/devise.rb +16 -0
  131. data/lib/generators/solidus/install/app_templates/authentication/existing.rb +10 -0
  132. data/lib/generators/solidus/install/app_templates/authentication/none.rb +1 -0
  133. data/lib/generators/solidus/install/app_templates/frontend/break_down_solidus_gem.rb +54 -0
  134. data/lib/generators/solidus/install/app_templates/frontend/classic.rb +16 -0
  135. data/lib/generators/solidus/install/app_templates/frontend/none.rb +2 -0
  136. data/lib/generators/solidus/install/app_templates/frontend/starter.rb +3 -0
  137. data/lib/generators/solidus/install/app_templates/payment_method/bolt.rb +13 -0
  138. data/lib/generators/solidus/install/app_templates/payment_method/none.rb +1 -0
  139. data/lib/generators/solidus/install/app_templates/payment_method/paypal.rb +10 -0
  140. data/lib/generators/solidus/install/install_generator.rb +247 -149
  141. data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +15 -60
  142. data/lib/generators/solidus/install/templates/vendor/assets/javascripts/spree/backend/all.js +2 -2
  143. data/lib/generators/solidus/update/templates/config/initializers/new_solidus_defaults.rb.tt +30 -0
  144. data/lib/generators/solidus/update/update_generator.rb +112 -0
  145. data/lib/generators/spree/custom_user/custom_user_generator.rb +6 -4
  146. data/lib/generators/spree/custom_user/templates/authentication_helpers.rb.tt +2 -6
  147. data/lib/generators/spree/custom_user/templates/migration.rb.tt +7 -3
  148. data/lib/generators/spree/dummy/dummy_generator.rb +12 -9
  149. data/lib/generators/spree/dummy/templates/rails/application.rb.tt +0 -1
  150. data/lib/generators/spree/dummy/templates/rails/database.yml +81 -39
  151. data/lib/generators/spree/dummy/templates/rails/storage.yml +3 -0
  152. data/lib/generators/spree/dummy/templates/rails/test.rb +2 -0
  153. data/lib/spree/app_configuration.rb +134 -64
  154. data/lib/spree/bus.rb +20 -0
  155. data/lib/spree/core/class_constantizer.rb +2 -0
  156. data/lib/spree/core/controller_helpers/auth.rb +10 -15
  157. data/lib/spree/core/controller_helpers/current_host.rb +5 -3
  158. data/lib/spree/core/controller_helpers/order.rb +12 -32
  159. data/lib/spree/core/controller_helpers/payment_parameters.rb +0 -54
  160. data/lib/spree/core/controller_helpers/pricing.rb +0 -8
  161. data/lib/spree/core/controller_helpers/search.rb +1 -1
  162. data/lib/spree/core/controller_helpers/strong_parameters.rb +0 -4
  163. data/lib/spree/core/engine.rb +54 -50
  164. data/lib/spree/core/environment_extension.rb +0 -9
  165. data/lib/spree/core/product_filters.rb +1 -41
  166. data/lib/spree/core/role_configuration.rb +0 -14
  167. data/lib/spree/core/search/base.rb +18 -35
  168. data/lib/spree/core/state_machines/order.rb +2 -2
  169. data/lib/spree/core/state_machines.rb +2 -11
  170. data/lib/spree/core/stock_configuration.rb +18 -0
  171. data/lib/spree/core/validators/email.rb +5 -3
  172. data/lib/spree/core/version.rb +5 -1
  173. data/lib/spree/core/versioned_value.rb +75 -0
  174. data/lib/spree/core.rb +40 -11
  175. data/lib/spree/deprecation.rb +1 -1
  176. data/lib/spree/event/configuration.rb +0 -5
  177. data/lib/spree/event/subscriber.rb +0 -18
  178. data/lib/spree/event/subscriber_registry.rb +7 -7
  179. data/lib/spree/event.rb +1 -32
  180. data/lib/spree/i18n.rb +0 -22
  181. data/lib/spree/migrations.rb +13 -11
  182. data/lib/spree/money.rb +3 -18
  183. data/lib/spree/permission_sets/default_customer.rb +8 -1
  184. data/lib/spree/permitted_attributes.rb +17 -59
  185. data/lib/spree/preferences/configuration.rb +84 -0
  186. data/lib/spree/preferences/preferable.rb +13 -0
  187. data/lib/spree/preferences/preferable_class_methods.rb +37 -4
  188. data/lib/spree/preferences/preference_differentiator.rb +29 -0
  189. data/lib/spree/preferences/static_model_preferences.rb +25 -10
  190. data/lib/spree/rails_compatibility.rb +106 -0
  191. data/lib/spree/testing_support/blacklist_urls.rb +1 -1
  192. data/lib/spree/testing_support/bus_helpers.rb +101 -0
  193. data/lib/spree/testing_support/capybara_ext.rb +0 -30
  194. data/lib/spree/testing_support/common_rake.rb +71 -23
  195. data/lib/spree/testing_support/controller_requests.rb +0 -82
  196. data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/backend/all.js +1 -1
  197. data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/frontend/all.js +1 -1
  198. data/lib/spree/testing_support/dummy_app/database.yml +42 -22
  199. data/lib/spree/testing_support/dummy_app/migrations.rb +0 -3
  200. data/lib/spree/testing_support/dummy_app.rb +47 -34
  201. data/lib/spree/testing_support/factories/address_factory.rb +9 -6
  202. data/lib/spree/testing_support/factories/calculator_factory.rb +3 -0
  203. data/lib/spree/testing_support/factories/country_factory.rb +1 -2
  204. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +1 -1
  205. data/lib/spree/testing_support/factories/order_factory.rb +8 -5
  206. data/lib/spree/testing_support/factories/product_factory.rb +4 -1
  207. data/lib/spree/testing_support/factories/promotion_factory.rb +28 -14
  208. data/lib/spree/testing_support/factories/refund_factory.rb +0 -1
  209. data/lib/spree/testing_support/factories/state_factory.rb +8 -2
  210. data/lib/spree/testing_support/factories/store_credit_factory.rb +4 -4
  211. data/lib/spree/testing_support/factories/user_factory.rb +6 -0
  212. data/lib/spree/testing_support/factory_bot.rb +2 -2
  213. data/lib/spree/testing_support/order_walkthrough.rb +6 -8
  214. data/lib/spree/testing_support/preferences.rb +0 -25
  215. data/lib/spree/testing_support/silence_deprecations.rb +9 -0
  216. data/lib/tasks/colorado_delivery_fee.rake +28 -0
  217. data/lib/tasks/payment_method.rake +29 -0
  218. data/lib/tasks/solidus/check_orders_with_invalid_email.rake +18 -0
  219. data/lib/tasks/solidus/delete_prices_with_nil_amount.rake +8 -0
  220. data/lib/tasks/solidus/split_promotions_with_any_match_policy.rake +33 -0
  221. data/solidus_core.gemspec +14 -7
  222. metadata +127 -78
  223. data/app/mailers/spree/test_mailer.rb +0 -13
  224. data/app/models/concerns/spree/user_payment_source.rb +0 -26
  225. data/app/models/spree/calculator/free_shipping.rb +0 -22
  226. data/app/models/spree/calculator/percent_per_item.rb +0 -51
  227. data/app/models/spree/calculator/price_sack.rb +0 -28
  228. data/app/models/spree/gateway/bogus.rb +0 -13
  229. data/app/models/spree/gateway/bogus_simple.rb +0 -13
  230. data/app/models/spree/gateway.rb +0 -14
  231. data/app/models/spree/order/checkout.rb +0 -244
  232. data/app/models/spree/order_capturing.rb +0 -50
  233. data/app/models/spree/promotion_handler/free_shipping.rb +0 -9
  234. data/app/models/spree/tax/shipping_rate_taxer.rb +0 -24
  235. data/lib/generators/solidus/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -10
  236. data/lib/generators/solidus/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -9
  237. data/lib/generators/spree/install/install_generator.rb +0 -15
  238. data/lib/solidus/migrations/rename_gateways.rb +0 -41
  239. data/lib/spree/core/current_store.rb +0 -24
  240. data/lib/spree/paranoia_deprecations.rb +0 -41
  241. data/lib/spree/promo/environment.rb +0 -12
  242. data/lib/spree/testing_support/bar_ability.rb +0 -19
  243. data/lib/tasks/core.rake +0 -104
  244. data/lib/tasks/email.rake +0 -12
  245. data/lib/tasks/migrations/copy_order_bill_address_to_credit_card.rake +0 -119
  246. data/lib/tasks/migrations/migrate_address_names.rake +0 -158
  247. data/lib/tasks/migrations/migrate_default_billing_addresses_to_address_book.rake +0 -26
  248. data/lib/tasks/migrations/migrate_shipping_rate_taxes.rake +0 -22
  249. data/lib/tasks/migrations/migrate_user_addresses.rake +0 -34
  250. data/lib/tasks/migrations/rename_gateways.rake +0 -23
  251. data/lib/tasks/order_capturing.rake +0 -27
  252. data/lib/tasks/upgrade.rake +0 -13
@@ -0,0 +1,106 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails/gem_version'
4
+
5
+ module Spree
6
+ # Supported Rails versions compatibility
7
+ #
8
+ # This module is meant to wrap some Rails API changes between supported
9
+ # versions. It's also meant to contain compatibility for features that we use
10
+ # internally in the Solidus code base.
11
+ module RailsCompatibility
12
+ # Method `#to_fs`
13
+ #
14
+ # Available since Rails 7.0, substitutes `#to_s(format)`
15
+ #
16
+ # It includes:
17
+ #
18
+ # ActiveSupport::NumericWithFormat
19
+ # ActiveSupport::RangeWithFormat
20
+ # ActiveSupport::TimeWithZone
21
+ # Array
22
+ # Date
23
+ # DateTime
24
+ # Time
25
+ #
26
+ # See https://github.com/rails/rails/pull/43772 &
27
+ # https://github.com/rails/rails/pull/44354
28
+ #
29
+ # TODO: Remove when deprecating Rails 6.1
30
+ def self.to_fs(value, *args, **kwargs, &block)
31
+ if version_gte?('7.0')
32
+ value.to_fs(*args, **kwargs, &block)
33
+ else
34
+ value.to_s(*args, **kwargs, &block)
35
+ end
36
+ end
37
+
38
+ # `raise_on_missing_translations` config option
39
+ #
40
+ # Changed from ActionView to I18n on Rails 6.1
41
+ #
42
+ # See https://github.com/rails/rails/pull/31571
43
+ #
44
+ # TODO: Remove when deprecating Rails 6.0
45
+ def self.raise_on_missing_translations(value)
46
+ if version_gte?('6.1')
47
+ Rails.application.config.i18n.raise_on_missing_translations = value
48
+ else
49
+ Rails.application.config.action_view.raise_on_missing_translations = value
50
+ end
51
+ end
52
+
53
+ # Set default image attachment adapter
54
+ #
55
+ # TODO: Remove when deprecating Rails 6.0
56
+ def self.default_image_attachment_module
57
+ if version_gte?("6.1")
58
+ "Spree::Image::ActiveStorageAttachment"
59
+ else
60
+ "Spree::Image::PaperclipAttachment"
61
+ end
62
+ end
63
+
64
+ # Set default taxon attachment adapter
65
+ #
66
+ # TODO: Remove when deprecating Rails 6.0
67
+ def self.default_taxon_attachment_module
68
+ if version_gte?("6.1")
69
+ "Spree::Taxon::ActiveStorageAttachment"
70
+ else
71
+ "Spree::Taxon::PaperclipAttachment"
72
+ end
73
+ end
74
+
75
+ # Set current host for ActiveStorage
76
+ #
77
+ # Changed from `#host` to `#url_options` on Rails 7
78
+ #
79
+ # See https://github.com/rails/rails/issues/41388
80
+ #
81
+ # TODO: Remove when deprecating Rails 6.1
82
+ def self.active_storage_url_options_host(value)
83
+ if version_gte?('7')
84
+ ActiveStorage::Current.url_options = { host: value }
85
+ else
86
+ ActiveStorage::Current.host = value
87
+ end
88
+ end
89
+
90
+ # Default ActiveStorage variant processor
91
+ #
92
+ # Changed from `:mini_magick` to `vips` on Rails 7
93
+ #
94
+ # See https://github.com/rails/rails/issues/42744
95
+ #
96
+ # TODO: Remove when deprecating Rails 6.1
97
+ def self.variant_processor
98
+ version_gte?('7') ? :vips : :mini_magick
99
+ end
100
+
101
+ def self.version_gte?(version)
102
+ ::Rails.gem_version >= Gem::Version.new(version)
103
+ end
104
+ private_class_method :version_gte?
105
+ end
106
+ end
@@ -5,7 +5,7 @@ module Spree
5
5
  module BlacklistUrls
6
6
  def setup_url_blacklist(browser)
7
7
  if browser.respond_to?(:url_blacklist)
8
- browser.url_blacklist = ['http://fonts.googleapis.com']
8
+ browser.url_blacklist = ['https://fonts.googleapis.com']
9
9
  end
10
10
  end
11
11
  end
@@ -0,0 +1,101 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spree/bus'
4
+
5
+ module Spree
6
+ module TestingSupport
7
+ # RSpec test helpers for the event bus
8
+ #
9
+ # If you want to use the methods defined in this module, include it in your
10
+ # specs:
11
+ #
12
+ # @example
13
+ # require 'rails_helper'
14
+ # require 'spree/testing_support/bus_helpers'
15
+ #
16
+ # RSpec.describe MyClass do
17
+ # include Spree::TestingSupport::BusHelpers
18
+ # end
19
+ #
20
+ # or, globally, in your `spec_helper.rb`:
21
+ #
22
+ # @example
23
+ # require 'spree/testing_support/bus_helpers'
24
+ #
25
+ # RSpec.configure do |config|
26
+ # config.include Spree::TestingSupport::BusHelpers
27
+ # end
28
+ module BusHelpers
29
+ extend RSpec::Matchers::DSL
30
+
31
+ # Stubs {Spree::Bus}
32
+ #
33
+ # After you have called this method in an example, {Spree::Bus} will no
34
+ # longer publish any event for the duration of that example. All the
35
+ # method invocations on it will be stubbed.
36
+ #
37
+ # Internally, it stubs {Spree::Bus#publish}.
38
+ #
39
+ # After you call this method, probably you'll want to call some of the
40
+ # matchers defined in this module.
41
+ def stub_spree_bus
42
+ allow(Spree::Bus).to receive(:publish)
43
+ end
44
+
45
+ # @!method have_been_published(event_name)
46
+ # Matcher to test that an event has been published via {Spree::Bus#publish}
47
+ #
48
+ # Before using this matcher, you need to call {#stub_spree_bus}.
49
+ #
50
+ # Remember that the event listeners won't be performed.
51
+ #
52
+ # @example
53
+ # it 'publishes foo event' do
54
+ # stub_spree_bus
55
+ #
56
+ # Spree::Bus.publish 'foo'
57
+ #
58
+ # expect('foo').to have_been_published
59
+ # end
60
+ #
61
+ # It can be chain through `with` to match with the published payload:
62
+ #
63
+ # @example
64
+ # it 'publishes foo event with the expected payload' do
65
+ # stub_spree_bus
66
+ #
67
+ # Spree::Bus.publish 'foo', bar: :baz, qux: :quux
68
+ #
69
+ # expect('foo').to have_been_published.with(a_hash_including(bar: :baz))
70
+ # end
71
+ #
72
+ # @param [Symbol] event_name
73
+ matcher :have_been_published do
74
+ chain :with, :payload
75
+
76
+ match do |expected_event|
77
+ expected_event = normalize_name(expected_event)
78
+ arguments = payload ? [expected_event, payload] : [expected_event, any_args]
79
+ expect(Spree::Bus).to have_received(:publish).with(*arguments)
80
+ end
81
+
82
+ failure_message do |expected_event|
83
+ <<~MSG
84
+ expected #{expected_event.inspect} to have been published.
85
+ Make sure that provided payload, if any, also matches.
86
+ MSG
87
+ end
88
+
89
+ def normalize_name(event_name)
90
+ if event_name.is_a?(Symbol)
91
+ eq(event_name)
92
+ else
93
+ raise ArgumentError, <<~MSG
94
+ "#{event_name.inspect} is not a valid event name. It must be a Symbol."
95
+ MSG
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
@@ -35,18 +35,6 @@ module Spree
35
35
  find("td:nth-of-type(#{num})").text
36
36
  end
37
37
 
38
- def fill_in_quantity(table_column, selector, quantity)
39
- Spree::Deprecation.warn <<-WARN.strip_heredoc
40
- fill_in_quantity is deprecated. Instead use:
41
- within(#{table_column.inspect}) do
42
- fill_in #{selector.inspect}, with: #{quantity.inspect}
43
- end
44
- WARN
45
- within(table_column) do
46
- fill_in selector, with: quantity
47
- end
48
- end
49
-
50
38
  def select2_search(value, options)
51
39
  options = {
52
40
  search: value, # by default search for the value
@@ -122,21 +110,6 @@ module Spree
122
110
  # find the original.
123
111
  find('label:not(.select2-offscreen)', text: /#{Regexp.escape(text)}/i, match: :one)
124
112
  end
125
-
126
- def wait_for_ajax
127
- Spree::Deprecation.warn <<-WARN.squish, caller
128
- wait_for_ajax has been deprecated.
129
- Please refer to the capybara documentation on how to properly wait for asyncronous behavior:
130
- https://github.com/teamcapybara/capybara#asynchronous-javascript-ajax-and-friends
131
- WARN
132
-
133
- counter = 0
134
- while page.evaluate_script("typeof($) === 'undefined' || $.active > 0")
135
- counter += 1
136
- sleep(0.1)
137
- raise "AJAX request took longer than 5 seconds." if counter >= 50
138
- end
139
- end
140
113
  end
141
114
  end
142
115
  end
@@ -156,9 +129,6 @@ RSpec::Matchers.define :have_meta do |name, expected|
156
129
  end
157
130
  end
158
131
 
159
- # @private
160
- CapybaraExt = ActiveSupport::Deprecation::DeprecatedConstantProxy.new('CapybaraExt', 'Spree::TestingSupport::CapybaraExt')
161
-
162
132
  RSpec.configure do |c|
163
133
  c.include Spree::TestingSupport::CapybaraExt
164
134
  end
@@ -1,38 +1,86 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- unless defined?(Solidus::InstallGenerator)
4
- require 'generators/solidus/install/install_generator'
5
- end
6
-
7
3
  require 'generators/spree/dummy/dummy_generator'
8
4
 
9
- namespace :common do
10
- task :test_app, :user_class do |_t, args|
11
- args.with_defaults(user_class: "Spree::LegacyUser")
12
- require ENV['LIB_NAME']
5
+ class CommonRakeTasks
6
+ include Rake::DSL
13
7
 
14
- ENV["RAILS_ENV"] = 'test'
8
+ def initialize
9
+ namespace :common do
10
+ task :test_app, :user_class do |_t, args|
11
+ args.with_defaults(user_class: "Spree::LegacyUser")
12
+ lib_name = ENV['LIB_NAME'] or
13
+ raise "Please provide a library name via the LIB_NAME environment variable."
14
+
15
+ require lib_name
16
+
17
+ force_rails_environment_to_test
15
18
 
16
- Spree::DummyGenerator.start ["--lib_name=#{ENV['LIB_NAME']}", "--quiet"]
17
- Solidus::InstallGenerator.start ["--lib_name=#{ENV['LIB_NAME']}", "--auto-accept", "--with-authentication=false", "--payment-method=none", "--migrate=false", "--seed=false", "--sample=false", "--quiet", "--user_class=#{args[:user_class]}"]
19
+ Spree::DummyGenerator.start [
20
+ "--lib-name=#{lib_name}",
21
+ "--quiet",
22
+ ]
18
23
 
19
- puts "Setting up dummy database..."
24
+ # While the dummy app is generated the current directory
25
+ # within ruby is changed to that of the dummy app.
26
+ sh({
27
+ 'FRONTEND' => ENV['FRONTEND'] || 'classic',
28
+ }, [
29
+ 'bin/rails',
30
+ 'generate',
31
+ 'solidus:install',
32
+ Dir.pwd, # use the current dir as Rails.root
33
+ "--auto-accept",
34
+ "--authentication=none",
35
+ "--payment-method=none",
36
+ "--migrate=false",
37
+ "--seed=false",
38
+ "--sample=false",
39
+ "--user-class=#{args[:user_class]}",
40
+ "--quiet",
41
+ ].shelljoin)
20
42
 
21
- sh "bin/rails db:environment:set RAILS_ENV=test"
22
- sh "bin/rails db:drop db:create db:migrate VERBOSE=false RAILS_ENV=test"
43
+ puts "Setting up dummy database..."
23
44
 
24
- begin
25
- require "generators/#{ENV['LIB_NAME']}/install/install_generator"
26
- puts 'Running extension installation generator...'
27
- "#{ENV['LIB_NAMESPACE'] || ENV['LIB_NAME'].camelize}::Generators::InstallGenerator".constantize.start(["--auto-run-migrations"])
28
- rescue LoadError
29
- # No extension generator to run
45
+ sh "bin/rails db:environment:set RAILS_ENV=test"
46
+ sh "bin/rails db:drop db:create db:migrate VERBOSE=false RAILS_ENV=test"
47
+
48
+ if extension_installation_generator_exists?
49
+ puts 'Running extension installation generator...'
50
+ sh "bin/rails generate #{rake_generator_namespace}:install --auto-run-migrations"
51
+ end
52
+ end
53
+
54
+ task :seed do |_t, _args|
55
+ puts "Seeding ..."
56
+
57
+ sh "bundle exec rake db:seed RAILS_ENV=test"
58
+ end
30
59
  end
31
60
  end
32
61
 
33
- task :seed do |_t, _args|
34
- puts "Seeding ..."
62
+ private
35
63
 
36
- sh "bundle exec rake db:seed RAILS_ENV=test"
64
+ def force_rails_environment_to_test
65
+ ENV["RAILS_ENV"] = 'test'
66
+ Rails.env = 'test'
67
+ end
68
+
69
+ def extension_installation_generator_exists?
70
+ require "generators/#{generator_namespace}/install/install_generator"
71
+
72
+ true
73
+ rescue LoadError
74
+ false
75
+ end
76
+
77
+ def generator_namespace
78
+ "#{ENV['LIB_NAMESPACE']&.underscore || ENV['LIB_NAME']}"
79
+ end
80
+
81
+ def rake_generator_namespace
82
+ generator_namespace.gsub("/", ":")
37
83
  end
38
84
  end
85
+
86
+ CommonRakeTasks.new
@@ -2,23 +2,12 @@
2
2
 
3
3
  module Spree
4
4
  module TestingSupport
5
- # A module providing convenience methods to test Solidus controllers
6
- # in Rails controller/functional tests. Possibly from inside an
7
- # application with a mounted Solidus engine.
8
- #
9
5
  # *There is generaly no need* to use this module. Instead, in
10
6
  # a functional/controller test against a Spree controller, just
11
7
  # use standard Rails functionality by including:
12
8
  #
13
9
  # routes { Spree::Core::Engine.routes }
14
10
  #
15
- # And then use standard Rails test `get`, `post` etc methods.
16
- #
17
- # But some legacy code uses this ControllerRequests helper. It must
18
- # be included only in tests against Spree controllers, it will interfere
19
- # with tests against local app or other engine controllers, resulting
20
- # in ActionController::UrlGenerationError.
21
- #
22
11
  # To use this module, inside your spec_helper.rb, include this module inside
23
12
  # the RSpec.configure block by:
24
13
  #
@@ -26,83 +15,12 @@ module Spree
26
15
  # RSpec.configure do |c|
27
16
  # c.include Spree::TestingSupport::ControllerRequests, spree_controller: true
28
17
  # end
29
- #
30
- # Then, in your controller tests against spree controllers, you can access
31
- # tag to use this module, and access spree routes like this:
32
- #
33
- # require 'spec_helper'
34
- #
35
- # describe Spree::ProductsController, :spree_controller do
36
- # it "can see all the products" do
37
- # spree_get :index
38
- # end
39
- # end
40
- #
41
- # Use spree_get, spree_post, spree_put or spree_delete to make requests to
42
- # the Spree engine, and use regular get, post, put or delete to make
43
- # requests to your application.
44
18
  module ControllerRequests
45
19
  extend ActiveSupport::Concern
46
20
 
47
21
  included do
48
22
  routes { Spree::Core::Engine.routes }
49
23
  end
50
-
51
- def spree_get(action, parameters = nil, session = nil, flash = nil)
52
- process_spree_action(action, parameters, session, flash, "GET")
53
- end
54
- deprecate spree_get: :get, deprecator: Spree::Deprecation
55
-
56
- # Executes a request simulating POST HTTP method and set/volley the response
57
- def spree_post(action, parameters = nil, session = nil, flash = nil)
58
- process_spree_action(action, parameters, session, flash, "POST")
59
- end
60
- deprecate spree_post: :post, deprecator: Spree::Deprecation
61
-
62
- # Executes a request simulating PUT HTTP method and set/volley the response
63
- def spree_put(action, parameters = nil, session = nil, flash = nil)
64
- process_spree_action(action, parameters, session, flash, "PUT")
65
- end
66
- deprecate spree_put: :put, deprecator: Spree::Deprecation
67
-
68
- # Executes a request simulating DELETE HTTP method and set/volley the response
69
- def spree_delete(action, parameters = nil, session = nil, flash = nil)
70
- process_spree_action(action, parameters, session, flash, "DELETE")
71
- end
72
- deprecate spree_delete: :delete, deprecator: Spree::Deprecation
73
-
74
- def spree_xhr_get(action, parameters = nil, session = nil, flash = nil)
75
- process_spree_xhr_action(action, parameters, session, flash, :get)
76
- end
77
- deprecate spree_xhr_get: :get, deprecator: Spree::Deprecation
78
-
79
- def spree_xhr_post(action, parameters = nil, session = nil, flash = nil)
80
- process_spree_xhr_action(action, parameters, session, flash, :post)
81
- end
82
- deprecate spree_xhr_post: :post, deprecator: Spree::Deprecation
83
-
84
- def spree_xhr_put(action, parameters = nil, session = nil, flash = nil)
85
- process_spree_xhr_action(action, parameters, session, flash, :put)
86
- end
87
- deprecate spree_xhr_put: :put, deprecator: Spree::Deprecation
88
-
89
- def spree_xhr_delete(action, parameters = nil, session = nil, flash = nil)
90
- process_spree_xhr_action(action, parameters, session, flash, :delete)
91
- end
92
- deprecate spree_xhr_delete: :delete, deprecator: Spree::Deprecation
93
-
94
- private
95
-
96
- def process_spree_action(action, parameters = nil, session = nil, flash = nil, method = "GET")
97
- parameters ||= {}
98
- process(action, method, parameters, session, flash)
99
- end
100
-
101
- def process_spree_xhr_action(action, parameters = nil, session = nil, flash = nil, method = :get)
102
- parameters ||= {}
103
- parameters.reverse_merge!(format: :json)
104
- xml_http_request(method, action, parameters, session, flash)
105
- end
106
24
  end
107
25
  end
108
26
  end
@@ -1,5 +1,5 @@
1
1
  // This is a manifest file that'll be compiled into including all the files listed below.
2
- // Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
2
+ // Add new JavaScript code in separate files in this directory and they'll automatically
3
3
  // be included in the compiled file accessible from http://example.com/assets/application.js
4
4
  // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
5
5
  // the compiled file.
@@ -1,5 +1,5 @@
1
1
  // This is a manifest file that'll be compiled into including all the files listed below.
2
- // Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
2
+ // Add new JavaScript code in separate files in this directory and they'll automatically
3
3
  // be included in the compiled file accessible from http://example.com/assets/application.js
4
4
  // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
5
5
  // the compiled file.
@@ -1,34 +1,54 @@
1
- <%
2
- database_prefix = ENV['LIB_NAME'].presence || "solidus"
3
- %>
4
- <% case ENV['DB']
1
+ <% db = case ENV['DB']
2
+ when 'mysql'
3
+ 'mysql'
4
+ when 'postgres', 'postgresql'
5
+ 'postgres'
6
+ when 'sqlite', '', nil
7
+ 'sqlite'
8
+ else
9
+ raise "Invalid DB specified: #{ENV['DB']}"
10
+ end %>
11
+ <% db_host = case db
12
+ when 'mysql'
13
+ ENV['DB_MYSQL_HOST'] || ENV['DB_HOST']
14
+ when 'postgres'
15
+ ENV['DB_POSTGRES_HOST'] || ENV['DB_HOST']
16
+ else
17
+ ENV['DB_HOST']
18
+ end %>
19
+ <% db_prefix = ENV['LIB_NAME'].presence || "solidus" %>
20
+ <% db_username = ENV['DB_USERNAME'] %>
21
+ <% db_password = ENV['DB_PASSWORD'] %>
22
+ <% case db
5
23
  when 'mysql' %>
6
24
  test:
7
25
  adapter: mysql2
8
- <% if ENV['CI'] %>
9
- username: root
10
- password:
26
+ database: <%= db_prefix %>_test
27
+ <% unless db_username.blank? %>
28
+ username: <%= db_username %>
11
29
  <% end %>
12
- database: <%= database_prefix %>_test
13
- encoding: utf8
14
- <% unless ENV['DB_HOST'].blank? %>
15
- host: <%= ENV['DB_HOST'] %>
30
+ <% unless db_password.blank? %>
31
+ password: <%= db_password %>
32
+ <% end %>
33
+ <% unless db_host.blank? %>
34
+ host: <%= db_host %>
16
35
  <% end %>
17
- <% when 'postgres', 'postgresql' %>
18
- <% db_host = ENV['DB_HOST'] %>
36
+ encoding: utf8
37
+ <% when 'postgres' %>
19
38
  test:
20
39
  adapter: postgresql
21
- database: <%= database_prefix %>_test
22
- username: postgres
23
- min_messages: warning
24
- <% unless db_host.blank? %>
40
+ database: <%= db_prefix %>_test
41
+ username: <%= db_username.presence || "postgres" %>
42
+ <% unless db_password.blank? %>
43
+ password: <%= db_password %>
44
+ <% end %>
45
+ <% unless db_host.blank? %>
25
46
  host: <%= db_host %>
26
- <% end %>
27
- <% when 'sqlite', '', nil %>
47
+ <% end %>
48
+ min_messages: warning
49
+ <% when 'sqlite' %>
28
50
  test:
29
51
  adapter: sqlite3
30
- database: db/<%= database_prefix %>_test.sqlite3
52
+ database: db/<%= db_prefix %>_test.sqlite3
31
53
  timeout: 10000
32
- <% else %>
33
- <% raise "Invalid DB specified: #{ENV['DB']}" %>
34
54
  <% end %>
@@ -27,9 +27,6 @@ module DummyApp
27
27
  ActiveRecord::Base.remove_connection
28
28
 
29
29
  sh 'rake db:reset VERBOSE=false'
30
- if ENV['ENABLE_ACTIVE_STORAGE']
31
- sh 'rake active_storage:install db:migrate VERBOSE=false'
32
- end
33
30
 
34
31
  # We have a brand new database, so we must re-establish our connection
35
32
  ActiveRecord::Base.establish_connection