solidus_core 2.10.0 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (495) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree.js.erb +31 -2
  3. data/app/controllers/spree/base_controller.rb +1 -0
  4. data/app/mailers/spree/base_mailer.rb +4 -0
  5. data/app/mailers/spree/order_mailer.rb +1 -1
  6. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +69 -0
  7. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
  8. data/app/models/concerns/spree/active_storage_adapter.rb +116 -0
  9. data/app/models/concerns/spree/default_price.rb +1 -1
  10. data/app/models/concerns/spree/soft_deletable.rb +18 -0
  11. data/app/models/concerns/spree/user_address_book.rb +86 -32
  12. data/app/models/concerns/spree/user_methods.rb +3 -2
  13. data/app/models/spree/ability.rb +34 -10
  14. data/app/models/spree/address/name.rb +49 -0
  15. data/app/models/spree/address/state_validator.rb +71 -0
  16. data/app/models/spree/address.rb +94 -17
  17. data/app/models/spree/adjustment.rb +1 -1
  18. data/app/models/spree/base.rb +1 -0
  19. data/app/models/spree/calculator/default_tax.rb +1 -1
  20. data/app/models/spree/calculator/percent_per_item.rb +4 -4
  21. data/app/models/spree/calculator/price_sack.rb +1 -1
  22. data/app/models/spree/credit_card.rb +2 -2
  23. data/app/models/spree/customer_return.rb +4 -2
  24. data/app/models/spree/exchange.rb +1 -1
  25. data/app/models/spree/image/active_storage_attachment.rb +21 -0
  26. data/app/models/spree/inventory_unit.rb +1 -1
  27. data/app/models/spree/line_item.rb +13 -4
  28. data/app/models/spree/option_type.rb +1 -1
  29. data/app/models/spree/option_value.rb +2 -2
  30. data/app/models/spree/order/checkout.rb +1 -0
  31. data/app/models/spree/order.rb +91 -20
  32. data/app/models/spree/order_inventory.rb +16 -4
  33. data/app/models/spree/order_merger.rb +6 -4
  34. data/app/models/spree/order_promotion.rb +1 -1
  35. data/app/models/spree/order_updater.rb +11 -10
  36. data/app/models/spree/payment/cancellation.rb +3 -3
  37. data/app/models/spree/payment/processing.rb +54 -30
  38. data/app/models/spree/payment.rb +3 -3
  39. data/app/models/spree/payment_method.rb +8 -9
  40. data/app/models/spree/preference.rb +1 -1
  41. data/app/models/spree/price.rb +2 -8
  42. data/app/models/spree/product/scopes.rb +10 -5
  43. data/app/models/spree/product.rb +19 -14
  44. data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
  45. data/app/models/spree/promotion.rb +18 -7
  46. data/app/models/spree/promotion_action.rb +1 -7
  47. data/app/models/spree/promotion_code.rb +6 -1
  48. data/app/models/spree/promotion_code_batch.rb +1 -1
  49. data/app/models/spree/promotion_handler/coupon.rb +2 -2
  50. data/app/models/spree/promotion_rule.rb +1 -1
  51. data/app/models/spree/promotion_rule_role.rb +1 -1
  52. data/app/models/spree/refund.rb +54 -12
  53. data/app/models/spree/reimbursement.rb +27 -0
  54. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +10 -3
  55. data/app/models/spree/return_authorization.rb +1 -1
  56. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
  57. data/app/models/spree/return_item.rb +21 -10
  58. data/app/models/spree/role.rb +1 -1
  59. data/app/models/spree/shipment.rb +2 -2
  60. data/app/models/spree/shipping_calculator.rb +1 -1
  61. data/app/models/spree/shipping_manifest.rb +2 -2
  62. data/app/models/spree/shipping_method.rb +2 -9
  63. data/app/models/spree/shipping_rate.rb +1 -1
  64. data/app/models/spree/shipping_rate_tax.rb +1 -1
  65. data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
  66. data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
  67. data/app/models/spree/stock/package.rb +1 -1
  68. data/app/models/spree/stock/simple_coordinator.rb +1 -3
  69. data/app/models/spree/stock_item.rb +2 -8
  70. data/app/models/spree/stock_movement.rb +2 -0
  71. data/app/models/spree/store.rb +1 -1
  72. data/app/models/spree/store_credit.rb +1 -7
  73. data/app/models/spree/store_credit_category.rb +30 -3
  74. data/app/models/spree/store_credit_event.rb +1 -7
  75. data/app/models/spree/store_credit_reason.rb +0 -4
  76. data/app/models/spree/tax/tax_helpers.rb +1 -1
  77. data/app/models/spree/tax_category.rb +2 -8
  78. data/app/models/spree/tax_rate.rb +7 -7
  79. data/app/models/spree/taxon/active_storage_attachment.rb +19 -0
  80. data/app/models/spree/taxon.rb +1 -1
  81. data/app/models/spree/user_address.rb +8 -2
  82. data/app/models/spree/variant.rb +7 -13
  83. data/app/models/spree/variant_property_rule.rb +5 -1
  84. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +8 -3
  85. data/app/models/spree/zone.rb +1 -1
  86. data/config/locales/en.yml +44 -5
  87. data/db/default/spree/countries.rb +1 -1
  88. data/db/default/spree/states.rb +12 -4
  89. data/db/default/spree/store_credit.rb +2 -2
  90. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
  91. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
  92. data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
  93. data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
  94. data/lib/generators/solidus/install/install_generator.rb +253 -0
  95. data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +36 -5
  96. data/lib/generators/spree/install/install_generator.rb +7 -189
  97. data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
  98. data/lib/spree/app_configuration.rb +117 -51
  99. data/lib/spree/awesome_nested_set_override.rb +44 -0
  100. data/lib/spree/core/controller_helpers/auth.rb +17 -4
  101. data/lib/spree/core/controller_helpers/current_host.rb +17 -0
  102. data/lib/spree/core/controller_helpers/order.rb +8 -7
  103. data/lib/spree/core/controller_helpers/strong_parameters.rb +21 -7
  104. data/lib/spree/core/engine.rb +39 -2
  105. data/lib/spree/core/importer/order.rb +26 -11
  106. data/lib/spree/core/permalinks.rb +1 -3
  107. data/lib/spree/core/product_filters.rb +6 -5
  108. data/lib/spree/core/state_machines/order.rb +249 -0
  109. data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
  110. data/lib/spree/core/state_machines.rb +20 -1
  111. data/lib/spree/core/version.rb +1 -1
  112. data/lib/spree/core.rb +5 -11
  113. data/lib/spree/encryptor.rb +25 -0
  114. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  115. data/lib/spree/event/configuration.rb +11 -6
  116. data/lib/spree/event/subscriber.rb +38 -18
  117. data/lib/spree/event/subscriber_registry.rb +92 -0
  118. data/lib/spree/event.rb +40 -7
  119. data/lib/spree/i18n.rb +1 -1
  120. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  121. data/lib/spree/paranoia_deprecations.rb +32 -12
  122. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  123. data/lib/spree/permission_sets/default_customer.rb +16 -16
  124. data/lib/spree/permission_sets/order_display.rb +11 -11
  125. data/lib/spree/permission_sets/order_management.rb +1 -1
  126. data/lib/spree/permission_sets/product_display.rb +9 -9
  127. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  128. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  129. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  130. data/lib/spree/permission_sets/stock_display.rb +2 -2
  131. data/lib/spree/permission_sets/stock_management.rb +1 -1
  132. data/lib/spree/permission_sets/user_display.rb +3 -3
  133. data/lib/spree/permission_sets/user_management.rb +4 -3
  134. data/lib/spree/permitted_attributes.rb +79 -9
  135. data/lib/spree/preferences/preferable.rb +4 -3
  136. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  137. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  138. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  139. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  140. data/lib/spree/testing_support/capybara_ext.rb +3 -0
  141. data/lib/spree/testing_support/common_rake.rb +3 -3
  142. data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
  143. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
  144. data/lib/spree/testing_support/dummy_app.rb +44 -23
  145. data/lib/spree/testing_support/factories/address_factory.rb +1 -2
  146. data/lib/spree/testing_support/factories/image_factory.rb +1 -1
  147. data/lib/spree/testing_support/factories/promotion_factory.rb +6 -0
  148. data/lib/spree/testing_support/factories/refund_factory.rb +1 -0
  149. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  150. data/lib/spree/testing_support/factories/return_item_factory.rb +0 -1
  151. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +8 -0
  152. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -0
  153. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +3 -1
  154. data/lib/spree/testing_support/factories/taxon_factory.rb +4 -0
  155. data/lib/spree/testing_support/factories/user_factory.rb +4 -1
  156. data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
  157. data/lib/spree/testing_support/job_helpers.rb +24 -0
  158. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  159. data/lib/spree/testing_support/preferences.rb +3 -1
  160. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  161. data/lib/spree/testing_support/translations.rb +25 -0
  162. data/solidus_core.gemspec +8 -5
  163. metadata +81 -359
  164. data/script/rails +0 -10
  165. data/spec/fixtures/thinking-cat.jpg +0 -0
  166. data/spec/helpers/base_helper_spec.rb +0 -168
  167. data/spec/helpers/products_helper_spec.rb +0 -202
  168. data/spec/helpers/taxons_helper_spec.rb +0 -43
  169. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  170. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  171. data/spec/lib/i18n_spec.rb +0 -97
  172. data/spec/lib/search/base_spec.rb +0 -91
  173. data/spec/lib/search/variant_spec.rb +0 -115
  174. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  175. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  176. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  177. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  178. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  179. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  180. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  181. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  182. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -41
  183. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  184. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  185. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  186. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  187. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
  188. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  189. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  190. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  191. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  192. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  193. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  194. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  195. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  196. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  197. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  198. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  199. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  200. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  201. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  202. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  203. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  204. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  205. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  206. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  207. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  208. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  209. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  210. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  211. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  212. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  213. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  214. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  215. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  216. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  217. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  218. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  219. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  220. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  221. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  222. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  223. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  224. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  225. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  226. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  227. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  228. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  229. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  230. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  231. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  232. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  233. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  234. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  235. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  236. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  237. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  238. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  239. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  240. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  241. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  242. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  243. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  244. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  245. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  246. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  247. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  248. data/spec/lib/spree/core/version_spec.rb +0 -19
  249. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  250. data/spec/lib/spree/event_spec.rb +0 -130
  251. data/spec/lib/spree/localized_number_spec.rb +0 -45
  252. data/spec/lib/spree/migrations_spec.rb +0 -32
  253. data/spec/lib/spree/money_spec.rb +0 -298
  254. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  255. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  256. data/spec/lib/tasks/dummy_task.rake +0 -12
  257. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  258. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  259. data/spec/mailers/carton_mailer_spec.rb +0 -44
  260. data/spec/mailers/order_mailer_spec.rb +0 -117
  261. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  262. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  263. data/spec/mailers/test_mailer_spec.rb +0 -13
  264. data/spec/models/spree/ability_spec.rb +0 -279
  265. data/spec/models/spree/address_spec.rb +0 -399
  266. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  267. data/spec/models/spree/adjustment_spec.rb +0 -339
  268. data/spec/models/spree/asset_spec.rb +0 -25
  269. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  270. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  271. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  272. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  273. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  274. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  275. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  276. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  277. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  278. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  279. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  280. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  281. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  282. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  283. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
  284. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  285. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  286. data/spec/models/spree/calculator_spec.rb +0 -43
  287. data/spec/models/spree/carton_spec.rb +0 -145
  288. data/spec/models/spree/classification_spec.rb +0 -126
  289. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  290. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  291. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  292. data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
  293. data/spec/models/spree/country_spec.rb +0 -154
  294. data/spec/models/spree/credit_card_spec.rb +0 -373
  295. data/spec/models/spree/customer_return_spec.rb +0 -294
  296. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  297. data/spec/models/spree/exchange_spec.rb +0 -76
  298. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  299. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  300. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  301. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  302. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  303. data/spec/models/spree/gateway_spec.rb +0 -14
  304. data/spec/models/spree/image_spec.rb +0 -25
  305. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  306. data/spec/models/spree/line_item_spec.rb +0 -240
  307. data/spec/models/spree/option_type_spec.rb +0 -16
  308. data/spec/models/spree/option_value_spec.rb +0 -52
  309. data/spec/models/spree/order/address_spec.rb +0 -52
  310. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  311. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  312. data/spec/models/spree/order/checkout_spec.rb +0 -740
  313. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  314. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  315. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  316. data/spec/models/spree/order/payment_spec.rb +0 -280
  317. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  318. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  319. data/spec/models/spree/order/totals_spec.rb +0 -26
  320. data/spec/models/spree/order/validations_spec.rb +0 -17
  321. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  322. data/spec/models/spree/order_capturing_spec.rb +0 -16
  323. data/spec/models/spree/order_contents_spec.rb +0 -362
  324. data/spec/models/spree/order_inventory_spec.rb +0 -285
  325. data/spec/models/spree/order_merger_spec.rb +0 -162
  326. data/spec/models/spree/order_mutex_spec.rb +0 -89
  327. data/spec/models/spree/order_promotion_spec.rb +0 -33
  328. data/spec/models/spree/order_shipping_spec.rb +0 -247
  329. data/spec/models/spree/order_spec.rb +0 -1687
  330. data/spec/models/spree/order_taxation_spec.rb +0 -128
  331. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  332. data/spec/models/spree/order_updater_spec.rb +0 -556
  333. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  334. data/spec/models/spree/payment_create_spec.rb +0 -195
  335. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  336. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  337. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  338. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  339. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  340. data/spec/models/spree/payment_method_spec.rb +0 -408
  341. data/spec/models/spree/payment_spec.rb +0 -1270
  342. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  343. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  344. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  345. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  346. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  347. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  348. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  349. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  350. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  351. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  352. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  353. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  354. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  355. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  356. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  357. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
  358. data/spec/models/spree/preference_spec.rb +0 -79
  359. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  360. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  361. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  362. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  363. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  364. data/spec/models/spree/preferences/store_spec.rb +0 -40
  365. data/spec/models/spree/price_spec.rb +0 -150
  366. data/spec/models/spree/product/scopes_spec.rb +0 -164
  367. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  368. data/spec/models/spree/product_filter_spec.rb +0 -28
  369. data/spec/models/spree/product_property_spec.rb +0 -20
  370. data/spec/models/spree/product_spec.rb +0 -584
  371. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  372. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  373. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  374. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  375. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  376. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  377. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  378. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  379. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  380. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  381. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  382. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  383. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -226
  384. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  385. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  386. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  387. data/spec/models/spree/promotion_action_spec.rb +0 -44
  388. data/spec/models/spree/promotion_category_spec.rb +0 -19
  389. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  390. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  391. data/spec/models/spree/promotion_code_spec.rb +0 -206
  392. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  393. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  394. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  395. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  396. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  397. data/spec/models/spree/promotion_spec.rb +0 -945
  398. data/spec/models/spree/refund_spec.rb +0 -200
  399. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  400. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  401. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  402. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  403. data/spec/models/spree/reimbursement_spec.rb +0 -278
  404. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  405. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  406. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  407. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  408. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  409. data/spec/models/spree/return_authorization_spec.rb +0 -226
  410. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  411. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  412. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  413. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  414. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  415. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  416. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  417. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  418. data/spec/models/spree/return_item_spec.rb +0 -785
  419. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  420. data/spec/models/spree/shipment_spec.rb +0 -914
  421. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  422. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  423. data/spec/models/spree/shipping_method_spec.rb +0 -292
  424. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  425. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  426. data/spec/models/spree/state_spec.rb +0 -43
  427. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  428. data/spec/models/spree/stock/availability_spec.rb +0 -143
  429. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  430. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  431. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  432. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  433. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  434. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  435. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  436. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  437. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  438. data/spec/models/spree/stock/package_spec.rb +0 -182
  439. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  440. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  441. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  442. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  443. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  444. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  445. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  446. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  447. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  448. data/spec/models/spree/stock_item_spec.rb +0 -348
  449. data/spec/models/spree/stock_location_spec.rb +0 -288
  450. data/spec/models/spree/stock_movement_spec.rb +0 -58
  451. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  452. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  453. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  454. data/spec/models/spree/store_credit_spec.rb +0 -900
  455. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  456. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  457. data/spec/models/spree/store_spec.rb +0 -156
  458. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  459. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  460. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  461. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  462. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  463. data/spec/models/spree/tax_category_spec.rb +0 -50
  464. data/spec/models/spree/tax_rate_spec.rb +0 -317
  465. data/spec/models/spree/taxon_spec.rb +0 -197
  466. data/spec/models/spree/taxonomy_spec.rb +0 -15
  467. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
  468. data/spec/models/spree/unit_cancel_spec.rb +0 -126
  469. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
  470. data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
  471. data/spec/models/spree/user_spec.rb +0 -247
  472. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  473. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  474. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  475. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  476. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  477. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  478. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  479. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  480. data/spec/models/spree/variant_spec.rb +0 -862
  481. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  482. data/spec/models/spree/wallet_spec.rb +0 -155
  483. data/spec/models/spree/zone_spec.rb +0 -248
  484. data/spec/rails_helper.rb +0 -46
  485. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  486. data/spec/spec_helper.rb +0 -36
  487. data/spec/support/big_decimal.rb +0 -7
  488. data/spec/support/concerns/default_price.rb +0 -44
  489. data/spec/support/concerns/payment_source.rb +0 -66
  490. data/spec/support/concerns/working_factories.rb +0 -15
  491. data/spec/support/dummy_ability.rb +0 -7
  492. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
  493. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
  494. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
  495. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
