solidus_core 4.6.2 → 4.7.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 (334) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +13 -13
  3. data/app/controllers/spree/base_controller.rb +2 -2
  4. data/app/helpers/spree/base_helper.rb +24 -24
  5. data/app/helpers/spree/checkout_helper.rb +7 -7
  6. data/app/helpers/spree/core/controller_helpers/auth.rb +1 -1
  7. data/app/helpers/spree/core/controller_helpers/common.rb +3 -2
  8. data/app/helpers/spree/core/controller_helpers/order.rb +3 -5
  9. data/app/helpers/spree/core/controller_helpers/payment_parameters.rb +1 -2
  10. data/app/helpers/spree/core/controller_helpers/strong_parameters.rb +10 -10
  11. data/app/helpers/spree/products_helper.rb +5 -5
  12. data/app/helpers/spree/store_helper.rb +1 -1
  13. data/app/mailers/spree/carton_mailer.rb +3 -3
  14. data/app/mailers/spree/order_mailer.rb +4 -4
  15. data/app/mailers/spree/reimbursement_mailer.rb +2 -2
  16. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +5 -5
  17. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +5 -5
  18. data/app/models/concerns/spree/active_storage_adapter.rb +2 -2
  19. data/app/models/concerns/spree/adjustment_source.rb +4 -4
  20. data/app/models/concerns/spree/display_money.rb +2 -2
  21. data/app/models/concerns/spree/named_type.rb +1 -1
  22. data/app/models/concerns/spree/ordered_property_value_list.rb +2 -2
  23. data/app/models/concerns/spree/preferences/persistable.rb +1 -1
  24. data/app/models/concerns/spree/ransackable_attributes.rb +1 -0
  25. data/app/models/concerns/spree/soft_deletable.rb +2 -1
  26. data/app/models/concerns/spree/state_change_tracking.rb +1 -1
  27. data/app/models/concerns/spree/user_address_book.rb +12 -12
  28. data/app/models/concerns/spree/user_methods.rb +9 -9
  29. data/app/models/concerns/spree/user_reporting.rb +1 -0
  30. data/app/models/spree/ability.rb +1 -1
  31. data/app/models/spree/address/name.rb +1 -1
  32. data/app/models/spree/address.rb +7 -7
  33. data/app/models/spree/adjustment.rb +11 -10
  34. data/app/models/spree/adjustment_reason.rb +2 -2
  35. data/app/models/spree/billing_integration.rb +2 -2
  36. data/app/models/spree/calculator/default_tax.rb +2 -2
  37. data/app/models/spree/calculator/flat_fee.rb +1 -1
  38. data/app/models/spree/calculator/flat_rate.rb +2 -2
  39. data/app/models/spree/calculator/returns/default_refund_amount.rb +3 -3
  40. data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +2 -2
  41. data/app/models/spree/calculator/shipping/flat_rate.rb +3 -3
  42. data/app/models/spree/calculator/shipping/flexi_rate.rb +8 -8
  43. data/app/models/spree/calculator/shipping/per_item.rb +3 -3
  44. data/app/models/spree/calculator/shipping/price_sack.rb +3 -3
  45. data/app/models/spree/calculator.rb +31 -6
  46. data/app/models/spree/carton.rb +4 -4
  47. data/app/models/spree/classification.rb +2 -2
  48. data/app/models/spree/core/state_machines/order/class_methods.rb +3 -3
  49. data/app/models/spree/core/state_machines/return_item/acceptance_status.rb +1 -1
  50. data/app/models/spree/country.rb +1 -1
  51. data/app/models/spree/credit_card.rb +27 -27
  52. data/app/models/spree/customer_return.rb +5 -4
  53. data/app/models/spree/distributed_amounts_handler.rb +1 -1
  54. data/app/models/spree/fulfilment_changer.rb +22 -22
  55. data/app/models/spree/image/active_storage_attachment.rb +2 -2
  56. data/app/models/spree/image/paperclip_attachment.rb +8 -8
  57. data/app/models/spree/in_memory_order_updater.rb +260 -0
  58. data/app/models/spree/inventory_unit.rb +11 -11
  59. data/app/models/spree/item_total.rb +1 -1
  60. data/app/models/spree/legacy_user.rb +2 -2
  61. data/app/models/spree/line_item.rb +22 -12
  62. data/app/models/spree/log_entry.rb +3 -3
  63. data/app/models/spree/mergeable_orders_finder.rb +44 -0
  64. data/app/models/spree/money.rb +2 -1
  65. data/app/models/spree/null_promotion_adjuster.rb +1 -1
  66. data/app/models/spree/option_type.rb +1 -1
  67. data/app/models/spree/option_value.rb +2 -2
  68. data/app/models/spree/order/number_generator.rb +1 -1
  69. data/app/models/spree/order.rb +66 -64
  70. data/app/models/spree/order_cancellations.rb +1 -3
  71. data/app/models/spree/order_inventory.rb +5 -8
  72. data/app/models/spree/order_mutex.rb +1 -1
  73. data/app/models/spree/order_shipping.rb +1 -1
  74. data/app/models/spree/order_updater.rb +60 -38
  75. data/app/models/spree/payment/cancellation.rb +2 -2
  76. data/app/models/spree/payment/processing.rb +22 -22
  77. data/app/models/spree/payment.rb +25 -25
  78. data/app/models/spree/payment_capture_event.rb +2 -2
  79. data/app/models/spree/payment_create.rb +1 -1
  80. data/app/models/spree/payment_method/bogus_credit_card.rb +18 -18
  81. data/app/models/spree/payment_method/check.rb +3 -3
  82. data/app/models/spree/payment_method/credit_card.rb +1 -1
  83. data/app/models/spree/payment_method/simple_bogus_credit_card.rb +3 -3
  84. data/app/models/spree/payment_method/store_credit.rb +13 -13
  85. data/app/models/spree/payment_method.rb +12 -11
  86. data/app/models/spree/payment_source.rb +2 -2
  87. data/app/models/spree/permission_sets/dashboard_display.rb +3 -3
  88. data/app/models/spree/permission_sets/default_customer.rb +4 -4
  89. data/app/models/spree/preference.rb +1 -1
  90. data/app/models/spree/price.rb +7 -6
  91. data/app/models/spree/product/scopes.rb +23 -23
  92. data/app/models/spree/product.rb +37 -41
  93. data/app/models/spree/product_option_type.rb +2 -2
  94. data/app/models/spree/product_property.rb +3 -3
  95. data/app/models/spree/refund.rb +10 -10
  96. data/app/models/spree/refund_reason.rb +2 -2
  97. data/app/models/spree/reimbursement/credit.rb +1 -1
  98. data/app/models/spree/reimbursement.rb +8 -8
  99. data/app/models/spree/reimbursement_tax_calculator.rb +1 -1
  100. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +1 -1
  101. data/app/models/spree/reimbursement_type.rb +2 -2
  102. data/app/models/spree/return_authorization.rb +7 -6
  103. data/app/models/spree/return_item/eligibility_validator/base_validator.rb +2 -2
  104. data/app/models/spree/return_item/eligibility_validator/default.rb +1 -1
  105. data/app/models/spree/return_item/eligibility_validator/inventory_shipped.rb +1 -1
  106. data/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +1 -1
  107. data/app/models/spree/return_item/eligibility_validator/order_completed.rb +1 -1
  108. data/app/models/spree/return_item/eligibility_validator/rma_required.rb +1 -1
  109. data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +1 -1
  110. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +6 -6
  111. data/app/models/spree/return_item.rb +31 -30
  112. data/app/models/spree/return_reason.rb +1 -1
  113. data/app/models/spree/role.rb +1 -1
  114. data/app/models/spree/role_user.rb +1 -1
  115. data/app/models/spree/shipment.rb +44 -31
  116. data/app/models/spree/shipping_manifest.rb +44 -9
  117. data/app/models/spree/shipping_method.rb +9 -9
  118. data/app/models/spree/shipping_method_category.rb +2 -2
  119. data/app/models/spree/shipping_rate.rb +12 -10
  120. data/app/models/spree/shipping_rate_tax.rb +5 -4
  121. data/app/models/spree/simple_order_contents.rb +2 -2
  122. data/app/models/spree/state.rb +1 -1
  123. data/app/models/spree/stock/availability.rb +9 -9
  124. data/app/models/spree/stock/availability_validator.rb +3 -3
  125. data/app/models/spree/stock/differentiator.rb +2 -2
  126. data/app/models/spree/stock/estimator.rb +5 -5
  127. data/app/models/spree/stock/inventory_validator.rb +1 -1
  128. data/app/models/spree/stock/package.rb +3 -3
  129. data/app/models/spree/stock_item.rb +5 -5
  130. data/app/models/spree/stock_location.rb +6 -6
  131. data/app/models/spree/stock_movement.rb +2 -2
  132. data/app/models/spree/stock_quantities.rb +2 -2
  133. data/app/models/spree/store.rb +4 -4
  134. data/app/models/spree/store_credit.rb +30 -29
  135. data/app/models/spree/store_credit_category.rb +2 -2
  136. data/app/models/spree/store_credit_event.rb +6 -6
  137. data/app/models/spree/store_credit_reason.rb +1 -1
  138. data/app/models/spree/store_credit_type.rb +3 -3
  139. data/app/models/spree/store_selector/by_server_name.rb +1 -1
  140. data/app/models/spree/store_selector/legacy.rb +1 -1
  141. data/app/models/spree/tax/item_tax.rb +1 -0
  142. data/app/models/spree/tax/order_tax.rb +1 -0
  143. data/app/models/spree/tax_category.rb +3 -3
  144. data/app/models/spree/tax_rate.rb +5 -5
  145. data/app/models/spree/tax_rate_tax_category.rb +2 -2
  146. data/app/models/spree/taxon/active_storage_attachment.rb +2 -2
  147. data/app/models/spree/taxon/paperclip_attachment.rb +4 -4
  148. data/app/models/spree/taxon.rb +16 -17
  149. data/app/models/spree/taxon_brand_selector.rb +3 -3
  150. data/app/models/spree/unauthorized_redirect_handler.rb +1 -1
  151. data/app/models/spree/unit_cancel.rb +4 -4
  152. data/app/models/spree/user_address.rb +3 -3
  153. data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +6 -8
  154. data/app/models/spree/user_last_url_storer.rb +1 -1
  155. data/app/models/spree/variant/price_selector.rb +1 -1
  156. data/app/models/spree/variant/pricing_options.rb +1 -1
  157. data/app/models/spree/variant/scopes.rb +9 -9
  158. data/app/models/spree/variant.rb +25 -25
  159. data/app/models/spree/variant_property_rule.rb +2 -2
  160. data/app/models/spree/variant_property_rule_condition.rb +1 -1
  161. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +4 -4
  162. data/app/models/spree/wallet/default_payment_builder.rb +1 -1
  163. data/app/models/spree/wallet_payment_source.rb +2 -2
  164. data/app/models/spree/zone.rb +18 -18
  165. data/app/models/spree/zone_member.rb +1 -1
  166. data/app/subscribers/spree/carton_shipped_mailer_subscriber.rb +2 -2
  167. data/app/subscribers/spree/order_cancel_mailer_subscriber.rb +2 -2
  168. data/app/subscribers/spree/order_confirmation_mailer_subscriber.rb +2 -2
  169. data/app/subscribers/spree/order_inventory_cancellation_mailer_subscriber.rb +2 -2
  170. data/app/subscribers/spree/reimbursement_mailer_subscriber.rb +2 -2
  171. data/app/views/layouts/spree/base_mailer.html.erb +1 -0
  172. data/app/views/layouts/spree/ink.license.txt +28 -0
  173. data/config/initializers/assets.rb +1 -1
  174. data/config/initializers/db_query_matchers.rb +9 -0
  175. data/config/initializers/friendly_id.rb +2 -2
  176. data/config/initializers/inflections.rb +1 -1
  177. data/config/initializers/money.rb +1 -1
  178. data/config/locales/en.yml +1 -0
  179. data/db/default/spree/countries.rb +7 -7
  180. data/db/default/spree/return_reasons.rb +11 -11
  181. data/db/default/spree/stock_locations.rb +1 -1
  182. data/db/default/spree/store_credit.rb +3 -4
  183. data/db/default/spree/stores.rb +1 -1
  184. data/db/default/spree/zones.rb +5 -5
  185. data/db/migrate/20160101010000_solidus_one_four.rb +16 -16
  186. data/db/migrate/20160420044191_create_spree_wallet_payment_sources.rb +3 -3
  187. data/db/migrate/20160420181916_migrate_credit_cards_to_wallet_payment_sources.rb +7 -6
  188. data/db/migrate/20161014221052_add_available_to_columns_and_remove_display_on_from_payment_methods.rb +10 -10
  189. data/db/migrate/20161123154034_add_available_to_users_and_remove_display_on_from_shipping_methods.rb +6 -6
  190. data/db/migrate/20161129035810_add_index_to_spree_payments_number.rb +1 -1
  191. data/db/migrate/20170319191942_remove_order_id_from_inventory_units.rb +4 -4
  192. data/db/migrate/20180322142651_add_amount_remaining_to_store_credit_events.rb +9 -16
  193. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +1 -0
  194. data/db/migrate/20210815004823_add_unique_index_to_option_values_variants.rb +3 -3
  195. data/db/migrate/20250207104016_add_primary_taxon_to_products.rb +1 -1
  196. data/db/migrate/20250214094207_add_reverse_charge_status_to_store.rb +1 -1
  197. data/db/migrate/20250225051308_add_vat_id_email_and_reverse_charge_status_to_addresses.rb +1 -1
  198. data/db/seeds.rb +3 -3
  199. data/lib/generators/solidus/install/app_templates/authentication/custom.rb +2 -2
  200. data/lib/generators/solidus/install/app_templates/authentication/devise.rb +3 -3
  201. data/lib/generators/solidus/install/app_templates/authentication/existing.rb +1 -1
  202. data/lib/generators/solidus/install/app_templates/frontend/starter.rb +1 -1
  203. data/lib/generators/solidus/install/app_templates/payment_method/braintree.rb +1 -1
  204. data/lib/generators/solidus/install/app_templates/payment_method/paypal.rb +1 -1
  205. data/lib/generators/solidus/install/app_templates/payment_method/stripe.rb +2 -2
  206. data/lib/generators/solidus/install/install_generator.rb +51 -51
  207. data/lib/generators/solidus/install/templates/config/initializers/spree.rb.tt +3 -0
  208. data/lib/generators/solidus/update/update_generator.rb +29 -29
  209. data/lib/generators/spree/custom_user/custom_user_generator.rb +6 -6
  210. data/lib/generators/spree/dummy/dummy_generator.rb +22 -24
  211. data/lib/generators/spree/dummy/templates/rails/boot.rb +3 -3
  212. data/lib/generators/spree/dummy/templates/rails/test.rb +4 -4
  213. data/lib/solidus_core.rb +1 -1
  214. data/lib/spree/app_configuration.rb +59 -47
  215. data/lib/spree/bus.rb +1 -1
  216. data/lib/spree/config.rb +1 -1
  217. data/lib/spree/core/active_merchant_dependencies.rb +8 -8
  218. data/lib/spree/core/class_constantizer.rb +1 -1
  219. data/lib/spree/core/engine.rb +15 -15
  220. data/lib/spree/core/environment.rb +1 -1
  221. data/lib/spree/core/environment_extension.rb +2 -2
  222. data/lib/spree/core/importer/order.rb +15 -15
  223. data/lib/spree/core/importer/product.rb +4 -4
  224. data/lib/spree/core/importer.rb +2 -2
  225. data/lib/spree/core/null_promotion_configuration.rb +7 -7
  226. data/lib/spree/core/permalinks.rb +1 -1
  227. data/lib/spree/core/product_filters.rb +94 -93
  228. data/lib/spree/core/role_configuration.rb +3 -3
  229. data/lib/spree/core/search/base.rb +5 -6
  230. data/lib/spree/core/search/variant.rb +3 -3
  231. data/lib/spree/core/stock_configuration.rb +10 -49
  232. data/lib/spree/core/validators/email.rb +1 -1
  233. data/lib/spree/core/version.rb +3 -3
  234. data/lib/spree/core/versioned_value.rb +4 -6
  235. data/lib/spree/core.rb +49 -49
  236. data/lib/spree/deprecated_instance_variable_proxy.rb +1 -1
  237. data/lib/spree/deprecation.rb +1 -1
  238. data/lib/spree/deprecator.rb +2 -2
  239. data/lib/spree/i18n.rb +2 -2
  240. data/lib/spree/localized_number.rb +3 -3
  241. data/lib/spree/manipulative_query_monitor.rb +19 -0
  242. data/lib/spree/migrations.rb +2 -2
  243. data/lib/spree/permitted_attributes.rb +12 -11
  244. data/lib/spree/preferences/configuration.rb +5 -5
  245. data/lib/spree/preferences/preferable.rb +8 -10
  246. data/lib/spree/preferences/preferable_class_methods.rb +16 -16
  247. data/lib/spree/preferences/preference_differentiator.rb +1 -1
  248. data/lib/spree/preferences/scoped_store.rb +2 -2
  249. data/lib/spree/preferences/static_model_preferences.rb +2 -2
  250. data/lib/spree/preferences/store.rb +6 -6
  251. data/lib/spree/testing_support/ability_helpers.rb +30 -30
  252. data/lib/spree/testing_support/authorization_helpers.rb +6 -5
  253. data/lib/spree/testing_support/blacklist_urls.rb +1 -1
  254. data/lib/spree/testing_support/bus_helpers.rb +1 -1
  255. data/lib/spree/testing_support/capybara_driver.rb +1 -1
  256. data/lib/spree/testing_support/capybara_ext.rb +21 -13
  257. data/lib/spree/testing_support/common_rake.rb +17 -16
  258. data/lib/spree/testing_support/dummy_ability.rb +1 -1
  259. data/lib/spree/testing_support/dummy_app/migrations.rb +1 -1
  260. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +5 -5
  261. data/lib/spree/testing_support/dummy_app/routes.rb +1 -1
  262. data/lib/spree/testing_support/dummy_app.rb +49 -34
  263. data/lib/spree/testing_support/extension_rake.rb +2 -2
  264. data/lib/spree/testing_support/factories/address_factory.rb +12 -12
  265. data/lib/spree/testing_support/factories/adjustment_factory.rb +7 -7
  266. data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +1 -1
  267. data/lib/spree/testing_support/factories/calculator_factory.rb +6 -6
  268. data/lib/spree/testing_support/factories/carton_factory.rb +1 -1
  269. data/lib/spree/testing_support/factories/country_factory.rb +3 -3
  270. data/lib/spree/testing_support/factories/credit_card_factory.rb +3 -3
  271. data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -2
  272. data/lib/spree/testing_support/factories/image_factory.rb +2 -2
  273. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +4 -4
  274. data/lib/spree/testing_support/factories/line_item_factory.rb +2 -2
  275. data/lib/spree/testing_support/factories/option_type_factory.rb +2 -2
  276. data/lib/spree/testing_support/factories/option_value_factory.rb +2 -2
  277. data/lib/spree/testing_support/factories/order_factory.rb +16 -16
  278. data/lib/spree/testing_support/factories/payment_factory.rb +9 -9
  279. data/lib/spree/testing_support/factories/payment_method_factory.rb +10 -10
  280. data/lib/spree/testing_support/factories/price_factory.rb +2 -2
  281. data/lib/spree/testing_support/factories/product_factory.rb +2 -2
  282. data/lib/spree/testing_support/factories/product_option_type_factory.rb +1 -1
  283. data/lib/spree/testing_support/factories/product_property_factory.rb +1 -1
  284. data/lib/spree/testing_support/factories/property_factory.rb +3 -3
  285. data/lib/spree/testing_support/factories/refund_factory.rb +2 -2
  286. data/lib/spree/testing_support/factories/refund_reason_factory.rb +1 -1
  287. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  288. data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +1 -1
  289. data/lib/spree/testing_support/factories/return_authorization_factory.rb +3 -3
  290. data/lib/spree/testing_support/factories/return_item_factory.rb +1 -1
  291. data/lib/spree/testing_support/factories/return_reason_factory.rb +1 -1
  292. data/lib/spree/testing_support/factories/role_factory.rb +2 -2
  293. data/lib/spree/testing_support/factories/shipment_factory.rb +3 -3
  294. data/lib/spree/testing_support/factories/shipping_category_factory.rb +1 -1
  295. data/lib/spree/testing_support/factories/shipping_method_factory.rb +7 -7
  296. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +1 -1
  297. data/lib/spree/testing_support/factories/state_factory.rb +4 -4
  298. data/lib/spree/testing_support/factories/stock_item_factory.rb +1 -1
  299. data/lib/spree/testing_support/factories/stock_location_factory.rb +7 -7
  300. data/lib/spree/testing_support/factories/stock_movement_factory.rb +3 -3
  301. data/lib/spree/testing_support/factories/stock_package_factory.rb +3 -3
  302. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +1 -1
  303. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +8 -8
  304. data/lib/spree/testing_support/factories/store_credit_factory.rb +1 -1
  305. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +1 -1
  306. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +6 -6
  307. data/lib/spree/testing_support/factories/store_factory.rb +2 -2
  308. data/lib/spree/testing_support/factories/tax_category_factory.rb +1 -1
  309. data/lib/spree/testing_support/factories/tax_rate_factory.rb +1 -1
  310. data/lib/spree/testing_support/factories/taxon_factory.rb +3 -3
  311. data/lib/spree/testing_support/factories/taxonomy_factory.rb +1 -1
  312. data/lib/spree/testing_support/factories/user_factory.rb +2 -2
  313. data/lib/spree/testing_support/factories/variant_factory.rb +2 -2
  314. data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +1 -1
  315. data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +1 -1
  316. data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +1 -1
  317. data/lib/spree/testing_support/factories/zone_factory.rb +3 -3
  318. data/lib/spree/testing_support/factory_bot.rb +1 -1
  319. data/lib/spree/testing_support/flaky.rb +3 -2
  320. data/lib/spree/testing_support/flash.rb +2 -2
  321. data/lib/spree/testing_support/order_walkthrough.rb +7 -7
  322. data/lib/spree/testing_support/preferences.rb +1 -1
  323. data/lib/spree/testing_support/rake.rb +1 -1
  324. data/lib/spree/testing_support/shared_examples/calculator.rb +1 -1
  325. data/lib/spree/testing_support/shared_examples/gallery.rb +7 -7
  326. data/lib/spree/testing_support/shared_examples/order_factory.rb +9 -9
  327. data/lib/spree/testing_support/shared_examples/working_factory.rb +1 -1
  328. data/lib/spree/testing_support/translations.rb +1 -1
  329. data/lib/spree_core.rb +1 -1
  330. data/lib/tasks/payment_method.rake +2 -2
  331. data/solidus_core.gemspec +49 -49
  332. data/vendor/assets/javascripts/jquery.payment.license.txt +25 -0
  333. data/vendor/assets/javascripts/jsuri.license.txt +12 -0
  334. metadata +60 -53
