solidus_core 2.10.5 → 3.0.8

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 (618) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree.js.erb +0 -22
  3. data/app/controllers/spree/base_controller.rb +1 -0
  4. data/app/helpers/spree/store_helper.rb +0 -11
  5. data/app/mailers/spree/base_mailer.rb +4 -0
  6. data/app/mailers/spree/carton_mailer.rb +1 -5
  7. data/app/mailers/spree/order_mailer.rb +1 -1
  8. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +71 -0
  9. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
  10. data/app/models/concerns/spree/active_storage_adapter.rb +118 -0
  11. data/app/models/concerns/spree/adjustment_source.rb +0 -15
  12. data/app/models/concerns/spree/calculated_adjustments.rb +0 -18
  13. data/app/models/concerns/spree/default_price.rb +1 -1
  14. data/app/models/concerns/spree/soft_deletable.rb +16 -0
  15. data/app/models/concerns/spree/user_address_book.rb +61 -44
  16. data/app/models/concerns/spree/user_methods.rb +23 -12
  17. data/app/models/spree/ability.rb +0 -13
  18. data/app/models/spree/address/name.rb +31 -0
  19. data/app/models/spree/address/state_validator.rb +71 -0
  20. data/app/models/spree/address.rb +17 -95
  21. data/app/models/spree/adjustment.rb +1 -29
  22. data/app/models/spree/base.rb +1 -28
  23. data/app/models/spree/calculator/default_tax.rb +1 -1
  24. data/app/models/spree/calculator/flexi_rate.rb +0 -5
  25. data/app/models/spree/calculator.rb +8 -11
  26. data/app/models/spree/country.rb +1 -6
  27. data/app/models/spree/credit_card.rb +2 -29
  28. data/app/models/spree/customer_return.rb +5 -6
  29. data/app/models/spree/exchange.rb +1 -1
  30. data/app/models/spree/image/active_storage_attachment.rb +29 -0
  31. data/app/models/spree/image/paperclip_attachment.rb +1 -1
  32. data/app/models/spree/image.rb +0 -7
  33. data/app/models/spree/inventory_unit.rb +1 -22
  34. data/app/models/spree/line_item.rb +12 -46
  35. data/app/models/spree/log_entry.rb +74 -1
  36. data/app/models/spree/option_type.rb +1 -1
  37. data/app/models/spree/option_value.rb +2 -2
  38. data/app/models/spree/order/payments.rb +2 -2
  39. data/app/models/spree/order.rb +70 -132
  40. data/app/models/spree/order_cancellations.rb +4 -24
  41. data/app/models/spree/order_inventory.rb +16 -4
  42. data/app/models/spree/order_merger.rb +7 -5
  43. data/app/models/spree/order_promotion.rb +1 -1
  44. data/app/models/spree/order_shipping.rb +6 -9
  45. data/app/models/spree/order_updater.rb +7 -15
  46. data/app/models/spree/payment/cancellation.rb +3 -22
  47. data/app/models/spree/payment/processing.rb +54 -30
  48. data/app/models/spree/payment.rb +13 -9
  49. data/app/models/spree/payment_create.rb +1 -13
  50. data/app/models/spree/payment_method/bogus_credit_card.rb +13 -9
  51. data/app/models/spree/payment_method/credit_card.rb +1 -3
  52. data/app/models/spree/payment_method/simple_bogus_credit_card.rb +4 -4
  53. data/app/models/spree/payment_method.rb +7 -106
  54. data/app/models/spree/payment_source.rb +2 -2
  55. data/app/models/spree/preference.rb +1 -1
  56. data/app/models/spree/price.rb +3 -9
  57. data/app/models/spree/product/scopes.rb +9 -32
  58. data/app/models/spree/product.rb +24 -52
  59. data/app/models/spree/promotion/actions/create_adjustment.rb +0 -3
  60. data/app/models/spree/promotion/actions/create_item_adjustments.rb +0 -3
  61. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +0 -3
  62. data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
  63. data/app/models/spree/promotion/rules/taxon.rb +2 -15
  64. data/app/models/spree/promotion.rb +15 -8
  65. data/app/models/spree/promotion_action.rb +5 -15
  66. data/app/models/spree/promotion_code/batch_builder.rb +0 -14
  67. data/app/models/spree/promotion_code.rb +8 -3
  68. data/app/models/spree/promotion_code_batch.rb +1 -1
  69. data/app/models/spree/promotion_handler/coupon.rb +2 -2
  70. data/app/models/spree/promotion_rule.rb +5 -1
  71. data/app/models/spree/promotion_rule_role.rb +1 -1
  72. data/app/models/spree/refund.rb +19 -13
  73. data/app/models/spree/reimbursement.rb +11 -22
  74. data/app/models/spree/reimbursement_performer.rb +2 -8
  75. data/app/models/spree/reimbursement_type/credit.rb +1 -4
  76. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +8 -2
  77. data/app/models/spree/reimbursement_type/store_credit.rb +1 -4
  78. data/app/models/spree/return_authorization.rb +2 -5
  79. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
  80. data/app/models/spree/return_item.rb +10 -18
  81. data/app/models/spree/role.rb +1 -1
  82. data/app/models/spree/shipment.rb +3 -56
  83. data/app/models/spree/shipping_calculator.rb +1 -1
  84. data/app/models/spree/shipping_manifest.rb +2 -2
  85. data/app/models/spree/shipping_method.rb +3 -35
  86. data/app/models/spree/shipping_rate.rb +1 -3
  87. data/app/models/spree/shipping_rate_tax.rb +1 -1
  88. data/app/models/spree/state.rb +0 -4
  89. data/app/models/spree/stock/availability_validator.rb +2 -2
  90. data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
  91. data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
  92. data/app/models/spree/stock/inventory_validator.rb +2 -2
  93. data/app/models/spree/stock/package.rb +1 -1
  94. data/app/models/spree/stock/simple_coordinator.rb +7 -18
  95. data/app/models/spree/stock/splitter/base.rb +2 -7
  96. data/app/models/spree/stock_item.rb +3 -15
  97. data/app/models/spree/stock_movement.rb +2 -0
  98. data/app/models/spree/store.rb +1 -13
  99. data/app/models/spree/store_credit.rb +9 -7
  100. data/app/models/spree/store_credit_category.rb +3 -8
  101. data/app/models/spree/store_credit_event.rb +1 -7
  102. data/app/models/spree/store_credit_reason.rb +0 -4
  103. data/app/models/spree/tax/tax_helpers.rb +1 -1
  104. data/app/models/spree/tax_calculator/shipping_rate.rb +1 -12
  105. data/app/models/spree/tax_category.rb +2 -8
  106. data/app/models/spree/tax_rate.rb +7 -34
  107. data/app/models/spree/taxon/active_storage_attachment.rb +13 -0
  108. data/app/models/spree/taxon/paperclip_attachment.rb +0 -4
  109. data/app/models/spree/taxon.rb +1 -12
  110. data/app/models/spree/user_address.rb +3 -2
  111. data/app/models/spree/variant.rb +8 -58
  112. data/app/models/spree/variant_property_rule.rb +5 -1
  113. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +8 -3
  114. data/app/models/spree/zone.rb +1 -1
  115. data/config/locales/en.yml +293 -13
  116. data/db/default/spree/countries.rb +1 -1
  117. data/db/default/spree/states.rb +12 -4
  118. data/db/default/spree/store_credit.rb +2 -2
  119. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
  120. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
  121. data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
  122. data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
  123. data/db/migrate/20210122110141_add_name_to_spree_addresses.rb +13 -0
  124. data/lib/generators/{spree → solidus}/install/install_generator.rb +82 -14
  125. data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +4 -9
  126. data/lib/generators/spree/dummy/dummy_generator.rb +2 -1
  127. data/lib/generators/spree/dummy/templates/rails/database.yml +6 -1
  128. data/lib/generators/spree/dummy/templates/rails/storage.yml +3 -0
  129. data/lib/generators/spree/dummy/templates/rails/test.rb +6 -1
  130. data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
  131. data/lib/spree/app_configuration.rb +104 -72
  132. data/lib/spree/core/class_constantizer.rb +2 -0
  133. data/lib/spree/core/controller_helpers/auth.rb +4 -4
  134. data/lib/spree/core/controller_helpers/current_host.rb +17 -0
  135. data/lib/spree/core/controller_helpers/order.rb +8 -27
  136. data/lib/spree/core/controller_helpers/payment_parameters.rb +0 -54
  137. data/lib/spree/core/controller_helpers/pricing.rb +0 -8
  138. data/lib/spree/core/controller_helpers/strong_parameters.rb +0 -4
  139. data/lib/spree/core/engine.rb +23 -8
  140. data/lib/spree/core/environment_extension.rb +0 -9
  141. data/lib/spree/core/importer/order.rb +24 -10
  142. data/lib/spree/core/permalinks.rb +1 -3
  143. data/lib/spree/core/product_filters.rb +5 -44
  144. data/lib/spree/core/role_configuration.rb +0 -14
  145. data/lib/spree/core/search/base.rb +0 -26
  146. data/lib/spree/core/state_machines/order.rb +249 -0
  147. data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
  148. data/lib/spree/core/state_machines.rb +11 -1
  149. data/lib/spree/core/validators/email.rb +2 -2
  150. data/lib/spree/core/version.rb +1 -1
  151. data/lib/spree/core.rb +11 -19
  152. data/lib/spree/deprecation.rb +1 -1
  153. data/lib/spree/encryptor.rb +25 -0
  154. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  155. data/lib/spree/event/configuration.rb +7 -7
  156. data/lib/spree/event/subscriber.rb +22 -20
  157. data/lib/spree/event/subscriber_registry.rb +94 -0
  158. data/lib/spree/event.rb +20 -18
  159. data/lib/spree/i18n.rb +0 -22
  160. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  161. data/lib/spree/money.rb +3 -18
  162. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  163. data/lib/spree/permission_sets/default_customer.rb +16 -16
  164. data/lib/spree/permission_sets/order_display.rb +11 -11
  165. data/lib/spree/permission_sets/order_management.rb +1 -1
  166. data/lib/spree/permission_sets/product_display.rb +9 -9
  167. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  168. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  169. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  170. data/lib/spree/permission_sets/stock_display.rb +2 -2
  171. data/lib/spree/permission_sets/stock_management.rb +1 -1
  172. data/lib/spree/permission_sets/user_display.rb +3 -3
  173. data/lib/spree/permission_sets/user_management.rb +4 -3
  174. data/lib/spree/permitted_attributes.rb +12 -56
  175. data/lib/spree/preferences/persistable.rb +23 -0
  176. data/lib/spree/preferences/preferable.rb +4 -3
  177. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  178. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  179. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  180. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  181. data/lib/spree/testing_support/capybara_ext.rb +3 -30
  182. data/lib/spree/testing_support/common_rake.rb +3 -3
  183. data/lib/spree/testing_support/controller_requests.rb +0 -82
  184. data/lib/spree/testing_support/dummy_app/mailer_previews/test_mailer_preview.rb +4 -0
  185. data/lib/spree/testing_support/dummy_app/migrations.rb +2 -6
  186. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
  187. data/lib/spree/testing_support/dummy_app.rb +41 -24
  188. data/lib/spree/testing_support/factories/address_factory.rb +7 -4
  189. data/lib/spree/testing_support/factories/adjustment_factory.rb +10 -5
  190. data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +5 -0
  191. data/lib/spree/testing_support/factories/calculator_factory.rb +5 -0
  192. data/lib/spree/testing_support/factories/carton_factory.rb +7 -2
  193. data/lib/spree/testing_support/factories/country_factory.rb +5 -0
  194. data/lib/spree/testing_support/factories/credit_card_factory.rb +5 -0
  195. data/lib/spree/testing_support/factories/customer_return_factory.rb +8 -3
  196. data/lib/spree/testing_support/factories/image_factory.rb +6 -1
  197. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +9 -4
  198. data/lib/spree/testing_support/factories/line_item_factory.rb +7 -2
  199. data/lib/spree/testing_support/factories/option_type_factory.rb +8 -0
  200. data/lib/spree/testing_support/factories/option_value_factory.rb +5 -0
  201. data/lib/spree/testing_support/factories/order_factory.rb +11 -7
  202. data/lib/spree/testing_support/factories/order_promotion_factory.rb +7 -2
  203. data/lib/spree/testing_support/factories/payment_factory.rb +9 -4
  204. data/lib/spree/testing_support/factories/payment_method_factory.rb +5 -0
  205. data/lib/spree/testing_support/factories/price_factory.rb +6 -1
  206. data/lib/spree/testing_support/factories/product_factory.rb +10 -5
  207. data/lib/spree/testing_support/factories/product_option_type_factory.rb +7 -2
  208. data/lib/spree/testing_support/factories/product_property_factory.rb +7 -2
  209. data/lib/spree/testing_support/factories/promotion_category_factory.rb +5 -0
  210. data/lib/spree/testing_support/factories/promotion_code_factory.rb +7 -2
  211. data/lib/spree/testing_support/factories/promotion_factory.rb +13 -2
  212. data/lib/spree/testing_support/factories/property_factory.rb +5 -0
  213. data/lib/spree/testing_support/factories/refund_factory.rb +7 -2
  214. data/lib/spree/testing_support/factories/refund_reason_factory.rb +5 -0
  215. data/lib/spree/testing_support/factories/reimbursement_factory.rb +7 -2
  216. data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +5 -0
  217. data/lib/spree/testing_support/factories/return_authorization_factory.rb +8 -3
  218. data/lib/spree/testing_support/factories/return_item_factory.rb +8 -4
  219. data/lib/spree/testing_support/factories/return_reason_factory.rb +5 -0
  220. data/lib/spree/testing_support/factories/role_factory.rb +5 -0
  221. data/lib/spree/testing_support/factories/shipment_factory.rb +9 -3
  222. data/lib/spree/testing_support/factories/shipping_category_factory.rb +5 -0
  223. data/lib/spree/testing_support/factories/shipping_method_factory.rb +8 -3
  224. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +7 -2
  225. data/lib/spree/testing_support/factories/state_factory.rb +7 -1
  226. data/lib/spree/testing_support/factories/stock_item_factory.rb +7 -2
  227. data/lib/spree/testing_support/factories/stock_location_factory.rb +8 -3
  228. data/lib/spree/testing_support/factories/stock_movement_factory.rb +6 -1
  229. data/lib/spree/testing_support/factories/stock_package_factory.rb +7 -2
  230. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +13 -0
  231. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +8 -2
  232. data/lib/spree/testing_support/factories/store_credit_factory.rb +8 -3
  233. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +8 -1
  234. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +5 -0
  235. data/lib/spree/testing_support/factories/store_factory.rb +6 -1
  236. data/lib/spree/testing_support/factories/tax_category_factory.rb +7 -1
  237. data/lib/spree/testing_support/factories/tax_rate_factory.rb +8 -3
  238. data/lib/spree/testing_support/factories/taxon_factory.rb +10 -1
  239. data/lib/spree/testing_support/factories/taxonomy_factory.rb +5 -0
  240. data/lib/spree/testing_support/factories/user_factory.rb +14 -3
  241. data/lib/spree/testing_support/factories/variant_factory.rb +9 -4
  242. data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +7 -2
  243. data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +8 -3
  244. data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +7 -2
  245. data/lib/spree/testing_support/factories/zone_factory.rb +8 -3
  246. data/lib/spree/testing_support/factories.rb +8 -4
  247. data/lib/spree/testing_support/factory_bot.rb +68 -0
  248. data/lib/spree/testing_support/fixtures/blank.jpg +0 -0
  249. data/lib/spree/testing_support/fixtures/file.txt +1 -0
  250. data/lib/spree/testing_support/job_helpers.rb +24 -0
  251. data/lib/spree/testing_support/order_walkthrough.rb +10 -13
  252. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  253. data/lib/spree/testing_support/preferences.rb +0 -23
  254. data/lib/spree/testing_support/sequences.rb +4 -1
  255. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  256. data/lib/spree/testing_support/translations.rb +25 -0
  257. data/lib/spree/testing_support.rb +31 -0
  258. data/lib/tasks/solidus/check_orders_with_invalid_email.rake +18 -0
  259. data/lib/tasks/upgrade.rake +15 -0
  260. data/solidus_core.gemspec +30 -7
  261. metadata +137 -408
  262. data/app/mailers/spree/test_mailer.rb +0 -13
  263. data/app/models/concerns/spree/user_payment_source.rb +0 -26
  264. data/app/models/spree/calculator/free_shipping.rb +0 -21
  265. data/app/models/spree/calculator/percent_per_item.rb +0 -49
  266. data/app/models/spree/calculator/price_sack.rb +0 -27
  267. data/app/models/spree/gateway/bogus.rb +0 -13
  268. data/app/models/spree/gateway/bogus_simple.rb +0 -13
  269. data/app/models/spree/gateway.rb +0 -14
  270. data/app/models/spree/order/checkout.rb +0 -243
  271. data/app/models/spree/order_capturing.rb +0 -50
  272. data/app/models/spree/promotion_handler/free_shipping.rb +0 -9
  273. data/lib/solidus/migrations/rename_gateways.rb +0 -41
  274. data/lib/spree/core/current_store.rb +0 -24
  275. data/lib/spree/paranoia_deprecations.rb +0 -21
  276. data/lib/spree/promo/environment.rb +0 -12
  277. data/lib/spree/testing_support/bar_ability.rb +0 -19
  278. data/lib/tasks/core.rake +0 -104
  279. data/lib/tasks/email.rake +0 -11
  280. data/lib/tasks/migrations/copy_order_bill_address_to_credit_card.rake +0 -119
  281. data/lib/tasks/migrations/migrate_shipping_rate_taxes.rake +0 -22
  282. data/lib/tasks/migrations/migrate_user_addresses.rake +0 -34
  283. data/lib/tasks/migrations/rename_gateways.rake +0 -23
  284. data/lib/tasks/order_capturing.rake +0 -27
  285. data/script/rails +0 -10
  286. data/spec/fixtures/thinking-cat.jpg +0 -0
  287. data/spec/helpers/base_helper_spec.rb +0 -168
  288. data/spec/helpers/products_helper_spec.rb +0 -202
  289. data/spec/helpers/taxons_helper_spec.rb +0 -43
  290. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  291. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  292. data/spec/lib/i18n_spec.rb +0 -97
  293. data/spec/lib/search/base_spec.rb +0 -91
  294. data/spec/lib/search/variant_spec.rb +0 -115
  295. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  296. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  297. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  298. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  299. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  300. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  301. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  302. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  303. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -48
  304. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  305. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  306. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  307. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  308. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
  309. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  310. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  311. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  312. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  313. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  314. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  315. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  316. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  317. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  318. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  319. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  320. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  321. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  322. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  323. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  324. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  325. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  326. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  327. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  328. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  329. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  330. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  331. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  332. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  333. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  334. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  335. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  336. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  337. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  338. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  339. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  340. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  341. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  342. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  343. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  344. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  345. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  346. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  347. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  348. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  349. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  350. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  351. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  352. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  353. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  354. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  355. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  356. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  357. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  358. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  359. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  360. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  361. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  362. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  363. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  364. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  365. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  366. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  367. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  368. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  369. data/spec/lib/spree/core/version_spec.rb +0 -19
  370. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  371. data/spec/lib/spree/event_spec.rb +0 -130
  372. data/spec/lib/spree/localized_number_spec.rb +0 -45
  373. data/spec/lib/spree/migrations_spec.rb +0 -32
  374. data/spec/lib/spree/money_spec.rb +0 -298
  375. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  376. data/spec/lib/spree/permitted_attributes_spec.rb +0 -41
  377. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  378. data/spec/lib/tasks/dummy_task.rake +0 -12
  379. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  380. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  381. data/spec/mailers/carton_mailer_spec.rb +0 -44
  382. data/spec/mailers/order_mailer_spec.rb +0 -117
  383. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  384. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  385. data/spec/mailers/test_mailer_spec.rb +0 -13
  386. data/spec/models/spree/ability_spec.rb +0 -279
  387. data/spec/models/spree/address_spec.rb +0 -399
  388. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  389. data/spec/models/spree/adjustment_spec.rb +0 -339
  390. data/spec/models/spree/asset_spec.rb +0 -25
  391. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  392. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  393. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  394. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  395. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  396. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  397. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  398. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  399. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  400. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  401. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  402. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  403. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  404. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  405. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
  406. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  407. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  408. data/spec/models/spree/calculator_spec.rb +0 -43
  409. data/spec/models/spree/carton_spec.rb +0 -145
  410. data/spec/models/spree/classification_spec.rb +0 -126
  411. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  412. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  413. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  414. data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
  415. data/spec/models/spree/country_spec.rb +0 -154
  416. data/spec/models/spree/credit_card_spec.rb +0 -373
  417. data/spec/models/spree/customer_return_spec.rb +0 -294
  418. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  419. data/spec/models/spree/exchange_spec.rb +0 -76
  420. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  421. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  422. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  423. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  424. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  425. data/spec/models/spree/gateway_spec.rb +0 -14
  426. data/spec/models/spree/image_spec.rb +0 -25
  427. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  428. data/spec/models/spree/line_item_spec.rb +0 -240
  429. data/spec/models/spree/option_type_spec.rb +0 -16
  430. data/spec/models/spree/option_value_spec.rb +0 -52
  431. data/spec/models/spree/order/address_spec.rb +0 -52
  432. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  433. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  434. data/spec/models/spree/order/checkout_spec.rb +0 -740
  435. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  436. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  437. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  438. data/spec/models/spree/order/payment_spec.rb +0 -280
  439. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  440. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  441. data/spec/models/spree/order/totals_spec.rb +0 -26
  442. data/spec/models/spree/order/validations_spec.rb +0 -17
  443. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  444. data/spec/models/spree/order_capturing_spec.rb +0 -16
  445. data/spec/models/spree/order_contents_spec.rb +0 -362
  446. data/spec/models/spree/order_inventory_spec.rb +0 -285
  447. data/spec/models/spree/order_merger_spec.rb +0 -162
  448. data/spec/models/spree/order_mutex_spec.rb +0 -89
  449. data/spec/models/spree/order_promotion_spec.rb +0 -33
  450. data/spec/models/spree/order_shipping_spec.rb +0 -247
  451. data/spec/models/spree/order_spec.rb +0 -1687
  452. data/spec/models/spree/order_taxation_spec.rb +0 -128
  453. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  454. data/spec/models/spree/order_updater_spec.rb +0 -556
  455. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  456. data/spec/models/spree/payment_create_spec.rb +0 -195
  457. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  458. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  459. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  460. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  461. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  462. data/spec/models/spree/payment_method_spec.rb +0 -408
  463. data/spec/models/spree/payment_spec.rb +0 -1270
  464. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  465. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  466. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  467. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  468. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  469. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  470. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  471. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  472. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  473. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  474. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  475. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  476. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  477. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  478. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  479. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
  480. data/spec/models/spree/preference_spec.rb +0 -79
  481. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  482. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  483. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  484. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  485. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  486. data/spec/models/spree/preferences/store_spec.rb +0 -40
  487. data/spec/models/spree/price_spec.rb +0 -150
  488. data/spec/models/spree/product/scopes_spec.rb +0 -164
  489. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  490. data/spec/models/spree/product_filter_spec.rb +0 -28
  491. data/spec/models/spree/product_property_spec.rb +0 -20
  492. data/spec/models/spree/product_spec.rb +0 -584
  493. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  494. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  495. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  496. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  497. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  498. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  499. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  500. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  501. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  502. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  503. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  504. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  505. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -227
  506. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  507. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  508. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  509. data/spec/models/spree/promotion_action_spec.rb +0 -44
  510. data/spec/models/spree/promotion_category_spec.rb +0 -19
  511. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  512. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  513. data/spec/models/spree/promotion_code_spec.rb +0 -206
  514. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  515. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  516. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  517. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  518. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  519. data/spec/models/spree/promotion_spec.rb +0 -945
  520. data/spec/models/spree/refund_spec.rb +0 -200
  521. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  522. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  523. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  524. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  525. data/spec/models/spree/reimbursement_spec.rb +0 -278
  526. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  527. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  528. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  529. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  530. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  531. data/spec/models/spree/return_authorization_spec.rb +0 -226
  532. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  533. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  534. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  535. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  536. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  537. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  538. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  539. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  540. data/spec/models/spree/return_item_spec.rb +0 -785
  541. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  542. data/spec/models/spree/shipment_spec.rb +0 -914
  543. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  544. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  545. data/spec/models/spree/shipping_method_spec.rb +0 -292
  546. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  547. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  548. data/spec/models/spree/state_spec.rb +0 -43
  549. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  550. data/spec/models/spree/stock/availability_spec.rb +0 -143
  551. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  552. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  553. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  554. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  555. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  556. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  557. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  558. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  559. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  560. data/spec/models/spree/stock/package_spec.rb +0 -182
  561. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  562. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  563. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  564. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  565. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  566. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  567. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  568. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  569. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  570. data/spec/models/spree/stock_item_spec.rb +0 -348
  571. data/spec/models/spree/stock_location_spec.rb +0 -288
  572. data/spec/models/spree/stock_movement_spec.rb +0 -58
  573. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  574. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  575. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  576. data/spec/models/spree/store_credit_spec.rb +0 -900
  577. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  578. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  579. data/spec/models/spree/store_spec.rb +0 -156
  580. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  581. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  582. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  583. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  584. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  585. data/spec/models/spree/tax_category_spec.rb +0 -50
  586. data/spec/models/spree/tax_rate_spec.rb +0 -317
  587. data/spec/models/spree/taxon_spec.rb +0 -197
  588. data/spec/models/spree/taxonomy_spec.rb +0 -15
  589. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
  590. data/spec/models/spree/unit_cancel_spec.rb +0 -126
  591. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
  592. data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
  593. data/spec/models/spree/user_spec.rb +0 -247
  594. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  595. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  596. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  597. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  598. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  599. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  600. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  601. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  602. data/spec/models/spree/variant_spec.rb +0 -862
  603. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  604. data/spec/models/spree/wallet_spec.rb +0 -155
  605. data/spec/models/spree/zone_spec.rb +0 -248
  606. data/spec/rails_helper.rb +0 -46
  607. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  608. data/spec/spec_helper.rb +0 -36
  609. data/spec/support/big_decimal.rb +0 -7
  610. data/spec/support/concerns/default_price.rb +0 -44
  611. data/spec/support/concerns/payment_source.rb +0 -66
  612. data/spec/support/concerns/working_factories.rb +0 -15
  613. data/spec/support/dummy_ability.rb +0 -7
  614. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
  615. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
  616. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
  617. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
  618. /data/{app/models → lib}/spree/user_class_handle.rb +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