solidus_core 3.0.0 → 4.5.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 (444) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -2
  3. data/Rakefile +7 -2
  4. data/app/assets/images/logo/solidus.svg +18 -1
  5. data/app/assets/images/logo/solidus_logo.png +0 -0
  6. data/app/controllers/spree/base_controller.rb +1 -3
  7. data/app/helpers/spree/base_helper.rb +3 -3
  8. data/app/helpers/spree/core/controller_helpers/auth.rb +66 -0
  9. data/app/helpers/spree/core/controller_helpers/common.rb +82 -0
  10. data/app/helpers/spree/core/controller_helpers/order.rb +86 -0
  11. data/app/helpers/spree/core/controller_helpers/payment_parameters.rb +165 -0
  12. data/{lib/spree/core/controller_helpers/current_host.rb → app/helpers/spree/core/controller_helpers/pricing.rb} +6 -4
  13. data/app/helpers/spree/core/controller_helpers/search.rb +16 -0
  14. data/app/helpers/spree/core/controller_helpers/store.rb +19 -0
  15. data/app/helpers/spree/core/controller_helpers/strong_parameters.rb +74 -0
  16. data/app/helpers/spree/products_helper.rb +2 -2
  17. data/app/mailers/spree/base_mailer.rb +1 -1
  18. data/app/mailers/spree/carton_mailer.rb +1 -1
  19. data/app/mailers/spree/order_mailer.rb +3 -3
  20. data/app/mailers/spree/reimbursement_mailer.rb +1 -1
  21. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +30 -11
  22. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +1 -1
  23. data/app/models/concerns/spree/active_storage_adapter.rb +1 -18
  24. data/app/models/concerns/spree/default_price.rb +30 -10
  25. data/app/models/concerns/spree/display_money.rb +1 -1
  26. data/app/models/concerns/spree/metadata.rb +64 -0
  27. data/app/models/concerns/spree/named_type.rb +2 -0
  28. data/app/models/concerns/spree/ordered_property_value_list.rb +2 -2
  29. data/app/models/concerns/spree/ransackable_attributes.rb +9 -5
  30. data/app/models/concerns/spree/user_address_book.rb +19 -10
  31. data/app/models/concerns/spree/user_methods.rb +40 -6
  32. data/app/models/spree/address.rb +11 -9
  33. data/app/models/spree/adjustment.rb +15 -76
  34. data/app/models/spree/adjustment_reason.rb +2 -0
  35. data/app/models/spree/calculator/flat_fee.rb +21 -0
  36. data/app/models/spree/calculator/returns/default_refund_amount.rb +1 -1
  37. data/app/models/spree/carton.rb +3 -3
  38. data/app/models/spree/core/state_machines/inventory_unit.rb +42 -0
  39. data/app/models/spree/core/state_machines/order/class_methods.rb +217 -0
  40. data/app/models/spree/core/state_machines/order.rb +42 -0
  41. data/app/models/spree/core/state_machines/payment.rb +61 -0
  42. data/app/models/spree/core/state_machines/reimbursement.rb +33 -0
  43. data/app/models/spree/core/state_machines/return_authorization.rb +32 -0
  44. data/app/models/spree/core/state_machines/return_item/acceptance_status.rb +51 -0
  45. data/app/models/spree/core/state_machines/return_item/reception_status.rb +42 -0
  46. data/app/models/spree/core/state_machines/shipment.rb +58 -0
  47. data/app/models/spree/country.rb +1 -1
  48. data/app/models/spree/credit_card.rb +13 -10
  49. data/app/models/spree/customer_return.rb +6 -3
  50. data/app/models/spree/deprecated_configurable_class.rb +40 -0
  51. data/app/models/spree/fulfilment_changer.rb +56 -29
  52. data/app/models/spree/image/active_storage_attachment.rb +2 -7
  53. data/app/models/spree/image/paperclip_attachment.rb +2 -2
  54. data/app/models/spree/inventory_unit.rb +2 -2
  55. data/app/models/spree/item_total.rb +28 -0
  56. data/app/models/spree/legacy_user.rb +1 -0
  57. data/app/models/spree/line_item.rb +26 -8
  58. data/app/models/spree/log_entry.rb +98 -1
  59. data/app/models/spree/money.rb +120 -0
  60. data/app/models/spree/null_promotion_adjuster.rb +13 -0
  61. data/app/models/spree/null_promotion_advertiser.rb +9 -0
  62. data/app/models/spree/null_promotion_finder.rb +9 -0
  63. data/app/models/spree/null_promotion_handler.rb +44 -0
  64. data/app/models/spree/option_type.rb +1 -1
  65. data/app/models/spree/option_value.rb +4 -3
  66. data/app/models/spree/order/number_generator.rb +7 -1
  67. data/app/models/spree/order.rb +143 -96
  68. data/app/models/spree/order_cancellations.rb +8 -8
  69. data/app/models/spree/order_inventory.rb +7 -5
  70. data/app/models/spree/order_merger.rb +5 -7
  71. data/app/models/spree/order_mutex.rb +2 -2
  72. data/app/models/spree/order_shipping.rb +15 -19
  73. data/app/models/spree/order_taxation.rb +7 -4
  74. data/app/models/spree/order_update_attributes.rb +3 -1
  75. data/app/models/spree/order_updater.rb +25 -63
  76. data/app/models/spree/payment/processing.rb +60 -57
  77. data/app/models/spree/payment.rb +14 -27
  78. data/app/models/spree/payment_create.rb +1 -1
  79. data/app/models/spree/payment_method/bogus_credit_card.rb +18 -14
  80. data/app/models/spree/payment_method/credit_card.rb +0 -4
  81. data/app/models/spree/payment_method/simple_bogus_credit_card.rb +18 -4
  82. data/app/models/spree/payment_method/store_credit.rb +1 -1
  83. data/app/models/spree/payment_method.rb +29 -10
  84. data/app/models/spree/payment_source.rb +5 -1
  85. data/app/models/spree/permission_set.rb +11 -0
  86. data/app/models/spree/permission_sets/base.rb +45 -0
  87. data/app/models/spree/permission_sets/configuration_display.rb +53 -0
  88. data/app/models/spree/permission_sets/configuration_management.rb +52 -0
  89. data/app/models/spree/permission_sets/dashboard_display.rb +28 -0
  90. data/app/models/spree/permission_sets/default_customer.rb +83 -0
  91. data/app/models/spree/permission_sets/order_display.rb +50 -0
  92. data/app/models/spree/permission_sets/order_management.rb +50 -0
  93. data/app/models/spree/permission_sets/product_display.rb +43 -0
  94. data/app/models/spree/permission_sets/product_management.rb +47 -0
  95. data/app/models/spree/permission_sets/restricted_stock_display.rb +33 -0
  96. data/app/models/spree/permission_sets/restricted_stock_management.rb +33 -0
  97. data/app/models/spree/permission_sets/stock_display.rb +26 -0
  98. data/app/models/spree/permission_sets/stock_management.rb +26 -0
  99. data/app/models/spree/permission_sets/super_user.rb +26 -0
  100. data/app/models/spree/permission_sets/user_display.rb +27 -0
  101. data/app/models/spree/permission_sets/user_management.rb +44 -0
  102. data/app/models/spree/preference.rb +1 -1
  103. data/app/models/spree/price.rb +3 -3
  104. data/app/models/spree/product/scopes.rb +23 -10
  105. data/app/models/spree/product.rb +30 -23
  106. data/app/models/spree/product_property.rb +1 -1
  107. data/app/models/spree/property.rb +1 -1
  108. data/app/models/spree/refund.rb +13 -3
  109. data/app/models/spree/refund_reason.rb +6 -1
  110. data/app/models/spree/reimbursement.rb +6 -6
  111. data/app/models/spree/reimbursement_performer.rb +3 -3
  112. data/app/models/spree/reimbursement_tax_calculator.rb +3 -3
  113. data/app/models/spree/reimbursement_type/credit.rb +1 -1
  114. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +6 -6
  115. data/app/models/spree/reimbursement_type/store_credit.rb +1 -1
  116. data/app/models/spree/reimbursement_type.rb +6 -1
  117. data/app/models/spree/return_authorization.rb +3 -1
  118. data/app/models/spree/return_item.rb +13 -15
  119. data/app/models/spree/return_reason.rb +6 -1
  120. data/app/models/spree/role.rb +3 -1
  121. data/app/models/spree/role_permission.rb +8 -0
  122. data/app/models/spree/shipment.rb +12 -10
  123. data/app/models/spree/shipping_category.rb +2 -0
  124. data/app/models/spree/shipping_rate.rb +2 -3
  125. data/app/models/spree/shipping_rate_tax.rb +1 -1
  126. data/app/models/spree/{order_contents.rb → simple_order_contents.rb} +10 -13
  127. data/app/models/spree/state.rb +1 -1
  128. data/app/models/spree/stock/allocator/on_hand_first.rb +2 -2
  129. data/app/models/spree/stock/availability.rb +11 -3
  130. data/app/models/spree/stock/estimator.rb +1 -1
  131. data/app/models/spree/stock/inventory_unit_builder.rb +1 -1
  132. data/app/models/spree/stock/package.rb +2 -2
  133. data/app/models/spree/stock/quantifier.rb +12 -8
  134. data/app/models/spree/stock/simple_coordinator.rb +38 -28
  135. data/app/models/spree/stock/splitter/shipping_category.rb +1 -1
  136. data/app/models/spree/stock_item.rb +2 -1
  137. data/app/models/spree/stock_location.rb +7 -7
  138. data/app/models/spree/stock_movement.rb +2 -2
  139. data/app/models/spree/store.rb +3 -1
  140. data/app/models/spree/store_credit.rb +31 -16
  141. data/app/models/spree/store_credit_event.rb +4 -3
  142. data/app/models/spree/store_credit_prioritizer.rb +17 -0
  143. data/app/models/spree/store_credit_reason.rb +6 -1
  144. data/app/models/spree/store_selector/by_server_name.rb +1 -1
  145. data/app/models/spree/tax/item_tax.rb +3 -2
  146. data/app/models/spree/tax/order_tax.rb +3 -1
  147. data/app/models/spree/tax/tax_helpers.rb +14 -3
  148. data/app/models/spree/tax/tax_location.rb +4 -7
  149. data/app/models/spree/tax_calculator/default.rb +32 -1
  150. data/app/models/spree/tax_calculator/shipping_rate.rb +2 -2
  151. data/app/models/spree/tax_category.rb +3 -1
  152. data/app/models/spree/tax_rate.rb +14 -1
  153. data/app/models/spree/taxon/active_storage_attachment.rb +2 -2
  154. data/app/models/spree/taxon/paperclip_attachment.rb +4 -4
  155. data/app/models/spree/taxon.rb +25 -3
  156. data/app/models/spree/taxon_brand_selector.rb +22 -0
  157. data/app/models/spree/taxonomy.rb +4 -3
  158. data/app/models/spree/unauthorized_redirect_handler.rb +24 -0
  159. data/app/models/spree/unit_cancel.rb +1 -2
  160. data/app/models/spree/user_address.rb +9 -3
  161. data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +1 -1
  162. data/app/models/spree/variant/price_selector.rb +25 -8
  163. data/app/models/spree/variant/scopes.rb +4 -0
  164. data/app/models/spree/variant/vat_price_generator.rb +1 -1
  165. data/app/models/spree/variant.rb +64 -37
  166. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +4 -4
  167. data/app/models/spree/wallet.rb +2 -2
  168. data/app/models/spree/zone.rb +1 -1
  169. data/app/subscribers/spree/order_mailer_subscriber.rb +35 -0
  170. data/app/views/layouts/spree/base_mailer.html.erb +2 -2
  171. data/app/views/spree/order_mailer/cancel_email.html.erb +1 -1
  172. data/app/views/spree/order_mailer/cancel_email.text.erb +1 -1
  173. data/app/views/spree/order_mailer/confirm_email.html.erb +5 -5
  174. data/app/views/spree/order_mailer/confirm_email.text.erb +5 -5
  175. data/app/views/spree/order_mailer/inventory_cancellation_email.html.erb +0 -1
  176. data/config/i18n-tasks.yml +134 -0
  177. data/config/locales/en.yml +439 -338
  178. data/db/default/spree/permission_sets.rb +10 -0
  179. data/db/default/spree/return_reasons.rb +3 -1
  180. data/db/default/spree/states.rb +2 -2
  181. data/db/migrate/20160101010000_solidus_one_four.rb +0 -127
  182. data/db/migrate/20180710170104_create_spree_store_credit_reasons_table.rb +2 -2
  183. data/db/migrate/20201127212108_add_type_before_removal_to_spree_payment_methods.rb +7 -0
  184. data/db/migrate/20210312061050_change_column_null_on_prices.rb +7 -0
  185. data/db/migrate/20210815004823_add_unique_index_to_option_values_variants.rb +16 -0
  186. data/db/migrate/20220419170826_remove_archived_user_addresses.rb +12 -0
  187. data/db/migrate/20220805202442_add_level_to_spree_tax_rates.rb +5 -0
  188. data/db/migrate/20221123152807_add_shipping_category_to_spree_variants.rb +5 -0
  189. data/db/migrate/20230321161854_change_column_null_option_values_option_type_id.rb +5 -0
  190. data/db/migrate/20230425103509_remove_taxon_position.rb +5 -0
  191. data/db/migrate/20230427095534_drop_deprecated_address_id_from_shipments.rb +11 -0
  192. data/db/migrate/20240821173254_create_spree_permission_sets_in_core.rb +9 -0
  193. data/db/migrate/20240821173341_create_spree_roles_permissions_in_core.rb +9 -0
  194. data/db/migrate/20240821173641_add_description_to_spree_roles.rb +5 -0
  195. data/db/migrate/20240904152041_add_privilege_and_category_to_spree_permission_sets.rb +6 -0
  196. data/db/migrate/20250129061658_add_metadata_to_spree_resources.rb +28 -0
  197. data/db/migrate/20250201172950_add_gtin_and_condition_to_spree_variant.rb +6 -0
  198. data/db/migrate/20250207104016_add_primary_taxon_to_products.rb +7 -0
  199. data/db/migrate/20250221152004_add_metadata_to_users.rb +13 -0
  200. data/db/seeds.rb +5 -1
  201. data/lib/generators/solidus/install/app_templates/authentication/custom.rb +16 -0
  202. data/lib/generators/solidus/install/app_templates/authentication/devise.rb +16 -0
  203. data/lib/generators/solidus/install/app_templates/authentication/existing.rb +10 -0
  204. data/lib/generators/solidus/install/app_templates/authentication/none.rb +1 -0
  205. data/lib/generators/solidus/install/app_templates/frontend/none.rb +1 -0
  206. data/lib/generators/solidus/install/app_templates/frontend/starter.rb +1 -0
  207. data/lib/generators/solidus/install/app_templates/payment_method/braintree.rb +5 -0
  208. data/lib/generators/solidus/install/app_templates/payment_method/none.rb +1 -0
  209. data/lib/generators/solidus/install/app_templates/payment_method/paypal.rb +5 -0
  210. data/lib/generators/solidus/install/app_templates/payment_method/stripe.rb +5 -0
  211. data/lib/generators/solidus/install/install_generator.rb +210 -156
  212. data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +27 -33
  213. data/lib/generators/solidus/install/templates/vendor/assets/javascripts/spree/backend/all.js +2 -2
  214. data/lib/generators/solidus/update/templates/config/initializers/new_solidus_defaults.rb.tt +30 -0
  215. data/lib/generators/solidus/update/update_generator.rb +124 -0
  216. data/lib/generators/spree/custom_user/custom_user_generator.rb +6 -4
  217. data/lib/generators/spree/custom_user/templates/authentication_helpers.rb.tt +2 -6
  218. data/lib/generators/spree/custom_user/templates/migration.rb.tt +7 -3
  219. data/lib/generators/spree/dummy/dummy_generator.rb +12 -9
  220. data/lib/generators/spree/dummy/templates/rails/application.rb.tt +1 -2
  221. data/lib/generators/spree/dummy/templates/rails/database.yml +48 -63
  222. data/lib/generators/spree/dummy/templates/rails/manifest.js +3 -0
  223. data/lib/generators/spree/dummy/templates/rails/test.rb +7 -2
  224. data/lib/spree/app_configuration.rb +220 -71
  225. data/lib/spree/bus.rb +11 -0
  226. data/lib/spree/core/class_constantizer.rb +2 -2
  227. data/lib/spree/core/controller_helpers/auth.rb +5 -69
  228. data/lib/spree/core/controller_helpers/common.rb +5 -80
  229. data/lib/spree/core/controller_helpers/order.rb +5 -86
  230. data/lib/spree/core/controller_helpers/payment_parameters.rb +5 -165
  231. data/lib/spree/core/controller_helpers/pricing.rb +5 -17
  232. data/lib/spree/core/controller_helpers/search.rb +5 -14
  233. data/lib/spree/core/controller_helpers/store.rb +5 -17
  234. data/lib/spree/core/controller_helpers/strong_parameters.rb +5 -71
  235. data/lib/spree/core/engine.rb +49 -16
  236. data/lib/spree/core/environment/calculators.rb +35 -3
  237. data/lib/spree/core/environment/promotions.rb +25 -4
  238. data/lib/spree/core/environment_extension.rb +16 -2
  239. data/lib/spree/core/importer/order.rb +6 -6
  240. data/lib/spree/core/importer/product.rb +3 -3
  241. data/lib/spree/core/nested_class_set.rb +28 -0
  242. data/lib/spree/core/null_promotion_configuration.rb +84 -0
  243. data/lib/spree/core/product_duplicator.rb +1 -1
  244. data/lib/spree/core/product_filters.rb +2 -2
  245. data/lib/spree/core/search/base.rb +18 -9
  246. data/lib/spree/core/search/variant.rb +2 -2
  247. data/lib/spree/core/state_machines/inventory_unit.rb +5 -40
  248. data/lib/spree/core/state_machines/order.rb +5 -247
  249. data/lib/spree/core/state_machines/payment.rb +5 -59
  250. data/lib/spree/core/state_machines/reimbursement.rb +5 -31
  251. data/lib/spree/core/state_machines/return_authorization.rb +5 -30
  252. data/lib/spree/core/state_machines/return_item/acceptance_status.rb +5 -49
  253. data/lib/spree/core/state_machines/return_item/reception_status.rb +5 -40
  254. data/lib/spree/core/state_machines/shipment.rb +5 -56
  255. data/lib/spree/core/state_machines.rb +48 -81
  256. data/lib/spree/core/stock_configuration.rb +18 -0
  257. data/lib/spree/core/validators/email.rb +2 -4
  258. data/lib/spree/core/version.rb +5 -1
  259. data/lib/spree/core/versioned_value.rb +75 -0
  260. data/lib/spree/core.rb +40 -16
  261. data/lib/spree/deprecated_instance_variable_proxy.rb +57 -0
  262. data/lib/spree/deprecation.rb +3 -51
  263. data/lib/spree/deprecator.rb +9 -0
  264. data/lib/spree/i18n.rb +1 -1
  265. data/lib/spree/mailer_previews/carton_preview.rb +1 -1
  266. data/lib/spree/migration_helpers.rb +3 -3
  267. data/lib/spree/migrations.rb +13 -11
  268. data/lib/spree/money.rb +5 -118
  269. data/lib/spree/permission_sets/base.rb +5 -30
  270. data/lib/spree/permission_sets/configuration_display.rb +5 -23
  271. data/lib/spree/permission_sets/configuration_management.rb +5 -23
  272. data/lib/spree/permission_sets/dashboard_display.rb +5 -9
  273. data/lib/spree/permission_sets/default_customer.rb +5 -35
  274. data/lib/spree/permission_sets/order_display.rb +5 -19
  275. data/lib/spree/permission_sets/order_management.rb +5 -20
  276. data/lib/spree/permission_sets/product_display.rb +5 -17
  277. data/lib/spree/permission_sets/product_management.rb +5 -19
  278. data/lib/spree/permission_sets/restricted_stock_display.rb +5 -16
  279. data/lib/spree/permission_sets/restricted_stock_management.rb +5 -16
  280. data/lib/spree/permission_sets/stock_display.rb +5 -10
  281. data/lib/spree/permission_sets/stock_management.rb +5 -10
  282. data/lib/spree/permission_sets/super_user.rb +5 -9
  283. data/lib/spree/permission_sets/user_display.rb +5 -11
  284. data/lib/spree/permission_sets/user_management.rb +5 -23
  285. data/lib/spree/permission_sets.rb +5 -18
  286. data/lib/spree/permitted_attributes.rb +35 -14
  287. data/lib/spree/preferences/configuration.rb +88 -0
  288. data/lib/spree/preferences/persistable.rb +7 -1
  289. data/lib/spree/preferences/preferable.rb +13 -0
  290. data/lib/spree/preferences/preferable_class_methods.rb +12 -4
  291. data/lib/spree/preferences/preference_differentiator.rb +29 -0
  292. data/lib/spree/preferences/static_model_preferences.rb +25 -10
  293. data/lib/spree/preferences/store.rb +2 -2
  294. data/lib/spree/testing_support/blacklist_urls.rb +1 -1
  295. data/lib/spree/testing_support/bus_helpers.rb +101 -0
  296. data/lib/spree/testing_support/capybara_ext.rb +11 -1
  297. data/lib/spree/testing_support/common_rake.rb +76 -23
  298. data/lib/spree/testing_support/dummy_ability.rb +7 -0
  299. data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/backend/all.js +1 -1
  300. data/lib/spree/testing_support/dummy_app/assets/stylesheets/solidus_admin/tailwind.css +1 -0
  301. data/lib/spree/testing_support/dummy_app/database.yml +39 -28
  302. data/lib/spree/testing_support/dummy_app/migrations.rb +8 -15
  303. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +3 -10
  304. data/lib/spree/testing_support/dummy_app.rb +71 -42
  305. data/lib/spree/testing_support/extension_rake.rb +2 -2
  306. data/lib/spree/testing_support/factories/address_factory.rb +9 -13
  307. data/lib/spree/testing_support/factories/adjustment_factory.rb +1 -13
  308. data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +0 -5
  309. data/lib/spree/testing_support/factories/calculator_factory.rb +4 -10
  310. data/lib/spree/testing_support/factories/carton_factory.rb +2 -10
  311. data/lib/spree/testing_support/factories/country_factory.rb +1 -7
  312. data/lib/spree/testing_support/factories/credit_card_factory.rb +0 -5
  313. data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -11
  314. data/lib/spree/testing_support/factories/image_factory.rb +0 -5
  315. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +4 -14
  316. data/lib/spree/testing_support/factories/line_item_factory.rb +0 -8
  317. data/lib/spree/testing_support/factories/option_type_factory.rb +0 -8
  318. data/lib/spree/testing_support/factories/option_value_factory.rb +0 -5
  319. data/lib/spree/testing_support/factories/order_factory.rb +19 -38
  320. data/lib/spree/testing_support/factories/payment_factory.rb +0 -10
  321. data/lib/spree/testing_support/factories/payment_method_factory.rb +0 -5
  322. data/lib/spree/testing_support/factories/price_factory.rb +0 -7
  323. data/lib/spree/testing_support/factories/product_factory.rb +5 -13
  324. data/lib/spree/testing_support/factories/product_option_type_factory.rb +0 -8
  325. data/lib/spree/testing_support/factories/product_property_factory.rb +0 -8
  326. data/lib/spree/testing_support/factories/property_factory.rb +0 -5
  327. data/lib/spree/testing_support/factories/refund_factory.rb +0 -8
  328. data/lib/spree/testing_support/factories/refund_reason_factory.rb +0 -5
  329. data/lib/spree/testing_support/factories/reimbursement_factory.rb +0 -7
  330. data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +0 -5
  331. data/lib/spree/testing_support/factories/return_authorization_factory.rb +0 -9
  332. data/lib/spree/testing_support/factories/return_item_factory.rb +0 -9
  333. data/lib/spree/testing_support/factories/return_reason_factory.rb +0 -5
  334. data/lib/spree/testing_support/factories/role_factory.rb +0 -5
  335. data/lib/spree/testing_support/factories/shipment_factory.rb +1 -11
  336. data/lib/spree/testing_support/factories/shipping_category_factory.rb +0 -5
  337. data/lib/spree/testing_support/factories/shipping_method_factory.rb +0 -9
  338. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +0 -8
  339. data/lib/spree/testing_support/factories/state_factory.rb +8 -10
  340. data/lib/spree/testing_support/factories/stock_item_factory.rb +5 -9
  341. data/lib/spree/testing_support/factories/stock_location_factory.rb +0 -9
  342. data/lib/spree/testing_support/factories/stock_movement_factory.rb +0 -7
  343. data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -9
  344. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +0 -5
  345. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +0 -8
  346. data/lib/spree/testing_support/factories/store_credit_factory.rb +4 -13
  347. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +0 -5
  348. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +0 -5
  349. data/lib/spree/testing_support/factories/store_factory.rb +0 -5
  350. data/lib/spree/testing_support/factories/tax_category_factory.rb +0 -8
  351. data/lib/spree/testing_support/factories/tax_rate_factory.rb +0 -9
  352. data/lib/spree/testing_support/factories/taxon_factory.rb +5 -10
  353. data/lib/spree/testing_support/factories/taxonomy_factory.rb +3 -6
  354. data/lib/spree/testing_support/factories/user_factory.rb +6 -9
  355. data/lib/spree/testing_support/factories/variant_factory.rb +0 -10
  356. data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +0 -8
  357. data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +0 -9
  358. data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +0 -8
  359. data/lib/spree/testing_support/factories/zone_factory.rb +1 -9
  360. data/lib/spree/testing_support/factory_bot.rb +6 -29
  361. data/lib/spree/testing_support/flaky.rb +22 -0
  362. data/lib/spree/testing_support/order_walkthrough.rb +7 -6
  363. data/lib/spree/testing_support/sequences.rb +0 -5
  364. data/lib/spree/testing_support/shared_examples/calculator.rb +10 -0
  365. data/lib/spree/testing_support/shared_examples/order_factory.rb +141 -0
  366. data/lib/spree/testing_support/shared_examples/working_factory.rb +15 -0
  367. data/lib/spree/testing_support/silence_deprecations.rb +9 -0
  368. data/lib/spree/user_class_handle.rb +2 -2
  369. data/lib/tasks/colorado_delivery_fee.rake +28 -0
  370. data/lib/tasks/payment_method.rake +29 -0
  371. data/lib/tasks/solidus/delete_prices_with_nil_amount.rake +8 -0
  372. data/solidus_core.gemspec +18 -8
  373. metadata +233 -117
  374. data/app/jobs/spree/promotion_code_batch_job.rb +0 -26
  375. data/app/mailers/spree/promotion_code_batch_mailer.rb +0 -15
  376. data/app/models/spree/calculator/distributed_amount.rb +0 -33
  377. data/app/models/spree/calculator/flat_percent_item_total.rb +0 -23
  378. data/app/models/spree/calculator/flexi_rate.rb +0 -22
  379. data/app/models/spree/calculator/percent_on_line_item.rb +0 -13
  380. data/app/models/spree/calculator/tiered_flat_rate.rb +0 -52
  381. data/app/models/spree/calculator/tiered_percent.rb +0 -62
  382. data/app/models/spree/line_item_action.rb +0 -8
  383. data/app/models/spree/order_promotion.rb +0 -27
  384. data/app/models/spree/promotion/actions/create_adjustment.rb +0 -77
  385. data/app/models/spree/promotion/actions/create_item_adjustments.rb +0 -99
  386. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +0 -139
  387. data/app/models/spree/promotion/actions/free_shipping.rb +0 -58
  388. data/app/models/spree/promotion/rules/first_order.rb +0 -38
  389. data/app/models/spree/promotion/rules/first_repeat_purchase_since.rb +0 -36
  390. data/app/models/spree/promotion/rules/item_total.rb +0 -53
  391. data/app/models/spree/promotion/rules/nth_order.rb +0 -45
  392. data/app/models/spree/promotion/rules/one_use_per_user.rb +0 -25
  393. data/app/models/spree/promotion/rules/option_value.rb +0 -50
  394. data/app/models/spree/promotion/rules/product.rb +0 -74
  395. data/app/models/spree/promotion/rules/store.rb +0 -22
  396. data/app/models/spree/promotion/rules/taxon.rb +0 -87
  397. data/app/models/spree/promotion/rules/user.rb +0 -30
  398. data/app/models/spree/promotion/rules/user_logged_in.rb +0 -20
  399. data/app/models/spree/promotion/rules/user_role.rb +0 -45
  400. data/app/models/spree/promotion.rb +0 -284
  401. data/app/models/spree/promotion_action.rb +0 -43
  402. data/app/models/spree/promotion_category.rb +0 -8
  403. data/app/models/spree/promotion_chooser.rb +0 -34
  404. data/app/models/spree/promotion_code/batch_builder.rb +0 -64
  405. data/app/models/spree/promotion_code.rb +0 -50
  406. data/app/models/spree/promotion_code_batch.rb +0 -27
  407. data/app/models/spree/promotion_handler/cart.rb +0 -55
  408. data/app/models/spree/promotion_handler/coupon.rb +0 -123
  409. data/app/models/spree/promotion_handler/page.rb +0 -26
  410. data/app/models/spree/promotion_handler/shipping.rb +0 -61
  411. data/app/models/spree/promotion_rule.rb +0 -55
  412. data/app/models/spree/promotion_rule_role.rb +0 -8
  413. data/app/models/spree/promotion_rule_store.rb +0 -10
  414. data/app/models/spree/promotion_rule_taxon.rb +0 -8
  415. data/app/models/spree/promotion_rule_user.rb +0 -10
  416. data/app/models/spree/tax/shipping_rate_taxer.rb +0 -24
  417. data/app/subscribers/spree/mailer_subscriber.rb +0 -25
  418. data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_errored.text.erb +0 -2
  419. data/app/views/spree/promotion_code_batch_mailer/promotion_code_batch_finished.text.erb +0 -2
  420. data/db/migrate/20161017102621_create_spree_promotion_code_batch.rb +0 -38
  421. data/db/migrate/20180202190713_create_promotion_rule_stores.rb +0 -12
  422. data/db/migrate/20180328172631_add_join_characters_to_promotion_code_batch.rb +0 -11
  423. data/db/migrate/20190106184413_remove_code_from_spree_promotions.rb +0 -42
  424. data/lib/generators/solidus/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -10
  425. data/lib/generators/solidus/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -9
  426. data/lib/generators/spree/dummy/templates/rails/script/rails +0 -6
  427. data/lib/solidus/migrations/promotions_with_code_handlers.rb +0 -66
  428. data/lib/spree/event/adapters/active_support_notifications.rb +0 -67
  429. data/lib/spree/event/configuration.rb +0 -25
  430. data/lib/spree/event/subscriber.rb +0 -86
  431. data/lib/spree/event/subscriber_registry.rb +0 -94
  432. data/lib/spree/event.rb +0 -119
  433. data/lib/spree/permission_sets/promotion_display.rb +0 -15
  434. data/lib/spree/permission_sets/promotion_management.rb +0 -15
  435. data/lib/spree/testing_support/dummy_app/assets/javascripts/spree/frontend/all.js +0 -10
  436. data/lib/spree/testing_support/dummy_app/assets/stylesheets/spree/frontend/all.css +0 -9
  437. data/lib/spree/testing_support/dummy_app/views/layouts/application.html.erb +0 -1
  438. data/lib/spree/testing_support/factories/order_promotion_factory.rb +0 -16
  439. data/lib/spree/testing_support/factories/promotion_category_factory.rb +0 -12
  440. data/lib/spree/testing_support/factories/promotion_code_factory.rb +0 -16
  441. data/lib/spree/testing_support/factories/promotion_factory.rb +0 -92
  442. data/lib/spree/testing_support/factories.rb +0 -11
  443. data/lib/spree/testing_support.rb +0 -31
  444. data/lib/tasks/upgrade.rake +0 -15
