solidus_core 2.10.0 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (495) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree.js.erb +31 -2
  3. data/app/controllers/spree/base_controller.rb +1 -0
  4. data/app/mailers/spree/base_mailer.rb +4 -0
  5. data/app/mailers/spree/order_mailer.rb +1 -1
  6. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +69 -0
  7. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
  8. data/app/models/concerns/spree/active_storage_adapter.rb +116 -0
  9. data/app/models/concerns/spree/default_price.rb +1 -1
  10. data/app/models/concerns/spree/soft_deletable.rb +18 -0
  11. data/app/models/concerns/spree/user_address_book.rb +86 -32
  12. data/app/models/concerns/spree/user_methods.rb +3 -2
  13. data/app/models/spree/ability.rb +34 -10
  14. data/app/models/spree/address/name.rb +49 -0
  15. data/app/models/spree/address/state_validator.rb +71 -0
  16. data/app/models/spree/address.rb +94 -17
  17. data/app/models/spree/adjustment.rb +1 -1
  18. data/app/models/spree/base.rb +1 -0
  19. data/app/models/spree/calculator/default_tax.rb +1 -1
  20. data/app/models/spree/calculator/percent_per_item.rb +4 -4
  21. data/app/models/spree/calculator/price_sack.rb +1 -1
  22. data/app/models/spree/credit_card.rb +2 -2
  23. data/app/models/spree/customer_return.rb +4 -2
  24. data/app/models/spree/exchange.rb +1 -1
  25. data/app/models/spree/image/active_storage_attachment.rb +21 -0
  26. data/app/models/spree/inventory_unit.rb +1 -1
  27. data/app/models/spree/line_item.rb +13 -4
  28. data/app/models/spree/option_type.rb +1 -1
  29. data/app/models/spree/option_value.rb +2 -2
  30. data/app/models/spree/order/checkout.rb +1 -0
  31. data/app/models/spree/order.rb +91 -20
  32. data/app/models/spree/order_inventory.rb +16 -4
  33. data/app/models/spree/order_merger.rb +6 -4
  34. data/app/models/spree/order_promotion.rb +1 -1
  35. data/app/models/spree/order_updater.rb +11 -10
  36. data/app/models/spree/payment/cancellation.rb +3 -3
  37. data/app/models/spree/payment/processing.rb +54 -30
  38. data/app/models/spree/payment.rb +3 -3
  39. data/app/models/spree/payment_method.rb +8 -9
  40. data/app/models/spree/preference.rb +1 -1
  41. data/app/models/spree/price.rb +2 -8
  42. data/app/models/spree/product/scopes.rb +10 -5
  43. data/app/models/spree/product.rb +19 -14
  44. data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
  45. data/app/models/spree/promotion.rb +18 -7
  46. data/app/models/spree/promotion_action.rb +1 -7
  47. data/app/models/spree/promotion_code.rb +6 -1
  48. data/app/models/spree/promotion_code_batch.rb +1 -1
  49. data/app/models/spree/promotion_handler/coupon.rb +2 -2
  50. data/app/models/spree/promotion_rule.rb +1 -1
  51. data/app/models/spree/promotion_rule_role.rb +1 -1
  52. data/app/models/spree/refund.rb +54 -12
  53. data/app/models/spree/reimbursement.rb +27 -0
  54. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +10 -3
  55. data/app/models/spree/return_authorization.rb +1 -1
  56. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
  57. data/app/models/spree/return_item.rb +21 -10
  58. data/app/models/spree/role.rb +1 -1
  59. data/app/models/spree/shipment.rb +2 -2
  60. data/app/models/spree/shipping_calculator.rb +1 -1
  61. data/app/models/spree/shipping_manifest.rb +2 -2
  62. data/app/models/spree/shipping_method.rb +2 -9
  63. data/app/models/spree/shipping_rate.rb +1 -1
  64. data/app/models/spree/shipping_rate_tax.rb +1 -1
  65. data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
  66. data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
  67. data/app/models/spree/stock/package.rb +1 -1
  68. data/app/models/spree/stock/simple_coordinator.rb +1 -3
  69. data/app/models/spree/stock_item.rb +2 -8
  70. data/app/models/spree/stock_movement.rb +2 -0
  71. data/app/models/spree/store.rb +1 -1
  72. data/app/models/spree/store_credit.rb +1 -7
  73. data/app/models/spree/store_credit_category.rb +30 -3
  74. data/app/models/spree/store_credit_event.rb +1 -7
  75. data/app/models/spree/store_credit_reason.rb +0 -4
  76. data/app/models/spree/tax/tax_helpers.rb +1 -1
  77. data/app/models/spree/tax_category.rb +2 -8
  78. data/app/models/spree/tax_rate.rb +7 -7
  79. data/app/models/spree/taxon/active_storage_attachment.rb +19 -0
  80. data/app/models/spree/taxon.rb +1 -1
  81. data/app/models/spree/user_address.rb +8 -2
  82. data/app/models/spree/variant.rb +7 -13
  83. data/app/models/spree/variant_property_rule.rb +5 -1
  84. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +8 -3
  85. data/app/models/spree/zone.rb +1 -1
  86. data/config/locales/en.yml +44 -5
  87. data/db/default/spree/countries.rb +1 -1
  88. data/db/default/spree/states.rb +12 -4
  89. data/db/default/spree/store_credit.rb +2 -2
  90. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
  91. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
  92. data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
  93. data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
  94. data/lib/generators/solidus/install/install_generator.rb +253 -0
  95. data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +36 -5
  96. data/lib/generators/spree/install/install_generator.rb +7 -189
  97. data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
  98. data/lib/spree/app_configuration.rb +117 -51
  99. data/lib/spree/awesome_nested_set_override.rb +44 -0
  100. data/lib/spree/core/controller_helpers/auth.rb +17 -4
  101. data/lib/spree/core/controller_helpers/current_host.rb +17 -0
  102. data/lib/spree/core/controller_helpers/order.rb +8 -7
  103. data/lib/spree/core/controller_helpers/strong_parameters.rb +21 -7
  104. data/lib/spree/core/engine.rb +39 -2
  105. data/lib/spree/core/importer/order.rb +26 -11
  106. data/lib/spree/core/permalinks.rb +1 -3
  107. data/lib/spree/core/product_filters.rb +6 -5
  108. data/lib/spree/core/state_machines/order.rb +249 -0
  109. data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
  110. data/lib/spree/core/state_machines.rb +20 -1
  111. data/lib/spree/core/version.rb +1 -1
  112. data/lib/spree/core.rb +5 -11
  113. data/lib/spree/encryptor.rb +25 -0
  114. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  115. data/lib/spree/event/configuration.rb +11 -6
  116. data/lib/spree/event/subscriber.rb +38 -18
  117. data/lib/spree/event/subscriber_registry.rb +92 -0
  118. data/lib/spree/event.rb +40 -7
  119. data/lib/spree/i18n.rb +1 -1
  120. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  121. data/lib/spree/paranoia_deprecations.rb +32 -12
  122. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  123. data/lib/spree/permission_sets/default_customer.rb +16 -16
  124. data/lib/spree/permission_sets/order_display.rb +11 -11
  125. data/lib/spree/permission_sets/order_management.rb +1 -1
  126. data/lib/spree/permission_sets/product_display.rb +9 -9
  127. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  128. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  129. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  130. data/lib/spree/permission_sets/stock_display.rb +2 -2
  131. data/lib/spree/permission_sets/stock_management.rb +1 -1
  132. data/lib/spree/permission_sets/user_display.rb +3 -3
  133. data/lib/spree/permission_sets/user_management.rb +4 -3
  134. data/lib/spree/permitted_attributes.rb +79 -9
  135. data/lib/spree/preferences/preferable.rb +4 -3
  136. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  137. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  138. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  139. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  140. data/lib/spree/testing_support/capybara_ext.rb +3 -0
  141. data/lib/spree/testing_support/common_rake.rb +3 -3
  142. data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
  143. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
  144. data/lib/spree/testing_support/dummy_app.rb +44 -23
  145. data/lib/spree/testing_support/factories/address_factory.rb +1 -2
  146. data/lib/spree/testing_support/factories/image_factory.rb +1 -1
  147. data/lib/spree/testing_support/factories/promotion_factory.rb +6 -0
  148. data/lib/spree/testing_support/factories/refund_factory.rb +1 -0
  149. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  150. data/lib/spree/testing_support/factories/return_item_factory.rb +0 -1
  151. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +8 -0
  152. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -0
  153. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +3 -1
  154. data/lib/spree/testing_support/factories/taxon_factory.rb +4 -0
  155. data/lib/spree/testing_support/factories/user_factory.rb +4 -1
  156. data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
  157. data/lib/spree/testing_support/job_helpers.rb +24 -0
  158. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  159. data/lib/spree/testing_support/preferences.rb +3 -1
  160. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  161. data/lib/spree/testing_support/translations.rb +25 -0
  162. data/solidus_core.gemspec +8 -5
  163. metadata +81 -359
  164. data/script/rails +0 -10
  165. data/spec/fixtures/thinking-cat.jpg +0 -0
  166. data/spec/helpers/base_helper_spec.rb +0 -168
  167. data/spec/helpers/products_helper_spec.rb +0 -202
  168. data/spec/helpers/taxons_helper_spec.rb +0 -43
  169. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  170. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  171. data/spec/lib/i18n_spec.rb +0 -97
  172. data/spec/lib/search/base_spec.rb +0 -91
  173. data/spec/lib/search/variant_spec.rb +0 -115
  174. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  175. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  176. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  177. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  178. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  179. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  180. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  181. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  182. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -41
  183. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  184. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  185. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  186. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  187. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
  188. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  189. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  190. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  191. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  192. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  193. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  194. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  195. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  196. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  197. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  198. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  199. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  200. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  201. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  202. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  203. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  204. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  205. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  206. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  207. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  208. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  209. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  210. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  211. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  212. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  213. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  214. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  215. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  216. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  217. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  218. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  219. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  220. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  221. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  222. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  223. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  224. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  225. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  226. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  227. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  228. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  229. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  230. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  231. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  232. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  233. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  234. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  235. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  236. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  237. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  238. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  239. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  240. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  241. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  242. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  243. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  244. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  245. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  246. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  247. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  248. data/spec/lib/spree/core/version_spec.rb +0 -19
  249. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  250. data/spec/lib/spree/event_spec.rb +0 -130
  251. data/spec/lib/spree/localized_number_spec.rb +0 -45
  252. data/spec/lib/spree/migrations_spec.rb +0 -32
  253. data/spec/lib/spree/money_spec.rb +0 -298
  254. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  255. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  256. data/spec/lib/tasks/dummy_task.rake +0 -12
  257. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  258. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  259. data/spec/mailers/carton_mailer_spec.rb +0 -44
  260. data/spec/mailers/order_mailer_spec.rb +0 -117
  261. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  262. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  263. data/spec/mailers/test_mailer_spec.rb +0 -13
  264. data/spec/models/spree/ability_spec.rb +0 -279
  265. data/spec/models/spree/address_spec.rb +0 -399
  266. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  267. data/spec/models/spree/adjustment_spec.rb +0 -339
  268. data/spec/models/spree/asset_spec.rb +0 -25
  269. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  270. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  271. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  272. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  273. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  274. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  275. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  276. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  277. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  278. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  279. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  280. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  281. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  282. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  283. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
  284. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  285. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  286. data/spec/models/spree/calculator_spec.rb +0 -43
  287. data/spec/models/spree/carton_spec.rb +0 -145
  288. data/spec/models/spree/classification_spec.rb +0 -126
  289. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  290. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  291. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  292. data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
  293. data/spec/models/spree/country_spec.rb +0 -154
  294. data/spec/models/spree/credit_card_spec.rb +0 -373
  295. data/spec/models/spree/customer_return_spec.rb +0 -294
  296. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  297. data/spec/models/spree/exchange_spec.rb +0 -76
  298. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  299. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  300. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  301. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  302. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  303. data/spec/models/spree/gateway_spec.rb +0 -14
  304. data/spec/models/spree/image_spec.rb +0 -25
  305. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  306. data/spec/models/spree/line_item_spec.rb +0 -240
  307. data/spec/models/spree/option_type_spec.rb +0 -16
  308. data/spec/models/spree/option_value_spec.rb +0 -52
  309. data/spec/models/spree/order/address_spec.rb +0 -52
  310. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  311. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  312. data/spec/models/spree/order/checkout_spec.rb +0 -740
  313. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  314. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  315. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  316. data/spec/models/spree/order/payment_spec.rb +0 -280
  317. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  318. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  319. data/spec/models/spree/order/totals_spec.rb +0 -26
  320. data/spec/models/spree/order/validations_spec.rb +0 -17
  321. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  322. data/spec/models/spree/order_capturing_spec.rb +0 -16
  323. data/spec/models/spree/order_contents_spec.rb +0 -362
  324. data/spec/models/spree/order_inventory_spec.rb +0 -285
  325. data/spec/models/spree/order_merger_spec.rb +0 -162
  326. data/spec/models/spree/order_mutex_spec.rb +0 -89
  327. data/spec/models/spree/order_promotion_spec.rb +0 -33
  328. data/spec/models/spree/order_shipping_spec.rb +0 -247
  329. data/spec/models/spree/order_spec.rb +0 -1687
  330. data/spec/models/spree/order_taxation_spec.rb +0 -128
  331. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  332. data/spec/models/spree/order_updater_spec.rb +0 -556
  333. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  334. data/spec/models/spree/payment_create_spec.rb +0 -195
  335. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  336. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  337. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  338. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  339. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  340. data/spec/models/spree/payment_method_spec.rb +0 -408
  341. data/spec/models/spree/payment_spec.rb +0 -1270
  342. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  343. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  344. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  345. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  346. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  347. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  348. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  349. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  350. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  351. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  352. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  353. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  354. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  355. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  356. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  357. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
  358. data/spec/models/spree/preference_spec.rb +0 -79
  359. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  360. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  361. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  362. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  363. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  364. data/spec/models/spree/preferences/store_spec.rb +0 -40
  365. data/spec/models/spree/price_spec.rb +0 -150
  366. data/spec/models/spree/product/scopes_spec.rb +0 -164
  367. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  368. data/spec/models/spree/product_filter_spec.rb +0 -28
  369. data/spec/models/spree/product_property_spec.rb +0 -20
  370. data/spec/models/spree/product_spec.rb +0 -584
  371. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  372. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  373. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  374. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  375. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  376. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  377. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  378. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  379. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  380. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  381. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  382. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  383. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -226
  384. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  385. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  386. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  387. data/spec/models/spree/promotion_action_spec.rb +0 -44
  388. data/spec/models/spree/promotion_category_spec.rb +0 -19
  389. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  390. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  391. data/spec/models/spree/promotion_code_spec.rb +0 -206
  392. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  393. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  394. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  395. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  396. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  397. data/spec/models/spree/promotion_spec.rb +0 -945
  398. data/spec/models/spree/refund_spec.rb +0 -200
  399. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  400. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  401. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  402. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  403. data/spec/models/spree/reimbursement_spec.rb +0 -278
  404. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  405. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  406. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  407. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  408. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  409. data/spec/models/spree/return_authorization_spec.rb +0 -226
  410. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  411. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  412. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  413. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  414. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  415. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  416. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  417. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  418. data/spec/models/spree/return_item_spec.rb +0 -785
  419. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  420. data/spec/models/spree/shipment_spec.rb +0 -914
  421. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  422. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  423. data/spec/models/spree/shipping_method_spec.rb +0 -292
  424. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  425. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  426. data/spec/models/spree/state_spec.rb +0 -43
  427. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  428. data/spec/models/spree/stock/availability_spec.rb +0 -143
  429. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  430. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  431. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  432. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  433. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  434. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  435. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  436. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  437. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  438. data/spec/models/spree/stock/package_spec.rb +0 -182
  439. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  440. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  441. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  442. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  443. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  444. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  445. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  446. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  447. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  448. data/spec/models/spree/stock_item_spec.rb +0 -348
  449. data/spec/models/spree/stock_location_spec.rb +0 -288
  450. data/spec/models/spree/stock_movement_spec.rb +0 -58
  451. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  452. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  453. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  454. data/spec/models/spree/store_credit_spec.rb +0 -900
  455. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  456. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  457. data/spec/models/spree/store_spec.rb +0 -156
  458. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  459. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  460. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  461. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  462. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  463. data/spec/models/spree/tax_category_spec.rb +0 -50
  464. data/spec/models/spree/tax_rate_spec.rb +0 -317
  465. data/spec/models/spree/taxon_spec.rb +0 -197
  466. data/spec/models/spree/taxonomy_spec.rb +0 -15
  467. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
  468. data/spec/models/spree/unit_cancel_spec.rb +0 -126
  469. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
  470. data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
  471. data/spec/models/spree/user_spec.rb +0 -247
  472. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  473. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  474. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  475. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  476. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  477. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  478. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  479. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  480. data/spec/models/spree/variant_spec.rb +0 -862
  481. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  482. data/spec/models/spree/wallet_spec.rb +0 -155
  483. data/spec/models/spree/zone_spec.rb +0 -248
  484. data/spec/rails_helper.rb +0 -46
  485. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  486. data/spec/spec_helper.rb +0 -36
  487. data/spec/support/big_decimal.rb +0 -7
  488. data/spec/support/concerns/default_price.rb +0 -44
  489. data/spec/support/concerns/payment_source.rb +0 -66
  490. data/spec/support/concerns/working_factories.rb +0 -15
  491. data/spec/support/dummy_ability.rb +0 -7
  492. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
  493. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
  494. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
  495. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