@@ -1,15 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'cancan'
3
+ require "cancan"
4
4
 
5
5
  module Spree
6
6
  module TestingSupport
7
7
  module AuthorizationHelpers
8
8
  module CustomAbility
9
9
  def build_ability(&block)
10
- block ||= proc{ |_u| can :manage, :all }
10
+ block ||= proc { |_u| can :manage, :all }
11
11
  Class.new do
12
12
  include CanCan::Ability
13
+
13
14
  define_method(:initialize, block)
14
15
  end
15
16
  end
@@ -41,9 +42,9 @@ module Spree
41
42
  end
42
43
 
43
44
  before do
44
- allow(Spree.user_class).to receive(:find_by).
45
- with(hash_including(:spree_api_key)).
46
- and_return(Spree.user_class.new)
45
+ allow(Spree.user_class).to receive(:find_by)
46
+ .with(hash_including(:spree_api_key))
47
+ .and_return(Spree.user_class.new)
47
48
  end
48
49
  end
49
50
 
@@ -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 = ['https://fonts.googleapis.com']
8
+ browser.url_blacklist = ["https://fonts.googleapis.com"]
9
9
  end
10
10
  end
11
11
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spree/bus'
3
+ require "spree/bus"
4
4
 
5
5
  module Spree
6
6
  module TestingSupport