@@ -1,20 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spree/testing_support/factory_bot'
4
- Spree::TestingSupport::FactoryBot.when_cherry_picked do
5
- Spree::TestingSupport::FactoryBot.deprecate_cherry_picking
6
-
7
- require 'spree/testing_support/factories/taxonomy_factory'
8
- end
9
-
10
3
  FactoryBot.define do
11
4
  factory :taxon, class: 'Spree::Taxon' do
12
5
  name { 'Ruby on Rails' }
13
- taxonomy
14
- parent_id { nil }
6
+ taxonomy_id { (parent&.taxonomy || create(:taxonomy)).id }
7
+ parent_id { parent&.id || taxonomy.root.id }
15
8
 
16
9
  trait :with_icon do
17
- icon { Spree::Core::Engine.root.join('lib', 'spree', 'testing_support', 'fixtures', 'blank.jpg').open }
10
+ after(:create) do |taxon|
11
+ taxon.update(icon: Spree::Core::Engine.root.join('lib', 'spree', 'testing_support', 'fixtures', 'blank.jpg').open)
12
+ end
18
13
  end
19
14
  end
20
15
  end
@@ -1,12 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spree/testing_support/factory_bot'
4
- Spree::TestingSupport::FactoryBot.when_cherry_picked do
5
- Spree::TestingSupport::FactoryBot.deprecate_cherry_picking
6
- end
7
-
8
3
  FactoryBot.define do
