solidus_core 2.10.3 → 2.11.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (552) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree.js.erb +31 -2
  3. data/app/controllers/spree/base_controller.rb +1 -0
  4. data/app/mailers/spree/base_mailer.rb +4 -0
  5. data/app/mailers/spree/order_mailer.rb +1 -1
  6. data/app/models/concerns/spree/active_storage_adapter.rb +116 -0
  7. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +69 -0
  8. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
  9. data/app/models/concerns/spree/default_price.rb +1 -1
  10. data/app/models/concerns/spree/soft_deletable.rb +18 -0
  11. data/app/models/concerns/spree/user_address_book.rb +86 -32
  12. data/app/models/concerns/spree/user_methods.rb +3 -2
  13. data/app/models/spree/ability.rb +34 -10
  14. data/app/models/spree/address.rb +94 -17
  15. data/app/models/spree/address/name.rb +49 -0
  16. data/app/models/spree/address/state_validator.rb +71 -0
  17. data/app/models/spree/adjustment.rb +1 -1
  18. data/app/models/spree/base.rb +2 -2
  19. data/app/models/spree/calculator.rb +4 -4
  20. data/app/models/spree/calculator/default_tax.rb +1 -1
  21. data/app/models/spree/calculator/free_shipping.rb +1 -0
  22. data/app/models/spree/calculator/percent_per_item.rb +6 -4
  23. data/app/models/spree/calculator/price_sack.rb +2 -1
  24. data/app/models/spree/credit_card.rb +2 -2
  25. data/app/models/spree/customer_return.rb +4 -2
  26. data/app/models/spree/exchange.rb +1 -1
  27. data/app/models/spree/image/active_storage_attachment.rb +21 -0
  28. data/app/models/spree/inventory_unit.rb +1 -1
  29. data/app/models/spree/line_item.rb +13 -4
  30. data/app/models/spree/option_type.rb +1 -1
  31. data/app/models/spree/option_value.rb +2 -2
  32. data/app/models/spree/order.rb +91 -20
  33. data/app/models/spree/order/checkout.rb +1 -0
  34. data/app/models/spree/order/payments.rb +2 -2
  35. data/app/models/spree/order_inventory.rb +16 -4
  36. data/app/models/spree/order_merger.rb +6 -4
  37. data/app/models/spree/order_promotion.rb +1 -1
  38. data/app/models/spree/order_updater.rb +11 -10
  39. data/app/models/spree/payment.rb +3 -3
  40. data/app/models/spree/payment/cancellation.rb +3 -22
  41. data/app/models/spree/payment/processing.rb +54 -30
  42. data/app/models/spree/payment_method.rb +8 -9
  43. data/app/models/spree/payment_source.rb +2 -2
  44. data/app/models/spree/preference.rb +1 -1
  45. data/app/models/spree/price.rb +2 -8
  46. data/app/models/spree/product.rb +19 -14
  47. data/app/models/spree/product/scopes.rb +9 -5
  48. data/app/models/spree/promotion.rb +18 -7
  49. data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
  50. data/app/models/spree/promotion_action.rb +1 -7
  51. data/app/models/spree/promotion_code.rb +6 -1
  52. data/app/models/spree/promotion_code_batch.rb +1 -1
  53. data/app/models/spree/promotion_handler/coupon.rb +2 -2
  54. data/app/models/spree/promotion_rule.rb +1 -1
  55. data/app/models/spree/promotion_rule_role.rb +1 -1
  56. data/app/models/spree/refund.rb +60 -12
  57. data/app/models/spree/reimbursement.rb +27 -0
  58. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +10 -3
  59. data/app/models/spree/return_authorization.rb +1 -1
  60. data/app/models/spree/return_item.rb +21 -10
  61. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
  62. data/app/models/spree/role.rb +1 -1
  63. data/app/models/spree/shipment.rb +2 -2
  64. data/app/models/spree/shipping_calculator.rb +1 -1
  65. data/app/models/spree/shipping_manifest.rb +2 -2
  66. data/app/models/spree/shipping_method.rb +2 -9
  67. data/app/models/spree/shipping_rate.rb +1 -1
  68. data/app/models/spree/shipping_rate_tax.rb +1 -1
  69. data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
  70. data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
  71. data/app/models/spree/stock/package.rb +1 -1
  72. data/app/models/spree/stock/simple_coordinator.rb +1 -3
  73. data/app/models/spree/stock_item.rb +2 -8
  74. data/app/models/spree/stock_movement.rb +2 -0
  75. data/app/models/spree/store.rb +1 -1
  76. data/app/models/spree/store_credit.rb +1 -7
  77. data/app/models/spree/store_credit_category.rb +30 -3
  78. data/app/models/spree/store_credit_event.rb +1 -7
  79. data/app/models/spree/store_credit_reason.rb +0 -4
  80. data/app/models/spree/tax/tax_helpers.rb +1 -1
  81. data/app/models/spree/tax_category.rb +2 -8
  82. data/app/models/spree/tax_rate.rb +7 -7
  83. data/app/models/spree/taxon.rb +1 -1
  84. data/app/models/spree/taxon/active_storage_attachment.rb +19 -0
  85. data/app/models/spree/user_address.rb +8 -2
  86. data/app/models/spree/variant.rb +7 -13
  87. data/app/models/spree/variant_property_rule.rb +5 -1
  88. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +8 -3
  89. data/app/models/spree/zone.rb +1 -1
  90. data/config/locales/en.yml +44 -5
  91. data/db/default/spree/countries.rb +1 -1
  92. data/db/default/spree/states.rb +12 -4
  93. data/db/default/spree/store_credit.rb +2 -2
  94. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
  95. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
  96. data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
  97. data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
  98. data/lib/generators/solidus/install/install_generator.rb +253 -0
  99. data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +36 -5
  100. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
  101. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
  102. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
  103. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
  104. data/lib/generators/spree/dummy/templates/rails/test.rb +1 -1
  105. data/lib/generators/spree/install/install_generator.rb +7 -189
  106. data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
  107. data/lib/spree/app_configuration.rb +117 -51
  108. data/lib/spree/awesome_nested_set_override.rb +44 -0
  109. data/lib/spree/core.rb +6 -11
  110. data/lib/spree/core/controller_helpers/auth.rb +17 -4
  111. data/lib/spree/core/controller_helpers/current_host.rb +17 -0
  112. data/lib/spree/core/controller_helpers/order.rb +8 -7
  113. data/lib/spree/core/engine.rb +39 -2
  114. data/lib/spree/core/importer/order.rb +24 -10
  115. data/lib/spree/core/permalinks.rb +1 -3
  116. data/lib/spree/core/product_filters.rb +6 -5
  117. data/lib/spree/core/state_machines.rb +20 -1
  118. data/lib/spree/core/state_machines/order.rb +249 -0
  119. data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
  120. data/lib/spree/core/version.rb +1 -1
  121. data/lib/spree/encryptor.rb +25 -0
  122. data/lib/spree/event.rb +40 -7
  123. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  124. data/lib/spree/event/configuration.rb +11 -6
  125. data/lib/spree/event/subscriber.rb +38 -18
  126. data/lib/spree/event/subscriber_registry.rb +92 -0
  127. data/lib/spree/i18n.rb +1 -1
  128. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  129. data/lib/spree/paranoia_deprecations.rb +32 -12
  130. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  131. data/lib/spree/permission_sets/default_customer.rb +16 -16
  132. data/lib/spree/permission_sets/order_display.rb +11 -11
  133. data/lib/spree/permission_sets/order_management.rb +1 -1
  134. data/lib/spree/permission_sets/product_display.rb +9 -9
  135. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  136. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  137. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  138. data/lib/spree/permission_sets/stock_display.rb +2 -2
  139. data/lib/spree/permission_sets/stock_management.rb +1 -1
  140. data/lib/spree/permission_sets/user_display.rb +3 -3
  141. data/lib/spree/permission_sets/user_management.rb +4 -3
  142. data/lib/spree/permitted_attributes.rb +9 -8
  143. data/lib/spree/preferences/preferable.rb +4 -3
  144. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  145. data/lib/spree/testing_support.rb +40 -0
  146. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  147. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  148. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  149. data/lib/spree/testing_support/capybara_ext.rb +3 -0
  150. data/lib/spree/testing_support/common_rake.rb +3 -3
  151. data/lib/spree/testing_support/dummy_app.rb +44 -23
  152. data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
  153. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
  154. data/lib/spree/testing_support/factories.rb +2 -4
  155. data/lib/spree/testing_support/factories/address_factory.rb +3 -4
  156. data/lib/spree/testing_support/factories/adjustment_factory.rb +2 -5
  157. data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +3 -0
  158. data/lib/spree/testing_support/factories/calculator_factory.rb +3 -0
  159. data/lib/spree/testing_support/factories/carton_factory.rb +2 -2
  160. data/lib/spree/testing_support/factories/country_factory.rb +3 -0
  161. data/lib/spree/testing_support/factories/credit_card_factory.rb +3 -0
  162. data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -3
  163. data/lib/spree/testing_support/factories/image_factory.rb +4 -1
  164. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +2 -4
  165. data/lib/spree/testing_support/factories/line_item_factory.rb +2 -2
  166. data/lib/spree/testing_support/factories/option_type_factory.rb +3 -0
  167. data/lib/spree/testing_support/factories/option_value_factory.rb +3 -0
  168. data/lib/spree/testing_support/factories/order_factory.rb +2 -6
  169. data/lib/spree/testing_support/factories/order_promotion_factory.rb +2 -2
  170. data/lib/spree/testing_support/factories/payment_factory.rb +2 -4
  171. data/lib/spree/testing_support/factories/payment_method_factory.rb +3 -0
  172. data/lib/spree/testing_support/factories/price_factory.rb +2 -1
  173. data/lib/spree/testing_support/factories/product_factory.rb +2 -5
  174. data/lib/spree/testing_support/factories/product_option_type_factory.rb +2 -2
  175. data/lib/spree/testing_support/factories/product_property_factory.rb +2 -2
  176. data/lib/spree/testing_support/factories/promotion_category_factory.rb +3 -0
  177. data/lib/spree/testing_support/factories/promotion_code_factory.rb +2 -2
  178. data/lib/spree/testing_support/factories/promotion_factory.rb +8 -2
  179. data/lib/spree/testing_support/factories/property_factory.rb +3 -0
  180. data/lib/spree/testing_support/factories/refund_factory.rb +3 -2
  181. data/lib/spree/testing_support/factories/refund_reason_factory.rb +3 -0
  182. data/lib/spree/testing_support/factories/reimbursement_factory.rb +3 -2
  183. data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +3 -0
  184. data/lib/spree/testing_support/factories/return_authorization_factory.rb +2 -3
  185. data/lib/spree/testing_support/factories/return_item_factory.rb +2 -4
  186. data/lib/spree/testing_support/factories/return_reason_factory.rb +3 -0
  187. data/lib/spree/testing_support/factories/role_factory.rb +3 -0
  188. data/lib/spree/testing_support/factories/shipment_factory.rb +2 -3
  189. data/lib/spree/testing_support/factories/shipping_category_factory.rb +3 -0
  190. data/lib/spree/testing_support/factories/shipping_method_factory.rb +2 -3
  191. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +2 -2
  192. data/lib/spree/testing_support/factories/state_factory.rb +2 -1
  193. data/lib/spree/testing_support/factories/stock_item_factory.rb +2 -2
  194. data/lib/spree/testing_support/factories/stock_location_factory.rb +2 -3
  195. data/lib/spree/testing_support/factories/stock_movement_factory.rb +2 -1
  196. data/lib/spree/testing_support/factories/stock_package_factory.rb +2 -2
  197. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +11 -0
  198. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +3 -2
  199. data/lib/spree/testing_support/factories/store_credit_factory.rb +2 -3
  200. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +6 -1
  201. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +3 -0
  202. data/lib/spree/testing_support/factories/store_factory.rb +4 -1
  203. data/lib/spree/testing_support/factories/tax_category_factory.rb +2 -1
  204. data/lib/spree/testing_support/factories/tax_rate_factory.rb +2 -3
  205. data/lib/spree/testing_support/factories/taxon_factory.rb +6 -1
  206. data/lib/spree/testing_support/factories/taxonomy_factory.rb +3 -0
  207. data/lib/spree/testing_support/factories/user_factory.rb +2 -3
  208. data/lib/spree/testing_support/factories/variant_factory.rb +2 -4
  209. data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +2 -2
  210. data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +2 -3
  211. data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +2 -2
  212. data/lib/spree/testing_support/factories/zone_factory.rb +3 -3
  213. data/lib/spree/testing_support/fixtures/blank.jpg +0 -0
  214. data/lib/spree/testing_support/job_helpers.rb +24 -0
  215. data/lib/spree/testing_support/order_walkthrough.rb +1 -1
  216. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  217. data/lib/spree/testing_support/preferences.rb +3 -1
  218. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  219. data/lib/spree/testing_support/translations.rb +25 -0
  220. data/{app/models → lib}/spree/user_class_handle.rb +0 -0
  221. data/lib/tasks/email.rake +3 -2
  222. data/solidus_core.gemspec +8 -5
  223. metadata +97 -374
  224. data/script/rails +0 -10
  225. data/spec/fixtures/thinking-cat.jpg +0 -0
  226. data/spec/helpers/base_helper_spec.rb +0 -168
  227. data/spec/helpers/products_helper_spec.rb +0 -202
  228. data/spec/helpers/taxons_helper_spec.rb +0 -43
  229. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  230. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  231. data/spec/lib/i18n_spec.rb +0 -97
  232. data/spec/lib/search/base_spec.rb +0 -91
  233. data/spec/lib/search/variant_spec.rb +0 -115
  234. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  235. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  236. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  237. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  238. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  239. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  240. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  241. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  242. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -48
  243. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  244. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  245. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  246. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  247. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
  248. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  249. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  250. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  251. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  252. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  253. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  254. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  255. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  256. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  257. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  258. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  259. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  260. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  261. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  262. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  263. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  264. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  265. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  266. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  267. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  268. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  269. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  270. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  271. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  272. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  273. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  274. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  275. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  276. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  277. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  278. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  279. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  280. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  281. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  282. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  283. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  284. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  285. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  286. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  287. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  288. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  289. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  290. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  291. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  292. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  293. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  294. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  295. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  296. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  297. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  298. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  299. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  300. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  301. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  302. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  303. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  304. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  305. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  306. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  307. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  308. data/spec/lib/spree/core/version_spec.rb +0 -19
  309. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  310. data/spec/lib/spree/event_spec.rb +0 -130
  311. data/spec/lib/spree/localized_number_spec.rb +0 -45
  312. data/spec/lib/spree/migrations_spec.rb +0 -32
  313. data/spec/lib/spree/money_spec.rb +0 -298
  314. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  315. data/spec/lib/spree/permitted_attributes_spec.rb +0 -41
  316. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  317. data/spec/lib/tasks/dummy_task.rake +0 -12
  318. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  319. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  320. data/spec/mailers/carton_mailer_spec.rb +0 -44
  321. data/spec/mailers/order_mailer_spec.rb +0 -117
  322. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  323. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  324. data/spec/mailers/test_mailer_spec.rb +0 -13
  325. data/spec/models/spree/ability_spec.rb +0 -279
  326. data/spec/models/spree/address_spec.rb +0 -399
  327. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  328. data/spec/models/spree/adjustment_spec.rb +0 -339
  329. data/spec/models/spree/asset_spec.rb +0 -25
  330. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  331. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  332. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  333. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  334. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  335. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  336. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  337. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  338. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  339. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  340. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  341. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  342. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  343. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  344. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
  345. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  346. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  347. data/spec/models/spree/calculator_spec.rb +0 -43
  348. data/spec/models/spree/carton_spec.rb +0 -145
  349. data/spec/models/spree/classification_spec.rb +0 -126
  350. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  351. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  352. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  353. data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
  354. data/spec/models/spree/country_spec.rb +0 -154
  355. data/spec/models/spree/credit_card_spec.rb +0 -373
  356. data/spec/models/spree/customer_return_spec.rb +0 -294
  357. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  358. data/spec/models/spree/exchange_spec.rb +0 -76
  359. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  360. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  361. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  362. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  363. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  364. data/spec/models/spree/gateway_spec.rb +0 -14
  365. data/spec/models/spree/image_spec.rb +0 -25
  366. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  367. data/spec/models/spree/line_item_spec.rb +0 -240
  368. data/spec/models/spree/option_type_spec.rb +0 -16
  369. data/spec/models/spree/option_value_spec.rb +0 -52
  370. data/spec/models/spree/order/address_spec.rb +0 -52
  371. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  372. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  373. data/spec/models/spree/order/checkout_spec.rb +0 -740
  374. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  375. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  376. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  377. data/spec/models/spree/order/payment_spec.rb +0 -280
  378. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  379. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  380. data/spec/models/spree/order/totals_spec.rb +0 -26
  381. data/spec/models/spree/order/validations_spec.rb +0 -17
  382. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  383. data/spec/models/spree/order_capturing_spec.rb +0 -16
  384. data/spec/models/spree/order_contents_spec.rb +0 -362
  385. data/spec/models/spree/order_inventory_spec.rb +0 -285
  386. data/spec/models/spree/order_merger_spec.rb +0 -162
  387. data/spec/models/spree/order_mutex_spec.rb +0 -89
  388. data/spec/models/spree/order_promotion_spec.rb +0 -33
  389. data/spec/models/spree/order_shipping_spec.rb +0 -247
  390. data/spec/models/spree/order_spec.rb +0 -1687
  391. data/spec/models/spree/order_taxation_spec.rb +0 -128
  392. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  393. data/spec/models/spree/order_updater_spec.rb +0 -556
  394. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  395. data/spec/models/spree/payment_create_spec.rb +0 -195
  396. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  397. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  398. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  399. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  400. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  401. data/spec/models/spree/payment_method_spec.rb +0 -408
  402. data/spec/models/spree/payment_spec.rb +0 -1270
  403. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  404. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  405. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  406. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  407. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  408. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  409. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  410. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  411. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  412. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  413. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  414. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  415. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  416. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  417. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  418. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
  419. data/spec/models/spree/preference_spec.rb +0 -79
  420. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  421. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  422. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  423. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  424. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  425. data/spec/models/spree/preferences/store_spec.rb +0 -40
  426. data/spec/models/spree/price_spec.rb +0 -150
  427. data/spec/models/spree/product/scopes_spec.rb +0 -164
  428. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  429. data/spec/models/spree/product_filter_spec.rb +0 -28
  430. data/spec/models/spree/product_property_spec.rb +0 -20
  431. data/spec/models/spree/product_spec.rb +0 -584
  432. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  433. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  434. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  435. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  436. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  437. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  438. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  439. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  440. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  441. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  442. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  443. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  444. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -227
  445. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  446. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  447. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  448. data/spec/models/spree/promotion_action_spec.rb +0 -44
  449. data/spec/models/spree/promotion_category_spec.rb +0 -19
  450. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  451. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  452. data/spec/models/spree/promotion_code_spec.rb +0 -206
  453. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  454. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  455. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  456. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  457. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  458. data/spec/models/spree/promotion_spec.rb +0 -945
  459. data/spec/models/spree/refund_spec.rb +0 -200
  460. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  461. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  462. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  463. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  464. data/spec/models/spree/reimbursement_spec.rb +0 -278
  465. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  466. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  467. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  468. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  469. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  470. data/spec/models/spree/return_authorization_spec.rb +0 -226
  471. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  472. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  473. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  474. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  475. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  476. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  477. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  478. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  479. data/spec/models/spree/return_item_spec.rb +0 -785
  480. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  481. data/spec/models/spree/shipment_spec.rb +0 -914
  482. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  483. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  484. data/spec/models/spree/shipping_method_spec.rb +0 -292
  485. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  486. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  487. data/spec/models/spree/state_spec.rb +0 -43
  488. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  489. data/spec/models/spree/stock/availability_spec.rb +0 -143
  490. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  491. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  492. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  493. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  494. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  495. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  496. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  497. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  498. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  499. data/spec/models/spree/stock/package_spec.rb +0 -182
  500. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  501. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  502. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  503. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  504. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  505. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  506. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  507. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  508. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  509. data/spec/models/spree/stock_item_spec.rb +0 -348
  510. data/spec/models/spree/stock_location_spec.rb +0 -288
  511. data/spec/models/spree/stock_movement_spec.rb +0 -58
  512. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  513. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  514. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  515. data/spec/models/spree/store_credit_spec.rb +0 -900
  516. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  517. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  518. data/spec/models/spree/store_spec.rb +0 -156
  519. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  520. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  521. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  522. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  523. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  524. data/spec/models/spree/tax_category_spec.rb +0 -50
  525. data/spec/models/spree/tax_rate_spec.rb +0 -317
  526. data/spec/models/spree/taxon_spec.rb +0 -197
  527. data/spec/models/spree/taxonomy_spec.rb +0 -15
  528. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
  529. data/spec/models/spree/unit_cancel_spec.rb +0 -126
  530. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
  531. data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
  532. data/spec/models/spree/user_spec.rb +0 -247
  533. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  534. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  535. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  536. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  537. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  538. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  539. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  540. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  541. data/spec/models/spree/variant_spec.rb +0 -862
  542. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  543. data/spec/models/spree/wallet_spec.rb +0 -155
  544. data/spec/models/spree/zone_spec.rb +0 -248
  545. data/spec/rails_helper.rb +0 -46
  546. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  547. data/spec/spec_helper.rb +0 -36
  548. data/spec/support/big_decimal.rb +0 -7
  549. data/spec/support/concerns/default_price.rb +0 -44
  550. data/spec/support/concerns/payment_source.rb +0 -66
  551. data/spec/support/concerns/working_factories.rb +0 -15
  552. data/spec/support/dummy_ability.rb +0 -7