@@ -6,4 +6,4 @@ require "capybara-screenshot"
6
6
  Capybara::Screenshot.register_driver(:selenium_headless) do |driver, path|
7
7
  driver.browser.save_screenshot(path)
8
8
  end
9
- Capybara.javascript_driver = (ENV['CAPYBARA_DRIVER'] || :selenium_headless).to_sym
9
+ Capybara.javascript_driver = (ENV["CAPYBARA_DRIVER"] || :selenium_headless).to_sym
@@ -4,11 +4,19 @@ module Spree
4
4
  module TestingSupport
5
5
  module CapybaraExt
6
6
  def click_icon(type)
7
- find(".fa-#{type}").click
7
+ el = find(".fa-#{type}", visible: :all)
8
+ begin
9
+ el.click
10
+ rescue Selenium::WebDriver::Error::ElementClickInterceptedError
11
+ # When a floating element (eg. tooltips/overlays) intercepts the click,
12
+ # scroll the target into view and dispatch a click via JS to keep tests stable.
13
+ page.execute_script('arguments[0].scrollIntoView({block: "center"});', el.native)
14
+ page.execute_script("arguments[0].click();", el.native)
15
+ end
8
16
  end
9
17
 
10
18
  def eventually_fill_in(field, options = {})
11
- expect(page).to have_css('#' + field)
19
+ expect(page).to have_css("#" + field)
12
20
  fill_in field, options