9
4
  factory :taxonomy, class: 'Spree::Taxonomy' do
10
- name { 'Brand' }
5
+ sequence :name do |seq|
6
+ "Brand #{seq}"
7
+ end
11
8
  end
12
9
  end
@@ -1,14 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spree/testing_support/factory_bot'
4
- Spree::TestingSupport::FactoryBot.when_cherry_picked do
5
- Spree::TestingSupport::FactoryBot.deprecate_cherry_picking
6
-
7
- require 'spree/testing_support/sequences'
8
- require 'spree/testing_support/factories/role_factory'
9
- require 'spree/testing_support/factories/address_factory'
10
- end
11
-
12
3
  FactoryBot.define do
13
4
  factory :user, class: Spree::UserClassHandle.new do
14
5
  email { generate(:email) }
@@ -21,6 +12,12 @@ FactoryBot.define do
21
12
  end
22
13
  end
23
14
 
15
+ trait :with_orders do
16
+ after(:create) do |user, _|
17
+ create(:order, user:)
18
+ end
19
+ end
20
+
24
21
  factory :admin_user do
25
22
  after(:create) do |user, _|
26
23
  admin_role = Spree::Role.find_by(name: 'admin') || create(:role, name: 'admin')
@@ -1,15 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spree/testing_support/factory_bot'
4
- Spree::TestingSupport::FactoryBot.when_cherry_picked do
5
- Spree::TestingSupport::FactoryBot.deprecate_cherry_picking
6
-
7
- require 'spree/testing_support/sequences'
8
- require 'spree/testing_support/factories/option_value_factory'
9
- require 'spree/testing_support/factories/option_type_factory'
10
- require 'spree/testing_support/factories/product_factory'
11
- end
12
-
13
3
  FactoryBot.define do
