solidus_core 2.9.6 → 2.11.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

Files changed (575) 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/helpers/spree/base_helper.rb +4 -4
  5. data/app/helpers/spree/products_helper.rb +2 -1
  6. data/app/jobs/spree/promotion_code_batch_job.rb +2 -2
  7. data/app/mailers/spree/base_mailer.rb +4 -0
  8. data/app/mailers/spree/order_mailer.rb +1 -1
  9. data/app/models/concerns/spree/active_storage_adapter.rb +116 -0
  10. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +69 -0
  11. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
  12. data/app/models/concerns/spree/default_price.rb +1 -1
  13. data/app/models/concerns/spree/soft_deletable.rb +18 -0
  14. data/app/models/concerns/spree/user_address_book.rb +87 -33
  15. data/app/models/concerns/spree/user_methods.rb +5 -4
  16. data/app/models/spree/ability.rb +34 -10
  17. data/app/models/spree/address.rb +103 -30
  18. data/app/models/spree/address/name.rb +49 -0
  19. data/app/models/spree/address/state_validator.rb +71 -0
  20. data/app/models/spree/adjustment.rb +21 -10
  21. data/app/models/spree/asset.rb +1 -1
  22. data/app/models/spree/base.rb +1 -2
  23. data/app/models/spree/calculator.rb +1 -1
  24. data/app/models/spree/calculator/default_tax.rb +1 -1
  25. data/app/models/spree/calculator/percent_per_item.rb +4 -4
  26. data/app/models/spree/calculator/price_sack.rb +1 -1
  27. data/app/models/spree/calculator/shipping/flexi_rate.rb +2 -2
  28. data/app/models/spree/calculator/tiered_flat_rate.rb +5 -5
  29. data/app/models/spree/calculator/tiered_percent.rb +6 -6
  30. data/app/models/spree/carton.rb +3 -3
  31. data/app/models/spree/classification.rb +2 -2
  32. data/app/models/spree/credit_card.rb +6 -6
  33. data/app/models/spree/customer_return.rb +5 -3
  34. data/app/models/spree/exchange.rb +1 -1
  35. data/app/models/spree/image/active_storage_attachment.rb +21 -0
  36. data/app/models/spree/image/paperclip_attachment.rb +1 -1
  37. data/app/models/spree/inventory_unit.rb +5 -23
  38. data/app/models/spree/line_item.rb +16 -7
  39. data/app/models/spree/line_item_action.rb +2 -2
  40. data/app/models/spree/log_entry.rb +1 -1
  41. data/app/models/spree/option_type.rb +1 -1
  42. data/app/models/spree/option_value.rb +3 -3
  43. data/app/models/spree/option_values_variant.rb +2 -2
  44. data/app/models/spree/order.rb +85 -30
  45. data/app/models/spree/order/checkout.rb +2 -1
  46. data/app/models/spree/order/payments.rb +2 -2
  47. data/app/models/spree/order_cancellations.rb +1 -1
  48. data/app/models/spree/order_capturing.rb +2 -2
  49. data/app/models/spree/order_contents.rb +2 -2
  50. data/app/models/spree/order_inventory.rb +16 -4
  51. data/app/models/spree/order_merger.rb +6 -4
  52. data/app/models/spree/order_mutex.rb +1 -1
  53. data/app/models/spree/order_promotion.rb +4 -4
  54. data/app/models/spree/order_shipping.rb +1 -1
  55. data/app/models/spree/order_taxation.rb +3 -3
  56. data/app/models/spree/order_updater.rb +11 -10
  57. data/app/models/spree/payment.rb +10 -47
  58. data/app/models/spree/payment/cancellation.rb +3 -3
  59. data/app/models/spree/payment/processing.rb +57 -33
  60. data/app/models/spree/payment_capture_event.rb +1 -1
  61. data/app/models/spree/payment_method.rb +13 -11
  62. data/app/models/spree/payment_method/bogus_credit_card.rb +1 -1
  63. data/app/models/spree/payment_source.rb +1 -1
  64. data/app/models/spree/preference.rb +1 -1
  65. data/app/models/spree/price.rb +3 -9
  66. data/app/models/spree/product.rb +24 -19
  67. data/app/models/spree/product/scopes.rb +223 -210
  68. data/app/models/spree/product_option_type.rb +2 -2
  69. data/app/models/spree/product_promotion_rule.rb +2 -2
  70. data/app/models/spree/product_property.rb +2 -2
  71. data/app/models/spree/promotion.rb +46 -20
  72. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +1 -1
  73. data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
  74. data/app/models/spree/promotion/rules/option_value.rb +2 -2
  75. data/app/models/spree/promotion/rules/product.rb +3 -3
  76. data/app/models/spree/promotion_action.rb +3 -9
  77. data/app/models/spree/promotion_chooser.rb +2 -2
  78. data/app/models/spree/promotion_code.rb +17 -11
  79. data/app/models/spree/promotion_code/batch_builder.rb +3 -3
  80. data/app/models/spree/promotion_code_batch.rb +2 -2
  81. data/app/models/spree/promotion_handler/coupon.rb +2 -2
  82. data/app/models/spree/promotion_rule.rb +3 -3
  83. data/app/models/spree/promotion_rule_role.rb +3 -3
  84. data/app/models/spree/promotion_rule_store.rb +2 -2
  85. data/app/models/spree/promotion_rule_taxon.rb +2 -2
  86. data/app/models/spree/promotion_rule_user.rb +2 -2
  87. data/app/models/spree/refund.rb +59 -17
  88. data/app/models/spree/reimbursement.rb +32 -13
  89. data/app/models/spree/reimbursement/credit.rb +2 -2
  90. data/app/models/spree/reimbursement/reimbursement_type_engine.rb +1 -1
  91. data/app/models/spree/reimbursement_tax_calculator.rb +1 -1
  92. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +12 -5
  93. data/app/models/spree/return_authorization.rb +5 -11
  94. data/app/models/spree/return_item.rb +33 -61
  95. data/app/models/spree/return_item/eligibility_validator/default.rb +1 -1
  96. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
  97. data/app/models/spree/role.rb +1 -1
  98. data/app/models/spree/role_user.rb +2 -2
  99. data/app/models/spree/shipment.rb +9 -43
  100. data/app/models/spree/shipping_calculator.rb +1 -5
  101. data/app/models/spree/shipping_manifest.rb +5 -5
  102. data/app/models/spree/shipping_method.rb +3 -10
  103. data/app/models/spree/shipping_method_category.rb +2 -2
  104. data/app/models/spree/shipping_method_stock_location.rb +2 -2
  105. data/app/models/spree/shipping_method_zone.rb +2 -2
  106. data/app/models/spree/shipping_rate.rb +2 -2
  107. data/app/models/spree/shipping_rate_tax.rb +3 -3
  108. data/app/models/spree/state.rb +2 -2
  109. data/app/models/spree/state_change.rb +2 -2
  110. data/app/models/spree/stock/differentiator.rb +1 -1
  111. data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
  112. data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
  113. data/app/models/spree/stock/package.rb +2 -2
  114. data/app/models/spree/stock/simple_coordinator.rb +1 -3
  115. data/app/models/spree/stock_item.rb +4 -10
  116. data/app/models/spree/stock_location.rb +2 -2
  117. data/app/models/spree/stock_movement.rb +4 -2
  118. data/app/models/spree/stock_quantities.rb +13 -12
  119. data/app/models/spree/store.rb +1 -1
  120. data/app/models/spree/store_credit.rb +9 -15
  121. data/app/models/spree/store_credit_category.rb +30 -3
  122. data/app/models/spree/store_credit_event.rb +4 -10
  123. data/app/models/spree/store_credit_reason.rb +0 -4
  124. data/app/models/spree/store_payment_method.rb +2 -2
  125. data/app/models/spree/store_shipping_method.rb +2 -2
  126. data/app/models/spree/tax/tax_helpers.rb +1 -1
  127. data/app/models/spree/tax_calculator/default.rb +0 -4
  128. data/app/models/spree/tax_calculator/shipping_rate.rb +0 -3
  129. data/app/models/spree/tax_category.rb +2 -8
  130. data/app/models/spree/tax_rate.rb +12 -8
  131. data/app/models/spree/tax_rate_tax_category.rb +2 -2
  132. data/app/models/spree/taxon.rb +1 -1
  133. data/app/models/spree/taxon/active_storage_attachment.rb +19 -0
  134. data/app/models/spree/taxon/paperclip_attachment.rb +13 -0
  135. data/app/models/spree/unit_cancel.rb +5 -2
  136. data/app/models/spree/user_address.rb +10 -4
  137. data/app/models/spree/user_last_url_storer.rb +46 -0
  138. data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +36 -0
  139. data/app/models/spree/user_stock_location.rb +2 -2
  140. data/app/models/spree/variant.rb +17 -23
  141. data/app/models/spree/variant/scopes.rb +37 -29
  142. data/app/models/spree/variant_property_rule.rb +6 -2
  143. data/app/models/spree/variant_property_rule_condition.rb +2 -2
  144. data/app/models/spree/variant_property_rule_value.rb +2 -2
  145. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +9 -4
  146. data/app/models/spree/wallet_payment_source.rb +2 -2
  147. data/app/models/spree/zone.rb +2 -2
  148. data/app/models/spree/zone_member.rb +2 -2
  149. data/config/initializers/inflections.rb +5 -0
  150. data/config/initializers/money.rb +2 -0
  151. data/config/locales/en.yml +78 -8
  152. data/db/default/spree/countries.rb +1 -1
  153. data/db/default/spree/states.rb +12 -4
  154. data/db/default/spree/store_credit.rb +2 -2
  155. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
  156. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
  157. data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
  158. data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
  159. data/lib/generators/solidus/install/install_generator.rb +253 -0
  160. data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +42 -3
  161. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
  162. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
  163. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
  164. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
  165. data/lib/generators/spree/dummy/dummy_generator.rb +2 -0
  166. data/lib/generators/spree/install/install_generator.rb +7 -189
  167. data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
  168. data/lib/spree/app_configuration.rb +135 -54
  169. data/lib/spree/awesome_nested_set_override.rb +44 -0
  170. data/lib/spree/core.rb +6 -0
  171. data/lib/spree/core/controller_helpers/auth.rb +18 -17
  172. data/lib/spree/core/controller_helpers/current_host.rb +17 -0
  173. data/lib/spree/core/controller_helpers/order.rb +8 -7
  174. data/lib/spree/core/engine.rb +41 -4
  175. data/lib/spree/core/importer/order.rb +47 -33
  176. data/lib/spree/core/importer/product.rb +2 -2
  177. data/lib/spree/core/permalinks.rb +1 -3
  178. data/lib/spree/core/product_filters.rb +16 -15
  179. data/lib/spree/core/role_configuration.rb +2 -2
  180. data/lib/spree/core/search/variant.rb +1 -1
  181. data/lib/spree/core/state_machines.rb +97 -0
  182. data/lib/spree/core/state_machines/inventory_unit.rb +42 -0
  183. data/lib/spree/core/state_machines/order.rb +249 -0
  184. data/lib/spree/core/state_machines/payment.rb +61 -0
  185. data/lib/spree/core/state_machines/reimbursement.rb +33 -0
  186. data/lib/spree/core/state_machines/return_authorization.rb +32 -0
  187. data/lib/spree/core/state_machines/return_item/acceptance_status.rb +51 -0
  188. data/lib/spree/core/state_machines/return_item/reception_status.rb +42 -0
  189. data/lib/spree/core/state_machines/shipment.rb +58 -0
  190. data/lib/spree/core/stock_configuration.rb +1 -0
  191. data/lib/spree/core/validators/email.rb +1 -8
  192. data/lib/spree/core/version.rb +1 -1
  193. data/lib/spree/encryptor.rb +25 -0
  194. data/lib/spree/event.rb +40 -7
  195. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  196. data/lib/spree/event/configuration.rb +11 -6
  197. data/lib/spree/event/subscriber.rb +38 -18
  198. data/lib/spree/event/subscriber_registry.rb +92 -0
  199. data/lib/spree/i18n.rb +1 -1
  200. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  201. data/lib/spree/money.rb +2 -2
  202. data/lib/spree/paranoia_deprecations.rb +32 -12
  203. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  204. data/lib/spree/permission_sets/default_customer.rb +16 -16
  205. data/lib/spree/permission_sets/order_display.rb +11 -11
  206. data/lib/spree/permission_sets/order_management.rb +1 -1
  207. data/lib/spree/permission_sets/product_display.rb +9 -9
  208. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  209. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  210. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  211. data/lib/spree/permission_sets/stock_display.rb +2 -2
  212. data/lib/spree/permission_sets/stock_management.rb +1 -1
  213. data/lib/spree/permission_sets/user_display.rb +3 -3
  214. data/lib/spree/permission_sets/user_management.rb +7 -3
  215. data/lib/spree/permitted_attributes.rb +7 -6
  216. data/lib/spree/preferences/preferable.rb +4 -3
  217. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  218. data/lib/spree/preferences/static_model_preferences.rb +2 -2
  219. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  220. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  221. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  222. data/lib/spree/testing_support/capybara_ext.rb +3 -0
  223. data/lib/spree/testing_support/common_rake.rb +3 -3
  224. data/lib/spree/testing_support/dummy_app.rb +45 -21
  225. data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
  226. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +6 -4
  227. data/lib/spree/testing_support/factories/address_factory.rb +1 -2
  228. data/lib/spree/testing_support/factories/image_factory.rb +1 -1
  229. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +8 -1
  230. data/lib/spree/testing_support/factories/promotion_factory.rb +13 -0
  231. data/lib/spree/testing_support/factories/refund_factory.rb +1 -0
  232. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  233. data/lib/spree/testing_support/factories/return_item_factory.rb +0 -1
  234. data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -1
  235. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +8 -0
  236. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -0
  237. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +3 -1
  238. data/lib/spree/testing_support/factories/taxon_factory.rb +4 -0
  239. data/lib/spree/testing_support/factories/user_factory.rb +4 -1
  240. data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
  241. data/lib/spree/testing_support/job_helpers.rb +24 -0
  242. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  243. data/lib/spree/testing_support/preferences.rb +3 -1
  244. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  245. data/lib/spree/testing_support/translations.rb +25 -0
  246. data/solidus_core.gemspec +12 -9
  247. metadata +120 -393
  248. data/script/rails +0 -10
  249. data/spec/fixtures/thinking-cat.jpg +0 -0
  250. data/spec/helpers/base_helper_spec.rb +0 -168
  251. data/spec/helpers/products_helper_spec.rb +0 -202
  252. data/spec/helpers/taxons_helper_spec.rb +0 -43
  253. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  254. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  255. data/spec/lib/i18n_spec.rb +0 -97
  256. data/spec/lib/search/base_spec.rb +0 -87
  257. data/spec/lib/search/variant_spec.rb +0 -115
  258. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  259. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  260. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  261. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  262. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  263. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  264. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  265. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  266. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -48
  267. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  268. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  269. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  270. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  271. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -59
  272. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  273. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  274. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  275. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  276. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  277. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  278. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  279. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  280. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  281. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  282. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  283. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  284. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  285. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  286. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  287. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  288. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  289. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  290. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  291. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  292. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  293. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  294. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  295. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  296. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  297. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  298. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  299. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  300. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  301. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  302. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  303. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  304. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  305. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  306. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  307. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  308. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  309. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  310. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  311. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  312. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  313. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  314. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  315. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  316. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  317. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  318. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  319. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  320. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  321. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  322. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  323. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  324. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  325. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  326. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  327. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  328. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  329. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  330. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  331. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  332. data/spec/lib/spree/core/version_spec.rb +0 -19
  333. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  334. data/spec/lib/spree/event_spec.rb +0 -118
  335. data/spec/lib/spree/localized_number_spec.rb +0 -45
  336. data/spec/lib/spree/migrations_spec.rb +0 -32
  337. data/spec/lib/spree/money_spec.rb +0 -298
  338. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  339. data/spec/lib/spree/permitted_attributes_spec.rb +0 -41
  340. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  341. data/spec/lib/tasks/dummy_task.rake +0 -12
  342. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  343. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  344. data/spec/mailers/carton_mailer_spec.rb +0 -44
  345. data/spec/mailers/order_mailer_spec.rb +0 -117
  346. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  347. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  348. data/spec/mailers/test_mailer_spec.rb +0 -13
  349. data/spec/migrate/20190106184413_remove_code_from_spree_promotions_spec.rb +0 -148
  350. data/spec/models/spree/ability_spec.rb +0 -279
  351. data/spec/models/spree/address_spec.rb +0 -376
  352. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  353. data/spec/models/spree/adjustment_spec.rb +0 -339
  354. data/spec/models/spree/asset_spec.rb +0 -25
  355. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  356. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  357. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  358. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  359. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  360. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  361. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  362. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  363. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  364. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  365. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  366. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  367. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  368. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  369. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -35
  370. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  371. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  372. data/spec/models/spree/calculator_spec.rb +0 -43
  373. data/spec/models/spree/carton_spec.rb +0 -137
  374. data/spec/models/spree/classification_spec.rb +0 -114
  375. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  376. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  377. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  378. data/spec/models/spree/concerns/user_methods_spec.rb +0 -121
  379. data/spec/models/spree/country_spec.rb +0 -154
  380. data/spec/models/spree/credit_card_spec.rb +0 -373
  381. data/spec/models/spree/customer_return_spec.rb +0 -294
  382. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  383. data/spec/models/spree/exchange_spec.rb +0 -76
  384. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  385. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  386. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  387. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  388. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  389. data/spec/models/spree/gateway_spec.rb +0 -14
  390. data/spec/models/spree/image_spec.rb +0 -25
  391. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  392. data/spec/models/spree/line_item_spec.rb +0 -240
  393. data/spec/models/spree/option_type_spec.rb +0 -16
  394. data/spec/models/spree/option_value_spec.rb +0 -52
  395. data/spec/models/spree/order/address_spec.rb +0 -52
  396. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  397. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  398. data/spec/models/spree/order/checkout_spec.rb +0 -740
  399. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  400. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  401. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  402. data/spec/models/spree/order/payment_spec.rb +0 -280
  403. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  404. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  405. data/spec/models/spree/order/totals_spec.rb +0 -26
  406. data/spec/models/spree/order/updating_spec.rb +0 -18
  407. data/spec/models/spree/order/validations_spec.rb +0 -17
  408. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  409. data/spec/models/spree/order_capturing_spec.rb +0 -16
  410. data/spec/models/spree/order_contents_spec.rb +0 -362
  411. data/spec/models/spree/order_inventory_spec.rb +0 -285
  412. data/spec/models/spree/order_merger_spec.rb +0 -162
  413. data/spec/models/spree/order_mutex_spec.rb +0 -89
  414. data/spec/models/spree/order_promotion_spec.rb +0 -33
  415. data/spec/models/spree/order_shipping_spec.rb +0 -247
  416. data/spec/models/spree/order_spec.rb +0 -1694
  417. data/spec/models/spree/order_taxation_spec.rb +0 -128
  418. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  419. data/spec/models/spree/order_updater_spec.rb +0 -555
  420. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  421. data/spec/models/spree/payment_create_spec.rb +0 -205
  422. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  423. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  424. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  425. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  426. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  427. data/spec/models/spree/payment_method_spec.rb +0 -408
  428. data/spec/models/spree/payment_spec.rb +0 -1270
  429. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  430. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  431. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  432. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  433. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  434. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  435. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  436. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  437. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  438. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  439. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  440. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  441. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  442. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  443. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  444. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -56
  445. data/spec/models/spree/preference_spec.rb +0 -79
  446. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  447. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  448. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  449. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  450. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  451. data/spec/models/spree/preferences/store_spec.rb +0 -40
  452. data/spec/models/spree/price_spec.rb +0 -150
  453. data/spec/models/spree/product/scopes_spec.rb +0 -164
  454. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  455. data/spec/models/spree/product_filter_spec.rb +0 -28
  456. data/spec/models/spree/product_property_spec.rb +0 -20
  457. data/spec/models/spree/product_spec.rb +0 -584
  458. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  459. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  460. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  461. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  462. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  463. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  464. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  465. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  466. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  467. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  468. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  469. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  470. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -227
  471. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  472. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  473. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  474. data/spec/models/spree/promotion_action_spec.rb +0 -44
  475. data/spec/models/spree/promotion_category_spec.rb +0 -19
  476. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  477. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  478. data/spec/models/spree/promotion_code_spec.rb +0 -206
  479. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  480. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  481. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  482. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  483. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  484. data/spec/models/spree/promotion_spec.rb +0 -928
  485. data/spec/models/spree/refund_spec.rb +0 -200
  486. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  487. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  488. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  489. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  490. data/spec/models/spree/reimbursement_spec.rb +0 -278
  491. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  492. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  493. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  494. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  495. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  496. data/spec/models/spree/return_authorization_spec.rb +0 -226
  497. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  498. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  499. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  500. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  501. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  502. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  503. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  504. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  505. data/spec/models/spree/return_item_spec.rb +0 -785
  506. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  507. data/spec/models/spree/shipment_spec.rb +0 -914
  508. data/spec/models/spree/shipping_calculator_spec.rb +0 -57
  509. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  510. data/spec/models/spree/shipping_method_spec.rb +0 -260
  511. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  512. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  513. data/spec/models/spree/state_spec.rb +0 -43
  514. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  515. data/spec/models/spree/stock/availability_spec.rb +0 -143
  516. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  517. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  518. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  519. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  520. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  521. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  522. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  523. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  524. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  525. data/spec/models/spree/stock/package_spec.rb +0 -182
  526. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  527. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  528. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  529. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  530. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  531. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  532. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  533. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  534. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  535. data/spec/models/spree/stock_item_spec.rb +0 -348
  536. data/spec/models/spree/stock_location_spec.rb +0 -288
  537. data/spec/models/spree/stock_movement_spec.rb +0 -58
  538. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  539. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  540. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  541. data/spec/models/spree/store_credit_spec.rb +0 -900
  542. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  543. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  544. data/spec/models/spree/store_spec.rb +0 -156
  545. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  546. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  547. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  548. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  549. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  550. data/spec/models/spree/tax_category_spec.rb +0 -50
  551. data/spec/models/spree/tax_rate_spec.rb +0 -316
  552. data/spec/models/spree/taxon_spec.rb +0 -197
  553. data/spec/models/spree/taxonomy_spec.rb +0 -15
  554. data/spec/models/spree/unit_cancel_spec.rb +0 -121
  555. data/spec/models/spree/user_spec.rb +0 -247
  556. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  557. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  558. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  559. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  560. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  561. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  562. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  563. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  564. data/spec/models/spree/variant_spec.rb +0 -862
  565. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  566. data/spec/models/spree/wallet_spec.rb +0 -155
  567. data/spec/models/spree/zone_spec.rb +0 -248
  568. data/spec/rails_helper.rb +0 -46
  569. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  570. data/spec/spec_helper.rb +0 -36
  571. data/spec/support/big_decimal.rb +0 -7
  572. data/spec/support/concerns/default_price.rb +0 -44
  573. data/spec/support/concerns/payment_source.rb +0 -66
  574. data/spec/support/concerns/working_factories.rb +0 -15
  575. data/spec/support/dummy_ability.rb +0 -7