13
21
  end
14
22
 
@@ -42,7 +50,7 @@ module Spree
42
50
  }.merge(options)
43
51
  label = find_label_by_text(options[:from])
44
52
  within label.first(:xpath, ".//..") do
45
- options[:from] = "##{find('.select2-container')['id']}"
53
+ options[:from] = "##{find(".select2-container")["id"]}"
46
54
  end
47
55
  select2_search_without_selection(options[:search], from: options[:from])
48
56
  select_select2_result(value) if options[:select]
@@ -65,14 +73,14 @@ module Spree
65
73
  # document. Can be used to 'escape' from within the context of another within
66
74
  # block.
67
75
  def within_entire_page(&block)
68
- within(:xpath, '//body', &block)
76
+ within(:xpath, "//body", &block)
69
77
  end
70
78
 
71
79
  def select2(value, options)
72
80
  label = find_label_by_text(options[:from])
73
81
 
74
82
  within label.first(:xpath, ".//..") do
75
- options[:from] = "##{find('.select2-container')['id']}"
83
+ options[:from] = "##{find(".select2-container")["id"]}"
76
84
  end
77
85
  targetted_select2(value, options)
78
86
  end
@@ -89,16 +97,16 @@ module Spree
89
97
 
90
98
  def targetted_select2(value, options)