14
4
  sequence(:random_float) { BigDecimal("#{rand(200)}.#{rand(99)}") }
15
5
 
@@ -1,13 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spree/testing_support/factory_bot'
4
- Spree::TestingSupport::FactoryBot.when_cherry_picked do
5
- Spree::TestingSupport::FactoryBot.deprecate_cherry_picking
6
-
7
- require 'spree/testing_support/factories/option_value_factory'
8
- require 'spree/testing_support/factories/variant_property_rule_factory'
9
- end
10
-
11
3
  FactoryBot.define do
12
4
  factory :variant_property_rule_condition, class: 'Spree::VariantPropertyRuleCondition' do
13
5
  variant_property_rule
@@ -1,14 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spree/testing_support/factory_bot'
4
- Spree::TestingSupport::FactoryBot.when_cherry_picked do
5
- Spree::TestingSupport::FactoryBot.deprecate_cherry_picking
6
-
7
- require 'spree/testing_support/factories/product_factory'
8
- require 'spree/testing_support/factories/property_factory'
9
- require 'spree/testing_support/factories/option_value_factory'
10
- end
11
-
12
3
  FactoryBot.define do
13
4
  factory :variant_property_rule, class: 'Spree::VariantPropertyRule' do
14
5
  product
@@ -1,13 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spree/testing_support/factory_bot'
4
- Spree::TestingSupport::FactoryBot.when_cherry_picked do
5
- Spree::TestingSupport::FactoryBot.deprecate_cherry_picking
6
-
7
- require 'spree/testing_support/factories/variant_property_rule_factory'
8
- require 'spree/testing_support/factories/property_factory'
9
- end
10
-
11
3
  FactoryBot.define do
