solidus_core 2.10.3 → 2.11.4

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.

Potentially problematic release.


This version of solidus_core might be problematic. Click here for more details.

Files changed (552) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree.js.erb +31 -2
  3. data/app/controllers/spree/base_controller.rb +1 -0
  4. data/app/mailers/spree/base_mailer.rb +4 -0
  5. data/app/mailers/spree/order_mailer.rb +1 -1
  6. data/app/models/concerns/spree/active_storage_adapter.rb +116 -0
  7. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +69 -0
  8. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
  9. data/app/models/concerns/spree/default_price.rb +1 -1
  10. data/app/models/concerns/spree/soft_deletable.rb +18 -0
  11. data/app/models/concerns/spree/user_address_book.rb +86 -32
  12. data/app/models/concerns/spree/user_methods.rb +3 -2
  13. data/app/models/spree/ability.rb +34 -10
  14. data/app/models/spree/address.rb +94 -17
  15. data/app/models/spree/address/name.rb +49 -0
  16. data/app/models/spree/address/state_validator.rb +71 -0
  17. data/app/models/spree/adjustment.rb +1 -1
  18. data/app/models/spree/base.rb +2 -2
  19. data/app/models/spree/calculator.rb +4 -4
  20. data/app/models/spree/calculator/default_tax.rb +1 -1
  21. data/app/models/spree/calculator/free_shipping.rb +1 -0
  22. data/app/models/spree/calculator/percent_per_item.rb +6 -4
  23. data/app/models/spree/calculator/price_sack.rb +2 -1
  24. data/app/models/spree/credit_card.rb +2 -2
  25. data/app/models/spree/customer_return.rb +4 -2
  26. data/app/models/spree/exchange.rb +1 -1
  27. data/app/models/spree/image/active_storage_attachment.rb +21 -0
  28. data/app/models/spree/inventory_unit.rb +1 -1
  29. data/app/models/spree/line_item.rb +13 -4
  30. data/app/models/spree/option_type.rb +1 -1
  31. data/app/models/spree/option_value.rb +2 -2
  32. data/app/models/spree/order.rb +91 -20
  33. data/app/models/spree/order/checkout.rb +1 -0
  34. data/app/models/spree/order/payments.rb +2 -2
  35. data/app/models/spree/order_inventory.rb +16 -4
  36. data/app/models/spree/order_merger.rb +6 -4
  37. data/app/models/spree/order_promotion.rb +1 -1
  38. data/app/models/spree/order_updater.rb +11 -10
  39. data/app/models/spree/payment.rb +3 -3
  40. data/app/models/spree/payment/cancellation.rb +3 -22
  41. data/app/models/spree/payment/processing.rb +54 -30
  42. data/app/models/spree/payment_method.rb +8 -9
  43. data/app/models/spree/payment_source.rb +2 -2
  44. data/app/models/spree/preference.rb +1 -1
  45. data/app/models/spree/price.rb +2 -8
  46. data/app/models/spree/product.rb +19 -14
  47. data/app/models/spree/product/scopes.rb +9 -5
  48. data/app/models/spree/promotion.rb +18 -7
  49. data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
  50. data/app/models/spree/promotion_action.rb +1 -7
  51. data/app/models/spree/promotion_code.rb +6 -1
  52. data/app/models/spree/promotion_code_batch.rb +1 -1
  53. data/app/models/spree/promotion_handler/coupon.rb +2 -2
  54. data/app/models/spree/promotion_rule.rb +1 -1
  55. data/app/models/spree/promotion_rule_role.rb +1 -1
  56. data/app/models/spree/refund.rb +60 -12
  57. data/app/models/spree/reimbursement.rb +27 -0
  58. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +10 -3
  59. data/app/models/spree/return_authorization.rb +1 -1
  60. data/app/models/spree/return_item.rb +21 -10
  61. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
  62. data/app/models/spree/role.rb +1 -1
  63. data/app/models/spree/shipment.rb +2 -2
  64. data/app/models/spree/shipping_calculator.rb +1 -1
  65. data/app/models/spree/shipping_manifest.rb +2 -2
  66. data/app/models/spree/shipping_method.rb +2 -9
  67. data/app/models/spree/shipping_rate.rb +1 -1
  68. data/app/models/spree/shipping_rate_tax.rb +1 -1
  69. data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
  70. data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
  71. data/app/models/spree/stock/package.rb +1 -1
  72. data/app/models/spree/stock/simple_coordinator.rb +1 -3
  73. data/app/models/spree/stock_item.rb +2 -8
  74. data/app/models/spree/stock_movement.rb +2 -0
  75. data/app/models/spree/store.rb +1 -1
  76. data/app/models/spree/store_credit.rb +1 -7
  77. data/app/models/spree/store_credit_category.rb +30 -3
  78. data/app/models/spree/store_credit_event.rb +1 -7
  79. data/app/models/spree/store_credit_reason.rb +0 -4
  80. data/app/models/spree/tax/tax_helpers.rb +1 -1
  81. data/app/models/spree/tax_category.rb +2 -8
  82. data/app/models/spree/tax_rate.rb +7 -7
  83. data/app/models/spree/taxon.rb +1 -1
  84. data/app/models/spree/taxon/active_storage_attachment.rb +19 -0
  85. data/app/models/spree/user_address.rb +8 -2
  86. data/app/models/spree/variant.rb +7 -13
  87. data/app/models/spree/variant_property_rule.rb +5 -1
  88. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +8 -3
  89. data/app/models/spree/zone.rb +1 -1
  90. data/config/locales/en.yml +44 -5
  91. data/db/default/spree/countries.rb +1 -1
  92. data/db/default/spree/states.rb +12 -4
  93. data/db/default/spree/store_credit.rb +2 -2
  94. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
  95. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
  96. data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
  97. data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
  98. data/lib/generators/solidus/install/install_generator.rb +253 -0
  99. data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +36 -5
  100. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
  101. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
  102. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
  103. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
  104. data/lib/generators/spree/dummy/templates/rails/test.rb +1 -1
  105. data/lib/generators/spree/install/install_generator.rb +7 -189
  106. data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
  107. data/lib/spree/app_configuration.rb +117 -51
  108. data/lib/spree/awesome_nested_set_override.rb +44 -0
  109. data/lib/spree/core.rb +6 -11
  110. data/lib/spree/core/controller_helpers/auth.rb +17 -4
  111. data/lib/spree/core/controller_helpers/current_host.rb +17 -0
  112. data/lib/spree/core/controller_helpers/order.rb +8 -7
  113. data/lib/spree/core/engine.rb +39 -2
  114. data/lib/spree/core/importer/order.rb +24 -10
  115. data/lib/spree/core/permalinks.rb +1 -3
  116. data/lib/spree/core/product_filters.rb +6 -5
  117. data/lib/spree/core/state_machines.rb +20 -1
  118. data/lib/spree/core/state_machines/order.rb +249 -0
  119. data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
  120. data/lib/spree/core/version.rb +1 -1
  121. data/lib/spree/encryptor.rb +25 -0
  122. data/lib/spree/event.rb +40 -7
  123. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  124. data/lib/spree/event/configuration.rb +11 -6
  125. data/lib/spree/event/subscriber.rb +38 -18
  126. data/lib/spree/event/subscriber_registry.rb +92 -0
  127. data/lib/spree/i18n.rb +1 -1
  128. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  129. data/lib/spree/paranoia_deprecations.rb +32 -12
  130. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  131. data/lib/spree/permission_sets/default_customer.rb +16 -16
  132. data/lib/spree/permission_sets/order_display.rb +11 -11
  133. data/lib/spree/permission_sets/order_management.rb +1 -1
  134. data/lib/spree/permission_sets/product_display.rb +9 -9
  135. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  136. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  137. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  138. data/lib/spree/permission_sets/stock_display.rb +2 -2
  139. data/lib/spree/permission_sets/stock_management.rb +1 -1
  140. data/lib/spree/permission_sets/user_display.rb +3 -3
  141. data/lib/spree/permission_sets/user_management.rb +4 -3
  142. data/lib/spree/permitted_attributes.rb +9 -8
  143. data/lib/spree/preferences/preferable.rb +4 -3
  144. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  145. data/lib/spree/testing_support.rb +40 -0
  146. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  147. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  148. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  149. data/lib/spree/testing_support/capybara_ext.rb +3 -0
  150. data/lib/spree/testing_support/common_rake.rb +3 -3
  151. data/lib/spree/testing_support/dummy_app.rb +44 -23
  152. data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
  153. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
  154. data/lib/spree/testing_support/factories.rb +2 -4
  155. data/lib/spree/testing_support/factories/address_factory.rb +3 -4
  156. data/lib/spree/testing_support/factories/adjustment_factory.rb +2 -5
  157. data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +3 -0
  158. data/lib/spree/testing_support/factories/calculator_factory.rb +3 -0
  159. data/lib/spree/testing_support/factories/carton_factory.rb +2 -2
  160. data/lib/spree/testing_support/factories/country_factory.rb +3 -0
  161. data/lib/spree/testing_support/factories/credit_card_factory.rb +3 -0
  162. data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -3
  163. data/lib/spree/testing_support/factories/image_factory.rb +4 -1
  164. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +2 -4
  165. data/lib/spree/testing_support/factories/line_item_factory.rb +2 -2
  166. data/lib/spree/testing_support/factories/option_type_factory.rb +3 -0
  167. data/lib/spree/testing_support/factories/option_value_factory.rb +3 -0
  168. data/lib/spree/testing_support/factories/order_factory.rb +2 -6
  169. data/lib/spree/testing_support/factories/order_promotion_factory.rb +2 -2
  170. data/lib/spree/testing_support/factories/payment_factory.rb +2 -4
  171. data/lib/spree/testing_support/factories/payment_method_factory.rb +3 -0
  172. data/lib/spree/testing_support/factories/price_factory.rb +2 -1
  173. data/lib/spree/testing_support/factories/product_factory.rb +2 -5
  174. data/lib/spree/testing_support/factories/product_option_type_factory.rb +2 -2
  175. data/lib/spree/testing_support/factories/product_property_factory.rb +2 -2
  176. data/lib/spree/testing_support/factories/promotion_category_factory.rb +3 -0
  177. data/lib/spree/testing_support/factories/promotion_code_factory.rb +2 -2
  178. data/lib/spree/testing_support/factories/promotion_factory.rb +8 -2
  179. data/lib/spree/testing_support/factories/property_factory.rb +3 -0
  180. data/lib/spree/testing_support/factories/refund_factory.rb +3 -2
  181. data/lib/spree/testing_support/factories/refund_reason_factory.rb +3 -0
  182. data/lib/spree/testing_support/factories/reimbursement_factory.rb +3 -2
  183. data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +3 -0
  184. data/lib/spree/testing_support/factories/return_authorization_factory.rb +2 -3
  185. data/lib/spree/testing_support/factories/return_item_factory.rb +2 -4
  186. data/lib/spree/testing_support/factories/return_reason_factory.rb +3 -0
  187. data/lib/spree/testing_support/factories/role_factory.rb +3 -0
  188. data/lib/spree/testing_support/factories/shipment_factory.rb +2 -3
  189. data/lib/spree/testing_support/factories/shipping_category_factory.rb +3 -0
  190. data/lib/spree/testing_support/factories/shipping_method_factory.rb +2 -3
  191. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +2 -2
  192. data/lib/spree/testing_support/factories/state_factory.rb +2 -1
  193. data/lib/spree/testing_support/factories/stock_item_factory.rb +2 -2
  194. data/lib/spree/testing_support/factories/stock_location_factory.rb +2 -3
  195. data/lib/spree/testing_support/factories/stock_movement_factory.rb +2 -1
  196. data/lib/spree/testing_support/factories/stock_package_factory.rb +2 -2
  197. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +11 -0
  198. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +3 -2
  199. data/lib/spree/testing_support/factories/store_credit_factory.rb +2 -3
  200. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +6 -1
  201. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +3 -0
  202. data/lib/spree/testing_support/factories/store_factory.rb +4 -1
  203. data/lib/spree/testing_support/factories/tax_category_factory.rb +2 -1
  204. data/lib/spree/testing_support/factories/tax_rate_factory.rb +2 -3
  205. data/lib/spree/testing_support/factories/taxon_factory.rb +6 -1
  206. data/lib/spree/testing_support/factories/taxonomy_factory.rb +3 -0
  207. data/lib/spree/testing_support/factories/user_factory.rb +2 -3
  208. data/lib/spree/testing_support/factories/variant_factory.rb +2 -4
  209. data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +2 -2
  210. data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +2 -3
  211. data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +2 -2
  212. data/lib/spree/testing_support/factories/zone_factory.rb +3 -3
  213. data/lib/spree/testing_support/fixtures/blank.jpg +0 -0
  214. data/lib/spree/testing_support/job_helpers.rb +24 -0
  215. data/lib/spree/testing_support/order_walkthrough.rb +1 -1
  216. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  217. data/lib/spree/testing_support/preferences.rb +3 -1
  218. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  219. data/lib/spree/testing_support/translations.rb +25 -0
  220. data/{app/models → lib}/spree/user_class_handle.rb +0 -0
  221. data/lib/tasks/email.rake +3 -2
  222. data/solidus_core.gemspec +8 -5
  223. metadata +97 -374
  224. data/script/rails +0 -10
  225. data/spec/fixtures/thinking-cat.jpg +0 -0
  226. data/spec/helpers/base_helper_spec.rb +0 -168
  227. data/spec/helpers/products_helper_spec.rb +0 -202
  228. data/spec/helpers/taxons_helper_spec.rb +0 -43
  229. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  230. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  231. data/spec/lib/i18n_spec.rb +0 -97
  232. data/spec/lib/search/base_spec.rb +0 -91
  233. data/spec/lib/search/variant_spec.rb +0 -115
  234. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  235. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  236. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  237. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  238. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  239. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  240. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  241. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  242. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -48
  243. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  244. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  245. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  246. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  247. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
  248. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  249. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  250. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  251. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  252. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  253. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  254. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  255. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  256. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  257. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  258. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  259. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  260. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  261. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  262. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  263. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  264. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  265. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  266. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  267. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  268. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  269. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  270. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  271. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  272. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  273. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  274. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  275. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  276. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  277. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  278. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  279. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  280. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  281. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  282. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  283. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  284. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  285. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  286. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  287. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  288. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  289. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  290. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  291. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  292. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  293. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  294. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  295. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  296. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  297. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  298. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  299. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  300. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  301. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  302. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  303. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  304. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  305. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  306. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  307. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  308. data/spec/lib/spree/core/version_spec.rb +0 -19
  309. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  310. data/spec/lib/spree/event_spec.rb +0 -130
  311. data/spec/lib/spree/localized_number_spec.rb +0 -45
  312. data/spec/lib/spree/migrations_spec.rb +0 -32
  313. data/spec/lib/spree/money_spec.rb +0 -298
  314. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  315. data/spec/lib/spree/permitted_attributes_spec.rb +0 -41
  316. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  317. data/spec/lib/tasks/dummy_task.rake +0 -12
  318. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  319. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  320. data/spec/mailers/carton_mailer_spec.rb +0 -44
  321. data/spec/mailers/order_mailer_spec.rb +0 -117
  322. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  323. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  324. data/spec/mailers/test_mailer_spec.rb +0 -13
  325. data/spec/models/spree/ability_spec.rb +0 -279
  326. data/spec/models/spree/address_spec.rb +0 -399
  327. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  328. data/spec/models/spree/adjustment_spec.rb +0 -339
  329. data/spec/models/spree/asset_spec.rb +0 -25
  330. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  331. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  332. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  333. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  334. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  335. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  336. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  337. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  338. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  339. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  340. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  341. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  342. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  343. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  344. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
  345. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  346. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  347. data/spec/models/spree/calculator_spec.rb +0 -43
  348. data/spec/models/spree/carton_spec.rb +0 -145
  349. data/spec/models/spree/classification_spec.rb +0 -126
  350. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  351. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  352. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  353. data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
  354. data/spec/models/spree/country_spec.rb +0 -154
  355. data/spec/models/spree/credit_card_spec.rb +0 -373
  356. data/spec/models/spree/customer_return_spec.rb +0 -294
  357. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  358. data/spec/models/spree/exchange_spec.rb +0 -76
  359. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  360. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  361. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  362. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  363. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  364. data/spec/models/spree/gateway_spec.rb +0 -14
  365. data/spec/models/spree/image_spec.rb +0 -25
  366. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  367. data/spec/models/spree/line_item_spec.rb +0 -240
  368. data/spec/models/spree/option_type_spec.rb +0 -16
  369. data/spec/models/spree/option_value_spec.rb +0 -52
  370. data/spec/models/spree/order/address_spec.rb +0 -52
  371. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  372. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  373. data/spec/models/spree/order/checkout_spec.rb +0 -740
  374. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  375. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  376. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  377. data/spec/models/spree/order/payment_spec.rb +0 -280
  378. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  379. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  380. data/spec/models/spree/order/totals_spec.rb +0 -26
  381. data/spec/models/spree/order/validations_spec.rb +0 -17
  382. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  383. data/spec/models/spree/order_capturing_spec.rb +0 -16
  384. data/spec/models/spree/order_contents_spec.rb +0 -362
  385. data/spec/models/spree/order_inventory_spec.rb +0 -285
  386. data/spec/models/spree/order_merger_spec.rb +0 -162
  387. data/spec/models/spree/order_mutex_spec.rb +0 -89
  388. data/spec/models/spree/order_promotion_spec.rb +0 -33
  389. data/spec/models/spree/order_shipping_spec.rb +0 -247
  390. data/spec/models/spree/order_spec.rb +0 -1687
  391. data/spec/models/spree/order_taxation_spec.rb +0 -128
  392. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  393. data/spec/models/spree/order_updater_spec.rb +0 -556
  394. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  395. data/spec/models/spree/payment_create_spec.rb +0 -195
  396. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  397. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  398. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  399. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  400. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  401. data/spec/models/spree/payment_method_spec.rb +0 -408
  402. data/spec/models/spree/payment_spec.rb +0 -1270
  403. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  404. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  405. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  406. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  407. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  408. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  409. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  410. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  411. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  412. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  413. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  414. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  415. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  416. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  417. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  418. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
  419. data/spec/models/spree/preference_spec.rb +0 -79
  420. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  421. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  422. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  423. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  424. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  425. data/spec/models/spree/preferences/store_spec.rb +0 -40
  426. data/spec/models/spree/price_spec.rb +0 -150
  427. data/spec/models/spree/product/scopes_spec.rb +0 -164
  428. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  429. data/spec/models/spree/product_filter_spec.rb +0 -28
  430. data/spec/models/spree/product_property_spec.rb +0 -20
  431. data/spec/models/spree/product_spec.rb +0 -584
  432. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  433. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  434. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  435. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  436. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  437. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  438. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  439. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  440. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  441. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  442. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  443. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  444. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -227
  445. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  446. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  447. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  448. data/spec/models/spree/promotion_action_spec.rb +0 -44
  449. data/spec/models/spree/promotion_category_spec.rb +0 -19
  450. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  451. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  452. data/spec/models/spree/promotion_code_spec.rb +0 -206
  453. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  454. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  455. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  456. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  457. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  458. data/spec/models/spree/promotion_spec.rb +0 -945
  459. data/spec/models/spree/refund_spec.rb +0 -200
  460. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  461. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  462. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  463. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  464. data/spec/models/spree/reimbursement_spec.rb +0 -278
  465. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  466. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  467. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  468. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  469. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  470. data/spec/models/spree/return_authorization_spec.rb +0 -226
  471. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  472. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  473. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  474. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  475. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  476. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  477. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  478. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  479. data/spec/models/spree/return_item_spec.rb +0 -785
  480. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  481. data/spec/models/spree/shipment_spec.rb +0 -914
  482. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  483. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  484. data/spec/models/spree/shipping_method_spec.rb +0 -292
  485. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  486. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  487. data/spec/models/spree/state_spec.rb +0 -43
  488. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  489. data/spec/models/spree/stock/availability_spec.rb +0 -143
  490. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  491. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  492. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  493. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  494. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  495. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  496. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  497. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  498. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  499. data/spec/models/spree/stock/package_spec.rb +0 -182
  500. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  501. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  502. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  503. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  504. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  505. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  506. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  507. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  508. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  509. data/spec/models/spree/stock_item_spec.rb +0 -348
  510. data/spec/models/spree/stock_location_spec.rb +0 -288
  511. data/spec/models/spree/stock_movement_spec.rb +0 -58
  512. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  513. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  514. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  515. data/spec/models/spree/store_credit_spec.rb +0 -900
  516. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  517. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  518. data/spec/models/spree/store_spec.rb +0 -156
  519. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  520. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  521. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  522. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  523. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  524. data/spec/models/spree/tax_category_spec.rb +0 -50
  525. data/spec/models/spree/tax_rate_spec.rb +0 -317
  526. data/spec/models/spree/taxon_spec.rb +0 -197
  527. data/spec/models/spree/taxonomy_spec.rb +0 -15
  528. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
  529. data/spec/models/spree/unit_cancel_spec.rb +0 -126
  530. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
  531. data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
  532. data/spec/models/spree/user_spec.rb +0 -247
  533. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  534. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  535. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  536. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  537. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  538. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  539. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  540. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  541. data/spec/models/spree/variant_spec.rb +0 -862
  542. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  543. data/spec/models/spree/wallet_spec.rb +0 -155
  544. data/spec/models/spree/zone_spec.rb +0 -248
  545. data/spec/rails_helper.rb +0 -46
  546. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  547. data/spec/spec_helper.rb +0 -36
  548. data/spec/support/big_decimal.rb +0 -7
  549. data/spec/support/concerns/default_price.rb +0 -44
  550. data/spec/support/concerns/payment_source.rb +0 -66
  551. data/spec/support/concerns/working_factories.rb +0 -15
  552. data/spec/support/dummy_ability.rb +0 -7
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::OptionType, type: :model do
6
- context "touching" do
7
- it "should touch a product" do
8
- product_option_type = create(:product_option_type)
9
- option_type = product_option_type.option_type
10
- product = product_option_type.product
11
- product.update_column(:updated_at, 1.day.ago)
12
- option_type.touch
13
- expect(product.reload.updated_at).to be_within(3.seconds).of(Time.current)
14
- end
15
- end
16
- end
@@ -1,52 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::OptionValue, type: :model do
6
- include ActiveSupport::Testing::TimeHelpers
7
-
8
- context "touching" do
9
- let!(:variant) do
10
- travel_to(1.day.ago) do
11
- create(:variant)
12
- end
13
- end
14
- let(:option_value) { variant.option_values.first }
15
-
16
- it "should touch a variant" do
17
- now = Time.current
18
- travel_to(now) do
19
- option_value.touch
20
- expect(variant.reload.updated_at).to be_within(1.second).of(now)
21
- end
22
- end
23
-
24
- context "from the after_save hook" do
25
- it "should not touch the variant if there are no changes" do
26
- now = Time.current
27
- travel_to(now) do
28
- option_value.save!
29
- expect(variant.reload.updated_at).to be <= 1.day.ago
30
- end
31
- end
32
-
33
- it "should touch the variant if there are changes" do
34
- now = Time.current
35
- travel_to(now) do
36
- option_value.name += "--1"
37
- option_value.save!
38
- expect(variant.reload.updated_at).to be_within(1.second).of(now)
39
- end
40
- end
41
- end
42
- end
43
-
44
- describe "#presentation_with_option_type" do
45
- let(:option_value) { build(:option_value) }
46
- subject { option_value.presentation_with_option_type }
47
-
48
- it "returns a string in the correct form" do
49
- expect(subject).to eq "Size - S"
50
- end
51
- end
52
- end
@@ -1,52 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Order, type: :model do
6
- let(:order) { Spree::Order.new }
7
-
8
- context 'validation' do
9
- context "when @use_billing is populated" do
10
- before do
11
- order.bill_address = stub_model(Spree::Address)
12
- order.ship_address = nil
13
- end
14
-
15
- context "with true" do
16
- before { order.use_billing = true }
17
-
18
- it "clones the bill address to the ship address" do
19
- order.valid?
20
- expect(order.ship_address).to eq(order.bill_address)
21
- end
22
- end
23
-
24
- context "with 'true'" do
25
- before { order.use_billing = 'true' }
26
-
27
- it "clones the bill address to the shipping" do
28
- order.valid?
29
- expect(order.ship_address).to eq(order.bill_address)
30
- end
31
- end
32
-
33
- context "with '1'" do
34
- before { order.use_billing = '1' }
35
-
36
- it "clones the bill address to the shipping" do
37
- order.valid?
38
- expect(order.ship_address).to eq(order.bill_address)
39
- end
40
- end
41
-
42
- context "with something other than a 'truthful' value" do
43
- before { order.use_billing = '0' }
44
-
45
- it "does not clone the bill address to the shipping" do
46
- order.valid?
47
- expect(order.ship_address).to be_nil
48
- end
49
- end
50
- end
51
- end
52
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Order do
6
- context "when an order has an adjustment that zeroes the total, but another adjustment for shipping that raises it above zero" do
7
- let!(:persisted_order) { create(:order) }
8
- let!(:line_item) { create(:line_item) }
9
- let!(:shipping_method) do
10
- sm = create(:shipping_method)
11
- sm.calculator.preferred_amount = 10
12
- sm.save
13
- sm
14
- end
15
-
16
- before do
17
- persisted_order.line_items << line_item
18
- create(:adjustment, amount: -line_item.amount, label: "Promotion", adjustable: line_item, order: persisted_order)
19
- persisted_order.state = 'delivery'
20
- persisted_order.save # To ensure new state_change event
21
- end
22
-
23
- it "transitions from delivery to payment" do
24
- allow(persisted_order).to receive_messages(payment_required?: true)
25
- persisted_order.next!
26
- expect(persisted_order.state).to eq("payment")
27
- end
28
- end
29
- end
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Order, type: :model do
6
- let(:order) { stub_model(Spree::Order) }
7
- before do
8
- Spree::Order.define_state_machine!
9
- end
10
-
11
- context "validations" do
12
- context "email validation" do
13
- # Regression test for https://github.com/spree/spree/issues/1238
14
- it "o'brien@gmail.com is a valid email address" do
15
- order.state = 'address'
16
- order.email = "o'brien@gmail.com"
17
- expect(order.errors[:email].size).to eq(0)
18
- end
19
- end
20
- end
21
-
22
- context "#save" do
23
- context "when associated with a registered user" do
24
- let(:user) { double(:user, email: "test@example.com") }
25
-
26
- before do
27
- allow(order).to receive_messages user: user
28
- end
29
-
30
- it "should assign the email address of the user" do
31
- order.run_callbacks(:create)
32
- expect(order.email).to eq(user.email)
33
- end
34
- end
35
- end
36
-
37
- context "in the cart state" do
38
- it "should not validate email address" do
39
- order.state = "cart"
40
- order.email = nil
41
- expect(order.errors[:email].size).to eq(0)
42
- end
43
- end
44
- end
@@ -1,740 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
- require 'spree/testing_support/order_walkthrough'
5
-
6
- RSpec.describe Spree::Order, type: :model do
7
- let!(:store) { create(:store) }
8
- let(:order) { Spree::Order.new(store: store) }
9
-
10
- def assert_state_changed(order, from, to)
11
- state_change_exists = order.state_changes.where(previous_state: from, next_state: to).exists?
12
- expect(state_change_exists).to be(true), "Expected order to transition from #{from} to #{to}, but didn't."
13
- end
14
-
15
- context "with default state machine" do
16
- transitions = [
17
- { address: :delivery },
18
- { delivery: :payment },
19
- { payment: :confirm },
20
- { delivery: :confirm }
21
- ]
22
-
23
- transitions.each do |transition|
24
- it "transitions from #{transition.keys.first} to #{transition.values.first}" do
25
- transition = Spree::Order.find_transition(from: transition.keys.first, to: transition.values.first)
26
- expect(transition).not_to be_nil
27
- end
28
- end
29
-
30
- it '.find_transition when contract was broken' do
31
- expect(Spree::Order.find_transition({ foo: :bar, baz: :dog })).to be_falsey
32
- end
33
-
34
- describe "remove_transition" do
35
- after do
36
- Spree::Order.checkout_flow(&@old_checkout_flow)
37
- end
38
-
39
- it '.remove_transition', partial_double_verification: false do
40
- options = { from: transitions.first.keys.first, to: transitions.first.values.first }
41
- allow(Spree::Order).to receive(:next_event_transition).and_return([options])
42
- expect(Spree::Order.remove_transition(options)).to be_truthy
43
- end
44
-
45
- it '.remove_transition when contract was broken' do
46
- expect(Spree::Order.remove_transition(nil)).to be_falsey
47
- end
48
- end
49
-
50
- it "always return integer on checkout_step_index" do
51
- expect(order.checkout_step_index("imnotthere")).to be_a Integer
52
- expect(order.checkout_step_index("delivery")).to be > 0
53
- end
54
-
55
- it "passes delivery state when transitioning from address over delivery to payment" do
56
- allow(order).to receive_messages payment_required?: true
57
- order.state = "address"
58
- expect(order.passed_checkout_step?("delivery")).to be false
59
- order.state = "delivery"
60
- expect(order.passed_checkout_step?("delivery")).to be false
61
- order.state = "payment"
62
- expect(order.passed_checkout_step?("delivery")).to be true
63
- end
64
-
65
- context "#checkout_steps" do
66
- context "when confirmation not required" do
67
- before do
68
- allow(order).to receive_messages payment_required?: true
69
- end
70
-
71
- specify do
72
- expect(order.checkout_steps).to eq(%w(address delivery payment confirm complete))
73
- end
74
- end
75
-
76
- context "when confirmation required" do
77
- before do
78
- allow(order).to receive_messages payment_required?: true
79
- end
80
-
81
- specify do
82
- expect(order.checkout_steps).to eq(%w(address delivery payment confirm complete))
83
- end
84
- end
85
-
86
- context "when payment not required" do
87
- before { allow(order).to receive_messages payment_required?: false }
88
- specify do
89
- expect(order.checkout_steps).to eq(%w(address delivery confirm complete))
90
- end
91
- end
92
-
93
- context "when payment required" do
94
- before { allow(order).to receive_messages payment_required?: true }
95
- specify do
96
- expect(order.checkout_steps).to eq(%w(address delivery payment confirm complete))
97
- end
98
- end
99
- end
100
-
101
- it "starts out at cart" do
102
- expect(order.state).to eq("cart")
103
- end
104
-
105
- context "to address" do
106
- before do
107
- order.email = "user@example.com"
108
- order.save!
109
- end
110
-
111
- context "with a line item" do
112
- before do
113
- order.line_items << FactoryBot.create(:line_item)
114
- end
115
-
116
- it "transitions to address" do
117
- order.next!
118
- assert_state_changed(order, 'cart', 'address')
119
- expect(order.state).to eq("address")
120
- end
121
-
122
- it "doesn't raise an error if the default address is invalid" do
123
- order.user = mock_model(Spree::LegacyUser, ship_address: Spree::Address.new, bill_address: Spree::Address.new)
124
- order.next!
125
- end
126
-
127
- context "with default addresses" do
128
- let(:default_address) { FactoryBot.create(:address) }
129
-
130
- shared_examples "it references the user's the default address" do
131
- it do
132
- default_attributes = default_address.reload.value_attributes
133
- order_attributes = Spree::Address.value_attributes(order.send("#{address_kind}_address".to_sym).try(:attributes))
134
-
135
- expect(order_attributes).to eq(default_attributes)
136
- end
137
- end
138
-
139
- it_behaves_like "it references the user's the default address" do
140
- let(:address_kind) { :ship }
141
- before do
142
- order.user = FactoryBot.create(:user)
143
- order.user.default_address = default_address
144
- order.next!
145
- order.reload
146
- end
147
- end
148
-
149
- it_behaves_like "it references the user's the default address" do
150
- let(:address_kind) { :bill }
151
- before do
152
- order.user = FactoryBot.create(:user)
153
- order.user.default_address = default_address
154
- order.next!
155
- order.reload
156
- end
157
- end
158
- end
159
- end
160
-
161
- it "cannot transition to address without any line items" do
162
- expect(order.line_items).to be_blank
163
- expect { order.next! }.to raise_error(StateMachines::InvalidTransition, /#{I18n.t('spree.there_are_no_items_for_this_order')}/)
164
- end
165
- end
166
-
167
- context "from address" do
168
- let(:ship_address) { create(:ship_address) }
169
- let!(:line_item) { create(:line_item, order: order, price: 10) }
170
- let!(:shipping_method) { create(:shipping_method) }
171
-
172
- before do
173
- order.line_items.reload
174
- order.state = 'address'
175
- order.ship_address = ship_address
176
- order.email = "user@example.com"
177
- order.save!
178
- end
179
-
180
- context "no shipping address" do
181
- let(:ship_address) { nil }
182
-
183
- it "does not transition without a ship address" do
184
- expect { order.next! }.to raise_error StateMachines::InvalidTransition
185
- end
186
- end
187
-
188
- it "recalculates tax and updates totals" do
189
- zone = create(:zone, countries: [order.tax_address.country])
190
- create(:tax_rate, tax_categories: [line_item.tax_category], amount: 0.05, zone: zone)
191
- order.next!
192
- expect(order).to have_attributes(
193
- adjustment_total: 0.5,
194
- additional_tax_total: 0.5,
195
- included_tax_total: 0,
196
- total: 20.5
197
- )
198
- end
199
-
200
- it "transitions to delivery" do
201
- order.next!
202
- assert_state_changed(order, 'address', 'delivery')
203
- expect(order.state).to eq("delivery")
204
- end
205
-
206
- it "does not call persist_order_address if there is no address on the order" do
207
- order.user = FactoryBot.create(:user)
208
- order.save!
209
-
210
- expect(order.user).to_not receive(:persist_order_address).with(order)
211
- order.next!
212
- end
213
-
214
- it "calls persist_order_address on the order's user" do
215
- order.user = FactoryBot.create(:user)
216
- order.ship_address = FactoryBot.create(:address)
217
- order.bill_address = FactoryBot.create(:address)
218
- order.save!
219
-
220
- expect(order.user).to receive(:persist_order_address).with(order)
221
- order.next!
222
- end
223
-
224
- it "does not call persist_order_address on the order's user for a temporary address" do
225
- order.user = FactoryBot.create(:user)
226
- order.temporary_address = true
227
- order.save!
228
-
229
- expect(order.user).to_not receive(:persist_order_address)
230
- order.next!
231
- end
232
- end
233
-
234
- context "to delivery" do
235
- let(:ship_address) { FactoryBot.create(:ship_address) }
236
-
237
- before do
238
- order.ship_address = ship_address
239
- end
240
-
241
- context 'when order has default selected_shipping_rate_id', partial_double_verification: false do
242
- let(:shipment) { create(:shipment, order: order) }
243
- let(:shipping_method) { create(:shipping_method) }
244
- let(:shipping_rate) {
245
- [
246
- Spree::ShippingRate.create!(shipping_method: shipping_method, cost: 10.00, shipment: shipment)
247
- ]
248
- }
249
-
250
- before do
251
- order.state = 'address'
252
- shipment.selected_shipping_rate_id = shipping_rate.first.id
253
- order.email = "user@example.com"
254
- order.save!
255
-
256
- allow(order).to receive(:create_proposed_shipments)
257
- allow(order).to receive(:ensure_available_shipping_rates) { true }
258
- end
259
-
260
- it 'should update shipment_total' do
261
- expect { order.next! }.to change{ order.shipment_total }.by(10.00)
262
- end
263
- end
264
-
265
- context "cannot transition to delivery" do
266
- context "if there are no shipping rates for any shipment" do
267
- let!(:line_item){ create :line_item, order: order }
268
- before do
269
- order.state = 'address'
270
- order.email = 'user@example.com'
271
- end
272
- specify do
273
- transition = lambda { order.next! }
274
- expect(transition).to raise_error(StateMachines::InvalidTransition, /#{I18n.t('spree.items_cannot_be_shipped')}/)
275
- end
276
- end
277
- end
278
- end
279
-
280
- context "from delivery", partial_double_verification: false do
281
- let(:ship_address) { FactoryBot.create(:ship_address) }
282
-
283
- before do
284
- order.ship_address = ship_address
285
- order.state = 'delivery'
286
- allow(order).to receive(:apply_shipping_promotions)
287
- allow(order).to receive(:ensure_available_shipping_rates) { true }
288
- end
289
-
290
- it "attempts to apply free shipping promotions" do
291
- expect(order).to receive(:apply_shipping_promotions)
292
- order.next!
293
- end
294
-
295
- context "with payment required" do
296
- before do
297
- allow(order).to receive_messages payment_required?: true
298
- end
299
-
300
- it "transitions to payment" do
301
- order.next!
302
- assert_state_changed(order, 'delivery', 'payment')
303
- expect(order.state).to eq('payment')
304
- end
305
- end
306
-
307
- context "without payment required" do
308
- before do
309
- allow(order).to receive_messages payment_required?: false
310
- end
311
-
312
- it "transitions to complete" do
313
- order.next!
314
- expect(order.state).to eq("confirm")
315
- end
316
- end
317
-
318
- context "correctly determining payment required based on shipping information" do
319
- let(:shipment) do
320
- FactoryBot.create(:shipment)
321
- end
322
-
323
- before do
324
- # Needs to be set here because we're working with a persisted order object
325
- order.email = "test@example.com"
326
- order.save!
327
- order.shipments << shipment
328
- end
329
-
330
- context "with a shipment that has a price" do
331
- before do
332
- shipment.shipping_rates.first.update_column(:cost, 10)
333
- order.recalculate
334
- end
335
-
336
- it "transitions to payment" do
337
- order.next!
338
- expect(order.state).to eq("payment")
339
- end
340
- end
341
-
342
- context "with a shipment that is free" do
343
- before do
344
- shipment.shipping_rates.first.update_column(:cost, 0)
345
- end
346
-
347
- it "skips payment, transitions to confirm" do
348
- order.next!
349
- expect(order.state).to eq("confirm")
350
- end
351
- end
352
- end
353
- end
354
-
355
- context "to payment" do
356
- let(:user_bill_address) { nil }
357
- let(:order_bill_address) { nil }
358
- let(:default_credit_card) { create(:credit_card) }
359
-
360
- before do
361
- user = create(:user, email: 'spree@example.org', bill_address: user_bill_address)
362
- default_credit_card.update(user: user)
363
- wallet_payment_source = user.wallet.add(default_credit_card)
364
- user.wallet.default_wallet_payment_source = wallet_payment_source
365
- order.user = user
366
-
367
- allow(order).to receive_messages(payment_required?: true)
368
- order.state = 'delivery'
369
- order.bill_address = order_bill_address
370
- order.save!
371
- order.next!
372
- order.reload
373
- end
374
-
375
- it "assigns the user's default credit card" do
376
- expect(order.state).to eq 'payment'
377
- expect(order.payments.count).to eq 1
378
- expect(order.payments.first.source).to eq default_credit_card
379
- end
380
-
381
- context "order already has a billing address" do
382
- let(:order_bill_address) { create(:address) }
383
-
384
- it "keeps the order's billing address" do
385
- expect(order.bill_address).to eq order_bill_address
386
- end
387
- end
388
-
389
- context "order doesn't have a billing address" do
390
- it "assigns the user's default_credit_card's address to the order" do
391
- expect(order.bill_address).to eq default_credit_card.address
392
- end
393
- end
394
- end
395
-
396
- context "from payment" do
397
- before do
398
- order.state = 'payment'
399
- allow(order).to receive(:ensure_available_shipping_rates) { true }
400
- end
401
-
402
- context "with confirmation required" do
403
- before do
404
- end
405
-
406
- it "transitions to confirm" do
407
- order.next!
408
- assert_state_changed(order, 'payment', 'confirm')
409
- expect(order.state).to eq("confirm")
410
- end
411
- end
412
-
413
- # Regression test for https://github.com/spree/spree/issues/2028
414
- context "when payment is not required" do
415
- before do
416
- allow(order).to receive_messages payment_required?: false
417
- end
418
-
419
- it "does not call process payments" do
420
- expect(order).not_to receive(:process_payments!)
421
- order.next!
422
- assert_state_changed(order, 'payment', 'confirm')
423
- expect(order.state).to eq("confirm")
424
- end
425
- end
426
- end
427
- end
428
-
429
- context "from confirm" do
430
- before do
431
- order.state = 'confirm'
432
- order.save!
433
- end
434
-
435
- it "returns false on next" do
436
- expect(order.next).to be_falsy
437
- end
438
-
439
- it "is unable to next" do
440
- expect(order).not_to be_can_next
441
- end
442
- end
443
-
444
- context "to complete" do
445
- before do
446
- order.state = 'confirm'
447
- order.save!
448
- end
449
-
450
- context "out of stock" do
451
- before do
452
- order.user = FactoryBot.create(:user)
453
- order.email = 'spree@example.org'
454
- order.payments << FactoryBot.create(:payment)
455
- allow(order).to receive_messages(payment_required?: true)
456
- order.line_items << FactoryBot.create(:line_item)
457
- order.line_items.first.variant.stock_items.each do |si|
458
- si.set_count_on_hand(0)
459
- si.update(backorderable: false)
460
- end
461
-
462
- Spree::OrderUpdater.new(order).update
463
- order.save!
464
- end
465
-
466
- it "does not allow the order to complete" do
467
- expect {
468
- order.complete!
469
- }.to raise_error Spree::Order::InsufficientStock
470
-
471
- expect(order.state).to eq 'confirm'
472
- expect(order.line_items.first.errors[:quantity]).to be_present
473
- expect(order.payments.first.state).to eq('checkout')
474
- end
475
- end
476
-
477
- context "no inventory units" do
478
- before do
479
- order.user = FactoryBot.create(:user)
480
- order.email = 'spree@example.com'
481
- order.payments << FactoryBot.create(:payment)
482
- allow(order).to receive_messages(payment_required?: true)
483
- allow(order).to receive(:ensure_available_shipping_rates) { true }
484
- order.line_items << FactoryBot.create(:line_item)
485
-
486
- Spree::OrderUpdater.new(order).update
487
- order.save!
488
- end
489
-
490
- it "does not allow order to complete" do
491
- expect { order.complete! }.to raise_error Spree::Order::InsufficientStock
492
-
493
- expect(order.state).to eq 'confirm'
494
- expect(order.line_items.first.errors[:inventory]).to be_present
495
- expect(order.payments.first.state).to eq('checkout')
496
- end
497
- end
498
-
499
- context "with a payment in the pending state" do
500
- let(:order) { create :order_ready_to_complete }
501
- let(:payment) { create :payment, order: order, state: "pending", amount: order.total }
502
-
503
- it "allows the order to complete" do
504
- expect { order.complete! }.
505
- to change { order.state }.
506
- from("confirm").
507
- to("complete")
508
- end
509
- end
510
-
511
- context "exchange order completion" do
512
- before do
513
- order.email = 'spree@example.org'
514
- order.payments << FactoryBot.create(:payment)
515
- order.shipments.create!
516
- allow(order).to receive_messages(payment_required?: true)
517
- allow(order).to receive(:ensure_available_shipping_rates).and_return(true)
518
- end
519
-
520
- context 'when the line items are not available' do
521
- before do
522
- order.line_items << FactoryBot.create(:line_item)
523
- order.store = FactoryBot.build(:store)
524
- Spree::OrderUpdater.new(order).update
525
-
526
- order.save!
527
- end
528
-
529
- it 'does not allow the order to completed' do
530
- expect { order.complete! }.to raise_error Spree::Order::InsufficientStock
531
- expect(order.payments.first.state).to eq('checkout')
532
- end
533
- end
534
- end
535
-
536
- context "default credit card", partial_double_verification: false do
537
- before do
538
- order.user = FactoryBot.create(:user)
539
- order.store = FactoryBot.create(:store)
540
- order.email = 'spree@example.org'
541
- order.payments << FactoryBot.create(:payment, order: order)
542
-
543
- # make sure we will actually capture a payment
544
- allow(order).to receive_messages(payment_required?: true)
545
- allow(order).to receive_messages(ensure_available_shipping_rates: true)
546
- allow(order).to receive_messages(validate_line_item_availability: true)
547
- order.line_items << FactoryBot.create(:line_item)
548
- order.create_proposed_shipments
549
- Spree::OrderUpdater.new(order).update
550
-
551
- order.save!
552
- end
553
-
554
- it "makes the current credit card a user's default credit card" do
555
- order.complete!
556
- expect(order.state).to eq 'complete'
557
- expect(order.user.reload.wallet.default_wallet_payment_source.payment_source).to eq(order.credit_cards.first)
558
- end
559
-
560
- it "does not assign a default credit card if temporary_payment_source is set" do
561
- order.temporary_payment_source = true
562
- order.complete!
563
- expect(order.user.reload.wallet.default_wallet_payment_source).to be_nil
564
- end
565
- end
566
-
567
- context "a payment fails during processing", partial_double_verification: false do
568
- before do
569
- order.user = FactoryBot.create(:user)
570
- order.email = 'spree@example.org'
571
- payment = FactoryBot.create(:payment)
572
- allow(payment).to receive(:process!).and_raise(Spree::Core::GatewayError.new('processing failed'))
573
- order.line_items.each { |li| li.inventory_units.create! }
574
- order.payments << payment
575
-
576
- # make sure we will actually capture a payment
577
- allow(order).to receive_messages(payment_required?: true)
578
- allow(order).to receive_messages(ensure_available_shipping_rates: true)
579
- allow(order).to receive_messages(validate_line_item_availability: true)
580
- order.line_items << FactoryBot.create(:line_item)
581
- order.create_proposed_shipments
582
- Spree::OrderUpdater.new(order).update
583
- end
584
-
585
- it "transitions to the payment state" do
586
- expect { order.complete! }.to raise_error StateMachines::InvalidTransition
587
- expect(order.reload.state).to eq 'payment'
588
- end
589
- end
590
-
591
- context 'the order is already paid' do
592
- let(:order) { create(:order_with_line_items) }
593
-
594
- it 'can complete the order' do
595
- create(:payment, state: 'completed', order: order, amount: order.total)
596
- order.recalculate
597
- expect(order.complete).to eq(true)
598
- end
599
- end
600
- end
601
-
602
- context "re-define checkout flow" do
603
- before do
604
- @old_checkout_flow = Spree::Order.checkout_flow
605
- Spree::Order.class_eval do
606
- checkout_flow do
607
- go_to_state :payment
608
- go_to_state :complete
609
- end
610
- end
611
- end
612
-
613
- after do
614
- Spree::Order.checkout_flow(&@old_checkout_flow)
615
- end
616
-
617
- it "should not keep old event transitions when checkout_flow is redefined" do
618
- expect(Spree::Order.next_event_transitions).to eq([{ cart: :payment }, { payment: :complete }])
619
- end
620
-
621
- it "should not keep old events when checkout_flow is redefined" do
622
- state_machine = Spree::Order.state_machine
623
- expect(state_machine.states.any? { |s| s.name == :address }).to be false
624
- known_states = state_machine.events[:next].branches.map(&:known_states).flatten
625
- expect(known_states).not_to include(:address)
626
- expect(known_states).not_to include(:delivery)
627
- expect(known_states).not_to include(:confirm)
628
- end
629
- end
630
-
631
- # Regression test for https://github.com/spree/spree/issues/3665
632
- context "with only a complete step" do
633
- let!(:line_item){ create :line_item, order: order }
634
-
635
- before do
636
- @old_checkout_flow = Spree::Order.checkout_flow
637
- Spree::Order.class_eval do
638
- checkout_flow do
639
- go_to_state :complete
640
- end
641
- end
642
- end
643
-
644
- after do
645
- Spree::Order.checkout_flow(&@old_checkout_flow)
646
- end
647
-
648
- it "does not attempt to check shipping rates" do
649
- order.email = 'user@example.com'
650
- expect(order).not_to receive(:ensure_available_shipping_rates)
651
- order.next!
652
- assert_state_changed(order, 'cart', 'complete')
653
- end
654
-
655
- it "does not attempt to process payments", partial_double_verification: false do
656
- order.email = 'user@example.com'
657
- allow(order).to receive(:ensure_promotions_eligible).and_return(true)
658
- allow(order).to receive(:ensure_line_item_variants_are_not_deleted).and_return(true)
659
- allow(order).to receive_message_chain(:line_items, :present?).and_return(true)
660
- allow(order).to receive_messages(validate_line_item_availability: true)
661
- expect(order).not_to receive(:payment_required?)
662
- expect(order).not_to receive(:process_payments!)
663
- order.next!
664
- assert_state_changed(order, 'cart', 'complete')
665
- end
666
- end
667
-
668
- context "insert checkout step" do
669
- before do
670
- @old_checkout_flow = Spree::Order.checkout_flow
671
- Spree::Order.class_eval do
672
- remove_transition from: :delivery, to: :confirm
673
- end
674
- Spree::Order.class_eval do
675
- insert_checkout_step :new_step, before: :address
676
- end
677
- end
678
-
679
- after do
680
- Spree::Order.checkout_flow(&@old_checkout_flow)
681
- end
682
-
683
- it "should maintain removed transitions" do
684
- transition = Spree::Order.find_transition(from: :delivery, to: :confirm)
685
- expect(transition).to be_nil
686
- end
687
-
688
- context "before" do
689
- before do
690
- Spree::Order.class_eval do
691
- insert_checkout_step :before_address, before: :address
692
- end
693
- end
694
-
695
- specify do
696
- order = Spree::Order.new
697
- expect(order.checkout_steps).to eq(%w(new_step before_address address delivery confirm complete))
698
- end
699
- end
700
-
701
- context "after" do
702
- before do
703
- Spree::Order.class_eval do
704
- insert_checkout_step :after_address, after: :address
705
- end
706
- end
707
-
708
- specify do
709
- order = Spree::Order.new
710
- expect(order.checkout_steps).to eq(%w(new_step address after_address delivery confirm complete))
711
- end
712
- end
713
- end
714
-
715
- context "remove checkout step" do
716
- before do
717
- @old_checkout_flow = Spree::Order.checkout_flow
718
- Spree::Order.class_eval do
719
- remove_transition from: :delivery, to: :confirm
720
- end
721
- Spree::Order.class_eval do
722
- remove_checkout_step :address
723
- end
724
- end
725
-
726
- after do
727
- Spree::Order.checkout_flow(&@old_checkout_flow)
728
- end
729
-
730
- it "should maintain removed transitions" do
731
- transition = Spree::Order.find_transition(from: :delivery, to: :confirm)
732
- expect(transition).to be_nil
733
- end
734
-
735
- specify do
736
- order = Spree::Order.new
737
- expect(order.checkout_steps).to eq(%w(delivery confirm complete))
738
- end
739
- end
740
- end