91
99
  # find select2 element and click it
92
- find(options[:from]).find('a').click
100
+ find(options[:from]).find("a").click
93
101
  select_select2_result(value)
94
102
  end
95
103
 
96
104
  def select_select2_result(value)
97
105
  # results are in a div appended to the end of the document
98
106
  within_entire_page do
99
- expect(page).to have_selector('.select2-result-label', visible: true)
107
+ expect(page).to have_selector(".select2-result-label", visible: true)
100
108
  find("div.select2-result-label", text: /#{Regexp.escape(value)}/i, match: :prefer_exact).click
101
- expect(page).not_to have_selector('.select2-result-label')
109
+ expect(page).not_to have_selector(".select2-result-label")
102
110
  end
103
111
  end
104
112
 
@@ -108,17 +116,17 @@ module Spree
108
116
  # We need to select labels which are not .select2-offscreen, as select2
109
117
  # makes a duplicate label with the same text, and we want to be sure to
110
118
  # find the original.
111
- find('label:not(.select2-offscreen)', text: /#{Regexp.escape(text)}/i, match: :one)
119
+ find("label:not(.select2-offscreen)", text: /#{Regexp.escape(text)}/i, match: :one)
112
120
  end
113
121
 
114
- def dialog(parent: 'body', **options)
122
+ def dialog(parent: "body", **options)
115
123
  within(parent) do
116
- find('dialog', visible: :all, **options)
124
+ find("dialog", visible: :all, **options)
117
125
  end
118
126
  end
119
127
 
120
128
  def turbo_frame_modal
121
- dialog(parent: find('turbo-frame', visible: :all))
129
+ dialog(parent: find("turbo-frame", visible: :all))
122
130
  end
123
131
  end
124
132
  end
@@ -144,4 +152,4 @@ RSpec.configure do |c|
144
152
  end
145
153
 
146
154
  # A workaround for https://github.com/rspec/rspec-rails/issues/1897
147
- Capybara.server = :puma, { Silent: true }
155
+ Capybara.server = :puma, {Silent: true}
@@ -1,10 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'generators/spree/dummy/dummy_generator'
4
- require 'logger'
3
+ require "generators/spree/dummy/dummy_generator"
4
+ require "logger"
5
5
 
6
6
  class CommonRakeTasks
7
7
  include Rake::DSL
8
+
8
9
  attr_reader :logger
9
10
 
10
11
  def initialize
@@ -12,7 +13,7 @@ class CommonRakeTasks
12
13
  namespace :common do
13
14
  task :test_app, :user_class do |_t, args|
14
15
  args.with_defaults(user_class: "Spree::LegacyUser")
15
- lib_name = ENV['LIB_NAME'] or
16
+ lib_name = ENV["LIB_NAME"] or
16
17
  raise "Please provide a library name via the LIB_NAME environment variable."
17
18
 
18
19
  require lib_name
@@ -21,30 +22,30 @@ class CommonRakeTasks
21
22
 
22
23
  Spree::DummyGenerator.start [
23
24
  "--lib-name=#{lib_name}",
24
- "--quiet",
25
+ "--quiet"
25
26
  ]
26
27
 
27
28
  # While the dummy app is generated the current directory
28
29
  # within ruby is changed to that of the dummy app.
29
30
  sh({
30
- 'FRONTEND' => ENV['FRONTEND'] || 'none',
31
+ "FRONTEND" => ENV["FRONTEND"] || "none"
31
32
  }, [
32
- 'bin/rails',
33
- 'generate',
34
- 'solidus:install',
33
+ "bin/rails",
34
+ "generate",
35
+ "solidus:install",
35
36
  Dir.pwd, # use the current dir as Rails.root
36
37
  "--auto-accept",
37
- "--admin-preview=#{ENV.fetch('ADMIN_PREVIEW', 'false')}",
38
+ "--admin-preview=#{ENV.fetch("ADMIN_PREVIEW", "false")}",
38
39
  "--authentication=none",
39
40
  "--payment-method=none",
40
41
  "--migrate=false",
41
42
  "--seed=false",
42
43
  "--sample=false",
43
44
  "--user-class=#{args[:user_class]}",
44
- "--quiet",
45
+ "--quiet"
45
46
  ].shelljoin)
46
47
 
47
- if Bundler.locked_gems.dependencies['solidus_frontend']
48
+ if Bundler.locked_gems.dependencies["solidus_frontend"]
48
49
  sh "bin/rails g solidus_frontend:install --auto-accept"
49
50
  end
50
51
 
@@ -54,7 +55,7 @@ class CommonRakeTasks
54
55
  sh "bin/rails db:drop db:create db:migrate VERBOSE=false RAILS_ENV=test"
55
56
 
56
57
  if extension_installation_generator_exists?
57
- logger.info 'Running extension installation generator...'
58
+ logger.info "Running extension installation generator..."
58
59
  sh "bin/rails generate #{rake_generator_namespace}:install --auto-run-migrations"
59
60
  end
60
61
  end
@@ -70,8 +71,8 @@ class CommonRakeTasks
70
71
  private
71
72
 
72
73
  def force_rails_environment_to_test
73
- ENV["RAILS_ENV"] = 'test'
74
- Rails.env = 'test'
74
+ ENV["RAILS_ENV"] = "test"
75
+ Rails.env = "test"
75
76
  end
76
77
 
77
78
  def extension_installation_generator_exists?
@@ -83,11 +84,11 @@ class CommonRakeTasks
83
84
  end
84
85
 
85
86
  def generator_namespace
86
- "#{ENV['LIB_NAMESPACE']&.underscore || ENV['LIB_NAME']}"
87
+ (ENV["LIB_NAMESPACE"]&.underscore || ENV["LIB_NAME"]).to_s
87
88
  end
88
89
 
89
90
  def rake_generator_namespace
90
- generator_namespace.gsub("/", ":")
91
+ generator_namespace.tr("/", ":")
91
92
  end
92
93
  end
93
94
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'cancan'
3
+ require "cancan"
4
4
 
5
5
  class DummyAbility
6
6
  include CanCan::Ability
@@ -11,7 +11,7 @@ module DummyApp
11
11
  # Disconnect to avoid "database is being accessed by other users" on postgres
12
12
  ActiveRecord::Base.remove_connection
13
13
 
14
- sh 'rake db:reset VERBOSE=false'
14
+ sh "rake db:reset VERBOSE=false"
15
15
 
16
16
  # We have a brand new database, so we must re-establish our connection
17
17
  ActiveRecord::Base.establish_connection
@@ -6,9 +6,9 @@ module DummyApp
6
6
 
7
7
  def initialize(gem_root:, lib_name:)
8
8
  task :dummy_environment do
9
- ENV['RAILS_ENV'] = 'test'
9
+ ENV["RAILS_ENV"] = "test"
10
10
  require lib_name
11
- require 'spree/testing_support/dummy_app'
11
+ require "spree/testing_support/dummy_app"
12
12
  DummyApp.setup(
13
13
  gem_root:,
14
14
  lib_name:,
@@ -45,12 +45,12 @@ namespace :db do
45
45
  end
46
46
 
47
47
  desc "Recreates the test database and re-runs all migrations"
48
- task reset: ['db:drop', 'db:create', 'db:migrate']
48
+ task reset: ["db:drop", "db:create", "db:migrate"]
49
49
  end
50
50
 
51
51
  desc "Open a sandboxed console in the test environment"
52
52
  task console: :dummy_environment do
53
- require 'rails/commands'
54
- require 'rails/commands/console/console_command'
53
+ require "rails/commands"
54
+ require "rails/commands/console/console_command"
55
55
  Rails::Console.new(Rails.application, sandbox: true, environment: "test").start
56
56
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  DummyApp::Application.routes.draw do
4
- mount Spree::Core::Engine, at: '/'
4
+ mount Spree::Core::Engine, at: "/"
5
5
  end
@@ -1,17 +1,29 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- ENV['RAILS_ENV'] = 'test'
4
- ENV['DISABLE_DATABASE_ENVIRONMENT_CHECK'] = '1'
3
+ ENV["RAILS_ENV"] = "test"
4
+ ENV["DISABLE_DATABASE_ENVIRONMENT_CHECK"] = "1"
5
+
6
+ # Speed up the sqlite runs: `fast_sqlite` patches SQLite3::Database#initialize to
7
+ # set `PRAGMA synchronous = OFF` and `journal_mode = MEMORY`, trading durability we
8
+ # don't need for a database the suite recreates anyway.
9
+ #
10
+ # NOTE: The gem is declared `require: false`, and only when DB is sqlite, so it is
11
+ # genuinely absent for the mysql and postgres runs.
12
+ begin
13
+ require "fast_sqlite"
14
+ rescue LoadError
15
+ # Not running against sqlite, nothing to speed up.
16
+ end
5
17
 
6
- require 'rails'
7
- require 'active_record/railtie'
8
- require 'action_controller/railtie'
9
- require 'action_mailer/railtie'
10
- require 'active_storage/engine'
18
+ require "rails"
19
+ require "active_record/railtie"
20
+ require "action_controller/railtie"
21
+ require "action_mailer/railtie"
22
+ require "active_storage/engine"
11
23
 
12
- Rails.env = 'test'
24
+ Rails.env = "test"
13
25
 
14
- require 'solidus_core'
26
+ require "solidus_core"
15
27
 
16
28
  # @private
17
29
  class ApplicationController < ActionController::Base
@@ -39,7 +51,7 @@ end
39
51
  module DummyApp
40
52
  def self.setup(gem_root:, lib_name:, auto_migrate: true)
41
53
  ENV["LIB_NAME"] = lib_name
42
- root = Pathname(gem_root).join('spec/dummy')
54
+ root = Pathname(gem_root).join("spec/dummy")
43
55
  root.join("app/assets/config").mkpath
44
56
  root.join("app/assets/config/manifest.js").write("// Intentionally empty\n")
45
57
 
@@ -48,7 +60,7 @@ module DummyApp
48
60
 
49
61
  # Raise on deprecation warnings.
50
62
  # NOTE: This needs to happen after the application is initialized.
51
- if ENV['SOLIDUS_RAISE_DEPRECATIONS'].present?
63
+ if ENV["SOLIDUS_RAISE_DEPRECATIONS"].present?
52
64
  Spree.deprecator.behavior = :raise
53
65
  end
54
66
 
@@ -77,19 +89,19 @@ module DummyApp
77
89
  config.cache_classes = true
78
90
 
79
91
  # Make debugging easier:
80
- if Rails.gem_version >= Gem::Version.new('7.1')
92
+ if Rails.gem_version >= Gem::Version.new("7.1")
81
93
  config.action_controller.raise_on_missing_callback_actions = true
82
94
  config.action_dispatch.show_exceptions = :none
83
95
  else
84
96
  config.action_dispatch.show_exceptions = false
85
97
  end
86
98
  config.consider_all_requests_local = true
87
- config.active_support.deprecation = ENV['RAILS_DEPRECATIONS_BEHAVIOR'].presence&.to_sym || :stderr
99
+ config.active_support.deprecation = ENV["RAILS_DEPRECATIONS_BEHAVIOR"].presence&.to_sym || :stderr
88
100
  config.log_level = :debug
89
101
 
90
102
  # Improve test suite performance:
91
103
  config.eager_load = false
92
- config.public_file_server.headers = { 'Cache-Control' => 'public, max-age=3600' }
104
+ config.public_file_server.headers = {"Cache-Control" => "public, max-age=3600"}
93
105
  config.cache_store = :memory_store
94
106
 
95
107
  # We don't use a web server, so we let Rails serve assets.
@@ -102,66 +114,69 @@ module DummyApp
102
114
  config.active_job.queue_adapter = :test
103
115
 
104
116
  # No need to use credentials file in a test environment.
105
- config.secret_key_base = 'SECRET_TOKEN'
117
+ config.secret_key_base = "SECRET_TOKEN"
106
118
 
107
119
  # Set the preview path within the dummy app:
108
120
  if ActionMailer::Base.respond_to? :preview_paths # Rails 7.1+
109
- config.action_mailer.preview_paths << File.expand_path('dummy_app/mailer_previews', __dir__)
121
+ # Some Rails versions return a frozen array here; assign a new array
122
+ # to avoid FrozenError when augmenting the paths.
123
+ existing = Array(config.action_mailer.preview_paths)
124
+ config.action_mailer.preview_paths = existing + [File.expand_path("dummy_app/mailer_previews", __dir__)]
110
125
  else
111
- config.action_mailer.preview_path = File.expand_path('dummy_app/mailer_previews', __dir__)
126
+ config.action_mailer.preview_path = File.expand_path("dummy_app/mailer_previews", __dir__)
112
127
  end
113
128
 
114
129
  config.active_record.dump_schema_after_migration = false
115
130
 
116
131
  # Configure active storage to use storage within tmp folder
117
- initializer 'solidus.active_storage' do
132
+ initializer "solidus.active_storage" do
118
133
  config.active_storage.service_configurations = {
119
134
  test: {
120
- service: 'Disk',
121
- root: Rails.root.join('tmp', 'storage')
135
+ service: "Disk",
136
+ root: Rails.root.join("tmp", "storage")
122
137
  }
123
138
  }
124
139
  config.active_storage.service = :test
125
- config.active_storage.variant_processor = ENV.fetch('ACTIVE_STORAGE_VARIANT_PROCESSOR', :vips).to_sym
140
+ config.active_storage.variant_processor = ENV.fetch("ACTIVE_STORAGE_VARIANT_PROCESSOR", :vips).to_sym
126
141
  end
127
142
 
128
143
  # Avoid issues if an old spec/dummy still exists
129
- config.paths['config/initializers'] = []
130
- config.paths['config/environments'] = []
144
+ config.paths["config/initializers"] = []
145
+ config.paths["config/environments"] = []
131
146
 
132
147
  migration_dirs = Rails.application.migration_railties.flat_map do |engine|
133
148
  if engine.respond_to?(:paths)
134
- engine.paths['db/migrate'].to_a
149
+ engine.paths["db/migrate"].to_a
135
150
  else
136
151
  []
137
152
  end
138
153
  end
139
- config.paths['db/migrate'] = migration_dirs
154
+ config.paths["db/migrate"] = migration_dirs
140
155
  ActiveRecord::Migrator.migrations_paths = migration_dirs
141
156
  ActiveRecord::Migration.verbose = false
142
157
 
143
- config.assets.paths << File.expand_path('dummy_app/assets/javascripts', __dir__)
144
- config.assets.paths << File.expand_path('dummy_app/assets/stylesheets', __dir__)
158
+ config.assets.paths << File.expand_path("dummy_app/assets/javascripts", __dir__)
159
+ config.assets.paths << File.expand_path("dummy_app/assets/stylesheets", __dir__)
145
160
  config.assets.css_compressor = nil
146
161
 
147
- config.paths["config/database"] = File.expand_path('dummy_app/database.yml', __dir__)
148
- config.paths['config/routes.rb'] = File.expand_path('dummy_app/routes.rb', __dir__)
162
+ config.paths["config/database"] = File.expand_path("dummy_app/database.yml", __dir__)
163
+ config.paths["config/routes.rb"] = File.expand_path("dummy_app/routes.rb", __dir__)
149
164
 
150
165
  ActionMailer::Base.default from: "store@example.com"
151
166
  end
152
167
  end
153
168
 
154
- require 'spree/testing_support/dummy_app/migrations'
169
+ require "spree/testing_support/dummy_app/migrations"
155
170
 
156
171
  ActiveSupport.on_load(:action_controller) do
157
172
  wrap_parameters format: [:json]
158
173
  end
159
174
 
160
- Spree.user_class = 'Spree::LegacyUser'
175
+ Spree.user_class = "Spree::LegacyUser"
161
176
  Spree.load_defaults(Spree.solidus_version)
162
177
  Spree.config do |config|
163
- if (ENV['DISABLE_ACTIVE_STORAGE'] == 'true')
164
- config.image_attachment_module = 'Spree::Image::PaperclipAttachment'
165
- config.taxon_attachment_module = 'Spree::Taxon::PaperclipAttachment'
178
+ if ENV["DISABLE_ACTIVE_STORAGE"] == "true"
179
+ config.image_attachment_module = "Spree::Image::PaperclipAttachment"
180
+ config.taxon_attachment_module = "Spree::Taxon::PaperclipAttachment"
166
181
  end
167
182
  end
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spree/testing_support/common_rake'
3
+ require "spree/testing_support/common_rake"
4
4
 
5
5
  desc "Generates a dummy app for testing an extension"
6
6
  namespace :extension do
7
7
  task :test_app, [:user_class] do |_t, args|
8
8
  Spree::DummyGeneratorHelper.inject_extension_requirements = true
9
- Rake::Task['common:test_app'].invoke(args[:user_class])
9
+ Rake::Task["common:test_app"].invoke(args[:user_class])
10
10
  end
11
11
  end
@@ -1,21 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  FactoryBot.define do
4
- factory :address, class: 'Spree::Address' do
4
+ factory :address, class: "Spree::Address" do
5
5
  transient do
6
6
  # There's `Spree::Address#country_iso=`, prohibiting me from using `country_iso` here
7
- country_iso_code { 'US' }
8
- state_code { 'AL' }
7
+ country_iso_code { "US" }
8
+ state_code { "AL" }
9
9
  end
10
10
 
11
- name { 'John Von Doe' }
12
- company { 'Company' }
13
- address1 { '10 Lovely Street' }
14
- address2 { 'Northwest' }
15
- city { 'Herndon' }
11
+ name { "John Von Doe" }
12
+ company { "Company" }
13
+ address1 { "10 Lovely Street" }
14
+ address2 { "Northwest" }
15
+ city { "Herndon" }
16
16
  sequence(:zipcode, 10001) { |i| i.to_s }
17
- phone { '555-555-0199' }
18
- alternative_phone { '555-555-0199' }
17
+ phone { "555-555-0199" }
18
+ alternative_phone { "555-555-0199" }
19
19
 
20
20
  country do |address|
21
21
  if address.state
@@ -35,10 +35,10 @@ FactoryBot.define do
35
35
  end
36
36
 
37
37
  factory :ship_address, parent: :address do
38
- address1 { 'A Different Road' }
38
+ address1 { "A Different Road" }
39
39
  end
40
40
 
41
41
  factory :bill_address, parent: :address do
42
- address1 { 'PO Box 1337' }
42
+ address1 { "PO Box 1337" }
43
43
  end
44
44
  end
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  FactoryBot.define do
4
- factory :adjustment, class: 'Spree::Adjustment' do
4
+ factory :adjustment, class: "Spree::Adjustment" do
5
5
  order
6
6
  adjustable { order }
7
7
  amount { 100.0 }
8
- label { 'Shipping' }
8
+ label { "Shipping" }
9
9
  association(:source, factory: :tax_rate)
10
10
 
11
11
  after(:build) do |adjustment|
@@ -15,19 +15,19 @@ FactoryBot.define do
15
15
  end
16
16
  end
17
17
 
18
- factory :tax_adjustment, class: 'Spree::Adjustment' do
18
+ factory :tax_adjustment, class: "Spree::Adjustment" do
19
19
  order { adjustable.order }
20
20
  association(:adjustable, factory: :line_item)
21
21
  amount { 10.0 }
22
- label { 'VAT 5%' }
22
+ label { "VAT 5%" }
23
23
 
24
24
  after(:create) do |adjustment|
25
25
  # Set correct tax category, so that adjustment amount is not 0
26
26
  if adjustment.adjustable.is_a?(Spree::LineItem)
27
- if adjustment.adjustable.tax_category.present?
28
- adjustment.source.tax_categories = [adjustment.adjustable.tax_category]
27
+ adjustment.source.tax_categories = if adjustment.adjustable.tax_category.present?
28
+ [adjustment.adjustable.tax_category]
29
29
  else
30
- adjustment.source.tax_categories = []
30
+ []
31
31
  end
32
32
  adjustment.source.save
33
33
  adjustment.update!(amount: adjustment.source.compute_amount(adjustment.adjustable))
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  FactoryBot.define do
4
- factory :adjustment_reason, class: 'Spree::AdjustmentReason' do
4
+ factory :adjustment_reason, class: "Spree::AdjustmentReason" do
5
5
  sequence(:name) { |n| "Refund for return ##{n}" }
6
6
  sequence(:code) { |n| "Code #{n}" }
7
7
  end
@@ -1,25 +1,25 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  FactoryBot.define do
4
- factory :flat_rate_calculator, aliases: [:calculator], class: 'Spree::Calculator::FlatRate' do
4
+ factory :flat_rate_calculator, aliases: [:calculator], class: "Spree::Calculator::FlatRate" do
5
5
  preferred_amount { 10.0 }
6
6
  end
7
7
 
8
- factory :no_amount_calculator, class: 'Spree::Calculator::FlatRate' do
8
+ factory :no_amount_calculator, class: "Spree::Calculator::FlatRate" do
9
9
  preferred_amount { 0 }
10
10
  end
11
11
 
12
- factory :default_tax_calculator, class: 'Spree::Calculator::DefaultTax' do
12
+ factory :default_tax_calculator, class: "Spree::Calculator::DefaultTax" do
13
13
  end
14
14
 
15
- factory :flat_fee_calculator, class: 'Spree::Calculator::FlatFee' do
15
+ factory :flat_fee_calculator, class: "Spree::Calculator::FlatFee" do
16
16
  end
17
17
 
18
- factory :shipping_calculator, class: 'Spree::Calculator::Shipping::FlatRate' do
18
+ factory :shipping_calculator, class: "Spree::Calculator::Shipping::FlatRate" do
19
19
  preferred_amount { 10.0 }
20
20
  end
21
21
 
22
- factory :shipping_no_amount_calculator, class: 'Spree::Calculator::Shipping::FlatRate' do
22
+ factory :shipping_no_amount_calculator, class: "Spree::Calculator::Shipping::FlatRate" do
23
23
  preferred_amount { 0 }
24
24
  end
25
25
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  FactoryBot.define do
4
- factory :carton, class: 'Spree::Carton' do
4
+ factory :carton, class: "Spree::Carton" do
5
5
  address
6
6
  stock_location
7
7
  shipping_method
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'carmen'
3
+ require "carmen"
4
4
 
5
5
  FactoryBot.define do
6
- factory :country, class: 'Spree::Country' do
7
- iso { 'US' }
6
+ factory :country, class: "Spree::Country" do
7
+ iso { "US" }
8
8
 
9
9
  transient do
10
10
  carmen_country { Carmen::Country.coded(iso) || fail("Unknown country iso code: #{iso.inspect}") }