12
4
  factory :variant_property_rule_value, class: 'Spree::VariantPropertyRuleValue' do
13
5
  variant_property_rule
@@ -1,20 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spree/testing_support/factory_bot'
4
- Spree::TestingSupport::FactoryBot.when_cherry_picked do
5
- Spree::TestingSupport::FactoryBot.deprecate_cherry_picking
6
-
7
- require 'spree/testing_support/sequences'
8
- require 'spree/testing_support/factories/country_factory'
9
- end
10
-
11
3
  FactoryBot.define do
12
4
  factory :global_zone, class: 'Spree::Zone' do
13
5
  initialize_with { Spree::Zone.find_or_initialize_by(name: 'GlobalZone') }
14
6
  zone_members do |proxy|
15
7
  zone = proxy.instance_eval { @instance }
16
8
  Spree::Country.all.map do |c|
17
- Spree::ZoneMember.create(zoneable: c, zone: zone)
9
+ Spree::ZoneMember.create(zoneable: c, zone:)
18
10
  end
19
11
  end
20
12
  end
@@ -17,43 +17,20 @@ module Spree
17
17
  @paths ||= PATHS.map { |path| path.sub(/.rb\z/, '') }
18
18
  end
19
19
 
20
- def self.when_cherry_picked
21
- callsites = caller
22
-
23
- # All good if the factory is being loaded by FactoryBot or from `testing_support/factories.rb`.
24
- return if callsites.find do |line|
25
- line.include?("/factory_bot/find_definitions.rb") ||
26
- line.include?("/spree/testing_support/factories.rb")
27
- end
28
-
29
- yield
30
- end
31
-
32
- def self.deprecate_cherry_picking
33
- callsites = caller
34
- core_root = Spree::Core::Engine.root.to_s
35
- index = callsites.index { |line| !line.start_with? core_root }
36
-
37
- Spree::Deprecation.warn(
38
- "Please do not cherry-pick factories, this is not well supported by FactoryBot, " \
39
- 'follow the changelog instructions on how to migrate your current setup.',
40
- callsites[index..-1]
41
- )
42
- end
43
-
44
20
  def self.check_version
