solidus_core 2.10.2 → 2.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (495) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree.js.erb +31 -2
  3. data/app/controllers/spree/base_controller.rb +1 -0
  4. data/app/mailers/spree/base_mailer.rb +4 -0
  5. data/app/mailers/spree/order_mailer.rb +1 -1
  6. data/app/models/concerns/spree/active_storage_adapter.rb +116 -0
  7. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +69 -0
  8. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
  9. data/app/models/concerns/spree/default_price.rb +1 -1
  10. data/app/models/concerns/spree/soft_deletable.rb +18 -0
  11. data/app/models/concerns/spree/user_address_book.rb +86 -32
  12. data/app/models/concerns/spree/user_methods.rb +3 -2
  13. data/app/models/spree/ability.rb +34 -10
  14. data/app/models/spree/address.rb +94 -17
  15. data/app/models/spree/address/name.rb +49 -0
  16. data/app/models/spree/address/state_validator.rb +71 -0
  17. data/app/models/spree/adjustment.rb +1 -1
  18. data/app/models/spree/base.rb +1 -0
  19. data/app/models/spree/calculator/default_tax.rb +1 -1
  20. data/app/models/spree/calculator/percent_per_item.rb +4 -4
  21. data/app/models/spree/calculator/price_sack.rb +1 -1
  22. data/app/models/spree/credit_card.rb +2 -2
  23. data/app/models/spree/customer_return.rb +4 -2
  24. data/app/models/spree/exchange.rb +1 -1
  25. data/app/models/spree/image/active_storage_attachment.rb +21 -0
  26. data/app/models/spree/inventory_unit.rb +1 -1
  27. data/app/models/spree/line_item.rb +13 -4
  28. data/app/models/spree/option_type.rb +1 -1
  29. data/app/models/spree/option_value.rb +2 -2
  30. data/app/models/spree/order.rb +91 -20
  31. data/app/models/spree/order/checkout.rb +1 -0
  32. data/app/models/spree/order_inventory.rb +16 -4
  33. data/app/models/spree/order_merger.rb +6 -4
  34. data/app/models/spree/order_promotion.rb +1 -1
  35. data/app/models/spree/order_updater.rb +11 -10
  36. data/app/models/spree/payment.rb +3 -3
  37. data/app/models/spree/payment/cancellation.rb +3 -3
  38. data/app/models/spree/payment/processing.rb +54 -30
  39. data/app/models/spree/payment_method.rb +8 -9
  40. data/app/models/spree/preference.rb +1 -1
  41. data/app/models/spree/price.rb +2 -8
  42. data/app/models/spree/product.rb +19 -14
  43. data/app/models/spree/product/scopes.rb +9 -4
  44. data/app/models/spree/promotion.rb +18 -7
  45. data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
  46. data/app/models/spree/promotion_action.rb +1 -7
  47. data/app/models/spree/promotion_code.rb +6 -1
  48. data/app/models/spree/promotion_code_batch.rb +1 -1
  49. data/app/models/spree/promotion_handler/coupon.rb +2 -2
  50. data/app/models/spree/promotion_rule.rb +1 -1
  51. data/app/models/spree/promotion_rule_role.rb +1 -1
  52. data/app/models/spree/refund.rb +60 -12
  53. data/app/models/spree/reimbursement.rb +27 -0
  54. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +10 -3
  55. data/app/models/spree/return_authorization.rb +1 -1
  56. data/app/models/spree/return_item.rb +21 -10
  57. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
  58. data/app/models/spree/role.rb +1 -1
  59. data/app/models/spree/shipment.rb +2 -2
  60. data/app/models/spree/shipping_calculator.rb +1 -1
  61. data/app/models/spree/shipping_manifest.rb +2 -2
  62. data/app/models/spree/shipping_method.rb +2 -9
  63. data/app/models/spree/shipping_rate.rb +1 -1
  64. data/app/models/spree/shipping_rate_tax.rb +1 -1
  65. data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
  66. data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
  67. data/app/models/spree/stock/package.rb +1 -1
  68. data/app/models/spree/stock/simple_coordinator.rb +1 -3
  69. data/app/models/spree/stock_item.rb +2 -8
  70. data/app/models/spree/stock_movement.rb +2 -0
  71. data/app/models/spree/store.rb +1 -1
  72. data/app/models/spree/store_credit.rb +1 -7
  73. data/app/models/spree/store_credit_category.rb +30 -3
  74. data/app/models/spree/store_credit_event.rb +1 -7
  75. data/app/models/spree/store_credit_reason.rb +0 -4
  76. data/app/models/spree/tax/tax_helpers.rb +1 -1
  77. data/app/models/spree/tax_category.rb +2 -8
  78. data/app/models/spree/tax_rate.rb +7 -7
  79. data/app/models/spree/taxon.rb +1 -1
  80. data/app/models/spree/taxon/active_storage_attachment.rb +19 -0
  81. data/app/models/spree/user_address.rb +8 -2
  82. data/app/models/spree/variant.rb +7 -13
  83. data/app/models/spree/variant_property_rule.rb +5 -1
  84. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +8 -3
  85. data/app/models/spree/zone.rb +1 -1
  86. data/config/locales/en.yml +44 -5
  87. data/db/default/spree/countries.rb +1 -1
  88. data/db/default/spree/states.rb +12 -4
  89. data/db/default/spree/store_credit.rb +2 -2
  90. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
  91. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
  92. data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
  93. data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
  94. data/lib/generators/solidus/install/install_generator.rb +253 -0
  95. data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +36 -5
  96. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
  97. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
  98. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
  99. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
  100. data/lib/generators/spree/install/install_generator.rb +7 -189
  101. data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
  102. data/lib/spree/app_configuration.rb +117 -51
  103. data/lib/spree/awesome_nested_set_override.rb +44 -0
  104. data/lib/spree/core.rb +5 -11
  105. data/lib/spree/core/controller_helpers/auth.rb +17 -4
  106. data/lib/spree/core/controller_helpers/current_host.rb +17 -0
  107. data/lib/spree/core/controller_helpers/order.rb +8 -7
  108. data/lib/spree/core/engine.rb +39 -2
  109. data/lib/spree/core/importer/order.rb +24 -10
  110. data/lib/spree/core/permalinks.rb +1 -3
  111. data/lib/spree/core/product_filters.rb +6 -5
  112. data/lib/spree/core/state_machines.rb +20 -1
  113. data/lib/spree/core/state_machines/order.rb +249 -0
  114. data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
  115. data/lib/spree/core/version.rb +1 -1
  116. data/lib/spree/encryptor.rb +25 -0
  117. data/lib/spree/event.rb +40 -7
  118. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  119. data/lib/spree/event/configuration.rb +11 -6
  120. data/lib/spree/event/subscriber.rb +38 -18
  121. data/lib/spree/event/subscriber_registry.rb +92 -0
  122. data/lib/spree/i18n.rb +1 -1
  123. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  124. data/lib/spree/paranoia_deprecations.rb +32 -12
  125. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  126. data/lib/spree/permission_sets/default_customer.rb +16 -16
  127. data/lib/spree/permission_sets/order_display.rb +11 -11
  128. data/lib/spree/permission_sets/order_management.rb +1 -1
  129. data/lib/spree/permission_sets/product_display.rb +9 -9
  130. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  131. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  132. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  133. data/lib/spree/permission_sets/stock_display.rb +2 -2
  134. data/lib/spree/permission_sets/stock_management.rb +1 -1
  135. data/lib/spree/permission_sets/user_display.rb +3 -3
  136. data/lib/spree/permission_sets/user_management.rb +4 -3
  137. data/lib/spree/permitted_attributes.rb +4 -3
  138. data/lib/spree/preferences/preferable.rb +4 -3
  139. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  140. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  141. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  142. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  143. data/lib/spree/testing_support/capybara_ext.rb +3 -0
  144. data/lib/spree/testing_support/common_rake.rb +3 -3
  145. data/lib/spree/testing_support/dummy_app.rb +44 -23
  146. data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
  147. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
  148. data/lib/spree/testing_support/factories/address_factory.rb +1 -2
  149. data/lib/spree/testing_support/factories/image_factory.rb +1 -1
  150. data/lib/spree/testing_support/factories/promotion_factory.rb +6 -0
  151. data/lib/spree/testing_support/factories/refund_factory.rb +1 -0
  152. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  153. data/lib/spree/testing_support/factories/return_item_factory.rb +0 -1
  154. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +8 -0
  155. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -0
  156. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +3 -1
  157. data/lib/spree/testing_support/factories/taxon_factory.rb +4 -0
  158. data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
  159. data/lib/spree/testing_support/fixtures/blank.jpg +0 -0
  160. data/lib/spree/testing_support/job_helpers.rb +24 -0
  161. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  162. data/lib/spree/testing_support/preferences.rb +3 -1
  163. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  164. data/lib/spree/testing_support/translations.rb +25 -0
  165. data/solidus_core.gemspec +8 -5
  166. metadata +99 -377
  167. data/script/rails +0 -10
  168. data/spec/fixtures/thinking-cat.jpg +0 -0
  169. data/spec/helpers/base_helper_spec.rb +0 -168
  170. data/spec/helpers/products_helper_spec.rb +0 -202
  171. data/spec/helpers/taxons_helper_spec.rb +0 -43
  172. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  173. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  174. data/spec/lib/i18n_spec.rb +0 -97
  175. data/spec/lib/search/base_spec.rb +0 -91
  176. data/spec/lib/search/variant_spec.rb +0 -115
  177. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  178. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  179. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  180. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  181. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  182. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  183. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  184. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  185. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -48
  186. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  187. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  188. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  189. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  190. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
  191. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  192. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  193. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  194. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  195. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  196. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  197. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  198. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  199. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  200. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  201. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  202. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  203. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  204. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  205. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  206. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  207. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  208. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  209. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  210. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  211. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  212. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  213. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  214. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  215. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  216. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  217. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  218. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  219. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  220. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  221. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  222. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  223. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  224. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  225. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  226. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  227. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  228. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  229. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  230. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  231. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  232. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  233. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  234. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  235. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  236. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  237. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  238. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  239. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  240. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  241. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  242. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  243. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  244. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  245. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  246. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  247. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  248. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  249. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  250. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  251. data/spec/lib/spree/core/version_spec.rb +0 -19
  252. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  253. data/spec/lib/spree/event_spec.rb +0 -130
  254. data/spec/lib/spree/localized_number_spec.rb +0 -45
  255. data/spec/lib/spree/migrations_spec.rb +0 -32
  256. data/spec/lib/spree/money_spec.rb +0 -298
  257. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  258. data/spec/lib/spree/permitted_attributes_spec.rb +0 -41
  259. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  260. data/spec/lib/tasks/dummy_task.rake +0 -12
  261. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  262. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  263. data/spec/mailers/carton_mailer_spec.rb +0 -44
  264. data/spec/mailers/order_mailer_spec.rb +0 -117
  265. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  266. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  267. data/spec/mailers/test_mailer_spec.rb +0 -13
  268. data/spec/models/spree/ability_spec.rb +0 -279
  269. data/spec/models/spree/address_spec.rb +0 -399
  270. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  271. data/spec/models/spree/adjustment_spec.rb +0 -339
  272. data/spec/models/spree/asset_spec.rb +0 -25
  273. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  274. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  275. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  276. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  277. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  278. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  279. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  280. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  281. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  282. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  283. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  284. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  285. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  286. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  287. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
  288. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  289. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  290. data/spec/models/spree/calculator_spec.rb +0 -43
  291. data/spec/models/spree/carton_spec.rb +0 -145
  292. data/spec/models/spree/classification_spec.rb +0 -126
  293. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  294. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  295. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  296. data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
  297. data/spec/models/spree/country_spec.rb +0 -154
  298. data/spec/models/spree/credit_card_spec.rb +0 -373
  299. data/spec/models/spree/customer_return_spec.rb +0 -294
  300. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  301. data/spec/models/spree/exchange_spec.rb +0 -76
  302. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  303. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  304. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  305. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  306. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  307. data/spec/models/spree/gateway_spec.rb +0 -14
  308. data/spec/models/spree/image_spec.rb +0 -25
  309. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  310. data/spec/models/spree/line_item_spec.rb +0 -240
  311. data/spec/models/spree/option_type_spec.rb +0 -16
  312. data/spec/models/spree/option_value_spec.rb +0 -52
  313. data/spec/models/spree/order/address_spec.rb +0 -52
  314. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  315. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  316. data/spec/models/spree/order/checkout_spec.rb +0 -740
  317. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  318. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  319. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  320. data/spec/models/spree/order/payment_spec.rb +0 -280
  321. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  322. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  323. data/spec/models/spree/order/totals_spec.rb +0 -26
  324. data/spec/models/spree/order/validations_spec.rb +0 -17
  325. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  326. data/spec/models/spree/order_capturing_spec.rb +0 -16
  327. data/spec/models/spree/order_contents_spec.rb +0 -362
  328. data/spec/models/spree/order_inventory_spec.rb +0 -285
  329. data/spec/models/spree/order_merger_spec.rb +0 -162
  330. data/spec/models/spree/order_mutex_spec.rb +0 -89
  331. data/spec/models/spree/order_promotion_spec.rb +0 -33
  332. data/spec/models/spree/order_shipping_spec.rb +0 -247
  333. data/spec/models/spree/order_spec.rb +0 -1687
  334. data/spec/models/spree/order_taxation_spec.rb +0 -128
  335. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  336. data/spec/models/spree/order_updater_spec.rb +0 -556
  337. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  338. data/spec/models/spree/payment_create_spec.rb +0 -195
  339. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  340. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  341. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  342. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  343. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  344. data/spec/models/spree/payment_method_spec.rb +0 -408
  345. data/spec/models/spree/payment_spec.rb +0 -1270
  346. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  347. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  348. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  349. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  350. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  351. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  352. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  353. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  354. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  355. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  356. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  357. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  358. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  359. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  360. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  361. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
  362. data/spec/models/spree/preference_spec.rb +0 -79
  363. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  364. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  365. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  366. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  367. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  368. data/spec/models/spree/preferences/store_spec.rb +0 -40
  369. data/spec/models/spree/price_spec.rb +0 -150
  370. data/spec/models/spree/product/scopes_spec.rb +0 -164
  371. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  372. data/spec/models/spree/product_filter_spec.rb +0 -28
  373. data/spec/models/spree/product_property_spec.rb +0 -20
  374. data/spec/models/spree/product_spec.rb +0 -584
  375. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  376. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  377. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  378. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  379. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  380. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  381. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  382. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  383. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  384. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  385. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  386. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  387. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -227
  388. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  389. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  390. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  391. data/spec/models/spree/promotion_action_spec.rb +0 -44
  392. data/spec/models/spree/promotion_category_spec.rb +0 -19
  393. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  394. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  395. data/spec/models/spree/promotion_code_spec.rb +0 -206
  396. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  397. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  398. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  399. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  400. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  401. data/spec/models/spree/promotion_spec.rb +0 -945
  402. data/spec/models/spree/refund_spec.rb +0 -200
  403. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  404. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  405. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  406. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  407. data/spec/models/spree/reimbursement_spec.rb +0 -278
  408. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  409. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  410. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  411. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  412. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  413. data/spec/models/spree/return_authorization_spec.rb +0 -226
  414. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  415. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  416. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  417. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  418. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  419. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  420. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  421. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  422. data/spec/models/spree/return_item_spec.rb +0 -785
  423. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  424. data/spec/models/spree/shipment_spec.rb +0 -914
  425. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  426. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  427. data/spec/models/spree/shipping_method_spec.rb +0 -292
  428. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  429. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  430. data/spec/models/spree/state_spec.rb +0 -43
  431. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  432. data/spec/models/spree/stock/availability_spec.rb +0 -143
  433. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  434. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  435. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  436. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  437. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  438. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  439. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  440. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  441. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  442. data/spec/models/spree/stock/package_spec.rb +0 -182
  443. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  444. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  445. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  446. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  447. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  448. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  449. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  450. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  451. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  452. data/spec/models/spree/stock_item_spec.rb +0 -348
  453. data/spec/models/spree/stock_location_spec.rb +0 -288
  454. data/spec/models/spree/stock_movement_spec.rb +0 -58
  455. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  456. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  457. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  458. data/spec/models/spree/store_credit_spec.rb +0 -900
  459. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  460. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  461. data/spec/models/spree/store_spec.rb +0 -156
  462. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  463. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  464. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  465. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  466. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  467. data/spec/models/spree/tax_category_spec.rb +0 -50
  468. data/spec/models/spree/tax_rate_spec.rb +0 -317
  469. data/spec/models/spree/taxon_spec.rb +0 -197
  470. data/spec/models/spree/taxonomy_spec.rb +0 -15
  471. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
  472. data/spec/models/spree/unit_cancel_spec.rb +0 -126
  473. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
  474. data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
  475. data/spec/models/spree/user_spec.rb +0 -247
  476. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  477. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  478. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  479. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  480. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  481. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  482. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  483. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  484. data/spec/models/spree/variant_spec.rb +0 -862
  485. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  486. data/spec/models/spree/wallet_spec.rb +0 -155
  487. data/spec/models/spree/zone_spec.rb +0 -248
  488. data/spec/rails_helper.rb +0 -46
  489. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  490. data/spec/spec_helper.rb +0 -36
  491. data/spec/support/big_decimal.rb +0 -7
  492. data/spec/support/concerns/default_price.rb +0 -44
  493. data/spec/support/concerns/payment_source.rb +0 -66
  494. data/spec/support/concerns/working_factories.rb +0 -15
  495. data/spec/support/dummy_ability.rb +0 -7