@@ -1,59 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::ReturnItem::EligibilityValidator::InventoryShipped do
6
- let(:return_item) { create(:return_item) }
7
- let(:validator) { Spree::ReturnItem::EligibilityValidator::InventoryShipped.new(return_item) }
8
-
9
- describe "#eligible_for_return?" do
10
- before { allow(return_item.inventory_unit).to receive(:shipped?).and_return(true) }
11
-
12
- subject { validator.eligible_for_return? }
13
-
14
- context "the associated inventory unit is shipped" do
15
- it "returns true" do
16
- expect(subject).to eq true
17
- end
18
- end
19
-
20
- context "the associated inventory unit is not shipped" do
21
- before { allow(return_item.inventory_unit).to receive(:shipped?).and_return(false) }
22
-
23
- it "returns false" do
24
- expect(subject).to eq false
25
- end
26
-
27
- it "sets an error" do
28
- subject
29
- expect(validator.errors[:inventory_unit_shipped]).to eq I18n.t('spree.return_item_inventory_unit_ineligible')
30
- end
31
- end
32
- end
33
-
34
- describe "#requires_manual_intervention?" do
35
- subject { validator.requires_manual_intervention? }
36
-
37
- context "not eligible for return" do
38
- before do
39
- allow(return_item.inventory_unit).to receive(:shipped?).and_return(false)
40
- validator.eligible_for_return?
41
- end
42
-
43
- it 'returns true if errors were added' do
44
- expect(subject).to eq true
45
- end
46
- end
47
-
48
- context "eligible for return" do
49
- before do
50
- allow(return_item.inventory_unit).to receive(:shipped?).and_return(true)
51
- validator.eligible_for_return?
52
- end
53
-
54
- it 'returns false if no errors were added' do
55
- expect(subject).to eq false
56
- end
57
- end
58
- end
59
- end
@@ -1,86 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::ReturnItem::EligibilityValidator::NoReimbursements do
6
- let(:validator) { Spree::ReturnItem::EligibilityValidator::NoReimbursements.new(return_item) }
7
-
8
- describe "#eligible_for_return?" do
9
- subject { validator.eligible_for_return? }
10
-
11
- context "inventory unit has already been reimbursed" do
12
- let(:reimbursement) { create(:reimbursement) }
13
- let(:return_item) { reimbursement.return_items.last }
14
-
15
- it "returns false" do
16
- expect(subject).to eq false
17
- end
18
-
19
- it "sets an error" do
20
- subject
21
- expect(validator.errors[:inventory_unit_reimbursed]).to eq I18n.t('spree.return_item_inventory_unit_reimbursed')
22
- end
23
-
24
- context "but the return item has been expired" do
25
- before { return_item.expired }
26
-
27
- it "returns true" do
28
- expect(subject).to eq true
29
- end
30
- end
31
-
32
- context "but the return item has been canceled" do
33
- before { return_item.cancel }
34
-
35
- it "returns true" do
36
- expect(subject).to eq true
37
- end
38
- end
39
-
40
- context "but the return item has been unexchanged" do
41
- before { return_item.unexchange }
42
-
43
- it "returns true" do
44
- expect(subject).to eq true
45
- end
46
- end
47
- end
48
-
49
- context "inventory unit has not been reimbursed" do
50
- let(:return_item) { create(:return_item) }
51
-
52
- it "returns true" do
53
- expect(subject).to eq true
54
- end
55
- end
56
- end
57
-
58
- describe "#requires_manual_intervention?" do
59
- subject { validator.requires_manual_intervention? }
60
-
61
- context "not eligible for return" do
62
- let(:reimbursement) { create(:reimbursement) }
63
- let(:return_item) { reimbursement.return_items.last }
64
-
65
- before do
66
- validator.eligible_for_return?
67
- end
68
-
69
- it 'returns true if errors were added' do
70
- expect(subject).to eq true
71
- end
72
- end
73
-
74
- context "eligible for return" do
75
- let(:return_item) { create(:return_item) }
76
-
77
- before do
78
- validator.eligible_for_return?
79
- end
80
-
81
- it 'returns false if no errors were added' do
82
- expect(subject).to eq false
83
- end
84
- end
85
- end
86
- end
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::ReturnItem::EligibilityValidator::OrderCompleted do
6
- let(:shipment) { create(:shipment, order: order) }
7
- let(:inventory_unit) { create(:inventory_unit, shipment: shipment) }
8
- let(:return_item) { create(:return_item, inventory_unit: inventory_unit) }
9
- let(:validator) { Spree::ReturnItem::EligibilityValidator::OrderCompleted.new(return_item) }
10
-
11
- describe "#eligible_for_return?" do
12
- subject { validator.eligible_for_return? }
13
-
14
- context "the order was completed" do
15
- let(:order) { create(:completed_order_with_totals) }
16
-
17
- it "returns true" do
18
- expect(subject).to be true
19
- end
20
- end
21
-
22
- context "the order is not completed" do
23
- let(:order) { create(:order) }
24
-
25
- it "returns false" do
26
- expect(subject).to be false
27
- end
28
-
29
- it "sets an error" do
30
- subject
31
- expect(validator.errors[:order_not_completed]).to eq I18n.t('spree.return_item_order_not_completed')
32
- end
33
- end
34
- end
35
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::ReturnItem::EligibilityValidator::RMARequired, type: :model do
6
- let(:return_item) { create(:return_item) }
7
- let(:validator) { Spree::ReturnItem::EligibilityValidator::RMARequired.new(return_item) }
8
-
9
- describe "#eligible_for_return?" do
10
- subject { validator.eligible_for_return? }
11
-
12
- context "there is an rma on the return item" do
13
- it "returns true" do
14
- expect(subject).to be true
15
- end
16
- end
17
-
18
- context "there is no rma on the return item" do
19
- before { allow(return_item).to receive(:return_authorization).and_return(nil) }
20
-
21
- it "returns false" do
22
- expect(subject).to be false
23
- end
24
-
25
- it "sets an error" do
26
- subject
27
- expect(validator.errors[:rma_required]).to eq I18n.t('spree.return_item_rma_ineligible')
28
- end
29
- end
30
- end
31
- end
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::ReturnItem::EligibilityValidator::TimeSincePurchase, type: :model do
6
- include ActiveSupport::Testing::TimeHelpers
7
-
8
- let(:return_item) { instance_double(Spree::ReturnItem) }
9
- let(:validator) { described_class.new(return_item) }
10
-
11
- describe "#eligible_for_return?" do
12
- subject { validator.eligible_for_return? }
13
-
14
- let(:interval) { Spree::Config[:return_eligibility_number_of_days] }
15
-
16
- before do
17
- allow(return_item).
18
- to receive_message_chain('inventory_unit.order.completed_at').
19
- and_return(completed_at)
20
- end
21
-
22
- around(:each) do |e|
23
- travel_to(Time.current) { e.run }
24
- end
25
-
26
- context "it is within the return timeframe" do
27
- let(:completed_at) { 1.day.ago }
28
- it { is_expected.to be_truthy }
29
- end
30
-
31
- context "it is past the return timeframe" do
32
- let(:completed_at) { interval.day.ago }
33
-
34
- it { is_expected.to be_falsy }
35
-
36
- it "sets an error" do
37
- subject
38
- expect(validator.errors[:number_of_days]).to eq I18n.t('spree.return_item_time_period_ineligible')
39
- end
40
- end
41
- end
42
- end
@@ -1,66 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree
6
- module ReturnItem::ExchangeVariantEligibility
7
- RSpec.describe SameOptionValue, type: :model do
8
- describe ".eligible_variants" do
9
- let(:color_option_type) { create(:option_type, name: "color") }
10
- let(:waist_option_type) { create(:option_type, name: "waist") }
11
- let(:inseam_option_type) { create(:option_type, name: "inseam") }
12
-
13
- let(:blue_option_value) { create(:option_value, name: "blue", option_type: color_option_type) }
14
- let(:red_option_value) { create(:option_value, name: "red", option_type: color_option_type) }
15
-
16
- let(:three_two_waist_option_value) { create(:option_value, name: 32, option_type: waist_option_type) }
17
- let(:three_four_waist_option_value) { create(:option_value, name: 34, option_type: waist_option_type) }
18
-
19
- let(:three_zero_inseam_option_value) { create(:option_value, name: 30, option_type: inseam_option_type) }
20
- let(:three_one_inseam_option_value) { create(:option_value, name: 31, option_type: inseam_option_type) }
21
-
22
- let(:product) { create(:product, option_types: [color_option_type, waist_option_type, inseam_option_type]) }
23
-
24
- let!(:variant) { create(:variant, product: product, option_values: [blue_option_value, three_two_waist_option_value, three_zero_inseam_option_value]) }
25
- let!(:same_option_values_variant) { create(:variant, product: product, option_values: [blue_option_value, three_two_waist_option_value, three_one_inseam_option_value]) }
26
- let!(:different_color_option_value_variant) { create(:variant, product: product, option_values: [red_option_value, three_two_waist_option_value, three_one_inseam_option_value]) }
27
- let!(:different_waist_option_value_variant) { create(:variant, product: product, option_values: [blue_option_value, three_four_waist_option_value, three_one_inseam_option_value]) }
28
-
29
- before do
30
- @original_option_type_restrictions = SameOptionValue.option_type_restrictions
31
- SameOptionValue.option_type_restrictions = ["color", "waist"]
32
- end
33
-
34
- after { SameOptionValue.option_type_restrictions = @original_option_type_restrictions }
35
-
36
- subject { SameOptionValue.eligible_variants(variant.reload) }
37
-
38
- it "returns all other variants for the same product with the same option value for the specified option type" do
39
- Spree::StockItem.update_all(count_on_hand: 10)
40
-
41
- expect(subject.sort).to eq [variant, same_option_values_variant].sort
42
- end
43
-
44
- it "does not return variants for another product" do
45
- other_product_variant = create(:variant)
46
- expect(subject).not_to include other_product_variant
47
- end
48
-
49
- context "no option value restrictions are specified" do
50
- before do
51
- @original_option_type_restrictions = SameOptionValue.option_type_restrictions
52
- SameOptionValue.option_type_restrictions = []
53
- end
54
-
55
- after { SameOptionValue.option_type_restrictions = @original_option_type_restrictions }
56
-
57
- it "returns all variants for the product" do
58
- Spree::StockItem.update_all(count_on_hand: 10)
59
-
60
- expect(subject.sort).to eq [variant, same_option_values_variant, different_waist_option_value_variant, different_color_option_value_variant].sort
61
- end
62
- end
63
- end
64
- end
65
- end
66
- end
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree
6
- module ReturnItem::ExchangeVariantEligibility
7
- RSpec.describe SameProduct, type: :model do
8
- describe ".eligible_variants" do
9
- context "product has no variants" do
10
- it "returns the master variant for the same product" do
11
- product = create(:product)
12
- product.master.stock_items.first.update_column(:count_on_hand, 10)
13
-
14
- expect(SameProduct.eligible_variants(product.master)).to eq [product.master]
15
- end
16
- end
17
-
18
- context "product has variants" do
19
- it "returns all variants for the same product" do
20
- product = create(:product, variants: Array.new(3) { create(:variant) })
21
- product.variants.map { |value| value.stock_items.first.update_column(:count_on_hand, 10) }
22
-
23
- expect(SameProduct.eligible_variants(product.variants.first).sort).to eq product.variants.sort
24
- end
25
- end
26
-
27
- it "does not return variants for another product" do
28
- variant = create(:variant)
29
- other_product_variant = create(:variant)
30
- expect(SameProduct.eligible_variants(variant)).not_to include other_product_variant
31
- end
32
-
33
- it "only returns variants that are on hand" do
34
- product = create(:product, variants: Array.new(2) { create(:variant) })
35
- in_stock_variant = product.variants.first
36
-
37
- in_stock_variant.stock_items.first.update_column(:count_on_hand, 10)
38
- expect(SameProduct.eligible_variants(in_stock_variant)).to eq [in_stock_variant]
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -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