45
21
  require "factory_bot/version"
46
22
 
47
- requirement = Gem::Requirement.new("~> 4.8")
23
+ requirement = Gem::Requirement.new(">= 4.8")
48
24
  version = Gem::Version.new(::FactoryBot::VERSION)
49
25
 
50
26
  unless requirement.satisfied_by? version
51
- Spree::Deprecation.warn(
52
- "Please be aware that the supported version of FactoryBot is #{requirement}, " \
53
- "using version #{version} could lead to factory loading issues.", caller(2)
54
- )
27
+ raise <<~MSG
28
+ Please be aware that the supported version of FactoryBot is #{requirement},
29
+ using version #{version} could lead to factory loading issues.
30
+ MSG
55
31
  end
56
32
  end
33
+ deprecate :check_version, deprecator: Spree.deprecator
57
34
 
58
35
  def self.add_definitions!
59
36
  ::FactoryBot.definition_file_paths.unshift(*definition_file_paths).uniq!
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+ require 'rspec/retry'
3
+
4
+ # Usage:
5
+ #
6
+ # it 'fails intermittently', :flaky do
7
+ # ...
8
+ # end
9
+ #
10
+ # Docs: https://github.com/NoRedInk/rspec-retry
11
+ RSpec.configure do |config|
12
+ config.verbose_retry = true
13
+ config.display_try_failure_messages = true
14
+
15
+ config.around(:each, :flaky) do |example|
16
+ if ENV['CI']
17
+ example.run_with_retry retry: 2
18
+ else
19
+ example.run
20
+ end
21
+ end
22
+ end
@@ -3,11 +3,11 @@
3
3
  module Spree
4
4
  module TestingSupport
5
5
  class OrderWalkthrough
6
- def self.up_to(state)
7
- new.up_to(state)
6
+ def self.up_to(state, user: nil)
7
+ new.up_to(state, user:)
8
8
  end
9
9
 
10
- def up_to(state)
10
+ def up_to(state, user: nil)
11
11
  # Need to create a valid zone too...