@@ -1,785 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.shared_examples "an invalid state transition" do |status, expected_status|
6
- let(:status) { status }
7
-
8
- it "cannot transition to #{expected_status}" do
9
- expect { subject }.to raise_error(StateMachines::InvalidTransition)
10
- end
11
- end
12
-
13
- RSpec.describe Spree::ReturnItem, type: :model do
14
- all_reception_statuses = Spree::ReturnItem.state_machines[:reception_status].states.map(&:name).map(&:to_s)
15
- all_acceptance_statuses = Spree::ReturnItem.state_machines[:acceptance_status].states.map(&:name).map(&:to_s)
16
-
17
- before do
18
- allow_any_instance_of(Spree::Order).to receive(:return!).and_return(true)
19
- end
20
-
21
- describe '#receive!' do
22
- let(:now) { Time.current }
23
- let(:order) { create(:shipped_order) }
24
- let(:inventory_unit) { create(:inventory_unit, state: 'shipped') }
25
- let!(:customer_return) { create(:customer_return_without_return_items, return_items: [return_item], stock_location_id: inventory_unit.shipment.stock_location_id) }
26
- let(:return_item) { create(:return_item, inventory_unit: inventory_unit) }
27
-
28
- before do
29
- inventory_unit.update!(state: 'shipped')
30
- return_item.update!(reception_status: 'awaiting')
31
- allow(return_item).to receive(:eligible_for_return?).and_return(true)
32
- end
33
-
34
- subject { return_item.receive! }
35
-
36
- it 'returns the inventory unit' do
37
- subject
38
- expect(inventory_unit.reload.state).to eq 'returned'
39
- end
40
-
41
- it 'attempts to accept the return item' do
42
- expect(return_item).to receive(:attempt_accept)
43
- subject
44
- end
45
-
46
- context 'when the `skip_customer_return_processing` flag is not set to true' do
47
- before { return_item.skip_customer_return_processing = false }
48
-
49
- it 'shows a deprecation warning' do
50
- expect(Spree::Deprecation).to receive(:warn)
51
- subject
52
- end
53
- end
54
-
55
- context 'when there is a received return item with the same inventory unit' do
56
- let!(:return_item_with_dupe_inventory_unit) { create(:return_item, inventory_unit: inventory_unit, reception_status: 'received') }
57
-
58
- before do
59
- expect { subject }.to raise_error { StateMachines::InvalidTransition }
60
- end
61
-
62
- it 'does not receive the return item' do
63
- expect(return_item.reception_status).to eq 'awaiting'
64
- end
65
-
66
- it 'adds an error to the return item' do
67
- expect(return_item.errors[:inventory_unit]).to include "#{return_item.inventory_unit_id} has already been taken by return item #{return_item_with_dupe_inventory_unit.id}"
68
- end
69
- end
70
-
71
- context 'when the received item is actually the exchange (aka customer changed mind about exchange)' do
72
- let(:exchange_inventory_unit) { create(:inventory_unit, state: 'shipped') }
73
- let!(:return_item_with_exchange) { create(:return_item, inventory_unit: inventory_unit, exchange_inventory_unit: exchange_inventory_unit) }
74
- let!(:return_item_in_lieu) { create(:return_item, inventory_unit: exchange_inventory_unit) }
75
-
76
- it 'unexchanges original return item' do
77
- return_item_in_lieu.receive!
78
-
79
- return_item_with_exchange.reload
80
- return_item_in_lieu.reload
81
- expect(return_item_with_exchange.reception_status).to eq 'unexchanged'
82
- expect(return_item_in_lieu.reception_status).to eq 'received'
83
- expect(return_item_in_lieu.amount).to eq 0
84
- expect(inventory_unit.reload.state).to eq 'shipped'
85
- expect(exchange_inventory_unit.reload.state).to eq 'returned'
86
- end
87
- end
88
-
89
- context 'with a stock location' do
90
- let(:stock_location) { customer_return.stock_location }
91
- let(:stock_item) { stock_location.stock_item(inventory_unit.variant) }
92
-
93
- before do
94
- inventory_unit.update!(state: 'shipped')
95
- return_item.update!(reception_status: 'awaiting')
96
- stock_location.update!(restock_inventory: true)
97
- end
98
-
99
- it 'increases the count on hand' do
100
- expect { subject }.to change { stock_item.reload.count_on_hand }.by(1)
101
- end
102
-
103
- context 'when variant does not track inventory' do
104
- before do
105
- inventory_unit.update!(state: 'shipped')
106
- inventory_unit.variant.update!(track_inventory: false)
107
- return_item.update!(reception_status: 'awaiting')
108
- end
109
-
110
- it 'does not increase the count on hand' do
111
- expect { subject }.to_not change { stock_item.reload.count_on_hand }
112
- end
113
- end
114
-
115
- context "when the stock location's restock_inventory is false" do
116
- before do
117
- stock_location.update!(restock_inventory: false)
118
- end
119
-
120
- it 'does not increase the count on hand' do
121
- expect { subject }.to_not change { stock_item.reload.count_on_hand }
122
- end
123
- end
124
-
125
- context "when the inventory unit's variant does not yet have a stock item for the stock location it was returned to" do
126
- before { inventory_unit.variant.stock_items.each(&:really_destroy!) }
127
-
128
- it "creates a new stock item for the inventory unit with a count of 1" do
129
- expect { subject }.to change(Spree::StockItem, :count).by(1)
130
- stock_item = Spree::StockItem.last
131
- expect(stock_item.variant).to eq inventory_unit.variant
132
- expect(stock_item.count_on_hand).to eq 1
133
- end
134
- end
135
-
136
- Spree::ReturnItem::INTERMEDIATE_RECEPTION_STATUSES.each do |status|
137
- context "when the item was #{status}" do
138
- before { return_item.update!(reception_status: status) }
139
-
140
- it 'processes the inventory unit' do
141
- subject
142
- expect(return_item.inventory_unit.reload.state).to eq('returned')
143
- end
144
-
145
- it 'return remains accepted' do
146
- subject
147
- expect(return_item.acceptance_status).to eq('accepted')
148
- end
149
- end
150
- end
151
- end
152
- end
153
-
154
- describe "#display_total_excluding_vat" do
155
- let(:amount) { 21.22 }
156
- let(:included_tax_total) { 1.22 }
157
- let(:return_item) { build(:return_item, amount: amount, included_tax_total: included_tax_total) }
158
-
159
- it "returns a Spree::Money" do
160
- expect(return_item.display_total_excluding_vat).to eq Spree::Money.new(amount - included_tax_total)
161
- end
162
- end
163
-
164
- describe ".default_refund_amount_calculator" do
165
- it "defaults to the default refund amount calculator" do
166
- expect(Spree::ReturnItem.refund_amount_calculator).to eq Spree::Calculator::Returns::DefaultRefundAmount
167
- end
168
- end
169
-
170
- describe "amount calculations on create" do
171
- let(:inventory_unit) { build(:inventory_unit) }
172
- before { subject.save! }
173
-
174
- context "amount is not specified" do
175
- subject { build(:return_item, inventory_unit: inventory_unit) }
176
-
177
- context "not an exchange" do
178
- it { expect(subject.amount).to eq Spree::Calculator::Returns::DefaultRefundAmount.new.compute(subject) }
179
- end
180
-
181
- context "an exchange" do
182
- subject { build(:exchange_return_item) }
183
-
184
- it { expect(subject.amount).to eq 0.0 }
185
- end
186
- end
187
-
188
- context "amount is specified" do
189
- subject { build(:return_item, inventory_unit: inventory_unit, amount: 100) }
190
-
191
- it { expect(subject.amount).to eq 100 }
192
- end
193
- end
194
-
195
- describe ".from_inventory_unit" do
196
- let(:inventory_unit) { build(:inventory_unit) }
197
-
198
- subject { Spree::ReturnItem.from_inventory_unit(inventory_unit) }
199
-
200
- context "with a cancelled return item" do
201
- let!(:return_item) { create(:return_item, inventory_unit: inventory_unit, reception_status: 'cancelled') }
202
-
203
- it { is_expected.not_to be_persisted }
204
- end
205
-
206
- context 'with a expired item' do
207
- let!(:return_item) { create(:return_item, inventory_unit: inventory_unit, reception_status: 'expired') }
208
-
209
- it { is_expected.not_to be_persisted }
210
- end
211
-
212
- context "with a non-cancelled return item" do
213
- let!(:return_item) { create(:return_item, inventory_unit: inventory_unit) }
214
-
215
- it { is_expected.to be_persisted }
216
- end
217
- end
218
-
219
- describe "reception_status state_machine" do
220
- subject(:return_item) { create(:return_item) }
221
-
222
- it "starts off in the awaiting state" do
223
- expect(return_item).to be_awaiting
224
- end
225
- end
226
-
227
- describe "acceptance_status state_machine" do
228
- subject(:return_item) { create(:return_item) }
229
-
230
- it "starts off in the pending state" do
231
- expect(return_item).to be_pending
232
- end
233
- end
234
-
235
- describe "#receive" do
236
- let(:order) { create(:shipped_order) }
237
- let(:inventory_unit) { create(:inventory_unit, shipment: order.shipments.first) }
238
- let(:return_item) { create(:return_item, reception_status: status, inventory_unit: inventory_unit) }
239
-
240
- subject { return_item.receive! }
241
-
242
- context "awaiting status" do
243
- let(:status) { 'awaiting' }
244
-
245
- before do
246
- expect(return_item.inventory_unit).to receive(:return!)
247
- end
248
-
249
- before { subject }
250
-
251
- it "transitions successfully" do
252
- expect(return_item).to be_received
253
- end
254
- end
255
-
256
- context "return_item has a reception status of cancelled" do
257
- it_behaves_like "an invalid state transition", 'cancelled', 'received'
258
- end
259
- end
260
-
261
- describe "#cancel" do
262
- let(:return_item) { create(:return_item, reception_status: status) }
263
-
264
- subject { return_item.cancel! }
265
-
266
- context "awaiting status" do
267
- let(:status) { 'awaiting' }
268
-
269
- before { subject }
270
-
271
- it "transitions successfully" do
272
- expect(return_item).to be_cancelled
273
- end
274
- end
275
-
276
- (all_reception_statuses - ['awaiting']).each do |invalid_transition_status|
277
- context "return_item has a reception status of #{invalid_transition_status}" do
278
- it_behaves_like "an invalid state transition", invalid_transition_status, 'cancelled'
279
- end
280
- end
281
- end
282
-
283
- {
284
- give: 'given_to_customer',
285
- lost: 'lost_in_transit',
286
- wrong_item_shipped: 'shipped_wrong_item',
287
- in_transit: 'in_transit',
288
- short_shipped: 'short_shipped'
289
- }.each do |transition, status|
290
- describe "##{transition}" do
291
- let(:return_item) { create(:return_item, reception_status: status, inventory_unit: inventory_unit) }
292
- let(:inventory_unit) { create(:inventory_unit, state: 'shipped') }
293
- subject { return_item.public_send("#{transition}!") }
294
- context "awaiting status" do
295
- before do
296
- return_item.update!(reception_status: 'awaiting')
297
- allow(return_item).to receive(:eligible_for_return?).and_return(true)
298
- end
299
-
300
- it 'accepts the return' do
301
- subject
302
- expect(return_item.acceptance_status).to eq('accepted')
303
- end
304
-
305
- it 'does not decrease inventory' do
306
- expect(return_item).to_not receive(:process_inventory_unit!)
307
- subject
308
- end
309
-
310
- it "transitions successfully" do
311
- subject
312
- expect(return_item.reception_status).to eq status
313
- end
314
- end
315
-
316
- it_behaves_like "an invalid state transition", 'cancelled', status
317
- end
318
- end
319
-
320
- describe "#attempt_accept" do
321
- let(:return_item) { create(:return_item, acceptance_status: status) }
322
- let(:validator_errors) { {} }
323
- let(:validator_double) { double(errors: validator_errors) }
324
-
325
- subject { return_item.attempt_accept! }
326
-
327
- before do
328
- allow(return_item).to receive(:validator).and_return(validator_double)
329
- end
330
-
331
- context "pending status" do
332
- let(:status) { 'pending' }
333
-
334
- before do
335
- allow(return_item).to receive(:eligible_for_return?).and_return(true)
336
- subject
337
- end
338
-
339
- it "transitions successfully" do
340
- expect(return_item).to be_accepted
341
- end
342
-
343
- it "has no acceptance status errors" do
344
- expect(return_item.acceptance_status_errors).to be_empty
345
- end
346
- end
347
-
348
- (all_acceptance_statuses - ['accepted', 'pending']).each do |invalid_transition_status|
349
- context "return_item has an acceptance status of #{invalid_transition_status}" do
350
- it_behaves_like "an invalid state transition", invalid_transition_status, 'accepted'
351
- end
352
- end
353
-
354
- context "not eligible for return" do
355
- let(:status) { 'pending' }
356
- let(:validator_errors) { { number_of_days: "Return Item is outside the eligible time period" } }
357
-
358
- before do
359
- allow(return_item).to receive(:eligible_for_return?).and_return(false)
360
- end
361
-
362
- context "manual intervention required" do
363
- before do
364
- allow(return_item).to receive(:requires_manual_intervention?).and_return(true)
365
- subject
366
- end
367
-
368
- it "transitions to manual intervention required" do
369
- expect(return_item).to be_manual_intervention_required
370
- end
371
-
372
- it "sets the acceptance status errors" do
373
- expect(return_item.acceptance_status_errors).to eq validator_errors
374
- end
375
- end
376
-
377
- context "manual intervention not required" do
378
- before do
379
- allow(return_item).to receive(:requires_manual_intervention?).and_return(false)
380
- subject
381
- end
382
-
383
- it "transitions to rejected" do
384
- expect(return_item).to be_rejected
385
- end
386
-
387
- it "sets the acceptance status errors" do
388
- expect(return_item.acceptance_status_errors).to eq validator_errors
389
- end
390
- end
391
- end
392
- end
393
-
394
- describe "#reject" do
395
- let(:return_item) { create(:return_item, acceptance_status: status) }
396
-
397
- subject { return_item.reject! }
398
-
399
- context "pending status" do
400
- let(:status) { 'pending' }
401
-
402
- before { subject }
403
-
404
- it "transitions successfully" do
405
- expect(return_item).to be_rejected
406
- end
407
-
408
- it "has no acceptance status errors" do
409
- expect(return_item.acceptance_status_errors).to be_empty
410
- end
411
- end
412
-
413
- (all_acceptance_statuses - ['accepted', 'pending', 'manual_intervention_required']).each do |invalid_transition_status|
414
- context "return_item has an acceptance status of #{invalid_transition_status}" do
415
- it_behaves_like "an invalid state transition", invalid_transition_status, 'rejected'
416
- end
417
- end
418
- end
419
-
420
- describe "#accept" do
421
- let(:return_item) { create(:return_item, acceptance_status: status) }
422
-
423
- subject { return_item.accept! }
424
-
425
- context "pending status" do
426
- let(:status) { 'pending' }
427
-
428
- before { subject }
429
-
430
- it "transitions successfully" do
431
- expect(return_item).to be_accepted
432
- end
433
-
434
- it "has no acceptance status errors" do
435
- expect(return_item.acceptance_status_errors).to be_empty
436
- end
437
- end
438
-
439
- (all_acceptance_statuses - ['accepted', 'pending', 'manual_intervention_required']).each do |invalid_transition_status|
440
- context "return_item has an acceptance status of #{invalid_transition_status}" do
441
- it_behaves_like "an invalid state transition", invalid_transition_status, 'accepted'
442
- end
443
- end
444
- end
445
-
446
- describe "#require_manual_intervention" do
447
- let(:return_item) { create(:return_item, acceptance_status: status) }
448
-
449
- subject { return_item.require_manual_intervention! }
450
-
451
- context "pending status" do
452
- let(:status) { 'pending' }
453
-
454
- before { subject }
455
-
456
- it "transitions successfully" do
457
- expect(return_item).to be_manual_intervention_required
458
- end
459
-
460
- it "has no acceptance status errors" do
461
- expect(return_item.acceptance_status_errors).to be_empty
462
- end
463
- end
464
-
465
- (all_acceptance_statuses - ['accepted', 'pending', 'manual_intervention_required']).each do |invalid_transition_status|
466
- context "return_item has an acceptance status of #{invalid_transition_status}" do
467
- it_behaves_like "an invalid state transition", invalid_transition_status, 'manual_intervention_required'
468
- end
469
- end
470
- end
471
-
472
- describe 'validity for reimbursements' do
473
- let(:return_item) { create(:return_item, acceptance_status: acceptance_status) }
474
- let(:acceptance_status) { 'pending' }
475
-
476
- before { return_item.reimbursement = build(:reimbursement) }
477
-
478
- subject { return_item }
479
-
480
- context 'when acceptance_status is accepted' do
481
- let(:acceptance_status) { 'accepted' }
482
-
483
- it 'is valid' do
484
- expect(subject).to be_valid
485
- end
486
- end
487
-
488
- context 'when acceptance_status is accepted' do
489
- let(:acceptance_status) { 'pending' }
490
-
491
- it 'is valid' do
492
- expect(subject).to_not be_valid
493
- expect(subject.errors.messages).to eq({ reimbursement: [I18n.t(:cannot_be_associated_unless_accepted, scope: 'activerecord.errors.models.spree/return_item.attributes.reimbursement')] })
494
- end
495
- end
496
- end
497
-
498
- describe "#part_of_exchange?" do
499
- context "exchange variant exists, unexchanged sibling does not" do
500
- before { allow(subject).to receive(:exchange_variant).and_return(mock_model(Spree::Variant)) }
501
- it { expect(subject.part_of_exchange?).to eq true }
502
- end
503
- context "exchange variant does not exist, but unexchagned sibling does" do
504
- before { expect(subject).to receive(:sibling_intended_for_exchange).with('unexchanged').and_return(true) }
505
- it { expect(subject.part_of_exchange?).to eq true }
506
- end
507
- context "neither exchange variant nor unexchanged sibling exist" do
508
- before { expect(subject).to receive(:sibling_intended_for_exchange).with('unexchanged').and_return(false) }
509
- it { expect(subject.part_of_exchange?).to eq false }
510
- end
511
- end
512
-
513
- describe "#exchange_requested?" do
514
- context "exchange variant exists" do
515
- before { allow(subject).to receive(:exchange_variant).and_return(mock_model(Spree::Variant)) }
516
- it { expect(subject.exchange_requested?).to eq true }
517
- end
518
- context "exchange variant does not exist" do
519
- before { allow(subject).to receive(:exchange_variant).and_return(nil) }
520
- it { expect(subject.exchange_requested?).to eq false }
521
- end
522
- end
523
-
524
- describe "#exchange_processed?" do
525
- context "exchange inventory unit exists" do
526
- before { allow(subject).to receive(:exchange_inventory_unit).and_return(mock_model(Spree::InventoryUnit)) }
527
- it { expect(subject.exchange_processed?).to eq true }
528
- end
529
- context "exchange inventory unit does not exist" do
530
- before { allow(subject).to receive(:exchange_inventory_unit).and_return(nil) }
531
- it { expect(subject.exchange_processed?).to eq false }
532
- end
533
- end
534
-
535
- describe "#exchange_required?" do
536
- context "exchange has been requested and not yet processed" do
537
- before do
538
- allow(subject).to receive(:exchange_requested?).and_return(true)
539
- allow(subject).to receive(:exchange_processed?).and_return(false)
540
- end
541
-
542
- it { expect(subject.exchange_required?).to be true }
543
- end
544
-
545
- context "exchange has not been requested" do
546
- before { allow(subject).to receive(:exchange_requested?).and_return(false) }
547
- it { expect(subject.exchange_required?).to be false }
548
- end
549
-
550
- context "exchange has been requested and processed" do
551
- before do
552
- allow(subject).to receive(:exchange_requested?).and_return(true)
553
- allow(subject).to receive(:exchange_processed?).and_return(true)
554
- end
555
- it { expect(subject.exchange_required?).to be false }
556
- end
557
- end
558
-
559
- describe "#eligible_exchange_variants" do
560
- it "uses the exchange variant calculator to compute possible variants to exchange for" do
561
- return_item = build(:return_item)
562
- expect(Spree::ReturnItem.exchange_variant_engine).to receive(:eligible_variants).with(return_item.variant, stock_locations: nil)
563
- return_item.eligible_exchange_variants
564
- end
565
- end
566
-
567
- describe ".exchange_variant_engine" do
568
- it "defaults to the same product calculator" do
569
- expect(Spree::ReturnItem.exchange_variant_engine).to eq Spree::ReturnItem::ExchangeVariantEligibility::SameProduct
570
- end
571
- end
572
-
573
- describe "exchange amount" do
574
- let(:return_item) { build(:return_item) }
575
-
576
- context "the return item is intended to be exchanged" do
577
- before do
578
- return_item.inventory_unit.variant.update_column(:track_inventory, false)
579
- return_item.exchange_variant = return_item.inventory_unit.variant
580
- end
581
-
582
- it do
583
- return_item.amount = 5.0
584
- return_item.save!
585
- expect(return_item.reload.amount).to eq 0.0
586
- end
587
- end
588
-
589
- context "the return item is not intended to be exchanged" do
590
- it do
591
- return_item.amount = 5.0
592
- return_item.save!
593
- expect(return_item.reload.amount).to eq 5.0
594
- end
595
- end
596
- end
597
-
598
- describe "#build_exchange_inventory_unit" do
599
- let(:return_item) { build(:return_item) }
600
- subject { return_item.build_exchange_inventory_unit }
601
-
602
- context "the return item is intended to be exchanged" do
603
- before { allow(return_item).to receive(:exchange_variant).and_return(mock_model(Spree::Variant)) }
604
-
605
- context "an exchange inventory unit already exists" do
606
- before { allow(return_item).to receive(:exchange_inventory_unit).and_return(mock_model(Spree::InventoryUnit)) }
607
- it { expect(subject).to be_nil }
608
- end
609
-
610
- context "no exchange inventory unit exists" do
611
- it "builds a pending inventory unit with references to the return item, variant, and previous inventory unit" do
612
- expect(subject.variant).to eq return_item.exchange_variant
613
- expect(subject.pending).to eq true
614
- expect(subject).not_to be_persisted
615
- expect(subject.original_return_item).to eq return_item
616
- expect(subject.line_item).to eq return_item.inventory_unit.line_item
617
- end
618
- end
619
- end
620
-
621
- context "the return item is not intended to be exchanged" do
622
- it { expect(subject).to be_nil }
623
- end
624
- end
625
-
626
- describe "#exchange_shipment" do
627
- it "returns the exchange inventory unit's shipment" do
628
- inventory_unit = build(:inventory_unit)
629
- subject.exchange_inventory_unit = inventory_unit
630
- expect(subject.exchange_shipment).to eq inventory_unit.shipment
631
- end
632
- end
633
-
634
- describe "#shipment" do
635
- it "returns the inventory unit's shipment" do
636
- inventory_unit = build(:inventory_unit)
637
- subject.inventory_unit = inventory_unit
638
- expect(subject.shipment).to eq inventory_unit.shipment
639
- end
640
- end
641
-
642
- describe 'inventory_unit uniqueness' do
643
- let!(:old_return_item) { create(:return_item, reception_status: old_reception_status) }
644
- let(:old_reception_status) { 'awaiting' }
645
-
646
- subject do
647
- build(:return_item, {
648
- return_authorization: old_return_item.return_authorization,
649
- inventory_unit: old_return_item.inventory_unit
650
- })
651
- end
652
-
653
- context 'with other awaiting return items exist for the same inventory unit' do
654
- let(:old_reception_status) { 'awaiting' }
655
-
656
- it 'cancels the others' do
657
- expect {
658
- subject.save!
659
- }.to change { old_return_item.reload.reception_status }.from('awaiting').to('cancelled')
660
- end
661
-
662
- it 'does not cancel itself' do
663
- subject.save!
664
- expect(subject).to be_awaiting
665
- end
666
- end
667
-
668
- context 'with other cancelled return items exist for the same inventory unit' do
669
- let(:old_reception_status) { 'cancelled' }
670
-
671
- it 'succeeds' do
672
- subject.save!
673
- end
674
- end
675
-
676
- context 'with other received return items exist for the same inventory unit' do
677
- let(:old_reception_status) { 'received' }
678
-
679
- it 'is invalid' do
680
- expect(subject).to_not be_valid
681
- expect(subject.errors.to_a).to eq ["Inventory unit #{subject.inventory_unit_id} has already been taken by return item #{old_return_item.id}"]
682
- end
683
- end
684
-
685
- context 'with other given_to_customer return items exist for the same inventory unit' do
686
- let(:old_reception_status) { 'given_to_customer' }
687
-
688
- it 'is invalid' do
689
- expect(subject).to_not be_valid
690
- expect(subject.errors.to_a).to eq ["Inventory unit #{subject.inventory_unit_id} has already been taken by return item #{old_return_item.id}"]
691
- end
692
- end
693
- end
694
-
695
- describe "included tax in total" do
696
- let(:inventory_unit) { create(:inventory_unit, state: 'shipped') }
697
- let(:return_item) do
698
- create(
699
- :return_item,
700
- inventory_unit: inventory_unit,
701
- included_tax_total: 5
702
- )
703
- end
704
-
705
- it 'includes included tax total' do
706
- expect(return_item.amount).to eq 10
707
- expect(return_item.included_tax_total).to eq 5
708
- expect(return_item.total).to eq 10
709
- end
710
- end
711
-
712
- describe "valid exchange variant" do
713
- subject { return_item }
714
-
715
- before { subject.save }
716
-
717
- context "return item doesn't have an exchange variant" do
718
- let(:return_item) { create(:return_item) }
719
-
720
- it "is valid" do
721
- expect(subject).to be_valid
722
- end
723
- end
724
-
725
- context "return item has an exchange variant" do
726
- let(:return_item) { create(:exchange_return_item) }
727
- let(:exchange_variant) { create(:on_demand_variant, product: return_item.inventory_unit.variant.product) }
728
-
729
- context "the exchange variant is eligible" do
730
- before { return_item.exchange_variant = exchange_variant }
731
-
732
- it "is valid" do
733
- expect(subject).to be_valid
734
- end
735
- end
736
-
737
- context "the exchange variant is not eligible" do
738
- context "new return item" do
739
- let(:return_item) { build(:return_item) }
740
- let(:exchange_variant) { create(:variant, product: return_item.inventory_unit.variant.product) }
741
-
742
- before { return_item.exchange_variant = exchange_variant }
743
-
744
- it "is invalid" do
745
- expect(subject).to_not be_valid
746
- end
747
-
748
- it "adds an error message about the invalid exchange variant" do
749
- subject.valid?
750
- expect(subject.errors.to_a).to eq ["Invalid exchange variant."]
751
- end
752
- end
753
-
754
- context "the exchange variant has been updated" do
755
- before do
756
- other_variant = create(:variant)
757
- return_item.exchange_variant_id = other_variant.id
758
- subject.valid?
759
- end
760
-
761
- it "is invalid" do
762
- expect(subject).to_not be_valid
763
- end
764
-
765
- it "adds an error message about the invalid exchange variant" do
766
- expect(subject.errors.to_a).to eq ["Invalid exchange variant."]
767
- end
768
- end
769
-
770
- context "the exchange variant has not been updated" do
771
- before do
772
- other_variant = create(:variant)
773
- return_item.update_column(:exchange_variant_id, other_variant.id)
774
- return_item.reload
775
- subject.valid?
776
- end
777
-
778
- it "is valid" do
779
- expect(subject).to be_valid
780
- end
781
- end
782
- end
783
- end
784
- end
785
- end