@@ -1,278 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Reimbursement, type: :model do
6
- describe ".create" do
7
- let(:customer_return) { create(:customer_return) }
8
- let(:order) { customer_return.order }
9
- let(:reimbursement) { build(:reimbursement, order: order) }
10
-
11
- subject { reimbursement.save }
12
-
13
- context "when total is not present" do
14
- before do
15
- allow(reimbursement).to receive(:calculated_total) { 100 }
16
- end
17
-
18
- it { expect { subject }.to change(reimbursement, :total).from(nil).to(100.0) }
19
- end
20
-
21
- context "when total is present" do
22
- let(:reimbursement) { build(:reimbursement, order: order, total: 10) }
23
-
24
- it { expect { subject }.not_to change(reimbursement, :total).from(10) }
25
- end
26
- end
27
-
28
- describe ".before_create" do
29
- describe "#generate_number" do
30
- context "number is assigned" do
31
- let(:number) { '123' }
32
- let(:reimbursement) { Spree::Reimbursement.new(number: number) }
33
-
34
- it "should return the assigned number" do
35
- reimbursement.save
36
- expect(reimbursement.number).to eq number
37
- end
38
- end
39
-
40
- context "number is not assigned" do
41
- let(:reimbursement) { Spree::Reimbursement.new(number: nil) }
42
-
43
- before do
44
- allow(reimbursement).to receive_messages(valid?: true)
45
- end
46
-
47
- it "should assign number with random RI number" do
48
- reimbursement.save
49
- expect(reimbursement.number).to be =~ /RI\d{9}/
50
- end
51
- end
52
- end
53
- end
54
-
55
- describe "#display_total" do
56
- let(:total) { 100.50 }
57
- let(:currency) { "USD" }
58
- let(:order) { Spree::Order.new(currency: currency) }
59
- let(:reimbursement) { Spree::Reimbursement.new(total: total, order: order) }
60
-
61
- subject { reimbursement.display_total }
62
-
63
- it "returns the value as a Spree::Money instance" do
64
- expect(subject).to eq Spree::Money.new(total)
65
- end
66
-
67
- it "uses the order's currency" do
68
- expect(subject.money.currency.to_s).to eq currency
69
- end
70
- end
71
-
72
- describe "#perform!" do
73
- let!(:adjustments) { [] } # placeholder to ensure it gets run prior the "before" at this level
74
-
75
- let!(:tax_rate) { nil }
76
- let!(:tax_zone) { create :zone, :with_country }
77
- let(:shipping_method) { create :shipping_method, zones: [tax_zone] }
78
- let(:variant) { create :variant }
79
- let(:order) { create(:order_with_line_items, state: 'payment', line_items_attributes: [{ variant: variant, price: line_items_price }], shipment_cost: 0, shipping_method: shipping_method) }
80
- let(:line_items_price) { BigDecimal(10) }
81
- let(:line_item) { order.line_items.first }
82
- let(:inventory_unit) { line_item.inventory_units.first }
83
- let(:payment) { build(:payment, amount: payment_amount, order: order, state: 'checkout') }
84
- let(:payment_amount) { order.total }
85
- let(:customer_return) { build(:customer_return, return_items: [return_item]) }
86
- let(:return_item) { build(:return_item, inventory_unit: inventory_unit) }
87
-
88
- let!(:default_refund_reason) { Spree::RefundReason.find_or_create_by!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false) }
89
-
90
- let(:reimbursement) { create(:reimbursement, customer_return: customer_return, order: order, return_items: [return_item]) }
91
- let(:created_by_user) { create(:user, email: 'user@email.com') }
92
-
93
- subject { reimbursement.perform!(created_by: created_by_user) }
94
-
95
- before do
96
- order.shipments.each do |shipment|
97
- shipment.inventory_units.update_all state: 'shipped'
98
- shipment.update_column('state', 'shipped')
99
- end
100
- order.reload
101
- order.recalculate
102
- if payment
103
- payment.save!
104
- order.next! # confirm
105
- end
106
- order.complete! # completed
107
- payment.capture!
108
- customer_return.save!
109
- return_item.accept!
110
- end
111
-
112
- it "refunds the total amount" do
113
- subject
114
- expect(reimbursement.unpaid_amount).to eq 0
115
- end
116
-
117
- it "creates a refund" do
118
- expect {
119
- subject
120
- }.to change{ Spree::Refund.count }.by(1)
121
- expect(Spree::Refund.last.amount).to eq order.total
122
- end
123
-
124
- context 'with additional tax' do
125
- let!(:tax_rate) { create(:tax_rate, name: "Sales Tax", amount: 0.10, included_in_price: false, zone: tax_zone) }
126
-
127
- it 'saves the additional tax and refunds the total' do
128
- expect {
129
- subject
130
- }.to change { Spree::Refund.count }.by(1)
131
- return_item.reload
132
- expect(return_item.additional_tax_total).to be > 0
133
- expect(return_item.additional_tax_total).to eq line_item.additional_tax_total
134
- expect(reimbursement.total).to eq line_item.amount + line_item.additional_tax_total
135
- expect(Spree::Refund.last.amount).to eq line_item.amount + line_item.additional_tax_total
136
- end
137
- end
138
-
139
- context 'with included tax' do
140
- let!(:tax_rate) { create(:tax_rate, name: "VAT Tax", amount: 0.1, included_in_price: true, zone: tax_zone) }
141
-
142
- it 'saves the included tax and refunds the total' do
143
- expect {
144
- subject
145
- }.to change { Spree::Refund.count }.by(1)
146
- return_item.reload
147
- expect(return_item.included_tax_total).to be > 0
148
- expect(return_item.included_tax_total).to eq line_item.included_tax_total
149
- expect(reimbursement.total).to eq((line_item.total_excluding_vat + line_item.included_tax_total).round(2, :down))
150
- expect(Spree::Refund.last.amount).to eq((line_item.total_excluding_vat + line_item.included_tax_total).round(2, :down))
151
- end
152
- end
153
-
154
- context 'when reimbursement cannot be fully performed' do
155
- let!(:non_return_refund) { create(:refund, amount: 1, payment: payment) }
156
-
157
- it 'does not send a reimbursement email and raises IncompleteReimbursement error' do
158
- expect(Spree::ReimbursementMailer).not_to receive(:reimbursement_email)
159
- expect { subject }.to raise_error(Spree::Reimbursement::IncompleteReimbursementError)
160
- end
161
- end
162
-
163
- context "when exchange is required" do
164
- let(:exchange_variant) { create(:on_demand_variant, product: return_item.inventory_unit.variant.product) }
165
- before { return_item.exchange_variant = exchange_variant }
166
- it "generates an exchange shipment for the order for the exchange items" do
167
- expect { subject }.to change { order.reload.shipments.count }.by 1
168
- expect(order.shipments.last.inventory_units.first.variant).to eq exchange_variant
169
- end
170
- end
171
-
172
- it "triggers the reimbursement mailer to be sent via subscribed event" do
173
- expect(Spree::ReimbursementMailer).to receive(:reimbursement_email).with(reimbursement.id) { double(deliver_later: true) }
174
- subject
175
- end
176
- end
177
-
178
- describe "#return_items_requiring_exchange" do
179
- it "returns only the return items that require an exchange" do
180
- return_items = [double(exchange_required?: true), double(exchange_required?: true), double(exchange_required?: false)]
181
- allow(subject).to receive(:return_items) { return_items }
182
- expect(subject.return_items_requiring_exchange).to eq return_items.take(2)
183
- end
184
- end
185
-
186
- describe "#all_exchanges?" do
187
- it "returns true if all of the return items processed an exchange" do
188
- return_items = [double(exchange_processed?: true), double(exchange_processed?: true)]
189
- allow(subject).to receive(:return_items) { return_items }
190
- expect(subject.all_exchanges?).to be true
191
- end
192
-
193
- it "returns false if any of the return items processed an exchange" do
194
- return_items = [double(exchange_processed?: true), double(exchange_processed?: false)]
195
- allow(subject).to receive(:return_items) { return_items }
196
- expect(subject.all_exchanges?).to be false
197
- end
198
- end
199
-
200
- describe "#any_exchanges?" do
201
- it "returns true if any of the return items processed an exchange" do
202
- return_items = [double(exchange_processed?: true), double(exchange_processed?: false)]
203
- allow(subject).to receive(:return_items) { return_items }
204
- expect(subject.any_exchanges?).to be true
205
- end
206
-
207
- it "returns false if none of the return items processed an exchange" do
208
- return_items = [double(exchange_processed?: false), double(exchange_processed?: false)]
209
- allow(subject).to receive(:return_items) { return_items }
210
- expect(subject.any_exchanges?).to be false
211
- end
212
- end
213
-
214
- describe "#calculated_total" do
215
- context 'with return item amounts that would round up' do
216
- let(:reimbursement) { Spree::Reimbursement.new }
217
-
218
- subject { reimbursement.calculated_total }
219
-
220
- before do
221
- reimbursement.return_items << Spree::ReturnItem.new(amount: 10.003)
222
- reimbursement.return_items << Spree::ReturnItem.new(amount: 10.003)
223
- end
224
-
225
- it 'rounds down' do
226
- expect(subject).to eq 20
227
- end
228
- end
229
- end
230
-
231
- describe '.build_from_customer_return' do
232
- let(:customer_return) { create(:customer_return, line_items_count: 5) }
233
- before { customer_return.return_items.each(&:receive!) }
234
- let!(:pending_return_item) { customer_return.return_items.first.tap { |ri| ri.update!(acceptance_status: 'pending') } }
235
- let!(:accepted_return_item) { customer_return.return_items.second.tap(&:accept!) }
236
- let!(:rejected_return_item) { customer_return.return_items.third.tap(&:reject!) }
237
- let!(:manual_intervention_return_item) { customer_return.return_items.fourth.tap(&:require_manual_intervention!) }
238
- let!(:already_reimbursed_return_item) { customer_return.return_items.fifth }
239
- let!(:previous_reimbursement) { create(:reimbursement, order: customer_return.order, return_items: [already_reimbursed_return_item]) }
240
-
241
- subject { Spree::Reimbursement.build_from_customer_return(customer_return) }
242
-
243
- it 'connects to the accepted return items' do
244
- expect(subject.return_items.to_a).to eq [accepted_return_item]
245
- end
246
-
247
- it 'connects to the order' do
248
- expect(subject.order).to eq customer_return.order
249
- end
250
-
251
- it 'connects to the customer_return' do
252
- expect(subject.customer_return).to eq customer_return
253
- end
254
- end
255
-
256
- describe "#return_all" do
257
- subject { reimbursement.return_all(created_by: created_by_user) }
258
-
259
- let!(:default_refund_reason) { Spree::RefundReason.find_or_create_by!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false) }
260
- let(:order) { create(:shipped_order, line_items_count: 1) }
261
- let(:inventory_unit) { order.inventory_units.first }
262
- let(:return_item) { build(:return_item, inventory_unit: inventory_unit) }
263
- let(:reimbursement) { build(:reimbursement, order: order, return_items: [return_item]) }
264
- let(:created_by_user) { create(:user, email: 'user@email.com') }
265
-
266
- it "accepts all the return items" do
267
- expect { subject }.to change { return_item.acceptance_status }.to "accepted"
268
- end
269
-
270
- it "persists the reimbursement" do
271
- expect { subject }.to change { reimbursement.persisted? }.to true
272
- end
273
-
274
- it "performs a reimbursment" do
275
- expect { subject }.to change { reimbursement.refunds.count }.by(1)
276
- end
277
- end
278
- end
@@ -1,52 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::ReimbursementTaxCalculator, type: :model do
6
- let!(:tax_rate) { nil }
7
-
8
- let(:reimbursement) { create(:reimbursement, return_items_count: 1) }
9
- let(:return_item) { reimbursement.return_items.first }
10
- let(:line_item) { return_item.inventory_unit.line_item }
11
-
12
- subject do
13
- Spree::ReimbursementTaxCalculator.call(reimbursement)
14
- end
15
-
16
- context 'without taxes' do
17
- let!(:tax_rate) { nil }
18
-
19
- it 'leaves the return items additional_tax_total and included_tax_total at zero' do
20
- subject
21
-
22
- expect(return_item.additional_tax_total).to eq 0
23
- expect(return_item.included_tax_total).to eq 0
24
- end
25
- end
26
-
27
- context 'with additional tax' do
28
- let!(:tax_rate) { create(:tax_rate, name: "Sales Tax", amount: 0.10, included_in_price: false, zone: tax_zone) }
29
- let(:tax_zone) { create(:zone, :with_country) }
30
-
31
- it 'sets additional_tax_total on the return items' do
32
- subject
33
- return_item.reload
34
-
35
- expect(return_item.additional_tax_total).to be > 0
36
- expect(return_item.additional_tax_total).to eq line_item.additional_tax_total
37
- end
38
- end
39
-
40
- context 'with included tax' do
41
- let!(:tax_rate) { create(:tax_rate, name: "VAT Tax", amount: 0.1, included_in_price: true, zone: tax_zone) }
42
- let(:tax_zone) { create(:zone, :with_country) }
43
-
44
- it 'sets included_tax_total on the return items' do
45
- subject
46
- return_item.reload
47
-
48
- expect(return_item.included_tax_total).to be > 0
49
- expect(return_item.included_tax_total).to eq line_item.included_tax_total
50
- end
51
- end
52
- end
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree
6
- RSpec.describe ReimbursementType::Credit, type: :model do
7
- let(:reimbursement) { create(:reimbursement, return_items_count: 1) }
8
- let(:return_item) { reimbursement.return_items.first }
9
- let(:payment) { reimbursement.order.payments.first }
10
- let(:simulate) { false }
11
- let!(:default_refund_reason) { Spree::RefundReason.find_or_create_by!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false) }
12
- let(:creditable) { DummyCreditable.new(amount: 99.99) }
13
- let(:created_by_user) { create(:user, email: 'user@email.com') }
14
-
15
- class DummyCreditable < Spree::Base
16
- attr_accessor :amount
17
- self.table_name = 'spree_payments' # Your creditable class should not use this table
18
- end
19
-
20
- subject { Spree::ReimbursementType::Credit.reimburse(reimbursement, [return_item], simulate, created_by: created_by_user) }
21
-
22
- before do
23
- reimbursement.update!(total: reimbursement.calculated_total)
24
- allow(Spree::ReimbursementType::Credit).to receive(:create_creditable).and_return(creditable)
25
- end
26
-
27
- describe '.reimburse' do
28
- context 'simulate is true' do
29
- let(:simulate) { true }
30
-
31
- it 'creates one readonly lump credit for all outstanding balance payable to the customer' do
32
- expect(subject.map(&:class)).to eq [Spree::Reimbursement::Credit]
33
- expect(subject.map(&:readonly?)).to eq [true]
34
- expect(subject.sum(&:amount)).to eq reimbursement.return_items.to_a.sum(&:total)
35
- end
36
-
37
- it 'does not save to the database' do
38
- expect { subject }.to_not change { Spree::Reimbursement::Credit.count }
39
- end
40
- end
41
-
42
- context 'simulate is false' do
43
- let(:simulate) { false }
44
-
45
- before do
46
- expect(creditable).to receive(:save).and_return(true)
47
- end
48
-
49
- it 'creates one lump credit for all outstanding balance payable to the customer' do
50
- expect { subject }.to change { Spree::Reimbursement::Credit.count }.by(1)
51
- expect(subject.sum(&:amount)).to eq reimbursement.return_items.to_a.sum(&:total)
52
- end
53
- end
54
- end
55
- end
56
- end
@@ -1,48 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree
6
- RSpec.describe ReimbursementType::Exchange, type: :model do
7
- describe '.reimburse' do
8
- let(:reimbursement) { create(:reimbursement, return_items_count: 1) }
9
- let(:return_items) { reimbursement.return_items }
10
- let(:new_exchange) { double("Exchange") }
11
- let(:simulate) { true }
12
- let(:created_by_user) { create(:user, email: 'user@email.com') }
13
-
14
- subject { Spree::ReimbursementType::Exchange.reimburse(reimbursement, return_items, simulate, created_by: created_by_user) }
15
-
16
- context 'return items are supplied' do
17
- before do
18
- expect(Spree::Exchange).to receive(:new).with(reimbursement.order, return_items).and_return(new_exchange)
19
- end
20
-
21
- context "simulate is true" do
22
- it 'does not perform an exchange and returns the exchange object' do
23
- expect(new_exchange).not_to receive(:perform!)
24
- expect(subject).to eq [new_exchange]
25
- end
26
- end
27
-
28
- context "simulate is false" do
29
- let(:simulate) { false }
30
-
31
- it 'performs an exchange and returns the exchange object' do
32
- expect(new_exchange).to receive(:perform!)
33
- expect(subject).to eq [new_exchange]
34
- end
35
- end
36
- end
37
-
38
- context "no return items are supplied" do
39
- let(:return_items) { [] }
40
-
41
- it 'does not perform an exchange and returns an empty array' do
42
- expect(new_exchange).not_to receive(:perform!)
43
- expect(subject).to eq []
44
- end
45
- end
46
- end
47
- end
48
- end
@@ -1,110 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree
6
- RSpec.describe ReimbursementType::OriginalPayment, type: :model do
7
- let(:reimbursement) { create(:reimbursement, return_items_count: 1) }
8
- let(:return_item) { reimbursement.return_items.first }
9
- let(:payment) { reimbursement.order.payments.first }
10
- let(:simulate) { false }
11
- let!(:default_refund_reason) { Spree::RefundReason.find_or_create_by!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false) }
12
- let(:created_by_user) { create(:user, email: 'user@email.com') }
13
-
14
- subject { Spree::ReimbursementType::OriginalPayment.reimburse(reimbursement, [return_item], simulate, created_by: created_by_user) }
15
-
16
- before { reimbursement.update!(total: reimbursement.calculated_total) }
17
-
18
- describe ".reimburse" do
19
- context "simulate is true" do
20
- let(:simulate) { true }
21
-
22
- it "returns an array of readonly refunds" do
23
- expect(subject.map(&:class)).to eq [Spree::Refund]
24
- expect(subject.map(&:readonly?)).to eq [true]
25
- end
26
- end
27
-
28
- context "simulate is false" do
29
- it 'performs the refund' do
30
- expect {
31
- subject
32
- }.to change { payment.refunds.count }.by(1)
33
- expect(payment.refunds.sum(:amount)).to eq reimbursement.return_items.to_a.sum(&:total)
34
- end
35
- end
36
-
37
- context 'when no credit is allowed on the payment' do
38
- before do
39
- expect_any_instance_of(Spree::Payment).to receive(:credit_allowed).and_return 0
40
- end
41
-
42
- it 'returns an empty array' do
43
- expect(subject).to eq []
44
- end
45
- end
46
-
47
- context 'when a payment is negative' do
48
- before do
49
- expect_any_instance_of(Spree::Payment).to receive(:amount).and_return(-100)
50
- end
51
-
52
- it 'returns an empty array' do
53
- expect(subject).to eq []
54
- end
55
- end
56
-
57
- context "multiple payment methods" do
58
- let(:simulate) { true }
59
- let!(:check_payment) { create(:check_payment, order: reimbursement.order, amount: 5.0, state: "completed") }
60
- let(:payment) { reimbursement.order.payments.detect { |item| item.payment_method.is_a? Spree::PaymentMethod::BogusCreditCard } }
61
- let(:refund_amount) { 10.0 }
62
-
63
- let(:refund_payment_methods) { subject.map { |refund| refund.payment.payment_method } }
64
-
65
- before do
66
- reimbursement.order.payments.first.update!(amount: 5.0)
67
- return_item.update!(amount: refund_amount)
68
- end
69
-
70
- it "includes refunds all payment type" do
71
- expect(refund_payment_methods).to include payment.payment_method
72
- expect(refund_payment_methods).to include check_payment.payment_method
73
- end
74
-
75
- context "filtering payment methods" do
76
- around do |example|
77
- original = described_class.eligible_refund_methods
78
- described_class.eligible_refund_methods = [check_payment.payment_method.class]
79
- example.run
80
- described_class.eligible_refund_methods = original
81
- end
82
-
83
- it "does not refund to ineligible payment methods" do
84
- expect(refund_payment_methods).to eq [check_payment.payment_method]
85
- end
86
- end
87
-
88
- context "sorting payment methods" do
89
- around do |example|
90
- original = described_class.eligible_refund_methods
91
- described_class.eligible_refund_methods = [check_payment.payment_method.class, payment.payment_method.class]
92
- example.run
93
- described_class.eligible_refund_methods = original
94
- end
95
-
96
- it "respects configured payment type sort order" do
97
- expect(refund_payment_methods).to eq [check_payment.payment_method, payment.payment_method]
98
- end
99
-
100
- context "only one refund is necessary" do
101
- let(:refund_amount) { 4.0 }
102
- it "only returns refunds to satisfy the refund amount" do
103
- expect(refund_payment_methods).to eq [check_payment.payment_method]
104
- end
105
- end
106
- end
107
- end
108
- end
109
- end
110
- end
@@ -1,111 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree
6
- RSpec.describe ReimbursementType::StoreCredit do
7
- let(:reimbursement) { create(:reimbursement, return_items_count: 2) }
8
- let(:return_item) { reimbursement.return_items.first }
9
- let(:return_item2) { reimbursement.return_items.last }
10
- let(:payment) { reimbursement.order.payments.first }
11
- let(:simulate) { false }
12
- let!(:default_refund_reason) { Spree::RefundReason.find_or_create_by!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false) }
13
-
14
- let!(:primary_credit_type) { create(:primary_credit_type) }
15
- let(:created_by_user) { create(:user, email: 'user@email.com') }
16
- let!(:default_reimbursement_category) { create(:store_credit_category) }
17
-
18
- subject { Spree::ReimbursementType::StoreCredit.reimburse(reimbursement, [return_item, return_item2], simulate, created_by: created_by_user) }
19
-
20
- before do
21
- reimbursement.update!(total: reimbursement.calculated_total)
22
- end
23
-
24
- describe '.reimburse' do
25
- context 'simulate is true' do
26
- let(:simulate) { true }
27
-
28
- context 'for store credits that the customer used' do
29
- before do
30
- expect(Spree::ReimbursementType::StoreCredit).to receive(:store_credit_payments).and_return([payment])
31
- end
32
-
33
- it 'creates readonly refunds for all store credit payments' do
34
- expect(subject.map(&:class)).to eq [Spree::Refund]
35
- expect(subject.map(&:readonly?)).to eq [true]
36
- end
37
-
38
- it 'does not save to the database' do
39
- expect { subject }.to_not change { payment.refunds.count }
40
- end
41
- end
42
-
43
- context 'for return items that were not paid for with store credit' do
44
- before do
45
- expect(Spree::ReimbursementType::StoreCredit).to receive(:store_credit_payments).and_return([])
46
- end
47
-
48
- context 'creates one readonly lump credit for all outstanding balance payable to the customer' do
49
- it 'creates a credit that is read only' do
50
- expect(subject.map(&:class)).to eq [Spree::Reimbursement::Credit]
51
- expect(subject.map(&:readonly?)).to eq [true]
52
- end
53
-
54
- it 'creates a credit which amounts to the sum of the return items rounded down' do
55
- expect(return_item).to receive(:total).and_return(10.0076)
56
- expect(return_item2).to receive(:total).and_return(10.0023)
57
- expect(subject.sum(&:amount)).to eq 20.0
58
- end
59
- end
60
-
61
- it 'does not save to the database' do
62
- expect { subject }.to_not change { Spree::Reimbursement::Credit.count }
63
- end
64
- end
65
- end
66
-
67
- context 'simulate is false' do
68
- let(:simulate) { false }
69
-
70
- context 'for store credits that the customer used' do
71
- before do
72
- expect(Spree::ReimbursementType::StoreCredit).to receive(:store_credit_payments).and_return([payment])
73
- end
74
-
75
- it 'performs refunds for all store credit payments' do
76
- expect { subject }.to change { payment.refunds.count }.by(1)
77
- expect(payment.refunds.sum(:amount)).to eq reimbursement.return_items.to_a.sum(&:total)
78
- end
79
- end
80
-
81
- context 'for return items that were not paid for with store credit' do
82
- before do
83
- expect(Spree::ReimbursementType::StoreCredit).to receive(:store_credit_payments).and_return([])
84
- end
85
-
86
- it 'creates one lump credit for all outstanding balance payable to the customer' do
87
- expect { subject }.to change { Spree::Reimbursement::Credit.count }.by(1)
88
- expect(subject.sum(&:amount)).to eq reimbursement.return_items.to_a.sum(&:total)
89
- end
90
-
91
- it "creates a store credit with the same currency as the reimbursement's order" do
92
- expect { subject }.to change { Spree::StoreCredit.count }.by(1)
93
- expect(Spree::StoreCredit.last.currency).to eq reimbursement.order.currency
94
- end
95
-
96
- context 'without a user with email address "spree@example.com" in the database' do
97
- before do
98
- default_user = Spree::LegacyUser.find_by(email: "spree@example.com")
99
- default_user.destroy if default_user
100
- end
101
-
102
- it "creates a store credit with the same currency as the reimbursement's order" do
103
- expect { subject }.to change { Spree::StoreCredit.count }.by(1)
104
- expect(Spree::StoreCredit.last.currency).to eq reimbursement.order.currency
105
- end
106
- end
107
- end
108
- end
109
- end
110
- end
111
- end