@@ -1,1694 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Order, type: :model do
6
- let(:store) { create(:store) }
7
- let(:user) { create(:user, email: "spree@example.com") }
8
- let(:order) { create(:order, user: user, store: store) }
9
- let(:promotion) do
10
- FactoryBot.create(
11
- :promotion,
12
- :with_order_adjustment,
13
- code: "discount"
14
- )
15
- end
16
- let(:code) { promotion.codes.first }
17
-
18
- describe '#finalize!' do
19
- context 'with event notifications' do
20
- it 'sends an email' do
21
- expect(Spree::Config.order_mailer_class).to receive(:confirm_email).and_call_original
22
- order.finalize!
23
- end
24
-
25
- it 'marks the order as confirmation_delivered' do
26
- expect do
27
- order.finalize!
28
- end.to change(order, :confirmation_delivered).to true
29
- end
30
-
31
- # These specs show how notifications can be removed, one at a time or
32
- # all the ones set by MailerSubscriber module
33
- context 'when removing the default email notification subscription' do
34
- before do
35
- Spree::Event.unsubscribe Spree::MailerSubscriber.order_finalized_handler
36
- end
37
-
38
- after do
39
- Spree::MailerSubscriber.subscribe!
40
- end
41
-
42
- it 'does not send the email' do
43
- expect(Spree::Config.order_mailer_class).not_to receive(:confirm_email)
44
- order.finalize!
45
- end
46
- end
47
-
48
- context 'when removing all the email notification subscriptions' do
49
- before do
50
- Spree::MailerSubscriber.unsubscribe!
51
- end
52
-
53
- after do
54
- Spree::MailerSubscriber.subscribe!
55
- end
56
-
57
- it 'does not send the email' do
58
- expect(Spree::Config.order_mailer_class).not_to receive(:confirm_email)
59
- order.finalize!
60
- end
61
- end
62
- end
63
- end
64
-
65
- context '#store' do
66
- it { is_expected.to respond_to(:store) }
67
-
68
- context 'when there is no store assigned' do
69
- subject { Spree::Order.new }
70
-
71
- context 'when there is no default store' do
72
- it "will not be valid" do
73
- expect(subject).not_to be_valid
74
- end
75
- end
76
-
77
- context "when there is a default store" do
78
- let!(:store) { create(:store) }
79
-
80
- it { is_expected.to be_valid }
81
- end
82
- end
83
-
84
- context 'when a store is assigned' do
85
- subject { Spree::Order.new(store: create(:store)) }
86
- it { is_expected.to be_valid }
87
- end
88
- end
89
-
90
- describe "#cancel!" do
91
- subject { order.cancel! }
92
-
93
- context "with captured store credit" do
94
- let!(:store_credit_payment_method) { create(:store_credit_payment_method) }
95
- let(:order_total) { 500.00 }
96
- let(:store_credit) { create(:store_credit, amount: order_total) }
97
- let(:order) { create(:order_with_line_items, user: store_credit.user, line_items_price: order_total) }
98
-
99
- before do
100
- order.add_store_credit_payments
101
- order.finalize!
102
- order.capture_payments!
103
- end
104
-
105
- it "cancels the order" do
106
- expect{ subject }.to change{ order.can_cancel? }.from(true).to(false)
107
- expect(order).to be_canceled
108
- end
109
-
110
- it "places the order into the canceled scope" do
111
- expect{ subject }.to change{ Spree::Order.canceled.include?(order) }.from(false).to(true)
112
- end
113
-
114
- it "removes the order from the not_canceled scope" do
115
- expect{ subject }.to change{ Spree::Order.not_canceled.include?(order) }.from(true).to(false)
116
- end
117
- end
118
-
119
- context "with fully refunded payment" do
120
- let(:order) { create(:completed_order_with_totals) }
121
- let(:payment_amount) { 50 }
122
- let(:payment) { create(:payment, order: order, amount: payment_amount, state: 'completed') }
123
-
124
- before do
125
- create(:refund, payment: payment, amount: payment_amount)
126
- end
127
-
128
- it "cancels the order" do
129
- expect{ subject }.to change{ order.can_cancel? }.from(true).to(false)
130
- expect(order).to be_canceled
131
- end
132
- end
133
- end
134
-
135
- context "#canceled_by" do
136
- let(:admin_user) { create :admin_user }
137
- let(:order) { create :order }
138
-
139
- before do
140
- allow(order).to receive(:cancel!)
141
- end
142
-
143
- subject { order.canceled_by(admin_user) }
144
-
145
- it 'should cancel the order' do
146
- expect(order).to receive(:cancel!)
147
- subject
148
- end
149
-
150
- it 'should save canceler_id' do
151
- subject
152
- expect(order.reload.canceler_id).to eq(admin_user.id)
153
- end
154
-
155
- it 'should save canceled_at' do
156
- subject
157
- expect(order.reload.canceled_at).to_not be_nil
158
- end
159
-
160
- it 'should have canceler' do
161
- subject
162
- expect(order.reload.canceler).to eq(admin_user)
163
- end
164
- end
165
-
166
- context "#create" do
167
- let!(:store) { create :store }
168
- let(:order) { Spree::Order.create }
169
-
170
- it "should assign an order number" do
171
- expect(order.number).not_to be_nil
172
- end
173
-
174
- it 'should create a randomized 22 character token' do
175
- expect(order.guest_token.size).to eq(22)
176
- end
177
- end
178
-
179
- context "creates shipments cost" do
180
- let(:shipment) { double }
181
-
182
- before { allow(order).to receive_messages shipments: [shipment] }
183
-
184
- it "update and persist totals" do
185
- expect(order.updater).to receive :update
186
-
187
- Spree::Deprecation.silence do
188
- order.set_shipments_cost
189
- end
190
- end
191
- end
192
-
193
- context "insufficient_stock_lines" do
194
- let(:line_item) { mock_model Spree::LineItem, insufficient_stock?: true }
195
-
196
- before { allow(order).to receive_messages(line_items: [line_item]) }
197
-
198
- it "should return line_item that has insufficient stock on hand" do
199
- expect(order.insufficient_stock_lines.size).to eq(1)
200
- expect(order.insufficient_stock_lines.include?(line_item)).to be true
201
- end
202
- end
203
-
204
- describe '#ensure_line_item_variants_are_not_deleted' do
205
- subject { order.ensure_line_item_variants_are_not_deleted }
206
-
207
- let(:order) { create :order_with_line_items }
208
-
209
- context 'when variant is destroyed' do
210
- before do
211
- allow(order).to receive(:restart_checkout_flow)
212
- order.line_items.first.variant.discard
213
- end
214
-
215
- it 'should restart checkout flow' do
216
- expect(order).to receive(:restart_checkout_flow).once
217
- subject
218
- end
219
-
220
- it 'should have error message' do
221
- subject
222
- expect(order.errors[:base]).to include(I18n.t('spree.deleted_variants_present'))
223
- end
224
-
225
- it 'should be false' do
226
- expect(subject).to be_falsey
227
- end
228
- end
229
-
230
- context 'when no variants are destroyed' do
231
- it 'should not restart checkout' do
232
- expect(order).to receive(:restart_checkout_flow).never
233
- subject
234
- end
235
-
236
- it 'should be true' do
237
- expect(subject).to be_truthy
238
- end
239
- end
240
- end
241
-
242
- context "empty!" do
243
- let!(:order) { create(:order) }
244
-
245
- before do
246
- create(:line_item, order: order)
247
- create(:shipment, order: order)
248
- create(:adjustment, adjustable: order, order: order)
249
- promotion.activate(order: order, promotion_code: code)
250
- order.recalculate
251
-
252
- # Make sure we are asserting changes
253
- expect(order.line_items).not_to be_empty
254
- expect(order.shipments).not_to be_empty
255
- expect(order.adjustments).not_to be_empty
256
- expect(order.promotions).not_to be_empty
257
- expect(order.item_total).not_to eq 0
258
- expect(order.item_count).not_to eq 0
259
- expect(order.shipment_total).not_to eq 0
260
- expect(order.adjustment_total).not_to eq 0
261
- end
262
-
263
- it "clears out line items, adjustments and update totals" do
264
- order.empty!
265
- expect(order.line_items).to be_empty
266
- expect(order.shipments).to be_empty
267
- expect(order.adjustments).to be_empty
268
- expect(order.promotions).to be_empty
269
- expect(order.item_total).to eq 0
270
- expect(order.item_count).to eq 0
271
- expect(order.shipment_total).to eq 0
272
- expect(order.adjustment_total).to eq 0
273
- end
274
- end
275
-
276
- context '#outstanding_balance' do
277
- let(:order) { create(:order_ready_to_ship, line_items_count: 3) }
278
- let(:payment) { order.payments.first }
279
-
280
- it "should handle refunds properly" do
281
- order.cancellations.short_ship([order.inventory_units.first])
282
- expect(order.outstanding_balance).to be_negative
283
- expect(order.payment_state).to eq('credit_owed')
284
- create(:refund, amount: order.outstanding_balance.abs, payment: payment, transaction_id: nil)
285
- order.reload
286
- expect(order.outstanding_balance).to eq(0)
287
- expect(order.payment_state).to eq('paid')
288
- end
289
- end
290
-
291
- context "#display_outstanding_balance" do
292
- it "returns the value as a spree money" do
293
- allow(order).to receive(:outstanding_balance) { 10.55 }
294
- expect(order.display_outstanding_balance).to eq(Spree::Money.new(10.55))
295
- end
296
- end
297
-
298
- context "#display_item_total" do
299
- it "returns the value as a spree money" do
300
- allow(order).to receive(:item_total) { 10.55 }
301
- expect(order.display_item_total).to eq(Spree::Money.new(10.55))
302
- end
303
- end
304
-
305
- context "#display_adjustment_total" do
306
- it "returns the value as a spree money" do
307
- order.adjustment_total = 10.55
308
- expect(order.display_adjustment_total).to eq(Spree::Money.new(10.55))
309
- end
310
- end
311
-
312
- context "#display_total" do
313
- it "returns the value as a spree money" do
314
- order.total = 10.55
315
- expect(order.display_total).to eq(Spree::Money.new(10.55))
316
- end
317
- end
318
-
319
- context "#currency" do
320
- context "when object currency is ABC" do
321
- before { order.currency = "ABC" }
322
-
323
- it "returns the currency from the object" do
324
- expect(order.currency).to eq("ABC")
325
- end
326
- end
327
-
328
- context "when object currency is nil" do
329
- before { order.currency = nil }
330
-
331
- it "returns the globally configured currency" do
332
- expect(order.currency).to eq("USD")
333
- end
334
- end
335
- end
336
-
337
- describe '#merge!' do
338
- let(:order1) { create(:order_with_line_items) }
339
- let(:order2) { create(:order_with_line_items) }
340
-
341
- it 'merges the orders' do
342
- order1.merge!(order2)
343
- expect(order1.line_items.count).to eq(2)
344
- expect(order2.destroyed?).to be_truthy
345
- end
346
-
347
- describe 'order_merger_class customization' do
348
- before do
349
- class TestOrderMerger
350
- def initialize(order)
351
- @order = order
352
- end
353
-
354
- def merge!(other_order, user = nil)
355
- [@order, other_order, user]
356
- end
357
- end
358
- Spree::Config.order_merger_class = TestOrderMerger
359
- end
360
-
361
- let(:user) { build(:user) }
362
-
363
- it 'uses the configured order merger' do
364
- expect(order1.merge!(order2, user)).to eq([order1, order2, user])
365
- end
366
- end
367
- end
368
-
369
- context "add_update_hook", partial_double_verification: false do
370
- before do
371
- Spree::Order.class_eval do
372
- register_update_hook :add_awesome_sauce
373
- end
374
- end
375
-
376
- after do
377
- Spree::Order.update_hooks = Set.new
378
- end
379
-
380
- it "calls hook during update" do
381
- order = create(:order)
382
- expect(order).to receive(:add_awesome_sauce)
383
- order.recalculate
384
- end
385
-
386
- it "calls hook during finalize" do
387
- order = create(:order)
388
- expect(order).to receive(:add_awesome_sauce)
389
- order.finalize!
390
- end
391
- end
392
-
393
- context "ensure shipments will be updated" do
394
- subject(:order) { create :order }
395
- before do
396
- Spree::Shipment.create!(order: order)
397
- end
398
-
399
- ['payment', 'confirm'].each do |order_state|
400
- context "when ther order is in the #{order_state} state" do
401
- before do
402
- order.state = order_state
403
- order.shipments.create!
404
- end
405
-
406
- it "destroys current shipments" do
407
- order.ensure_updated_shipments
408
- expect(order.shipments).to be_empty
409
- end
410
-
411
- it "puts order back in address state" do
412
- order.ensure_updated_shipments
413
- expect(order.state).to eql "cart"
414
- end
415
-
416
- it "resets shipment_total" do
417
- order.update_column(:shipment_total, 5)
418
- order.ensure_updated_shipments
419
- expect(order.shipment_total).to eq(0)
420
- end
421
-
422
- it "does nothing if any shipments are ready" do
423
- shipment = create(:shipment, order: subject, state: "ready")
424
- expect { subject.ensure_updated_shipments }.not_to change { subject.reload.shipments.pluck(:id) }
425
- expect { shipment.reload }.not_to raise_error
426
- end
427
-
428
- it "does nothing if any shipments are shipped" do
429
- shipment = create(:shipment, order: subject, state: "shipped")
430
- expect { subject.ensure_updated_shipments }.not_to change { subject.reload.shipments.pluck(:id) }
431
- expect { shipment.reload }.not_to raise_error
432
- end
433
- end
434
- end
435
-
436
- context 'when the order is in address state' do
437
- before do
438
- order.state = 'address'
439
- order.shipments.create!
440
- end
441
-
442
- it "destroys current shipments" do
443
- order.ensure_updated_shipments
444
- expect(order.shipments).to be_empty
445
- end
446
-
447
- it "resets shipment_total" do
448
- order.update_column(:shipment_total, 5)
449
- order.ensure_updated_shipments
450
- expect(order.shipment_total).to eq(0)
451
- end
452
-
453
- it "puts the order in the cart state" do
454
- order.ensure_updated_shipments
455
- expect(order.state).to eq "cart"
456
- end
457
- end
458
-
459
- context 'when the order is completed' do
460
- before do
461
- order.state = 'complete'
462
- order.completed_at = Time.current
463
- order.update_column(:shipment_total, 5)
464
- order.shipments.create!
465
- end
466
-
467
- it "does not destroy the current shipments" do
468
- expect {
469
- order.ensure_updated_shipments
470
- }.not_to change { order.shipments }
471
- end
472
-
473
- it "does not reset the shipment total" do
474
- expect {
475
- order.ensure_updated_shipments
476
- }.not_to change { order.shipment_total }
477
- end
478
-
479
- it "does not put the order back in the address state" do
480
- expect {
481
- order.ensure_updated_shipments
482
- }.not_to change { order.state }
483
- end
484
- end
485
-
486
- context "except when order is completed, that's OrderInventory job" do
487
- it "doesn't touch anything" do
488
- allow(order).to receive_messages completed?: true
489
- order.update_column(:shipment_total, 5)
490
- order.shipments.create!
491
-
492
- expect {
493
- order.ensure_updated_shipments
494
- }.not_to change { order.shipment_total }
495
-
496
- expect {
497
- order.ensure_updated_shipments
498
- }.not_to change { order.shipments }
499
-
500
- expect {
501
- order.ensure_updated_shipments
502
- }.not_to change { order.state }
503
- end
504
- end
505
- end
506
-
507
- describe "#tax_address" do
508
- let(:order) { build(:order, ship_address: ship_address, bill_address: bill_address, store: store) }
509
- let(:store) { build(:store) }
510
-
511
- before { stub_spree_preferences(tax_using_ship_address: tax_using_ship_address) }
512
- subject { order.tax_address }
513
-
514
- context "when the order has no addresses" do
515
- let(:ship_address) { nil }
516
- let(:bill_address) { nil }
517
-
518
- context "when tax_using_ship_address is true" do
519
- let(:tax_using_ship_address) { true }
520
-
521
- it 'returns the stores default cart tax location' do
522
- expect(subject).to eq(store.default_cart_tax_location)
523
- end
524
- end
525
-
526
- context "when tax_using_ship_address is not true" do
527
- let(:tax_using_ship_address) { false }
528
-
529
- it 'returns the stores default cart tax location' do
530
- expect(subject).to eq(store.default_cart_tax_location)
531
- end
532
- end
533
- end
534
-
535
- context "when the order has addresses" do
536
- let(:ship_address) { build(:address) }
537
- let(:bill_address) { build(:address) }
538
-
539
- context "when tax_using_ship_address is true" do
540
- let(:tax_using_ship_address) { true }
541
-
542
- it 'returns ship_address' do
543
- expect(subject).to eq(order.ship_address)
544
- end
545
- end
546
-
547
- context "when tax_using_ship_address is not true" do
548
- let(:tax_using_ship_address) { false }
549
-
550
- it "returns bill_address" do
551
- expect(subject).to eq(order.bill_address)
552
- end
553
- end
554
- end
555
- end
556
-
557
- describe "#restart_checkout_flow" do
558
- context "when in cart state" do
559
- let(:order) { create(:order_with_totals, state: "cart") }
560
-
561
- it "remains in cart state" do
562
- expect { order.restart_checkout_flow }.not_to change { order.state }
563
- end
564
- end
565
- it "updates the state column to the first checkout_steps value" do
566
- order = create(:order_with_totals, state: "delivery")
567
- expect(order.checkout_steps).to eql %w(address delivery payment confirm complete)
568
- expect{ order.restart_checkout_flow }.to change{ order.state }.from("delivery").to("address")
569
- end
570
-
571
- context "without line items" do
572
- it "updates the state column to cart" do
573
- order = create(:order, state: "delivery")
574
- expect{ order.restart_checkout_flow }.to change{ order.state }.from("delivery").to("cart")
575
- end
576
- end
577
- end
578
-
579
- # Regression tests for https://github.com/spree/spree/issues/4072
580
- context "#state_changed" do
581
- let(:order) { FactoryBot.create(:order) }
582
-
583
- it "logs state changes" do
584
- order.update_column(:payment_state, 'balance_due')
585
- order.payment_state = 'paid'
586
- expect(order.state_changes).to be_empty
587
- Spree::Deprecation.silence do
588
- order.state_changed('payment')
589
- end
590
- state_change = order.state_changes.find_by(name: 'payment')
591
- expect(state_change.previous_state).to eq('balance_due')
592
- expect(state_change.next_state).to eq('paid')
593
- end
594
-
595
- it "does not do anything if state does not change" do
596
- order.update_column(:payment_state, 'balance_due')
597
- expect(order.state_changes).to be_empty
598
- Spree::Deprecation.silence do
599
- order.state_changed('payment')
600
- end
601
- expect(order.state_changes).to be_empty
602
- end
603
- end
604
-
605
- # Regression test for https://github.com/spree/spree/issues/4199
606
- context "#available_payment_methods" do
607
- it "includes frontend payment methods" do
608
- payment_method = Spree::PaymentMethod::Check.create!({
609
- name: "Fake",
610
- active: true,
611
- available_to_users: true,
612
- available_to_admin: false
613
- })
614
- expect(order.available_payment_methods).to include(payment_method)
615
- end
616
-
617
- it "includes 'both' payment methods" do
618
- payment_method = Spree::PaymentMethod::Check.create!({
619
- name: "Fake",
620
- active: true,
621
- available_to_users: true,
622
- available_to_admin: true
623
- })
624
- expect(order.available_payment_methods).to include(payment_method)
625
- end
626
-
627
- it "does not include a payment method twice" do
628
- payment_method = Spree::PaymentMethod::Check.create!({
629
- name: "Fake",
630
- active: true,
631
- available_to_users: true,
632
- available_to_admin: true
633
- })
634
- expect(order.available_payment_methods.count).to eq(1)
635
- expect(order.available_payment_methods).to include(payment_method)
636
- end
637
-
638
- it "does not include inactive payment methods" do
639
- Spree::PaymentMethod::Check.create!({
640
- name: "Fake",
641
- active: false,
642
- available_to_users: true,
643
- available_to_admin: true
644
- })
645
- expect(order.available_payment_methods.count).to eq(0)
646
- end
647
-
648
- context "with more than one payment method" do
649
- subject { order.available_payment_methods }
650
-
651
- let!(:first_method) {
652
- FactoryBot.create(:payment_method, available_to_users: true,
653
- available_to_admin: true)
654
- }
655
- let!(:second_method) {
656
- FactoryBot.create(:payment_method, available_to_users: true,
657
- available_to_admin: true)
658
- }
659
-
660
- before do
661
- second_method.move_to_top
662
- end
663
-
664
- it "respects the order of methods based on position" do
665
- expect(subject).to eq([second_method, first_method])
666
- end
667
- end
668
-
669
- context 'when the order has a store' do
670
- let(:order) { create(:order) }
671
-
672
- let!(:store_with_payment_methods) do
673
- create(:store,
674
- payment_methods: [payment_method_with_store])
675
- end
676
- let!(:payment_method_with_store) { create(:payment_method) }
677
- let!(:store_without_payment_methods) { create(:store) }
678
- let!(:payment_method_without_store) { create(:payment_method) }
679
-
680
- context 'when the store has payment methods' do
681
- before { order.update_attributes!(store: store_with_payment_methods) }
682
-
683
- it 'returns only the matching payment methods for that store' do
684
- expect(order.available_payment_methods).to match_array(
685
- [payment_method_with_store]
686
- )
687
- end
688
-
689
- context 'and the store has an extra payment method unavailable to users' do
690
- let!(:admin_only_payment_method) do
691
- create(:payment_method,
692
- available_to_users: false,
693
- available_to_admin: true)
694
- end
695
-
696
- before do
697
- store_with_payment_methods.payment_methods << admin_only_payment_method
698
- end
699
-
700
- it 'returns only the payment methods available to users for that store' do
701
- expect(order.available_payment_methods).to match_array(
702
- [payment_method_with_store]
703
- )
704
- end
705
- end
706
- end
707
-
708
- context 'when the store does not have payment methods' do
709
- before { order.update_attributes!(store: store_without_payment_methods) }
710
-
711
- it 'returns all matching payment methods regardless of store' do
712
- expect(order.available_payment_methods).to match_array(
713
- [payment_method_with_store, payment_method_without_store]
714
- )
715
- end
716
- end
717
- end
718
- end
719
-
720
- context "#apply_shipping_promotions" do
721
- it "calls out to the Shipping promotion handler" do
722
- expect_any_instance_of(Spree::PromotionHandler::Shipping).to(
723
- receive(:activate)
724
- ).and_call_original
725
-
726
- expect(order.updater).to receive(:update).and_call_original
727
-
728
- order.apply_shipping_promotions
729
- end
730
- end
731
-
732
- context "#products" do
733
- before :each do
734
- @variant1 = mock_model(Spree::Variant, product: "product1")
735
- @variant2 = mock_model(Spree::Variant, product: "product2")
736
- @line_items = [mock_model(Spree::LineItem, product: "product1", variant: @variant1, variant_id: @variant1.id, quantity: 1),
737
- mock_model(Spree::LineItem, product: "product2", variant: @variant2, variant_id: @variant2.id, quantity: 2)]
738
- allow(order).to receive_messages(line_items: @line_items)
739
- end
740
-
741
- it "contains?" do
742
- expect(order.contains?(@variant1)).to be true
743
- end
744
-
745
- it "gets the quantity of a given variant" do
746
- expect(order.quantity_of(@variant1)).to eq(1)
747
-
748
- @variant3 = mock_model(Spree::Variant, product: "product3")
749
- expect(order.quantity_of(@variant3)).to eq(0)
750
- end
751
-
752
- it "can find a line item matching a given variant" do
753
- expect(order.find_line_item_by_variant(@variant1)).not_to be_nil
754
- expect(order.find_line_item_by_variant(mock_model(Spree::Variant))).to be_nil
755
- end
756
-
757
- context "match line item with options", partial_double_verification: false do
758
- before do
759
- Spree::Order.register_line_item_comparison_hook(:foos_match)
760
- end
761
-
762
- after do
763
- # reset to avoid test pollution
764
- Spree::Order.line_item_comparison_hooks = Set.new
765
- end
766
-
767
- it "matches line item when options match" do
768
- allow(order).to receive(:foos_match).and_return(true)
769
- expect(order.line_item_options_match(@line_items.first, { foos: { bar: :zoo } })).to be true
770
- end
771
-
772
- it "does not match line item without options" do
773
- allow(order).to receive(:foos_match).and_return(false)
774
- expect(order.line_item_options_match(@line_items.first, {})).to be false
775
- end
776
- end
777
- end
778
-
779
- describe "#generate_order_number" do
780
- let(:order) { build(:order) }
781
-
782
- context "with default app configuration" do
783
- it 'calls the default order number generator' do
784
- expect_any_instance_of(Spree::Order::NumberGenerator).to receive(:generate)
785
- order.generate_order_number
786
- end
787
- end
788
-
789
- context "with order number generator configured" do
790
- class TruthNumberGenerator
791
- def initialize(options = {}); end
792
-
793
- def generate
794
- '42'
795
- end
796
- end
797
-
798
- before do
799
- expect(Spree::Config).to receive(:order_number_generator) do
800
- TruthNumberGenerator.new
801
- end
802
- end
803
-
804
- it 'calls the configured order number generator' do
805
- order.generate_order_number
806
- expect(order.number).to eq '42'
807
- end
808
- end
809
-
810
- context "with number already present" do
811
- before do
812
- order.number = '123'
813
- end
814
-
815
- it 'does not generate new number' do
816
- order.generate_order_number
817
- expect(order.number).to eq '123'
818
- end
819
- end
820
-
821
- context "passing options" do
822
- it 'is deprecated' do
823
- expect(Spree::Deprecation).to receive(:warn)
824
- order.generate_order_number(length: 2)
825
- end
826
- end
827
- end
828
-
829
- context "#associate_user!" do
830
- let!(:user) { FactoryBot.create(:user) }
831
-
832
- it "should associate a user with a persisted order" do
833
- order = FactoryBot.create(:order_with_line_items, created_by: nil)
834
- order.user = nil
835
- order.email = nil
836
- order.associate_user!(user)
837
- expect(order.user).to eq(user)
838
- expect(order.email).to eq(user.email)
839
- expect(order.created_by).to eq(user)
840
-
841
- # verify that the changes we made were persisted
842
- order.reload
843
- expect(order.user).to eq(user)
844
- expect(order.email).to eq(user.email)
845
- expect(order.created_by).to eq(user)
846
- end
847
-
848
- it "should not overwrite the created_by if it already is set" do
849
- creator = create(:user)
850
- order = FactoryBot.create(:order_with_line_items, created_by: creator)
851
-
852
- order.user = nil
853
- order.email = nil
854
- order.associate_user!(user)
855
- expect(order.user).to eq(user)
856
- expect(order.email).to eq(user.email)
857
- expect(order.created_by).to eq(creator)
858
-
859
- # verify that the changes we made were persisted
860
- order.reload
861
- expect(order.user).to eq(user)
862
- expect(order.email).to eq(user.email)
863
- expect(order.created_by).to eq(creator)
864
- end
865
-
866
- it "should associate a user with a non-persisted order" do
867
- order = Spree::Order.new
868
-
869
- expect do
870
- order.associate_user!(user)
871
- end.to change { [order.user, order.email] }.from([nil, nil]).to([user, user.email])
872
- end
873
-
874
- it "should not persist an invalid address" do
875
- address = Spree::Address.new
876
- order.user = nil
877
- order.email = nil
878
- order.ship_address = address
879
- expect do
880
- order.associate_user!(user)
881
- end.not_to change { address.persisted? }.from(false)
882
- end
883
- end
884
-
885
- context "#assign_default_user_addresses" do
886
- let(:order) { Spree::Order.new }
887
-
888
- subject { order.assign_default_user_addresses }
889
-
890
- context "when no user is associated to the order" do
891
- it "does not associate any bill address" do
892
- expect { subject }.not_to change { order.bill_address }.from(nil)
893
- end
894
-
895
- it "does not associate any ship address" do
896
- expect { subject }.not_to change { order.ship_address }.from(nil)
897
- end
898
- end
899
-
900
- context "when user is associated to the order" do
901
- let(:user) { build_stubbed(:user) }
902
- let(:bill_address) { nil }
903
- let(:ship_address) { nil }
904
-
905
- before do
906
- order.associate_user!(user)
907
- user.bill_address = bill_address
908
- user.ship_address = ship_address
909
- end
910
-
911
- context "but has no bill address associated" do
912
- it "does not associate any bill address" do
913
- expect { subject }.not_to change { order.bill_address }.from(nil)
914
- end
915
- end
916
-
917
- context "and has an invalid bill address associated " do
918
- let(:bill_address) { build(:address, firstname: nil) } # invalid address
919
-
920
- it "does not associate any bill address" do
921
- expect { subject }.not_to change { order.bill_address }.from(nil)
922
- end
923
- end
924
-
925
- context "and has a valid address associated " do
926
- let(:bill_address) { build(:address) }
927
-
928
- it "does associate user bill address" do
929
- expect { subject }.to change { order.bill_address }.from(nil).to(bill_address)
930
- end
931
- end
932
-
933
- context "but has no ship address associated" do
934
- it "does not associate any ship address" do
935
- expect { subject }.not_to change { order.ship_address }.from(nil)
936
- end
937
- end
938
-
939
- context "and has an invalid ship address associated " do
940
- let(:ship_address) { build(:address, firstname: nil) } # invalid address
941
-
942
- it "does not associate any ship address" do
943
- expect { subject }.not_to change { order.ship_address }.from(nil)
944
- end
945
- end
946
-
947
- context "and has a valid ship address associated" do
948
- let(:ship_address) { build(:address) }
949
-
950
- it "does associate user ship address" do
951
- expect { subject }.to change { order.ship_address }.from(nil).to(ship_address)
952
- end
953
-
954
- context 'when checkout step does not include delivery' do
955
- before do
956
- expect(order).to receive(:checkout_steps) { %w[some step] }
957
- end
958
-
959
- it "does not associate any ship address" do
960
- expect { subject }.not_to change { order.ship_address }.from(nil)
961
- end
962
- end
963
- end
964
- end
965
- end
966
-
967
- context "#can_ship?" do
968
- let(:order) { Spree::Order.create }
969
-
970
- it "should be true for order in the 'complete' state" do
971
- allow(order).to receive_messages(complete?: true)
972
- expect(order.can_ship?).to be true
973
- end
974
-
975
- it "should be true for order in the 'resumed' state" do
976
- allow(order).to receive_messages(resumed?: true)
977
- expect(order.can_ship?).to be true
978
- end
979
-
980
- it "should be true for an order in the 'awaiting return' state" do
981
- allow(order).to receive_messages(awaiting_return?: true)
982
- expect(order.can_ship?).to be true
983
- end
984
-
985
- it "should be true for an order in the 'returned' state" do
986
- allow(order).to receive_messages(returned?: true)
987
- expect(order.can_ship?).to be true
988
- end
989
-
990
- it "should be false if the order is neither in the 'complete' nor 'resumed' state" do
991
- allow(order).to receive_messages(resumed?: false, complete?: false)
992
- expect(order.can_ship?).to be false
993
- end
994
- end
995
-
996
- context "#completed?" do
997
- it "should indicate if order is completed" do
998
- order.completed_at = nil
999
- expect(order.completed?).to be false
1000
-
1001
- order.completed_at = Time.current
1002
- expect(order.completed?).to be true
1003
- end
1004
- end
1005
-
1006
- context "#allow_checkout?" do
1007
- it "should be true if there are line_items in the order" do
1008
- allow(order).to receive_message_chain(:line_items, count: 1)
1009
- expect(order.checkout_allowed?).to be true
1010
- end
1011
- it "should be false if there are no line_items in the order" do
1012
- allow(order).to receive_message_chain(:line_items, count: 0)
1013
- expect(order.checkout_allowed?).to be false
1014
- end
1015
- end
1016
-
1017
- context "#amount" do
1018
- before do
1019
- @order = create(:order, user: user)
1020
- @order.line_items = [create(:line_item, price: 1.0, quantity: 2),
1021
- create(:line_item, price: 1.0, quantity: 1)]
1022
- end
1023
- it "should return the correct lum sum of items" do
1024
- expect(@order.amount).to eq(3.0)
1025
- end
1026
- end
1027
-
1028
- context "#backordered?" do
1029
- it 'is backordered if one of the shipments is backordered' do
1030
- allow(order).to receive_messages(shipments: [mock_model(Spree::Shipment, backordered?: false),
1031
- mock_model(Spree::Shipment, backordered?: true)])
1032
- expect(order).to be_backordered
1033
- end
1034
- end
1035
-
1036
- context "#can_cancel?" do
1037
- it "should be false for completed order in the canceled state" do
1038
- order.state = 'canceled'
1039
- order.shipment_state = 'ready'
1040
- order.completed_at = Time.current
1041
- expect(order.can_cancel?).to be false
1042
- end
1043
-
1044
- it "should be true for completed order with no shipment" do
1045
- order.state = 'complete'
1046
- order.shipment_state = nil
1047
- order.completed_at = Time.current
1048
- expect(order.can_cancel?).to be true
1049
- end
1050
- end
1051
-
1052
- context "#tax_total" do
1053
- it "adds included tax and additional tax" do
1054
- allow(order).to receive_messages(additional_tax_total: 10, included_tax_total: 20)
1055
-
1056
- expect(order.tax_total).to eq 30
1057
- end
1058
- end
1059
-
1060
- # Regression test for https://github.com/spree/spree/issues/4923
1061
- context "locking" do
1062
- let(:order) { Spree::Order.create } # need a persisted in order to test locking
1063
-
1064
- it 'can lock' do
1065
- order.with_lock {}
1066
- end
1067
- end
1068
-
1069
- describe "#item_total_excluding_vat" do
1070
- it "sums all of the line items' pre tax amounts" do
1071
- subject.line_items = [
1072
- Spree::LineItem.new(price: 10, quantity: 2, included_tax_total: 15.0),
1073
- Spree::LineItem.new(price: 30, quantity: 1, included_tax_total: 16.0)
1074
- ]
1075
- # (2*10)-15 + 30-16 = 5 + 14 = 19
1076
- expect(subject.item_total_excluding_vat).to eq 19.0
1077
- end
1078
- end
1079
-
1080
- context "#refund_total" do
1081
- let(:order) { create(:order_with_line_items) }
1082
- let!(:payment) { create(:payment_with_refund, order: order, amount: 5, refund_amount: 3) }
1083
- let!(:payment2) { create(:payment_with_refund, order: order, amount: 5, refund_amount: 2.5) }
1084
-
1085
- it "sums the reimbursment refunds on the order" do
1086
- expect(order.refund_total).to eq(5.5)
1087
- end
1088
- end
1089
-
1090
- describe '#quantity' do
1091
- # Uses a persisted record, as the quantity is retrieved via a DB count
1092
- let(:order) { create :order_with_line_items, line_items_count: 3 }
1093
-
1094
- it 'sums the quantity of all line items' do
1095
- expect(order.quantity).to eq 3
1096
- end
1097
- end
1098
-
1099
- describe '#has_non_reimbursement_related_refunds?' do
1100
- subject do
1101
- order.has_non_reimbursement_related_refunds?
1102
- end
1103
-
1104
- context 'no refunds exist' do
1105
- it { is_expected.to eq false }
1106
- end
1107
-
1108
- context 'a non-reimbursement related refund exists' do
1109
- let(:order) { refund.payment.order }
1110
- let(:refund) { create(:refund, reimbursement_id: nil, amount: 5) }
1111
-
1112
- it { is_expected.to eq true }
1113
- end
1114
-
1115
- context 'an old-style refund exists' do
1116
- let(:order) { create(:order_ready_to_ship) }
1117
- let(:payment) { order.payments.first.tap { |p| allow(p).to receive_messages(profiles_supported?: false) } }
1118
- let!(:refund_payment) {
1119
- build(:payment, amount: -1, order: order, state: 'completed', source: payment).tap do |p|
1120
- allow(p).to receive_messages(profiles_supported?: false)
1121
- p.save!
1122
- end
1123
- }
1124
-
1125
- it { is_expected.to eq true }
1126
- end
1127
-
1128
- context 'a reimbursement related refund exists' do
1129
- let(:order) { refund.payment.order }
1130
- let(:refund) { create(:refund, reimbursement_id: 123, amount: 5, payment_amount: 14) }
1131
-
1132
- it { is_expected.to eq false }
1133
- end
1134
- end
1135
-
1136
- describe "#create_proposed_shipments" do
1137
- subject(:order) { create(:order) }
1138
- it "assigns the coordinator returned shipments to its shipments" do
1139
- shipment = build(:shipment)
1140
- allow_any_instance_of(Spree::Stock::SimpleCoordinator).to receive(:shipments).and_return([shipment])
1141
- subject.create_proposed_shipments
1142
- expect(subject.shipments).to eq [shipment]
1143
- end
1144
-
1145
- it "raises an error if any shipments are ready" do
1146
- shipment = create(:shipment, order: subject, state: "ready")
1147
-
1148
- expect {
1149
- expect {
1150
- subject.create_proposed_shipments
1151
- }.to raise_error(Spree::Order::CannotRebuildShipments)
1152
- }.not_to change { subject.reload.shipments.pluck(:id) }
1153
-
1154
- expect { shipment.reload }.not_to raise_error
1155
- end
1156
-
1157
- it "raises an error if any shipments are shipped" do
1158
- shipment = create(:shipment, order: subject, state: "shipped")
1159
- expect {
1160
- expect {
1161
- subject.create_proposed_shipments
1162
- }.to raise_error(Spree::Order::CannotRebuildShipments)
1163
- }.not_to change { subject.reload.shipments.pluck(:id) }
1164
-
1165
- expect { shipment.reload }.not_to raise_error
1166
- end
1167
- end
1168
-
1169
- describe "#all_inventory_units_returned?" do
1170
- let(:order) { create(:order_with_line_items, line_items_count: 3) }
1171
-
1172
- subject { order.all_inventory_units_returned? }
1173
-
1174
- context "all inventory units are returned" do
1175
- before { order.inventory_units.update_all(state: 'returned') }
1176
-
1177
- it "is true" do
1178
- expect(subject).to eq true
1179
- end
1180
- end
1181
-
1182
- context "some inventory units are returned" do
1183
- before do
1184
- order.inventory_units.first.update_attribute(:state, 'returned')
1185
- end
1186
-
1187
- it "is false" do
1188
- expect(subject).to eq false
1189
- end
1190
- end
1191
-
1192
- context "no inventory units are returned" do
1193
- it "is false" do
1194
- expect(subject).to eq false
1195
- end
1196
- end
1197
- end
1198
-
1199
- context "store credit" do
1200
- shared_examples "check total store credit from payments" do
1201
- context "with valid payments" do
1202
- let(:order) { payment.order }
1203
- let!(:payment) { create(:store_credit_payment) }
1204
- let!(:second_payment) { create(:store_credit_payment, order: order) }
1205
-
1206
- subject { order }
1207
-
1208
- it "returns the sum of the payment amounts" do
1209
- expect(subject.total_applicable_store_credit).to eq(payment.amount + second_payment.amount)
1210
- end
1211
- end
1212
-
1213
- context "without valid payments" do
1214
- let(:order) { create(:order) }
1215
-
1216
- subject { order }
1217
-
1218
- it "returns 0" do
1219
- expect(subject.total_applicable_store_credit).to be_zero
1220
- end
1221
- end
1222
- end
1223
-
1224
- describe "#add_store_credit_payments" do
1225
- let(:order_total) { 500.00 }
1226
-
1227
- before { create(:store_credit_payment_method) }
1228
-
1229
- subject { order.add_store_credit_payments }
1230
-
1231
- context "there is no store credit" do
1232
- let(:order) { create(:order, total: order_total) }
1233
-
1234
- context "there is a credit card payment" do
1235
- let!(:cc_payment) { create(:payment, order: order, amount: order_total) }
1236
-
1237
- before do
1238
- # callbacks recalculate total based on line items
1239
- # this ensures the total is what we expect
1240
- order.update_column(:total, order_total)
1241
- subject
1242
- order.reload
1243
- end
1244
-
1245
- it "charges the outstanding balance to the credit card" do
1246
- expect(order.errors.messages).to be_empty
1247
- expect(order.payments.count).to eq 1
1248
- expect(order.payments.first.source).to be_a(Spree::CreditCard)
1249
- expect(order.payments.first.amount).to eq order_total
1250
- end
1251
- end
1252
- end
1253
-
1254
- context 'there is store credit in another currency' do
1255
- let(:order) { create(:order_with_totals, user: user, line_items_price: order_total).tap(&:recalculate) }
1256
- let!(:store_credit_usd) { create(:store_credit, user: user, amount: 1, currency: 'USD') }
1257
- let!(:store_credit_gbp) { create(:store_credit, user: user, amount: 1, currency: 'GBP') }
1258
- let(:user) { create(:user) }
1259
-
1260
- it 'only adds the credit in the matching currency' do
1261
- expect {
1262
- order.add_store_credit_payments
1263
- }.to change {
1264
- order.payments.count
1265
- }.by(1)
1266
-
1267
- applied_store_credits = order.payments.store_credits.map(&:source)
1268
- expect(applied_store_credits).to match_array([store_credit_usd])
1269
- end
1270
- end
1271
-
1272
- context "there is enough store credit to pay for the entire order" do
1273
- let(:store_credit) { create(:store_credit, amount: order_total) }
1274
- let(:order) { create(:order_with_totals, user: store_credit.user, line_items_price: order_total).tap(&:recalculate) }
1275
-
1276
- context "there are no other payments" do
1277
- before do
1278
- subject
1279
- order.reload
1280
- end
1281
-
1282
- it "creates a store credit payment for the full amount" do
1283
- expect(order.errors.messages).to be_empty
1284
- expect(order.payments.count).to eq 1
1285
- expect(order.payments.first).to be_store_credit
1286
- expect(order.payments.first.amount).to eq order_total
1287
- end
1288
- end
1289
-
1290
- context "there is a credit card payment" do
1291
- it "invalidates the credit card payment" do
1292
- cc_payment = create(:payment, order: order)
1293
- expect { subject }.to change { cc_payment.reload.state }.to 'invalid'
1294
- end
1295
- end
1296
- end
1297
-
1298
- context "the available store credit is not enough to pay for the entire order" do
1299
- let(:order_total) { 500 }
1300
- let(:store_credit_total) { order_total - 100 }
1301
- let(:store_credit) { create(:store_credit, amount: store_credit_total) }
1302
- let(:order) { create(:order_with_totals, user: store_credit.user, line_items_price: order_total).tap(&:recalculate) }
1303
-
1304
- context "there are no other payments" do
1305
- it "adds an error to the model" do
1306
- expect(subject).to be false
1307
- expect(order.errors.full_messages).to include(I18n.t('spree.store_credit.errors.unable_to_fund'))
1308
- end
1309
- end
1310
-
1311
- context "there is a completed credit card payment" do
1312
- let!(:cc_payment) { create(:payment, order: order, state: "completed", amount: 100) }
1313
-
1314
- it "successfully creates the store credit payments" do
1315
- expect { subject }.to change { order.payments.count }.from(1).to(2)
1316
- expect(order.errors).to be_empty
1317
- end
1318
- end
1319
-
1320
- context "there is a credit card payment" do
1321
- let!(:cc_payment) { create(:payment, order: order, state: "checkout") }
1322
-
1323
- before do
1324
- subject
1325
- end
1326
-
1327
- it "charges the outstanding balance to the credit card" do
1328
- expect(order.errors.messages).to be_empty
1329
- expect(order.payments.count).to eq 2
1330
- expect(order.payments.first.source).to be_a(Spree::CreditCard)
1331
- expect(order.payments.first.amount).to eq 100
1332
- end
1333
-
1334
- # see associated comment in order_decorator#add_store_credit_payments
1335
- context "the store credit is already in the pending state" do
1336
- before do
1337
- order.payments.store_credits.last.authorize!
1338
- order.add_store_credit_payments
1339
- end
1340
-
1341
- it "charges the outstanding balance to the credit card" do
1342
- expect(order.errors.messages).to be_empty
1343
- expect(order.payments.count).to eq 2
1344
- expect(order.payments.first.source).to be_a(Spree::CreditCard)
1345
- expect(order.payments.first.amount).to eq 100
1346
- end
1347
- end
1348
- end
1349
- end
1350
-
1351
- context "there are multiple store credits" do
1352
- context "they have different credit type priorities" do
1353
- let(:amount_difference) { 100 }
1354
- let!(:primary_store_credit) { create(:store_credit, amount: (order_total - amount_difference)) }
1355
- let!(:secondary_store_credit) { create(:store_credit, amount: order_total, user: primary_store_credit.user, credit_type: create(:secondary_credit_type)) }
1356
- let(:order) { create(:order_with_totals, user: primary_store_credit.user, line_items_price: order_total).tap(&:recalculate) }
1357
-
1358
- before do
1359
- subject
1360
- order.reload
1361
- end
1362
-
1363
- it "uses the primary store credit type over the secondary" do
1364
- primary_payment = order.payments.detect{ |x| x.source == primary_store_credit }
1365
- secondary_payment = order.payments.detect{ |x| x.source == secondary_store_credit }
1366
-
1367
- expect(order.payments.size).to eq 2
1368
- expect(primary_payment.source).to eq primary_store_credit
1369
- expect(secondary_payment.source).to eq secondary_store_credit
1370
- expect(primary_payment.amount).to eq(order_total - amount_difference)
1371
- expect(secondary_payment.amount).to eq(amount_difference)
1372
- end
1373
- end
1374
- end
1375
- end
1376
-
1377
- describe "#covered_by_store_credit" do
1378
- subject do
1379
- order.covered_by_store_credit
1380
- end
1381
-
1382
- let(:order) { create(:order_with_line_items, user: user, store: store) }
1383
-
1384
- context "order doesn't have an associated user" do
1385
- let(:user) { nil }
1386
- it { is_expected.to eq(false) }
1387
- end
1388
-
1389
- context "order has an associated user" do
1390
- context "user has enough store credit to pay for the order" do
1391
- let!(:credit) { create(:store_credit, user: user, amount: 1000) }
1392
- it { is_expected.to eq(true) }
1393
- end
1394
-
1395
- context "user does not have enough store credit to pay for the order" do
1396
- let!(:credit) { create(:store_credit, user: user, amount: 1) }
1397
- it { is_expected.to eq(false) }
1398
- end
1399
- end
1400
- end
1401
-
1402
- describe "#total_available_store_credit" do
1403
- subject do
1404
- order.total_available_store_credit
1405
- end
1406
-
1407
- context "order does not have an associated user" do
1408
- let(:user) { nil }
1409
- it { is_expected.to eq(0) }
1410
- end
1411
-
1412
- context "order has an associated user" do
1413
- let!(:credit) { create(:store_credit, user: user, amount: 25) }
1414
- it { is_expected.to eq(25) }
1415
- end
1416
- end
1417
-
1418
- describe "#order_total_after_store_credit" do
1419
- let(:order_total) { 100.0 }
1420
-
1421
- subject { create(:order, total: order_total) }
1422
-
1423
- before do
1424
- allow(subject).to receive_messages(total_applicable_store_credit: applicable_store_credit)
1425
- end
1426
-
1427
- context "order's user has store credits" do
1428
- let(:applicable_store_credit) { 10.0 }
1429
-
1430
- it "deducts the applicable store credit" do
1431
- expect(subject.order_total_after_store_credit).to eq(order_total - applicable_store_credit)
1432
- end
1433
- end
1434
-
1435
- context "order's user does not have any store credits" do
1436
- let(:applicable_store_credit) { 0.0 }
1437
-
1438
- it "returns the order total" do
1439
- expect(subject.order_total_after_store_credit).to eq order_total
1440
- end
1441
- end
1442
- end
1443
-
1444
- describe "#total_applicable_store_credit" do
1445
- context "order is in the confirm state" do
1446
- before { order.update_attributes(state: 'confirm') }
1447
- include_examples "check total store credit from payments"
1448
- end
1449
-
1450
- context "order is completed" do
1451
- before { order.update_attributes(state: 'complete') }
1452
- include_examples "check total store credit from payments"
1453
- end
1454
-
1455
- context "order is in any state other than confirm or complete" do
1456
- context "the associated user has store credits" do
1457
- let(:store_credit) { create(:store_credit) }
1458
- let(:order) { create(:order, user: store_credit.user) }
1459
-
1460
- subject { order }
1461
-
1462
- context "the store credit is more than the order total" do
1463
- let(:order_total) { store_credit.amount - 1 }
1464
-
1465
- before { order.update_attributes(total: order_total) }
1466
-
1467
- it "returns the order total" do
1468
- expect(subject.total_applicable_store_credit).to eq order_total
1469
- end
1470
- end
1471
-
1472
- context "the store credit is less than the order total" do
1473
- let(:order_total) { store_credit.amount * 10 }
1474
-
1475
- before { order.update_attributes(total: order_total) }
1476
-
1477
- it "returns the store credit amount" do
1478
- expect(subject.total_applicable_store_credit).to eq store_credit.amount
1479
- end
1480
- end
1481
- end
1482
-
1483
- context "the associated user does not have store credits" do
1484
- let(:order) { create(:order) }
1485
-
1486
- subject { order }
1487
-
1488
- it "returns 0" do
1489
- expect(subject.total_applicable_store_credit).to be_zero
1490
- end
1491
- end
1492
-
1493
- context "the order does not have an associated user" do
1494
- subject { create(:order, user: nil) }
1495
-
1496
- it "returns 0" do
1497
- expect(subject.total_applicable_store_credit).to be_zero
1498
- end
1499
- end
1500
- end
1501
- end
1502
-
1503
- describe "#display_total_applicable_store_credit" do
1504
- let(:total_applicable_store_credit) { 10.00 }
1505
-
1506
- subject { create(:order) }
1507
-
1508
- before { allow(subject).to receive_messages(total_applicable_store_credit: total_applicable_store_credit) }
1509
-
1510
- it "returns a money instance" do
1511
- expect(subject.display_total_applicable_store_credit).to be_a(Spree::Money)
1512
- end
1513
-
1514
- it "returns a negative amount" do
1515
- expect(subject.display_total_applicable_store_credit.money.cents).to eq(total_applicable_store_credit * -100.0)
1516
- end
1517
- end
1518
-
1519
- describe "#record_ip_address" do
1520
- let(:ip_address) { "127.0.0.1" }
1521
-
1522
- subject { -> { order.record_ip_address(ip_address) } }
1523
-
1524
- it "updates the last used IP address" do
1525
- expect(subject).to change(order, :last_ip_address).to(ip_address)
1526
- end
1527
-
1528
- # IP address tracking should not raise validation exceptions
1529
- context "with an invalid order" do
1530
- before { allow(order).to receive(:valid?).and_return(false) }
1531
-
1532
- it "updates the IP address" do
1533
- expect(subject).to change(order, :last_ip_address).to(ip_address)
1534
- end
1535
- end
1536
- end
1537
-
1538
- describe "#display_order_total_after_store_credit" do
1539
- let(:order_total_after_store_credit) { 10.00 }
1540
-
1541
- subject { create(:order) }
1542
-
1543
- before { allow(subject).to receive_messages(order_total_after_store_credit: order_total_after_store_credit) }
1544
-
1545
- it "returns a money instance" do
1546
- expect(subject.display_order_total_after_store_credit).to be_a(Spree::Money)
1547
- end
1548
-
1549
- it "returns the order_total_after_store_credit amount" do
1550
- expect(subject.display_order_total_after_store_credit.money.cents).to eq(order_total_after_store_credit * 100.0)
1551
- end
1552
- end
1553
-
1554
- describe "#display_total_available_store_credit" do
1555
- let(:total_available_store_credit) { 10.00 }
1556
-
1557
- subject { create(:order) }
1558
-
1559
- before { allow(subject).to receive_messages(total_available_store_credit: total_available_store_credit) }
1560
-
1561
- it "returns a money instance" do
1562
- expect(subject.display_total_available_store_credit).to be_a(Spree::Money)
1563
- end
1564
-
1565
- it "returns the total_available_store_credit amount" do
1566
- expect(subject.display_total_available_store_credit.money.cents).to eq(total_available_store_credit * 100.0)
1567
- end
1568
- end
1569
-
1570
- describe "#display_store_credit_remaining_after_capture" do
1571
- let(:total_available_store_credit) { 10.00 }
1572
- let(:total_applicable_store_credit) { 5.00 }
1573
-
1574
- subject { create(:order) }
1575
-
1576
- before do
1577
- allow(subject).to receive_messages(total_available_store_credit: total_available_store_credit,
1578
- total_applicable_store_credit: total_applicable_store_credit)
1579
- end
1580
-
1581
- it "returns a money instance" do
1582
- expect(subject.display_store_credit_remaining_after_capture).to be_a(Spree::Money)
1583
- end
1584
-
1585
- it "returns all of the user's available store credit minus what's applied to the order amount" do
1586
- amount_remaining = total_available_store_credit - total_applicable_store_credit
1587
- expect(subject.display_store_credit_remaining_after_capture.money.cents).to eq(amount_remaining * 100.0)
1588
- end
1589
- end
1590
-
1591
- context 'when not capturing at order completion' do
1592
- let!(:store_credit_payment_method) do
1593
- create(
1594
- :store_credit_payment_method,
1595
- auto_capture: false, # not capturing at completion time
1596
- )
1597
- end
1598
-
1599
- describe '#after_cancel' do
1600
- let(:user) { create(:user) }
1601
- let!(:store_credit) do
1602
- create(:store_credit, amount: 100, user: user)
1603
- end
1604
- let(:order) do
1605
- create(
1606
- :order_with_line_items,
1607
- user: user,
1608
- line_items_count: 1,
1609
- # order will be $20 total:
1610
- line_items_price: 10,
1611
- shipment_cost: 10
1612
- )
1613
- end
1614
-
1615
- before do
1616
- order.contents.advance
1617
- order.complete!
1618
- end
1619
-
1620
- it 'releases the pending store credit authorization' do
1621
- expect {
1622
- order.cancel!
1623
- }.to change {
1624
- store_credit.reload.amount_authorized
1625
- }.from(20).to(0)
1626
-
1627
- expect(store_credit.amount_remaining).to eq 100
1628
- end
1629
- end
1630
- end
1631
- end
1632
-
1633
- context 'update_params_payment_source' do
1634
- subject { described_class.new }
1635
-
1636
- it 'is deprecated' do
1637
- subject.instance_variable_set('@updating_params', {})
1638
- expect(Spree::Deprecation).to receive(:warn)
1639
- subject.send(:update_params_payment_source)
1640
- end
1641
- end
1642
-
1643
- describe "#validate_payments_attributes" do
1644
- let(:attributes) { [ActionController::Parameters.new(payment_method_id: payment_method.id)] }
1645
- subject do
1646
- order.validate_payments_attributes(attributes)
1647
- end
1648
-
1649
- context "with empty array" do
1650
- let(:attributes) { [] }
1651
- it "doesn't error" do
1652
- subject
1653
- end
1654
- end
1655
-
1656
- context "with no payment method specified" do
1657
- let(:attributes) { [ActionController::Parameters.new({})] }
1658
- it "doesn't error" do
1659
- subject
1660
- end
1661
- end
1662
-
1663
- context "with valid payment method" do
1664
- let(:payment_method) { create(:check_payment_method) }
1665
- it "doesn't error" do
1666
- subject
1667
- end
1668
- end
1669
-
1670
- context "with inactive payment method" do
1671
- let(:payment_method) { create(:check_payment_method, active: false) }
1672
-
1673
- it "raises RecordNotFound" do
1674
- expect { subject }.to raise_error(ActiveRecord::RecordNotFound)
1675
- end
1676
- end
1677
-
1678
- context "with unavailable payment method" do
1679
- let(:payment_method) { create(:check_payment_method, available_to_users: false) }
1680
-
1681
- it "raises RecordNotFound" do
1682
- expect { subject }.to raise_error(ActiveRecord::RecordNotFound)
1683
- end
1684
- end
1685
-
1686
- context "with soft-deleted payment method" do
1687
- let(:payment_method) { create(:check_payment_method, deleted_at: Time.current) }
1688
-
1689
- it "raises RecordNotFound" do
1690
- expect { subject }.to raise_error(ActiveRecord::RecordNotFound)
1691
- end
1692
- end
1693
- end
1694
- end