solidus_core 2.10.0 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (495) 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/attachment.rb +69 -0
  7. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
  8. data/app/models/concerns/spree/active_storage_adapter.rb +116 -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/name.rb +49 -0
  15. data/app/models/spree/address/state_validator.rb +71 -0
  16. data/app/models/spree/address.rb +94 -17
  17. data/app/models/spree/adjustment.rb +1 -1
  18. data/app/models/spree/base.rb +1 -0
  19. data/app/models/spree/calculator/default_tax.rb +1 -1
  20. data/app/models/spree/calculator/percent_per_item.rb +4 -4
  21. data/app/models/spree/calculator/price_sack.rb +1 -1
  22. data/app/models/spree/credit_card.rb +2 -2
  23. data/app/models/spree/customer_return.rb +4 -2
  24. data/app/models/spree/exchange.rb +1 -1
  25. data/app/models/spree/image/active_storage_attachment.rb +21 -0
  26. data/app/models/spree/inventory_unit.rb +1 -1
  27. data/app/models/spree/line_item.rb +13 -4
  28. data/app/models/spree/option_type.rb +1 -1
  29. data/app/models/spree/option_value.rb +2 -2
  30. data/app/models/spree/order/checkout.rb +1 -0
  31. data/app/models/spree/order.rb +91 -20
  32. data/app/models/spree/order_inventory.rb +16 -4
  33. data/app/models/spree/order_merger.rb +6 -4
  34. data/app/models/spree/order_promotion.rb +1 -1
  35. data/app/models/spree/order_updater.rb +11 -10
  36. data/app/models/spree/payment/cancellation.rb +3 -3
  37. data/app/models/spree/payment/processing.rb +54 -30
  38. data/app/models/spree/payment.rb +3 -3
  39. data/app/models/spree/payment_method.rb +8 -9
  40. data/app/models/spree/preference.rb +1 -1
  41. data/app/models/spree/price.rb +2 -8
  42. data/app/models/spree/product/scopes.rb +10 -5
  43. data/app/models/spree/product.rb +19 -14
  44. data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
  45. data/app/models/spree/promotion.rb +18 -7
  46. data/app/models/spree/promotion_action.rb +1 -7
  47. data/app/models/spree/promotion_code.rb +6 -1
  48. data/app/models/spree/promotion_code_batch.rb +1 -1
  49. data/app/models/spree/promotion_handler/coupon.rb +2 -2
  50. data/app/models/spree/promotion_rule.rb +1 -1
  51. data/app/models/spree/promotion_rule_role.rb +1 -1
  52. data/app/models/spree/refund.rb +54 -12
  53. data/app/models/spree/reimbursement.rb +27 -0
  54. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +10 -3
  55. data/app/models/spree/return_authorization.rb +1 -1
  56. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
  57. data/app/models/spree/return_item.rb +21 -10
  58. data/app/models/spree/role.rb +1 -1
  59. data/app/models/spree/shipment.rb +2 -2
  60. data/app/models/spree/shipping_calculator.rb +1 -1
  61. data/app/models/spree/shipping_manifest.rb +2 -2
  62. data/app/models/spree/shipping_method.rb +2 -9
  63. data/app/models/spree/shipping_rate.rb +1 -1
  64. data/app/models/spree/shipping_rate_tax.rb +1 -1
  65. data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
  66. data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
  67. data/app/models/spree/stock/package.rb +1 -1
  68. data/app/models/spree/stock/simple_coordinator.rb +1 -3
  69. data/app/models/spree/stock_item.rb +2 -8
  70. data/app/models/spree/stock_movement.rb +2 -0
  71. data/app/models/spree/store.rb +1 -1
  72. data/app/models/spree/store_credit.rb +1 -7
  73. data/app/models/spree/store_credit_category.rb +30 -3
  74. data/app/models/spree/store_credit_event.rb +1 -7
  75. data/app/models/spree/store_credit_reason.rb +0 -4
  76. data/app/models/spree/tax/tax_helpers.rb +1 -1
  77. data/app/models/spree/tax_category.rb +2 -8
  78. data/app/models/spree/tax_rate.rb +7 -7
  79. data/app/models/spree/taxon/active_storage_attachment.rb +19 -0
  80. data/app/models/spree/taxon.rb +1 -1
  81. data/app/models/spree/user_address.rb +8 -2
  82. data/app/models/spree/variant.rb +7 -13
  83. data/app/models/spree/variant_property_rule.rb +5 -1
  84. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +8 -3
  85. data/app/models/spree/zone.rb +1 -1
  86. data/config/locales/en.yml +44 -5
  87. data/db/default/spree/countries.rb +1 -1
  88. data/db/default/spree/states.rb +12 -4
  89. data/db/default/spree/store_credit.rb +2 -2
  90. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
  91. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
  92. data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
  93. data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
  94. data/lib/generators/solidus/install/install_generator.rb +253 -0
  95. data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +36 -5
  96. data/lib/generators/spree/install/install_generator.rb +7 -189
  97. data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
  98. data/lib/spree/app_configuration.rb +117 -51
  99. data/lib/spree/awesome_nested_set_override.rb +44 -0
  100. data/lib/spree/core/controller_helpers/auth.rb +17 -4
  101. data/lib/spree/core/controller_helpers/current_host.rb +17 -0
  102. data/lib/spree/core/controller_helpers/order.rb +8 -7
  103. data/lib/spree/core/controller_helpers/strong_parameters.rb +21 -7
  104. data/lib/spree/core/engine.rb +39 -2
  105. data/lib/spree/core/importer/order.rb +26 -11
  106. data/lib/spree/core/permalinks.rb +1 -3
  107. data/lib/spree/core/product_filters.rb +6 -5
  108. data/lib/spree/core/state_machines/order.rb +249 -0
  109. data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
  110. data/lib/spree/core/state_machines.rb +20 -1
  111. data/lib/spree/core/version.rb +1 -1
  112. data/lib/spree/core.rb +5 -11
  113. data/lib/spree/encryptor.rb +25 -0
  114. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  115. data/lib/spree/event/configuration.rb +11 -6
  116. data/lib/spree/event/subscriber.rb +38 -18
  117. data/lib/spree/event/subscriber_registry.rb +92 -0
  118. data/lib/spree/event.rb +40 -7
  119. data/lib/spree/i18n.rb +1 -1
  120. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  121. data/lib/spree/paranoia_deprecations.rb +32 -12
  122. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  123. data/lib/spree/permission_sets/default_customer.rb +16 -16
  124. data/lib/spree/permission_sets/order_display.rb +11 -11
  125. data/lib/spree/permission_sets/order_management.rb +1 -1
  126. data/lib/spree/permission_sets/product_display.rb +9 -9
  127. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  128. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  129. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  130. data/lib/spree/permission_sets/stock_display.rb +2 -2
  131. data/lib/spree/permission_sets/stock_management.rb +1 -1
  132. data/lib/spree/permission_sets/user_display.rb +3 -3
  133. data/lib/spree/permission_sets/user_management.rb +4 -3
  134. data/lib/spree/permitted_attributes.rb +79 -9
  135. data/lib/spree/preferences/preferable.rb +4 -3
  136. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  137. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  138. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  139. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  140. data/lib/spree/testing_support/capybara_ext.rb +3 -0
  141. data/lib/spree/testing_support/common_rake.rb +3 -3
  142. data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
  143. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
  144. data/lib/spree/testing_support/dummy_app.rb +44 -23
  145. data/lib/spree/testing_support/factories/address_factory.rb +1 -2
  146. data/lib/spree/testing_support/factories/image_factory.rb +1 -1
  147. data/lib/spree/testing_support/factories/promotion_factory.rb +6 -0
  148. data/lib/spree/testing_support/factories/refund_factory.rb +1 -0
  149. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  150. data/lib/spree/testing_support/factories/return_item_factory.rb +0 -1
  151. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +8 -0
  152. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -0
  153. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +3 -1
  154. data/lib/spree/testing_support/factories/taxon_factory.rb +4 -0
  155. data/lib/spree/testing_support/factories/user_factory.rb +4 -1
  156. data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
  157. data/lib/spree/testing_support/job_helpers.rb +24 -0
  158. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  159. data/lib/spree/testing_support/preferences.rb +3 -1
  160. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  161. data/lib/spree/testing_support/translations.rb +25 -0
  162. data/solidus_core.gemspec +8 -5
  163. metadata +81 -359
  164. data/script/rails +0 -10
  165. data/spec/fixtures/thinking-cat.jpg +0 -0
  166. data/spec/helpers/base_helper_spec.rb +0 -168
  167. data/spec/helpers/products_helper_spec.rb +0 -202
  168. data/spec/helpers/taxons_helper_spec.rb +0 -43
  169. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  170. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  171. data/spec/lib/i18n_spec.rb +0 -97
  172. data/spec/lib/search/base_spec.rb +0 -91
  173. data/spec/lib/search/variant_spec.rb +0 -115
  174. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  175. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  176. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  177. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  178. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  179. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  180. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  181. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  182. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -41
  183. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  184. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  185. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  186. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  187. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
  188. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  189. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  190. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  191. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  192. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  193. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  194. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  195. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  196. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  197. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  198. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  199. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  200. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  201. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  202. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  203. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  204. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  205. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  206. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  207. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  208. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  209. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  210. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  211. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  212. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  213. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  214. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  215. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  216. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  217. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  218. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  219. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  220. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  221. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  222. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  223. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  224. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  225. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  226. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  227. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  228. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  229. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  230. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  231. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  232. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  233. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  234. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  235. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  236. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  237. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  238. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  239. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  240. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  241. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  242. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  243. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  244. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  245. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  246. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  247. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  248. data/spec/lib/spree/core/version_spec.rb +0 -19
  249. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  250. data/spec/lib/spree/event_spec.rb +0 -130
  251. data/spec/lib/spree/localized_number_spec.rb +0 -45
  252. data/spec/lib/spree/migrations_spec.rb +0 -32
  253. data/spec/lib/spree/money_spec.rb +0 -298
  254. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  255. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  256. data/spec/lib/tasks/dummy_task.rake +0 -12
  257. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  258. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  259. data/spec/mailers/carton_mailer_spec.rb +0 -44
  260. data/spec/mailers/order_mailer_spec.rb +0 -117
  261. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  262. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  263. data/spec/mailers/test_mailer_spec.rb +0 -13
  264. data/spec/models/spree/ability_spec.rb +0 -279
  265. data/spec/models/spree/address_spec.rb +0 -399
  266. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  267. data/spec/models/spree/adjustment_spec.rb +0 -339
  268. data/spec/models/spree/asset_spec.rb +0 -25
  269. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  270. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  271. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  272. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  273. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  274. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  275. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  276. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  277. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  278. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  279. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  280. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  281. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  282. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  283. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
  284. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  285. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  286. data/spec/models/spree/calculator_spec.rb +0 -43
  287. data/spec/models/spree/carton_spec.rb +0 -145
  288. data/spec/models/spree/classification_spec.rb +0 -126
  289. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  290. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  291. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  292. data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
  293. data/spec/models/spree/country_spec.rb +0 -154
  294. data/spec/models/spree/credit_card_spec.rb +0 -373
  295. data/spec/models/spree/customer_return_spec.rb +0 -294
  296. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  297. data/spec/models/spree/exchange_spec.rb +0 -76
  298. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  299. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  300. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  301. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  302. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  303. data/spec/models/spree/gateway_spec.rb +0 -14
  304. data/spec/models/spree/image_spec.rb +0 -25
  305. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  306. data/spec/models/spree/line_item_spec.rb +0 -240
  307. data/spec/models/spree/option_type_spec.rb +0 -16
  308. data/spec/models/spree/option_value_spec.rb +0 -52
  309. data/spec/models/spree/order/address_spec.rb +0 -52
  310. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  311. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  312. data/spec/models/spree/order/checkout_spec.rb +0 -740
  313. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  314. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  315. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  316. data/spec/models/spree/order/payment_spec.rb +0 -280
  317. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  318. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  319. data/spec/models/spree/order/totals_spec.rb +0 -26
  320. data/spec/models/spree/order/validations_spec.rb +0 -17
  321. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  322. data/spec/models/spree/order_capturing_spec.rb +0 -16
  323. data/spec/models/spree/order_contents_spec.rb +0 -362
  324. data/spec/models/spree/order_inventory_spec.rb +0 -285
  325. data/spec/models/spree/order_merger_spec.rb +0 -162
  326. data/spec/models/spree/order_mutex_spec.rb +0 -89
  327. data/spec/models/spree/order_promotion_spec.rb +0 -33
  328. data/spec/models/spree/order_shipping_spec.rb +0 -247
  329. data/spec/models/spree/order_spec.rb +0 -1687
  330. data/spec/models/spree/order_taxation_spec.rb +0 -128
  331. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  332. data/spec/models/spree/order_updater_spec.rb +0 -556
  333. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  334. data/spec/models/spree/payment_create_spec.rb +0 -195
  335. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  336. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  337. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  338. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  339. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  340. data/spec/models/spree/payment_method_spec.rb +0 -408
  341. data/spec/models/spree/payment_spec.rb +0 -1270
  342. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  343. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  344. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  345. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  346. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  347. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  348. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  349. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  350. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  351. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  352. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  353. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  354. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  355. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  356. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  357. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
  358. data/spec/models/spree/preference_spec.rb +0 -79
  359. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  360. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  361. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  362. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  363. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  364. data/spec/models/spree/preferences/store_spec.rb +0 -40
  365. data/spec/models/spree/price_spec.rb +0 -150
  366. data/spec/models/spree/product/scopes_spec.rb +0 -164
  367. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  368. data/spec/models/spree/product_filter_spec.rb +0 -28
  369. data/spec/models/spree/product_property_spec.rb +0 -20
  370. data/spec/models/spree/product_spec.rb +0 -584
  371. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  372. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  373. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  374. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  375. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  376. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  377. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  378. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  379. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  380. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  381. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  382. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  383. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -226
  384. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  385. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  386. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  387. data/spec/models/spree/promotion_action_spec.rb +0 -44
  388. data/spec/models/spree/promotion_category_spec.rb +0 -19
  389. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  390. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  391. data/spec/models/spree/promotion_code_spec.rb +0 -206
  392. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  393. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  394. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  395. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  396. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  397. data/spec/models/spree/promotion_spec.rb +0 -945
  398. data/spec/models/spree/refund_spec.rb +0 -200
  399. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  400. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  401. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  402. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  403. data/spec/models/spree/reimbursement_spec.rb +0 -278
  404. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  405. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  406. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  407. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  408. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  409. data/spec/models/spree/return_authorization_spec.rb +0 -226
  410. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  411. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  412. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  413. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  414. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  415. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  416. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  417. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  418. data/spec/models/spree/return_item_spec.rb +0 -785
  419. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  420. data/spec/models/spree/shipment_spec.rb +0 -914
  421. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  422. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  423. data/spec/models/spree/shipping_method_spec.rb +0 -292
  424. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  425. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  426. data/spec/models/spree/state_spec.rb +0 -43
  427. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  428. data/spec/models/spree/stock/availability_spec.rb +0 -143
  429. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  430. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  431. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  432. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  433. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  434. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  435. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  436. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  437. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  438. data/spec/models/spree/stock/package_spec.rb +0 -182
  439. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  440. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  441. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  442. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  443. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  444. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  445. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  446. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  447. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  448. data/spec/models/spree/stock_item_spec.rb +0 -348
  449. data/spec/models/spree/stock_location_spec.rb +0 -288
  450. data/spec/models/spree/stock_movement_spec.rb +0 -58
  451. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  452. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  453. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  454. data/spec/models/spree/store_credit_spec.rb +0 -900
  455. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  456. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  457. data/spec/models/spree/store_spec.rb +0 -156
  458. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  459. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  460. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  461. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  462. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  463. data/spec/models/spree/tax_category_spec.rb +0 -50
  464. data/spec/models/spree/tax_rate_spec.rb +0 -317
  465. data/spec/models/spree/taxon_spec.rb +0 -197
  466. data/spec/models/spree/taxonomy_spec.rb +0 -15
  467. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
  468. data/spec/models/spree/unit_cancel_spec.rb +0 -126
  469. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
  470. data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
  471. data/spec/models/spree/user_spec.rb +0 -247
  472. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  473. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  474. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  475. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  476. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  477. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  478. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  479. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  480. data/spec/models/spree/variant_spec.rb +0 -862
  481. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  482. data/spec/models/spree/wallet_spec.rb +0 -155
  483. data/spec/models/spree/zone_spec.rb +0 -248
  484. data/spec/rails_helper.rb +0 -46
  485. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  486. data/spec/spec_helper.rb +0 -36
  487. data/spec/support/big_decimal.rb +0 -7
  488. data/spec/support/concerns/default_price.rb +0 -44
  489. data/spec/support/concerns/payment_source.rb +0 -66
  490. data/spec/support/concerns/working_factories.rb +0 -15
  491. data/spec/support/dummy_ability.rb +0 -7
  492. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
  493. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
  494. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
  495. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
@@ -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