@@ -1,70 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Order, type: :model do
6
- let(:order) { stub_model('Spree::Order') }
7
-
8
- describe ".is_risky?" do
9
- context "Not risky order" do
10
- let(:order) { FactoryBot.create(:order, payments: [payment]) }
11
- context "with avs_response == D" do
12
- let(:payment) { FactoryBot.create(:payment, avs_response: "D") }
13
- it "is not considered risky" do
14
- expect(order.is_risky?).to eq(false)
15
- end
16
- end
17
-
18
- context "with avs_response == M" do
19
- let(:payment) { FactoryBot.create(:payment, avs_response: "M") }
20
- it "is not considered risky" do
21
- expect(order.is_risky?).to eq(false)
22
- end
23
- end
24
-
25
- context "with avs_response == ''" do
26
- let(:payment) { FactoryBot.create(:payment, avs_response: "") }
27
- it "is not considered risky" do
28
- expect(order.is_risky?).to eq(false)
29
- end
30
- end
31
-
32
- context "with cvv_response_code == M" do
33
- let(:payment) { FactoryBot.create(:payment, cvv_response_code: "M") }
34
- it "is not considered risky" do
35
- expect(order.is_risky?).to eq(false)
36
- end
37
- end
38
-
39
- context "with cvv_response_message == ''" do
40
- let(:payment) { FactoryBot.create(:payment, cvv_response_message: "") }
41
- it "is not considered risky" do
42
- expect(order.is_risky?).to eq(false)
43
- end
44
- end
45
- end
46
-
47
- context "Risky order" do
48
- context "AVS response message" do
49
- let(:order) { FactoryBot.create(:order, payments: [FactoryBot.create(:payment, avs_response: "A")]) }
50
- it "returns true if the order has an avs_response" do
51
- expect(order.is_risky?).to eq(true)
52
- end
53
- end
54
-
55
- context "CVV response code" do
56
- let(:order) { FactoryBot.create(:order, payments: [FactoryBot.create(:payment, cvv_response_code: "N")]) }
57
- it "returns true if the order has an cvv_response_code" do
58
- expect(order.is_risky?).to eq(true)
59
- end
60
- end
61
-
62
- context "state == 'failed'" do
63
- let(:order) { FactoryBot.create(:order, payments: [FactoryBot.create(:payment, state: 'failed')]) }
64
- it "returns true if the order has state == 'failed'" do
65
- expect(order.is_risky?).to eq(true)
66
- end
67
- end
68
- end
69
- end
70
- end
@@ -1,122 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Order, type: :model do
6
- let(:order) { create(:order_with_line_items) }
7
-
8
- context "#next!" do
9
- context "when current state is confirm" do
10
- before do
11
- order.state = "confirm"
12
- order.save!
13
- end
14
-
15
- context "when payment processing succeeds" do
16
- let!(:payment) do
17
- create(:payment, state: 'checkout', order: order)
18
- end
19
-
20
- it "should finalize order when transitioning to complete state" do
21
- order.complete!
22
- expect(order).to be_complete
23
- expect(order).to be_completed
24
- end
25
-
26
- context "when credit card processing fails" do
27
- let!(:payment) do
28
- create(:payment, :failing, state: 'checkout', order: order)
29
- end
30
-
31
- it "should not complete the order" do
32
- expect(order.complete).to be false
33
- expect(order.state).to eq("confirm")
34
- end
35
- end
36
- end
37
- end
38
-
39
- context "when current state is address" do
40
- before do
41
- order.ensure_updated_shipments
42
- order.next!
43
- expect(order.all_adjustments).to be_empty
44
- expect(order.state).to eq "address"
45
- end
46
-
47
- it "adjusts tax rates when transitioning to delivery" do
48
- expect(Spree::TaxCalculator::Default).to receive(:new).once.with(order).and_call_original
49
- order.next!
50
- end
51
- end
52
- end
53
-
54
- context "#can_cancel?" do
55
- let(:order) { create(:completed_order_with_totals) }
56
- states = [:pending, :backorder, :ready]
57
-
58
- states.each do |shipment_state|
59
- it "should be true if shipment_state is #{shipment_state}" do
60
- expect(order).to be_completed
61
- order.shipment_state = shipment_state
62
-
63
- expect(order).to be_can_cancel
64
- end
65
- end
66
-
67
- (Spree::Shipment.state_machine.states.keys - states).each do |shipment_state|
68
- it "should be false if shipment_state is #{shipment_state}" do
69
- expect(order).to be_completed
70
- order.shipment_state = shipment_state
71
- expect(order).not_to be_can_cancel
72
- end
73
- end
74
- end
75
-
76
- context "#cancel" do
77
- let!(:order) { create(:completed_order_with_totals) }
78
- let!(:shipment) { order.shipments.first }
79
-
80
- it "is setup correctly" do
81
- expect(order).to be_completed
82
- expect(order).to be_complete
83
- expect(order).to be_allow_cancel
84
- end
85
-
86
- it "should send a cancel email" do
87
- perform_enqueued_jobs do
88
- order.cancel!
89
- end
90
-
91
- mail = ActionMailer::Base.deliveries.last
92
- expect(mail.subject).to include "Cancellation"
93
- end
94
-
95
- context "resets payment state" do
96
- let!(:payment) { create(:payment, order: order, amount: order.total, state: "completed") }
97
-
98
- context "without shipped items" do
99
- it "should set payment state to 'void'" do
100
- expect { order.cancel! }.to change{ order.reload.payment_state }.to("void")
101
- end
102
- end
103
-
104
- context "with shipped items" do
105
- before do
106
- order.shipments[0].ship!
107
- end
108
-
109
- it "should not alter the payment state" do
110
- expect(order).to_not be_allow_cancel
111
- expect(order.cancel).to be false
112
- expect(order.payment_state).to eql "paid"
113
- end
114
- end
115
-
116
- it "should automatically refund all payments" do
117
- expect(order).to be_allow_cancel
118
- expect { order.cancel! }.to change{ payment.reload.state }.to("void")
119
- end
120
- end
121
- end
122
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree
6
- RSpec.describe Order, type: :model do
7
- let(:order) { create(:order) }
8
- let(:shirt) { create(:variant) }
9
-
10
- context "adds item to cart and activates promo" do
11
- let(:promotion) { Promotion.create name: 'Huhu', apply_automatically: true }
12
- let(:calculator) { Calculator::FlatPercentItemTotal.new(preferred_flat_percent: 10) }
13
- let!(:action) { Promotion::Actions::CreateAdjustment.create(promotion: promotion, calculator: calculator) }
14
-
15
- before { order.contents.add(shirt, 1) }
16
-
17
- context "item quantity changes" do
18
- it "recalculates order adjustments" do
19
- expect {
20
- order.contents.add(shirt, 3)
21
- }.to change { order.adjustments.eligible.pluck(:amount) }
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree
6
- RSpec.describe Spree::Order, type: :model do
7
- context "validations" do
8
- # Regression test for https://github.com/spree/spree/issues/2214
9
- it "does not return two error messages when email is blank" do
10
- order = Spree::Order.new
11
- allow(order).to receive_messages(require_email: true)
12
- order.valid?
13
- expect(order.errors[:email]).to eq(["can't be blank"])
14
- end
15
- end
16
- end
17
- end
@@ -1,233 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::OrderCancellations do
6
- describe "#cancel_unit" do
7
- subject { described_class.new(order).cancel_unit(inventory_unit) }
8
- let(:order) { create(:shipped_order, line_items_count: 1) }
9
- let(:inventory_unit) { order.inventory_units.first }
10
-
11
- it "creates a UnitCancel record" do
12
- expect { subject }.to change { Spree::UnitCancel.count }.by(1)
13
- expect(subject.inventory_unit).to eq inventory_unit
14
- end
15
-
16
- it "cancels the inventory unit" do
17
- expect { subject }.to change { inventory_unit.state }.to "canceled"
18
- end
19
-
20
- context "when a reason is specified" do
21
- subject { order.cancellations.cancel_unit(inventory_unit, reason: "some reason") }
22
-
23
- it "sets the reason on the UnitCancel" do
24
- expect(subject.reason).to eq("some reason")
25
- end
26
- end
27
-
28
- context "when a reason is not specified" do
29
- it "sets a default reason on the UnitCancel" do
30
- expect(subject.reason).to eq Spree::UnitCancel::DEFAULT_REASON
31
- end
32
- end
33
-
34
- context "when a whodunnit is specified" do
35
- subject { order.cancellations.cancel_unit(inventory_unit, whodunnit: "some automated system") }
36
-
37
- it "sets the user on the UnitCancel and print a deprecation" do
38
- expect(Spree::Deprecation).to receive(:warn)
39
- expect(subject.created_by).to eq("some automated system")
40
- end
41
- end
42
-
43
- context "when a whodunnit is not specified" do
44
- it "does not set created_by on the UnitCancel" do
45
- expect(subject.created_by).to be_nil
46
- end
47
- end
48
-
49
- context "when a created_by is specified" do
50
- subject { order.cancellations.cancel_unit(inventory_unit, created_by: "some automated system") }
51
-
52
- it "sets the user on the UnitCancel" do
53
- expect(subject.created_by).to eq("some automated system")
54
- end
55
- end
56
-
57
- context "when a created_by is not specified" do
58
- it "does not set created_by on the UnitCancel" do
59
- expect(subject.created_by).to be_nil
60
- end
61
- end
62
- end
63
-
64
- describe "#reimburse_units" do
65
- subject { described_class.new(order).reimburse_units(inventory_units, created_by: created_by_user) }
66
- let(:order) { create(:shipped_order, line_items_count: 2) }
67
- let(:inventory_units) { order.inventory_units }
68
- let!(:default_refund_reason) { Spree::RefundReason.find_or_create_by!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false) }
69
- let(:created_by_user) { create(:user, email: 'user@email.com') }
70
-
71
- it "creates and performs a reimbursement" do
72
- expect { subject }.to change { Spree::Reimbursement.count }.by(1)
73
- expect(subject.refunds.size).to eq 1
74
- end
75
-
76
- it "creates return items for the inventory units and accepts them" do
77
- expect { subject }.to change { Spree::ReturnItem.count }.by(inventory_units.count)
78
-
79
- return_items = subject.return_items
80
- expect(return_items.map(&:acceptance_status)).to all eq "accepted"
81
- expect(return_items.map(&:inventory_unit)).to match_array(inventory_units)
82
- end
83
- end
84
-
85
- describe "#short_ship" do
86
- subject { described_class.new(order).short_ship([inventory_unit]) }
87
-
88
- let(:order) { create(:order_ready_to_ship, line_items_count: 1) }
89
- let(:inventory_unit) { order.inventory_units.first }
90
- let(:shipment) { inventory_unit.shipment }
91
-
92
- it "creates a UnitCancel record" do
93
- expect { subject }.to change { Spree::UnitCancel.count }.by(1)
94
-
95
- unit_cancel = Spree::UnitCancel.last
96
- expect(unit_cancel.inventory_unit).to eq inventory_unit
97
- expect(unit_cancel.reason).to eq Spree::UnitCancel::SHORT_SHIP
98
- end
99
-
100
- it "cancels the inventory unit" do
101
- expect { subject }.to change { inventory_unit.state }.to "canceled"
102
- end
103
-
104
- it "updates the shipment.state" do
105
- expect { subject }.to change { shipment.reload.state }.from('ready').to('shipped')
106
- end
107
-
108
- it "updates the order.shipment_state" do
109
- expect { subject }.to change { order.shipment_state }.from('ready').to('shipped')
110
- end
111
-
112
- it "adjusts the order" do
113
- expect { subject }.to change { order.reload.total }.by(-10.0)
114
- end
115
-
116
- context "multiple inventory units" do
117
- subject { described_class.new(order).short_ship(inventory_units) }
118
-
119
- let(:quantity) { 4 }
120
- let!(:order) { create(:order_with_line_items, line_items_attributes: [{ quantity: quantity }]) }
121
- let(:inventory_units) { Spree::InventoryUnit.find(order.line_items.first.inventory_units.pluck(:id)) }
122
-
123
- it "adjusts the order" do
124
- expect { subject }.to change { order.reload.total }.by(-40.0)
125
- end
126
- end
127
-
128
- it "sends a cancellation email" do
129
- mail_double = double
130
- expect(Spree::OrderMailer).to receive(:inventory_cancellation_email).with(order, [inventory_unit]).and_return(mail_double)
131
- expect(mail_double).to receive(:deliver_later)
132
- subject
133
- end
134
-
135
- context "when send_cancellation_mailer is false" do
136
- subject { described_class.new(order).short_ship([inventory_unit]) }
137
-
138
- before do
139
- @original_send_boolean = described_class.send_cancellation_mailer
140
- described_class.send_cancellation_mailer = false
141
- end
142
-
143
- after { described_class.send_cancellation_mailer = @original_send_boolean }
144
-
145
- it "does not send a cancellation email" do
146
- expect(Spree::OrderMailer).not_to receive(:inventory_cancellation_email)
147
- subject
148
- end
149
- end
150
-
151
- context "when a created_by is specified" do
152
- subject { order.cancellations.short_ship([inventory_unit], created_by: 'some automated system') }
153
-
154
- let(:user) { order.user }
155
-
156
- it "sets the user on the UnitCancel" do
157
- expect { subject }.to change { Spree::UnitCancel.count }.by(1)
158
- expect(Spree::UnitCancel.last.created_by).to eq("some automated system")
159
- end
160
- end
161
-
162
- context "when a whodunnit is specified" do
163
- subject { order.cancellations.short_ship([inventory_unit], whodunnit: 'some automated system') }
164
-
165
- let(:user) { order.user }
166
-
167
- it "sets the user on the UnitCancel and raises a deprecation # WARNING: " do
168
- expect(Spree::Deprecation).to receive(:warn)
169
-
170
- expect { subject }.to change { Spree::UnitCancel.count }.by(1)
171
- expect(Spree::UnitCancel.last.created_by).to eq("some automated system")
172
- end
173
- end
174
-
175
- context "when rounding is required" do
176
- let(:order) { create(:order_ready_to_ship, line_items_count: 1, line_items_price: 0.83) }
177
- let(:line_item) { order.line_items.to_a.first }
178
- let(:inventory_unit_1) { line_item.inventory_units[0] }
179
- let(:inventory_unit_2) { line_item.inventory_units[1] }
180
- let(:promotion) { create(:promotion, :with_line_item_adjustment) }
181
- let(:promotion_action) { promotion.actions[0] }
182
-
183
- before do
184
- order.contents.add(line_item.variant)
185
-
186
- # make the total $1.67 so it divides unevenly
187
- line_item.adjustments.create!(
188
- order: order,
189
- amount: 0.01,
190
- label: 'some promo',
191
- source: promotion_action,
192
- finalized: true,
193
- )
194
- order.recalculate
195
- end
196
-
197
- it "generates the correct total amount" do
198
- order.cancellations.short_ship([inventory_unit_1])
199
- order.cancellations.short_ship([inventory_unit_2])
200
- expect(line_item.adjustments.map(&:amount)).to match_array(
201
- [
202
- 0.01, # promo adjustment
203
- -0.84, # short ship 1
204
- -0.83, # short ship 2
205
- ]
206
- )
207
- expect(line_item.total).to eq 0
208
- end
209
- end
210
-
211
- describe 'short_ship_tax_notifier' do
212
- context 'when present' do
213
- let(:short_ship_tax_notifier) { double }
214
-
215
- before do
216
- @old_notifier = described_class.short_ship_tax_notifier
217
- described_class.short_ship_tax_notifier = short_ship_tax_notifier
218
- end
219
- after do
220
- described_class.short_ship_tax_notifier = @old_notifier
221
- end
222
-
223
- it 'calls the short_ship_tax_notifier' do
224
- expect(short_ship_tax_notifier).to receive(:call) do |unit_cancels|
225
- expect(unit_cancels.map(&:inventory_unit)).to match_array([inventory_unit])
226
- end
227
-
228
- order.cancellations.short_ship([inventory_unit])
229
- end
230
- end
231
- end
232
- end
233
- end