12
12
  @zone = ::FactoryBot.create(:zone)
13
13
  @country = ::FactoryBot.create(:country)
@@ -23,6 +23,7 @@ module Spree
23
23
  end
24
24
 
25
25
  order = Spree::Order.create!(
26
+ user:,
26
27
  email: "solidus@example.com",
27
28
  store: Spree::Store.first || ::FactoryBot.create(:store)
28
29
  )
@@ -33,7 +34,7 @@ module Spree
33
34
  states
34
35
  else
35
36
  end_state_position = states.index(state.to_sym)
36
- states[0..end_state_position]
37
+ states[..end_state_position]
37
38
  end
38
39
 
39
40
  states_to_process.each do |state_to_process|
@@ -46,7 +47,7 @@ module Spree
46
47
  private
47
48
 
48
49
  def add_line_item!(order)
49
- ::FactoryBot.create(:line_item, order: order)
50
+ ::FactoryBot.create(:line_item, order:)
50
51
  order.reload
51
52
  end
52
53
 
@@ -61,7 +62,7 @@ module Spree
61
62
  end
62
63
 
63
64
  def payment(order)
64
- credit_card = ::FactoryBot.create(:credit_card)
65
+ credit_card = ::FactoryBot.create(:credit_card, user: order.user)
65
66
  order.payments.create!(payment_method: credit_card.payment_method, amount: order.total, source: credit_card)
66
67
  # TODO: maybe look at some way of making this payment_state change automatic
67
68
  order.payment_state = 'paid'
@@ -1,10 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spree/testing_support/factory_bot'
4
- Spree::TestingSupport::FactoryBot.when_cherry_picked do
5
- Spree::TestingSupport::FactoryBot.deprecate_cherry_picking
6
- end
7
-
8
3
  FactoryBot.define do
9
4
  sequence(:sku) { |n| "SKU-#{n}" }
10
5
  sequence(:email) { |n| "email#{n}@example.com" }
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.shared_examples_for 'a calculator with a description' do
4
+ describe ".description" do
5
+ subject { described_class.description }
6
+ it "has a description" do
7
+ expect(subject.size).to be > 0
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,141 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.shared_examples "shipping methods are assigned" do
4
+ context "given a shipping method" do
5
+ let(:shipping_method) { create(:shipping_method) }
6
+
7
+ it "assigns the shipping method when created" do
8
+ expect(
9
+ create(
10
+ factory,
11
+ shipping_method:
12
+ ).shipments.map(&:shipping_method)
13
+ ).to all(eq(shipping_method))
14
+ end
15
+
16
+ it "assigns the shipping method when built" do
17
+ expect(
18
+ build(
19
+ factory,
20
+ shipping_method:
21
+ ).shipments.map(&:shipping_method)
22
+ ).to all(eq(shipping_method))
23
+ end
24
+ end
25
+ end
26
+
27
+ RSpec.shared_examples "an order with line items factory" do |expected_order_state, expected_inventory_unit_state|
28
+ # This factory cannot be built correctly because Shipment#set_up_inventory
29
+ # requires records to be saved.
30
+ context "when created" do
31
+ let(:stock_location) { create(:stock_location) }
32
+ let(:first_variant) { create(:variant) }
33
+ let(:second_variant) { create(:variant) }
34
+ let(:shipping_method) { create(:shipping_method) }
35
+ let(:order) do
36
+ create(
37
+ factory,
38
+ stock_location:,
39
+ line_items_attributes: [
40
+ { variant: first_variant, quantity: 1, price: 1 },
41
+ { variant: second_variant, quantity: 2, price: 2 }
42
+ ],
43
+ shipment_cost: 3,
44
+ shipping_method:
45
+ )
46
+ end
47
+
48
+ it "has the expected attributes" do
49
+ aggregate_failures "for line items" do
50
+ expect(order.line_items.count).to eq 2
51
+ expect(order.line_items[0]).to have_attributes(
52
+ quantity: 1,
53
+ price: 1.0
54
+ )
55
+ expect(order.line_items[1]).to have_attributes(
56
+ price: 2.0,
57
+ quantity: 2
58
+ )
59
+ end
60
+
61
+ aggregate_failures "for shipments" do
62
+ expect(order.shipments.count).to eq 1
63
+ expect(order.shipments[0]).to have_attributes(
64
+ amount: 3.0,
65
+ stock_location:
66
+ )
67
+
68
+ expect(order.shipments[0].shipping_method).to eq(shipping_method)
69
+
70
+ # Explicitly order by line item id, because otherwise these can be in
71
+ # an arbitrary order.
72
+ inventory_units = order.shipments[0].inventory_units.sort_by(&:line_item_id)
73
+
74
+ expect(inventory_units.count).to eq(3)
75
+ expect(inventory_units[0]).to have_attributes(
76
+ order:,
77
+ shipment: order.shipments[0],
78
+ line_item: order.line_items[0],
79
+ variant: order.line_items[0].variant,
80
+ state: expected_inventory_unit_state
81
+ )
82
+ expect(inventory_units[1]).to have_attributes(
83
+ order:,
84
+ shipment: order.shipments[0],
85
+ line_item: order.line_items[1],
86
+ variant: order.line_items[1].variant,
87
+ state: expected_inventory_unit_state
88
+ )
89
+ expect(inventory_units[2]).to have_attributes(
90
+ order:,
91
+ shipment: order.shipments[0],
92
+ line_item: order.line_items[1],
93
+ variant: order.line_items[1].variant,
94
+ state: expected_inventory_unit_state
95
+ )
96
+ end
97
+
98
+ expect(order).to have_attributes(
99
+ item_total: 5.0,
100
+ ship_total: 3.0,
101
+ total: 8.0,
102
+ state: expected_order_state
103
+ )
104
+ end
105
+ end
106
+
107
+ context 'when shipments should be taxed' do
108
+ let!(:ship_address) { create(:address) }
109
+ let!(:tax_zone) { create(:global_zone) } # will include the above address
110
+ let!(:tax_rate) { create(:tax_rate, amount: 0.10, zone: tax_zone, tax_categories: [tax_category]) }
111
+
112
+ let(:tax_category) { create(:tax_category) }
113
+ let(:shipping_method) { create(:shipping_method, tax_category:, zones: [tax_zone]) }
114
+
115
+ it 'shipments get a tax adjustment' do
116
+ order = create(factory, ship_address:, shipping_method:)
117
+ shipment = order.shipments[0]
118
+
119
+ expect(shipment.additional_tax_total).to be > 0
120
+ end
121
+ end
122
+ end
123
+
124
+ RSpec.shared_examples 'supplied completed_at is respected' do
125
+ context 'when passed a completed_at timestamp' do
126
+ let(:completed_at) { 2.days.ago }
127
+ let(:order) { create(factory, completed_at:) }
128
+
129
+ it 'respects the timestamp' do
130
+ expect(order.completed_at).to be_within(5.seconds).of(completed_at)
131
+ end
132
+ end
133
+
134
+ context 'when no completed_at timestamp is passed' do
135
+ let(:order) { create(factory) }
136
+
137
+ it 'defaults to the current time' do
138
+ expect(order.completed_at).to be_within(2.seconds).of(Time.current)
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.shared_examples_for 'a working factory' do
4
+ it "builds successfully" do
5
+ expect(build(factory)).to be_a(factory_class)
6
+ end
7
+
8
+ it "creates successfully" do
9
+ expect(create(factory)).to be_a(factory_class)
10
+ end
11
+
12
+ it "is creates a valid record" do
13
+ expect(create(factory)).to be_valid
14
+ end
15
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.configure do |config|
4
+ config.around(:each, silence_deprecations: true) do |example|
5
+ Spree.deprecator.silence do
6
+ example.run
7
+ end
8
+ end
9
+ end
@@ -21,8 +21,8 @@ module Spree
21
21
  # @return [String] the name of the user class as a string.
