solidus_core 2.10.2 → 2.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (495) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree.js.erb +31 -2
  3. data/app/controllers/spree/base_controller.rb +1 -0
  4. data/app/mailers/spree/base_mailer.rb +4 -0
  5. data/app/mailers/spree/order_mailer.rb +1 -1
  6. data/app/models/concerns/spree/active_storage_adapter.rb +116 -0
  7. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +69 -0
  8. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
  9. data/app/models/concerns/spree/default_price.rb +1 -1
  10. data/app/models/concerns/spree/soft_deletable.rb +18 -0
  11. data/app/models/concerns/spree/user_address_book.rb +86 -32
  12. data/app/models/concerns/spree/user_methods.rb +3 -2
  13. data/app/models/spree/ability.rb +34 -10
  14. data/app/models/spree/address.rb +94 -17
  15. data/app/models/spree/address/name.rb +49 -0
  16. data/app/models/spree/address/state_validator.rb +71 -0
  17. data/app/models/spree/adjustment.rb +1 -1
  18. data/app/models/spree/base.rb +1 -0
  19. data/app/models/spree/calculator/default_tax.rb +1 -1
  20. data/app/models/spree/calculator/percent_per_item.rb +4 -4
  21. data/app/models/spree/calculator/price_sack.rb +1 -1
  22. data/app/models/spree/credit_card.rb +2 -2
  23. data/app/models/spree/customer_return.rb +4 -2
  24. data/app/models/spree/exchange.rb +1 -1
  25. data/app/models/spree/image/active_storage_attachment.rb +21 -0
  26. data/app/models/spree/inventory_unit.rb +1 -1
  27. data/app/models/spree/line_item.rb +13 -4
  28. data/app/models/spree/option_type.rb +1 -1
  29. data/app/models/spree/option_value.rb +2 -2
  30. data/app/models/spree/order.rb +91 -20
  31. data/app/models/spree/order/checkout.rb +1 -0
  32. data/app/models/spree/order_inventory.rb +16 -4
  33. data/app/models/spree/order_merger.rb +6 -4
  34. data/app/models/spree/order_promotion.rb +1 -1
  35. data/app/models/spree/order_updater.rb +11 -10
  36. data/app/models/spree/payment.rb +3 -3
  37. data/app/models/spree/payment/cancellation.rb +3 -3
  38. data/app/models/spree/payment/processing.rb +54 -30
  39. data/app/models/spree/payment_method.rb +8 -9
  40. data/app/models/spree/preference.rb +1 -1
  41. data/app/models/spree/price.rb +2 -8
  42. data/app/models/spree/product.rb +19 -14
  43. data/app/models/spree/product/scopes.rb +9 -4
  44. data/app/models/spree/promotion.rb +18 -7
  45. data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
  46. data/app/models/spree/promotion_action.rb +1 -7
  47. data/app/models/spree/promotion_code.rb +6 -1
  48. data/app/models/spree/promotion_code_batch.rb +1 -1
  49. data/app/models/spree/promotion_handler/coupon.rb +2 -2
  50. data/app/models/spree/promotion_rule.rb +1 -1
  51. data/app/models/spree/promotion_rule_role.rb +1 -1
  52. data/app/models/spree/refund.rb +60 -12
  53. data/app/models/spree/reimbursement.rb +27 -0
  54. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +10 -3
  55. data/app/models/spree/return_authorization.rb +1 -1
  56. data/app/models/spree/return_item.rb +21 -10
  57. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
  58. data/app/models/spree/role.rb +1 -1
  59. data/app/models/spree/shipment.rb +2 -2
  60. data/app/models/spree/shipping_calculator.rb +1 -1
  61. data/app/models/spree/shipping_manifest.rb +2 -2
  62. data/app/models/spree/shipping_method.rb +2 -9
  63. data/app/models/spree/shipping_rate.rb +1 -1
  64. data/app/models/spree/shipping_rate_tax.rb +1 -1
  65. data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
  66. data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
  67. data/app/models/spree/stock/package.rb +1 -1
  68. data/app/models/spree/stock/simple_coordinator.rb +1 -3
  69. data/app/models/spree/stock_item.rb +2 -8
  70. data/app/models/spree/stock_movement.rb +2 -0
  71. data/app/models/spree/store.rb +1 -1
  72. data/app/models/spree/store_credit.rb +1 -7
  73. data/app/models/spree/store_credit_category.rb +30 -3
  74. data/app/models/spree/store_credit_event.rb +1 -7
  75. data/app/models/spree/store_credit_reason.rb +0 -4
  76. data/app/models/spree/tax/tax_helpers.rb +1 -1
  77. data/app/models/spree/tax_category.rb +2 -8
  78. data/app/models/spree/tax_rate.rb +7 -7
  79. data/app/models/spree/taxon.rb +1 -1
  80. data/app/models/spree/taxon/active_storage_attachment.rb +19 -0
  81. data/app/models/spree/user_address.rb +8 -2
  82. data/app/models/spree/variant.rb +7 -13
  83. data/app/models/spree/variant_property_rule.rb +5 -1
  84. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +8 -3
  85. data/app/models/spree/zone.rb +1 -1
  86. data/config/locales/en.yml +44 -5
  87. data/db/default/spree/countries.rb +1 -1
  88. data/db/default/spree/states.rb +12 -4
  89. data/db/default/spree/store_credit.rb +2 -2
  90. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
  91. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
  92. data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
  93. data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
  94. data/lib/generators/solidus/install/install_generator.rb +253 -0
  95. data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +36 -5
  96. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
  97. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
  98. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
  99. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
  100. data/lib/generators/spree/install/install_generator.rb +7 -189
  101. data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
  102. data/lib/spree/app_configuration.rb +117 -51
  103. data/lib/spree/awesome_nested_set_override.rb +44 -0
  104. data/lib/spree/core.rb +5 -11
  105. data/lib/spree/core/controller_helpers/auth.rb +17 -4
  106. data/lib/spree/core/controller_helpers/current_host.rb +17 -0
  107. data/lib/spree/core/controller_helpers/order.rb +8 -7
  108. data/lib/spree/core/engine.rb +39 -2
  109. data/lib/spree/core/importer/order.rb +24 -10
  110. data/lib/spree/core/permalinks.rb +1 -3
  111. data/lib/spree/core/product_filters.rb +6 -5
  112. data/lib/spree/core/state_machines.rb +20 -1
  113. data/lib/spree/core/state_machines/order.rb +249 -0
  114. data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
  115. data/lib/spree/core/version.rb +1 -1
  116. data/lib/spree/encryptor.rb +25 -0
  117. data/lib/spree/event.rb +40 -7
  118. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  119. data/lib/spree/event/configuration.rb +11 -6
  120. data/lib/spree/event/subscriber.rb +38 -18
  121. data/lib/spree/event/subscriber_registry.rb +92 -0
  122. data/lib/spree/i18n.rb +1 -1
  123. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  124. data/lib/spree/paranoia_deprecations.rb +32 -12
  125. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  126. data/lib/spree/permission_sets/default_customer.rb +16 -16
  127. data/lib/spree/permission_sets/order_display.rb +11 -11
  128. data/lib/spree/permission_sets/order_management.rb +1 -1
  129. data/lib/spree/permission_sets/product_display.rb +9 -9
  130. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  131. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  132. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  133. data/lib/spree/permission_sets/stock_display.rb +2 -2
  134. data/lib/spree/permission_sets/stock_management.rb +1 -1
  135. data/lib/spree/permission_sets/user_display.rb +3 -3
  136. data/lib/spree/permission_sets/user_management.rb +4 -3
  137. data/lib/spree/permitted_attributes.rb +4 -3
  138. data/lib/spree/preferences/preferable.rb +4 -3
  139. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  140. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  141. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  142. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  143. data/lib/spree/testing_support/capybara_ext.rb +3 -0
  144. data/lib/spree/testing_support/common_rake.rb +3 -3
  145. data/lib/spree/testing_support/dummy_app.rb +44 -23
  146. data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
  147. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
  148. data/lib/spree/testing_support/factories/address_factory.rb +1 -2
  149. data/lib/spree/testing_support/factories/image_factory.rb +1 -1
  150. data/lib/spree/testing_support/factories/promotion_factory.rb +6 -0
  151. data/lib/spree/testing_support/factories/refund_factory.rb +1 -0
  152. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  153. data/lib/spree/testing_support/factories/return_item_factory.rb +0 -1
  154. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +8 -0
  155. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -0
  156. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +3 -1
  157. data/lib/spree/testing_support/factories/taxon_factory.rb +4 -0
  158. data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
  159. data/lib/spree/testing_support/fixtures/blank.jpg +0 -0
  160. data/lib/spree/testing_support/job_helpers.rb +24 -0
  161. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  162. data/lib/spree/testing_support/preferences.rb +3 -1
  163. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  164. data/lib/spree/testing_support/translations.rb +25 -0
  165. data/solidus_core.gemspec +8 -5
  166. metadata +99 -377
  167. data/script/rails +0 -10
  168. data/spec/fixtures/thinking-cat.jpg +0 -0
  169. data/spec/helpers/base_helper_spec.rb +0 -168
  170. data/spec/helpers/products_helper_spec.rb +0 -202
  171. data/spec/helpers/taxons_helper_spec.rb +0 -43
  172. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  173. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  174. data/spec/lib/i18n_spec.rb +0 -97
  175. data/spec/lib/search/base_spec.rb +0 -91
  176. data/spec/lib/search/variant_spec.rb +0 -115
  177. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  178. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  179. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  180. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  181. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  182. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  183. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  184. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  185. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -48
  186. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  187. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  188. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  189. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  190. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
  191. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  192. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  193. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  194. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  195. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  196. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  197. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  198. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  199. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  200. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  201. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  202. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  203. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  204. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  205. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  206. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  207. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  208. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  209. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  210. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  211. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  212. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  213. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  214. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  215. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  216. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  217. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  218. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  219. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  220. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  221. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  222. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  223. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  224. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  225. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  226. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  227. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  228. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  229. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  230. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  231. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  232. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  233. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  234. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  235. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  236. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  237. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  238. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  239. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  240. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  241. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  242. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  243. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  244. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  245. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  246. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  247. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  248. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  249. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  250. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  251. data/spec/lib/spree/core/version_spec.rb +0 -19
  252. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  253. data/spec/lib/spree/event_spec.rb +0 -130
  254. data/spec/lib/spree/localized_number_spec.rb +0 -45
  255. data/spec/lib/spree/migrations_spec.rb +0 -32
  256. data/spec/lib/spree/money_spec.rb +0 -298
  257. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  258. data/spec/lib/spree/permitted_attributes_spec.rb +0 -41
  259. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  260. data/spec/lib/tasks/dummy_task.rake +0 -12
  261. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  262. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  263. data/spec/mailers/carton_mailer_spec.rb +0 -44
  264. data/spec/mailers/order_mailer_spec.rb +0 -117
  265. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  266. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  267. data/spec/mailers/test_mailer_spec.rb +0 -13
  268. data/spec/models/spree/ability_spec.rb +0 -279
  269. data/spec/models/spree/address_spec.rb +0 -399
  270. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  271. data/spec/models/spree/adjustment_spec.rb +0 -339
  272. data/spec/models/spree/asset_spec.rb +0 -25
  273. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  274. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  275. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  276. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  277. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  278. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  279. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  280. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  281. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  282. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  283. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  284. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  285. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  286. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  287. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
  288. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  289. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  290. data/spec/models/spree/calculator_spec.rb +0 -43
  291. data/spec/models/spree/carton_spec.rb +0 -145
  292. data/spec/models/spree/classification_spec.rb +0 -126
  293. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  294. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  295. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  296. data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
  297. data/spec/models/spree/country_spec.rb +0 -154
  298. data/spec/models/spree/credit_card_spec.rb +0 -373
  299. data/spec/models/spree/customer_return_spec.rb +0 -294
  300. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  301. data/spec/models/spree/exchange_spec.rb +0 -76
  302. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  303. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  304. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  305. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  306. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  307. data/spec/models/spree/gateway_spec.rb +0 -14
  308. data/spec/models/spree/image_spec.rb +0 -25
  309. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  310. data/spec/models/spree/line_item_spec.rb +0 -240
  311. data/spec/models/spree/option_type_spec.rb +0 -16
  312. data/spec/models/spree/option_value_spec.rb +0 -52
  313. data/spec/models/spree/order/address_spec.rb +0 -52
  314. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  315. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  316. data/spec/models/spree/order/checkout_spec.rb +0 -740
  317. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  318. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  319. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  320. data/spec/models/spree/order/payment_spec.rb +0 -280
  321. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  322. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  323. data/spec/models/spree/order/totals_spec.rb +0 -26
  324. data/spec/models/spree/order/validations_spec.rb +0 -17
  325. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  326. data/spec/models/spree/order_capturing_spec.rb +0 -16
  327. data/spec/models/spree/order_contents_spec.rb +0 -362
  328. data/spec/models/spree/order_inventory_spec.rb +0 -285
  329. data/spec/models/spree/order_merger_spec.rb +0 -162
  330. data/spec/models/spree/order_mutex_spec.rb +0 -89
  331. data/spec/models/spree/order_promotion_spec.rb +0 -33
  332. data/spec/models/spree/order_shipping_spec.rb +0 -247
  333. data/spec/models/spree/order_spec.rb +0 -1687
  334. data/spec/models/spree/order_taxation_spec.rb +0 -128
  335. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  336. data/spec/models/spree/order_updater_spec.rb +0 -556
  337. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  338. data/spec/models/spree/payment_create_spec.rb +0 -195
  339. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  340. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  341. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  342. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  343. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  344. data/spec/models/spree/payment_method_spec.rb +0 -408
  345. data/spec/models/spree/payment_spec.rb +0 -1270
  346. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  347. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  348. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  349. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  350. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  351. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  352. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  353. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  354. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  355. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  356. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  357. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  358. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  359. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  360. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  361. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
  362. data/spec/models/spree/preference_spec.rb +0 -79
  363. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  364. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  365. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  366. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  367. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  368. data/spec/models/spree/preferences/store_spec.rb +0 -40
  369. data/spec/models/spree/price_spec.rb +0 -150
  370. data/spec/models/spree/product/scopes_spec.rb +0 -164
  371. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  372. data/spec/models/spree/product_filter_spec.rb +0 -28
  373. data/spec/models/spree/product_property_spec.rb +0 -20
  374. data/spec/models/spree/product_spec.rb +0 -584
  375. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  376. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  377. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  378. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  379. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  380. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  381. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  382. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  383. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  384. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  385. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  386. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  387. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -227
  388. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  389. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  390. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  391. data/spec/models/spree/promotion_action_spec.rb +0 -44
  392. data/spec/models/spree/promotion_category_spec.rb +0 -19
  393. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  394. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  395. data/spec/models/spree/promotion_code_spec.rb +0 -206
  396. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  397. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  398. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  399. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  400. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  401. data/spec/models/spree/promotion_spec.rb +0 -945
  402. data/spec/models/spree/refund_spec.rb +0 -200
  403. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  404. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  405. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  406. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  407. data/spec/models/spree/reimbursement_spec.rb +0 -278
  408. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  409. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  410. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  411. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  412. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  413. data/spec/models/spree/return_authorization_spec.rb +0 -226
  414. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  415. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  416. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  417. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  418. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  419. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  420. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  421. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  422. data/spec/models/spree/return_item_spec.rb +0 -785
  423. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  424. data/spec/models/spree/shipment_spec.rb +0 -914
  425. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  426. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  427. data/spec/models/spree/shipping_method_spec.rb +0 -292
  428. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  429. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  430. data/spec/models/spree/state_spec.rb +0 -43
  431. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  432. data/spec/models/spree/stock/availability_spec.rb +0 -143
  433. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  434. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  435. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  436. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  437. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  438. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  439. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  440. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  441. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  442. data/spec/models/spree/stock/package_spec.rb +0 -182
  443. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  444. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  445. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  446. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  447. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  448. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  449. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  450. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  451. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  452. data/spec/models/spree/stock_item_spec.rb +0 -348
  453. data/spec/models/spree/stock_location_spec.rb +0 -288
  454. data/spec/models/spree/stock_movement_spec.rb +0 -58
  455. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  456. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  457. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  458. data/spec/models/spree/store_credit_spec.rb +0 -900
  459. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  460. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  461. data/spec/models/spree/store_spec.rb +0 -156
  462. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  463. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  464. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  465. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  466. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  467. data/spec/models/spree/tax_category_spec.rb +0 -50
  468. data/spec/models/spree/tax_rate_spec.rb +0 -317
  469. data/spec/models/spree/taxon_spec.rb +0 -197
  470. data/spec/models/spree/taxonomy_spec.rb +0 -15
  471. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
  472. data/spec/models/spree/unit_cancel_spec.rb +0 -126
  473. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
  474. data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
  475. data/spec/models/spree/user_spec.rb +0 -247
  476. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  477. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  478. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  479. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  480. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  481. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  482. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  483. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  484. data/spec/models/spree/variant_spec.rb +0 -862
  485. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  486. data/spec/models/spree/wallet_spec.rb +0 -155
  487. data/spec/models/spree/zone_spec.rb +0 -248
  488. data/spec/rails_helper.rb +0 -46
  489. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  490. data/spec/spec_helper.rb +0 -36
  491. data/spec/support/big_decimal.rb +0 -7
  492. data/spec/support/concerns/default_price.rb +0 -44
  493. data/spec/support/concerns/payment_source.rb +0 -66
  494. data/spec/support/concerns/working_factories.rb +0 -15
  495. data/spec/support/dummy_ability.rb +0 -7
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::OrderCapturing do
6
- describe '#capture_payments' do
7
- subject { Spree::OrderCapturing.new(order).capture_payments }
8
-
9
- let(:order) { build(:completed_order_with_totals) }
10
-
11
- it 'is deprecated' do
12
- expect(Spree::Deprecation).to(receive(:warn))
13
- subject
14
- end
15
- end
16
- end
@@ -1,362 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::OrderContents, type: :model do
6
- let!(:store) { create :store }
7
- let(:order) { create(:order) }
8
- let(:variant) { create(:variant) }
9
- let!(:stock_location) { variant.stock_locations.first }
10
- let(:stock_location_2) { create(:stock_location) }
11
-
12
- subject(:order_contents) { described_class.new(order) }
13
-
14
- context "#add" do
15
- context 'given quantity is not explicitly provided' do
16
- it 'should add one line item' do
17
- line_item = subject.add(variant)
18
- expect(line_item.quantity).to eq(1)
19
- expect(order.line_items.size).to eq(1)
20
- end
21
- end
22
-
23
- context 'given a shipment' do
24
- let!(:shipment) { create(:shipment, order: order) }
25
-
26
- it "ensure shipment calls update_amounts instead of order calling ensure_updated_shipments" do
27
- expect(subject.order).to_not receive(:ensure_updated_shipments)
28
- expect(shipment).to receive(:update_amounts)
29
- subject.add(variant, 1, shipment: shipment)
30
- end
31
-
32
- context "with quantity=1" do
33
- it "creates correct inventory" do
34
- subject.add(variant, 1, shipment: shipment)
35
- expect(order.inventory_units.count).to eq(1)
36
- end
37
- end
38
-
39
- context "with quantity=2" do
40
- it "creates correct inventory" do
41
- subject.add(variant, 2, shipment: shipment)
42
- expect(order.inventory_units.count).to eq(2)
43
- end
44
- end
45
-
46
- context "called multiple times" do
47
- it "creates correct inventory" do
48
- subject.add(variant, 1, shipment: shipment)
49
- subject.add(variant, 1, shipment: shipment)
50
- expect(order.inventory_units.count).to eq(2)
51
- end
52
- end
53
- end
54
-
55
- context 'not given a shipment' do
56
- it "ensures updated shipments" do
57
- expect(subject.order).to receive(:ensure_updated_shipments)
58
- subject.add(variant)
59
- end
60
- end
61
-
62
- it 'should add line item if one does not exist' do
63
- line_item = subject.add(variant, 1)
64
- expect(line_item.quantity).to eq(1)
65
- expect(order.line_items.size).to eq(1)
66
- end
67
-
68
- it 'should update line item if one exists' do
69
- subject.add(variant, 1)
70
- line_item = subject.add(variant, 1)
71
- expect(line_item.quantity).to eq(2)
72
- expect(order.line_items.size).to eq(1)
73
- end
74
-
75
- it "should update order totals" do
76
- expect(order.item_total.to_f).to eq(0.00)
77
- expect(order.total.to_f).to eq(0.00)
78
-
79
- subject.add(variant, 1)
80
-
81
- expect(order.item_total.to_f).to eq(19.99)
82
- expect(order.total.to_f).to eq(19.99)
83
- end
84
-
85
- context "running promotions" do
86
- let(:promotion) { create(:promotion, apply_automatically: true) }
87
- let(:calculator) { Spree::Calculator::FlatRate.new(preferred_amount: 10) }
88
-
89
- shared_context "discount changes order total" do
90
- before { subject.add(variant, 1) }
91
- it { expect(subject.order.total).not_to eq variant.price }
92
- end
93
-
94
- context "one active order promotion" do
95
- let!(:action) { Spree::Promotion::Actions::CreateAdjustment.create(promotion: promotion, calculator: calculator) }
96
-
97
- it "creates valid discount on order" do
98
- subject.add(variant, 1)
99
- expect(subject.order.adjustments.to_a.sum(&:amount)).not_to eq 0
100
- end
101
-
102
- include_context "discount changes order total"
103
- end
104
-
105
- context "one active line item promotion" do
106
- let!(:action) { Spree::Promotion::Actions::CreateItemAdjustments.create(promotion: promotion, calculator: calculator) }
107
-
108
- it "creates valid discount on order" do
109
- subject.add(variant, 1)
110
- expect(subject.order.line_item_adjustments.to_a.sum(&:amount)).not_to eq 0
111
- end
112
-
113
- include_context "discount changes order total"
114
- end
115
- end
116
-
117
- describe 'tax calculations' do
118
- let!(:zone) { create(:global_zone) }
119
- let!(:tax_rate) do
120
- create(:tax_rate, zone: zone, tax_categories: [variant.tax_category])
121
- end
122
-
123
- context 'when the order has a taxable address' do
124
- before do
125
- expect(order.tax_address.country_id).to be_present
126
- end
127
-
128
- it 'creates a tax adjustment' do
129
- order_contents.add(variant)
130
- line_item = order.find_line_item_by_variant(variant)
131
- expect(line_item.adjustments.tax.count).to eq(1)
132
- end
133
- end
134
-
135
- context 'when the order does not have a taxable address' do
136
- before do
137
- order.update!(ship_address: nil, bill_address: nil)
138
- expect(order.tax_address.country_id).to be_nil
139
- end
140
-
141
- it 'creates a tax adjustment' do
142
- order_contents.add(variant)
143
- line_item = order.find_line_item_by_variant(variant)
144
- expect(line_item.adjustments.tax.count).to eq(0)
145
- end
146
- end
147
- end
148
- end
149
-
150
- context "#remove" do
151
- context "given an invalid variant" do
152
- it "raises an exception" do
153
- expect {
154
- subject.remove(variant, 1)
155
- }.to raise_error(ActiveRecord::RecordNotFound)
156
- end
157
- end
158
-
159
- context 'given quantity is not explicitly provided' do
160
- it 'should remove one line item' do
161
- line_item = subject.add(variant, 3)
162
- subject.remove(variant)
163
-
164
- expect(line_item.reload.quantity).to eq(2)
165
- end
166
- end
167
-
168
- context 'given a shipment' do
169
- it "ensure shipment calls update_amounts instead of order calling ensure_updated_shipments" do
170
- subject.add(variant, 1)
171
- shipment = create(:shipment)
172
- expect(subject.order).to_not receive(:ensure_updated_shipments)
173
- expect(shipment).to receive(:update_amounts)
174
- subject.remove(variant, 1, shipment: shipment)
175
- end
176
- end
177
-
178
- context 'not given a shipment' do
179
- it "ensures updated shipments" do
180
- subject.add(variant, 1)
181
- expect(subject.order).to receive(:ensure_updated_shipments)
182
- subject.remove(variant)
183
- end
184
- end
185
-
186
- it 'should reduce line_item quantity if quantity is less the line_item quantity' do
187
- line_item = subject.add(variant, 3)
188
- subject.remove(variant, 1)
189
-
190
- expect(line_item.reload.quantity).to eq(2)
191
- end
192
-
193
- it 'should remove line_item if quantity matches line_item quantity' do
194
- subject.add(variant, 1)
195
- subject.remove(variant, 1)
196
-
197
- expect(order.reload.find_line_item_by_variant(variant)).to be_nil
198
- end
199
-
200
- it 'should remove line_item if quantity is greater than line_item quantity' do
201
- subject.add(variant, 1)
202
- subject.remove(variant, 2)
203
-
204
- expect(order.reload.find_line_item_by_variant(variant)).to be_nil
205
- end
206
-
207
- it "should update order totals" do
208
- expect(order.item_total.to_f).to eq(0.00)
209
- expect(order.total.to_f).to eq(0.00)
210
-
211
- subject.add(variant, 2)
212
-
213
- expect(order.item_total.to_f).to eq(39.98)
214
- expect(order.total.to_f).to eq(39.98)
215
-
216
- subject.remove(variant, 1)
217
- expect(order.item_total.to_f).to eq(19.99)
218
- expect(order.total.to_f).to eq(19.99)
219
- end
220
- end
221
-
222
- context "#remove_line_item" do
223
- context 'given a shipment' do
224
- it "ensure shipment calls update_amounts instead of order calling ensure_updated_shipments" do
225
- line_item = subject.add(variant, 1)
226
- shipment = create(:shipment)
227
- expect(subject.order).to_not receive(:ensure_updated_shipments)
228
- expect(shipment).to receive(:update_amounts)
229
- subject.remove_line_item(line_item, shipment: shipment)
230
- end
231
- end
232
-
233
- context 'not given a shipment' do
234
- it "ensures updated shipments" do
235
- line_item = subject.add(variant, 1)
236
- expect(subject.order).to receive(:ensure_updated_shipments)
237
- subject.remove_line_item(line_item)
238
- end
239
- end
240
-
241
- it 'should remove line_item' do
242
- line_item = subject.add(variant, 1)
243
- subject.remove_line_item(line_item)
244
-
245
- expect(order.reload.line_items).to_not include(line_item)
246
- end
247
-
248
- it "should update order totals" do
249
- expect(order.item_total.to_f).to eq(0.00)
250
- expect(order.total.to_f).to eq(0.00)
251
-
252
- line_item = subject.add(variant, 2)
253
-
254
- expect(order.item_total.to_f).to eq(39.98)
255
- expect(order.total.to_f).to eq(39.98)
256
-
257
- subject.remove_line_item(line_item)
258
- expect(order.item_total.to_f).to eq(0.00)
259
- expect(order.total.to_f).to eq(0.00)
260
- end
261
- end
262
-
263
- context "update cart" do
264
- let!(:shirt) { subject.add variant, 1 }
265
-
266
- let(:params) do
267
- { line_items_attributes: {
268
- "0" => { id: shirt.id, quantity: 3 }
269
- } }
270
- end
271
-
272
- it "changes item quantity" do
273
- subject.update_cart params
274
- expect(shirt.reload.quantity).to eq 3
275
- end
276
-
277
- it "updates order totals" do
278
- expect {
279
- subject.update_cart params
280
- }.to change { subject.order.total }
281
- end
282
-
283
- context "submits item quantity 0" do
284
- let(:params) do
285
- { line_items_attributes: {
286
- "0" => { id: shirt.id, quantity: 0 }
287
- } }
288
- end
289
-
290
- it "removes item from order" do
291
- expect {
292
- subject.update_cart params
293
- }.to change { subject.order.line_items.count }
294
- end
295
- end
296
-
297
- it "ensures updated shipments" do
298
- expect(subject.order).to receive(:ensure_updated_shipments)
299
- subject.update_cart params
300
- end
301
- end
302
-
303
- context "completed order" do
304
- let(:order) { Spree::Order.create! state: 'complete', completed_at: Time.current }
305
-
306
- before { order.shipments.create! stock_location_id: variant.stock_location_ids.first }
307
-
308
- it "updates order payment state" do
309
- expect {
310
- subject.add variant
311
- }.to change { order.payment_state }
312
-
313
- expect {
314
- subject.remove variant
315
- }.to change { order.payment_state }
316
- end
317
- end
318
-
319
- describe "#approve" do
320
- context 'when a name is supplied' do
321
- it 'approves the order' do
322
- order.contents.approve(name: 'Jordan')
323
- expect(order.approver).to be_nil
324
- expect(order.approver_name).to eq('Jordan')
325
- expect(order.approved_at).to be_present
326
- expect(order.approved?).to be_truthy
327
- end
328
- end
329
-
330
- context 'when a user is supplied' do
331
- let(:user) { create(:user) }
332
-
333
- it 'approves the order' do
334
- order.contents.approve(user: user)
335
- expect(order.approver).to eq(user)
336
- expect(order.approver_name).to be_nil
337
- expect(order.approved_at).to be_present
338
- expect(order.approved?).to be_truthy
339
- end
340
- end
341
-
342
- context 'when a user and a name are supplied' do
343
- let(:user) { create(:user) }
344
-
345
- it 'approves the order' do
346
- order.contents.approve(user: user, name: 'Jordan')
347
- expect(order.approver).to eq(user)
348
- expect(order.approver_name).to eq('Jordan')
349
- expect(order.approved_at).to be_present
350
- expect(order.approved?).to be_truthy
351
- end
352
- end
353
-
354
- context 'when neither a user nor a name are supplied' do
355
- it 'raises' do
356
- expect {
357
- order.contents.approve
358
- }.to raise_error(ArgumentError, 'user or name must be specified')
359
- end
360
- end
361
- end
362
- end
@@ -1,285 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::OrderInventory, type: :model do
6
- let(:order) { create :completed_order_with_totals }
7
- let(:line_item) { order.line_items.first }
8
- let(:shipment) { order.shipments.first }
9
- let(:variant) { subject.variant }
10
- let(:stock_item) { shipment.stock_location.stock_item(variant) }
11
-
12
- subject { described_class.new(order, line_item) }
13
-
14
- context "insufficient inventory units" do
15
- let(:old_quantity) { 1 }
16
- let(:new_quantity) { 3 }
17
-
18
- before do
19
- line_item.update!(quantity: old_quantity)
20
-
21
- line_item.update_column(:quantity, new_quantity)
22
- subject.line_item.reload
23
- end
24
-
25
- it 'creates the proper number of inventory units' do
26
- expect(line_item.inventory_units.count).to eq(old_quantity)
27
- subject.verify(shipment)
28
- expect(line_item.inventory_units.count).to eq(new_quantity)
29
- end
30
-
31
- it "unstocks items" do
32
- expect {
33
- subject.verify(shipment)
34
- }.to change { stock_item.reload.count_on_hand }.by(-2)
35
- end
36
-
37
- context "order is not completed" do
38
- let(:inventory_unit_finalizer) { double(:inventory_unit_finalizer, run!: [true]) }
39
-
40
- before do
41
- allow(Spree::Stock::InventoryUnitsFinalizer)
42
- .to receive(:new).and_return(inventory_unit_finalizer)
43
-
44
- order.update_columns completed_at: nil
45
- end
46
-
47
- it "doesn't finalize the items" do
48
- expect(inventory_unit_finalizer).to_not receive(:run!)
49
-
50
- subject.verify(shipment)
51
- end
52
- end
53
-
54
- context "inventory units state" do
55
- before { shipment.inventory_units.destroy_all }
56
- let(:new_quantity) { 5 }
57
-
58
- it 'sets inventory_units state as per stock location availability' do
59
- stock_item.update_columns(
60
- backorderable: true,
61
- count_on_hand: 3
62
- )
63
-
64
- subject.verify
65
-
66
- units = shipment.inventory_units_for(subject.variant).group_by(&:state)
67
- expect(units['backordered'].size).to eq(2)
68
- expect(units['on_hand'].size).to eq(3)
69
- end
70
- end
71
-
72
- context "store doesnt track inventory" do
73
- let(:new_quantity) { 1 }
74
-
75
- before { stub_spree_preferences(track_inventory_levels: false) }
76
-
77
- it "creates on hand inventory units" do
78
- variant.stock_items.each(&:really_destroy!)
79
-
80
- subject.verify(shipment)
81
-
82
- units = shipment.inventory_units_for(variant)
83
- expect(units.count).to eq 1
84
- expect(units.first).to be_on_hand
85
- end
86
- end
87
-
88
- context "variant doesnt track inventory" do
89
- before { variant.update!(track_inventory: false) }
90
- let(:new_quantity) { 1 }
91
-
92
- it "creates on hand inventory units" do
93
- variant.stock_items.each(&:really_destroy!)
94
-
95
- subject.verify(shipment)
96
-
97
- units = shipment.inventory_units_for(variant)
98
- expect(units.count).to eq 1
99
- expect(units.first).to be_on_hand
100
- end
101
- end
102
-
103
- it 'should create stock_movement' do
104
- expect(subject.send(:add_to_shipment, shipment, 5)).to eq(5)
105
-
106
- stock_item = shipment.stock_location.stock_item(subject.variant)
107
- movement = stock_item.stock_movements.last
108
- expect(movement.originator).to eq(shipment)
109
- expect(movement.quantity).to eq(-5)
110
- end
111
-
112
- context "calling multiple times" do
113
- it "creates the correct number of inventory units" do
114
- line_item.update_columns(quantity: 2)
115
- subject.verify(shipment)
116
- expect(line_item.inventory_units.count).to eq(2)
117
-
118
- line_item.update_columns(quantity: 3)
119
- subject.verify(shipment)
120
- expect(line_item.inventory_units.count).to eq(3)
121
- end
122
- end
123
- end
124
-
125
- context "#determine_target_shipment" do
126
- let(:stock_location) { create :stock_location }
127
- let(:variant) { line_item.variant }
128
-
129
- before do
130
- subject.verify
131
-
132
- order.shipments.create(stock_location_id: stock_location.id, cost: 5)
133
-
134
- shipped = order.shipments.create(stock_location_id: order.shipments.first.stock_location.id, cost: 10)
135
- shipped.update_column(:state, 'shipped')
136
- end
137
-
138
- it 'should select first non-shipped shipment that already contains given variant' do
139
- shipment = subject.send(:determine_target_shipment)
140
- expect(shipment.shipped?).to be false
141
- expect(shipment.inventory_units_for(variant)).not_to be_empty
142
-
143
- expect(variant.stock_location_ids.include?(shipment.stock_location_id)).to be true
144
- end
145
-
146
- context "when no shipments already contain this varint" do
147
- before do
148
- subject.line_item.reload
149
- subject.inventory_units.destroy_all
150
- end
151
-
152
- it 'selects first non-shipped shipment that leaves from same stock_location' do
153
- shipment = subject.send(:determine_target_shipment)
154
- shipment.reload
155
- expect(shipment.shipped?).to be false
156
- expect(shipment.inventory_units_for(variant)).to be_empty
157
- expect(variant.stock_location_ids.include?(shipment.stock_location_id)).to be true
158
- end
159
- end
160
- end
161
-
162
- context 'when order has too many inventory units' do
163
- let(:old_quantity) { 3 }
164
- let(:new_quantity) { 2 }
165
-
166
- before do
167
- line_item.update!(quantity: old_quantity)
168
-
169
- line_item.update_column(:quantity, new_quantity)
170
- subject.line_item.reload
171
- end
172
-
173
- it 'should be a messed up order' do
174
- expect(order.shipments.first.inventory_units_for(line_item.variant).size).to eq(3)
175
- expect(line_item.quantity).to eq(2)
176
- end
177
-
178
- it 'should decrease the number of inventory units' do
179
- subject.verify
180
- expect(line_item.inventory_units.count).to eq 2
181
- expect(order.inventory_units.count).to eq 2
182
- end
183
-
184
- context "order is not completed" do
185
- before { order.update_columns(completed_at: nil) }
186
-
187
- it "doesn't restock items" do
188
- expect(shipment.stock_location).not_to receive(:restock)
189
-
190
- expect {
191
- subject.verify(shipment)
192
- }.not_to change { stock_item.reload.count_on_hand }
193
-
194
- expect(line_item.inventory_units.count).to eq(new_quantity)
195
- end
196
- end
197
-
198
- it 'should change count_on_hand' do
199
- expect {
200
- subject.verify(shipment)
201
- }.to change { stock_item.reload.count_on_hand }.by(1)
202
- end
203
-
204
- it 'should create stock_movement' do
205
- stock_item = shipment.stock_location.stock_item(variant)
206
-
207
- expect {
208
- subject.verify(shipment)
209
- }.to change { stock_item.stock_movements.count }.by(1)
210
-
211
- movement = stock_item.stock_movements.last
212
- expect(movement.originator).to eq shipment
213
- expect(movement.quantity).to eq(1)
214
- end
215
-
216
- context 'with some backordered' do
217
- let(:new_quantity) { 1 }
218
-
219
- before do
220
- line_item.inventory_units[0].update_columns(state: 'backordered')
221
- line_item.inventory_units[1].update_columns(state: 'on_hand')
222
- line_item.inventory_units[2].update_columns(state: 'backordered')
223
- end
224
-
225
- it 'should destroy backordered units first' do
226
- on_hand_unit = line_item.inventory_units.find_by state: 'on_hand'
227
-
228
- subject.verify(shipment)
229
-
230
- expect(line_item.inventory_units.reload).to eq([on_hand_unit])
231
- end
232
- end
233
-
234
- context 'with some shipped items' do
235
- let(:old_quantity) { 2 }
236
- let(:new_quantity) { 1 }
237
-
238
- let(:shipped_unit) { line_item.inventory_units[0] }
239
- before do
240
- shipped_unit.update_columns(state: 'shipped')
241
- end
242
-
243
- it 'should destroy unshipped units first' do
244
- subject.verify(shipment)
245
-
246
- expect(line_item.inventory_units.reload).to eq([shipped_unit])
247
- end
248
-
249
- context 'trying to remove shipped units' do
250
- let(:new_quantity) { 0 }
251
-
252
- it 'only attempts to destroy as many units as are eligible, and return amount destroyed' do
253
- subject.verify(shipment)
254
-
255
- expect(line_item.inventory_units.reload).to eq([shipped_unit])
256
- end
257
- end
258
- end
259
-
260
- context 'destroying all units' do
261
- let(:new_quantity) { 0 }
262
-
263
- it 'should destroy shipment' do
264
- expect {
265
- subject.verify(shipment)
266
- }.to change{ order.shipments.count }.from(1).to(0)
267
- end
268
- end
269
-
270
- context "inventory unit line item and variant points to different products" do
271
- let(:new_quantity) { 0 }
272
- let(:different_line_item) { create(:line_item, order: order) }
273
-
274
- let!(:different_inventory) do
275
- shipment.set_up_inventory("on_hand", variant, order, different_line_item)
276
- end
277
-
278
- it "removes only units that match both line item and variant" do
279
- subject.verify(shipment)
280
-
281
- expect(different_inventory.reload).to be_persisted
282
- end
283
- end
284
- end
285
- end