22
22
  # @raise [RuntimeError] if Spree.user_class is nil
23
23
  def to_s
24
- fail "'Spree.user_class' has not been set yet." unless Spree.user_class
25
- "::#{Spree.user_class}"
24
+ fail "'Spree.user_class' has not been set yet." unless Spree.user_class_name
25
+ "::#{Spree.user_class_name}"
26
26
  end
27
27
  end
28
28
  end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :taxes do
4
+ desc "Creates all of the records necessary to start collecting the Colorado Delivery Fee"
5
+ task colorado_delivery_fee: :environment do
6
+ usa = Spree::Country.find_by!(iso: "US")
7
+ colorado = usa.states.find_by!(abbr: "CO")
8
+
9
+ ActiveRecord::Base.transaction do
10
+ zone = Spree::Zone.create!(
11
+ name: "Colorado",
12
+ description: "State-based zone containing only Colorado.",
13
+ states: [colorado]
14
+ )
15
+
16
+ calculator = Spree::Calculator::FlatFee.new
17
+ rate = Spree::TaxRate.create!(
18
+ name: "Colorado Delivery Fee",
19
+ calculator:,
20
+ zone:,
21
+ amount: 0.27,
22
+ show_rate_in_label: false,
23
+ level: "order"
24
+ )
25
+ rate.tax_categories << Spree::TaxCategory.default if Spree::TaxCategory.default
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :payment_method do
4
+ desc "Deactivates old payment methods and fixes ActiveRecord::SubclassNotFound error, "\
5
+ "which happens after switching Payment Service Provider."
6
+ task deactivate_unsupported_payment_methods: :environment do
7
+ Spree::PaymentMethod.pluck(:id, :type).select do |id, type|
8
+ type.constantize
9
+ rescue NameError
10
+ fix_payment_method_record(id, type)
11
+ end
12
+ end
13
+
14
+ def fix_payment_method_record(id, previous_type)
15
+ connection = ActiveRecord::Base.connection
16
+ false_value = connection.quoted_false
17
+ connection.exec_update(<<-SQL
18
+ UPDATE spree_payment_methods
19
+ SET
20
+ type='#{Spree::PaymentMethod.name}',
21
+ type_before_removal='#{previous_type}',
22
+ active=#{false_value},
23
+ available_to_users=#{false_value},
24
+ available_to_admin=#{false_value}
25
+ WHERE id=#{id};
26
+ SQL
27
+ )
28
+ end
29
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :solidus do
4
+ desc "Delete Spree::Price records (including discarded) which amount field is NULL"
5
+ task delete_prices_with_nil_amount: :environment do
6
+ Spree::Price.with_discarded.where(amount: nil).delete_all
7
+ end
8
+ end
data/solidus_core.gemspec CHANGED
@@ -14,23 +14,25 @@ Gem::Specification.new do |s|
14
14
  s.homepage = 'http://solidus.io'
15
15
  s.license = 'BSD-3-Clause'
16
16
 
17
+ s.metadata['rubygems_mfa_required'] = 'true'
18
+
17
19
  s.files = `git ls-files -z`.split("\x0").reject do |f|
18
- f.match(%r{^(spec|script)/})
20
+ f.match(%r{^(spec|bin)/})
19
21
  end
20
22
 
21
- s.required_ruby_version = '>= 2.5.0'
23
+ s.required_ruby_version = '>= 3.1.0'
22
24
  s.required_rubygems_version = '>= 1.8.23'
23
25
 
24
26
  %w[
25
27
  actionmailer actionpack actionview activejob activemodel activerecord
26
- activesupport railties
28
+ activestorage activesupport railties
27
29
  ].each do |rails_dep|
28
- s.add_dependency rails_dep, ['>= 5.2', '< 6.2.x']
30
+ s.add_dependency rails_dep, ['>= 7.0', '< 8.1.0.beta1']
29
31
  end
30
32
 
31
33
  s.add_dependency 'activemerchant', '~> 1.66'
32
34
  s.add_dependency 'acts_as_list', '< 2.0'
33
- s.add_dependency 'awesome_nested_set', '~> 3.3'
35
+ s.add_dependency 'awesome_nested_set', ['~> 3.3', '>= 3.7.0']
34
36
  s.add_dependency 'cancancan', ['>= 2.2', '< 4.0']
35
37
  s.add_dependency 'carmen', '~> 1.1.0'
36
38
  s.add_dependency 'discard', '~> 1.0'
@@ -39,9 +41,12 @@ Gem::Specification.new do |s|
39
41
  s.add_dependency 'kaminari-activerecord', '~> 1.1'
40
42
  s.add_dependency 'mini_magick', '~> 4.10'
41
43
  s.add_dependency 'monetize', '~> 1.8'
42
- s.add_dependency 'kt-paperclip', '~> 6.3'
43
- s.add_dependency 'ransack', '~> 2.0'
44
+ s.add_dependency 'kt-paperclip', ['>= 6.3', '< 8']
45
+ s.add_dependency 'psych', ['>= 4.0.1', '< 6.0']
46
+ s.add_dependency 'ransack', ['~> 4.0', '< 5']
47
+ s.add_dependency 'sprockets-rails', '!= 3.5.0'
44
48
  s.add_dependency 'state_machines-activerecord', '~> 0.6'
49
+ s.add_dependency 'omnes', '~> 0.2.2'
45
50
 
46
51
  s.post_install_message = <<-MSG
47
52
  -------------------------------------------------------------
@@ -55,7 +60,12 @@ $ bin/rails g solidus:install
55
60
  If you are updating Solidus from an older version, please run
56
61
  the following commands to complete the update:
57
62
 
58
- $ bin/rails solidus:upgrade
63
+ $ bin/rails g solidus:update
64
+
65
+ Please, don't forget to look at the CHANGELOG to see what has changed and
66
+ whether you need to perform other tasks.
67
+
68
+ https://github.com/solidusio/solidus/blob/main/CHANGELOG.md
59
69
 
60
70
  Please report any issues at:
61
71
  - https://github.com/solidusio/solidus/issues