solidus_core 2.10.2 → 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 (494) 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 +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.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/job_helpers.rb +24 -0
  160. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  161. data/lib/spree/testing_support/preferences.rb +3 -1
  162. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  163. data/lib/spree/testing_support/translations.rb +25 -0
  164. data/solidus_core.gemspec +8 -5
  165. metadata +81 -360
  166. data/script/rails +0 -10
  167. data/spec/fixtures/thinking-cat.jpg +0 -0
  168. data/spec/helpers/base_helper_spec.rb +0 -168
  169. data/spec/helpers/products_helper_spec.rb +0 -202
  170. data/spec/helpers/taxons_helper_spec.rb +0 -43
  171. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  172. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  173. data/spec/lib/i18n_spec.rb +0 -97
  174. data/spec/lib/search/base_spec.rb +0 -91
  175. data/spec/lib/search/variant_spec.rb +0 -115
  176. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  177. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  178. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  179. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  180. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  181. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  182. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  183. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  184. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -48
  185. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  186. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  187. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  188. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  189. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
  190. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  191. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  192. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  193. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  194. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  195. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  196. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  197. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  198. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  199. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  200. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  201. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  202. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  203. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  204. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  205. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  206. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  207. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  208. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  209. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  210. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  211. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  212. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  213. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  214. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  215. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  216. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  217. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  218. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  219. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  220. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  221. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  222. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  223. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  224. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  225. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  226. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  227. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  228. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  229. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  230. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  231. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  232. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  233. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  234. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  235. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  236. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  237. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  238. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  239. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  240. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  241. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  242. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  243. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  244. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  245. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  246. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  247. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  248. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  249. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  250. data/spec/lib/spree/core/version_spec.rb +0 -19
  251. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  252. data/spec/lib/spree/event_spec.rb +0 -130
  253. data/spec/lib/spree/localized_number_spec.rb +0 -45
  254. data/spec/lib/spree/migrations_spec.rb +0 -32
  255. data/spec/lib/spree/money_spec.rb +0 -298
  256. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  257. data/spec/lib/spree/permitted_attributes_spec.rb +0 -41
  258. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  259. data/spec/lib/tasks/dummy_task.rake +0 -12
  260. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  261. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  262. data/spec/mailers/carton_mailer_spec.rb +0 -44
  263. data/spec/mailers/order_mailer_spec.rb +0 -117
  264. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  265. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  266. data/spec/mailers/test_mailer_spec.rb +0 -13
  267. data/spec/models/spree/ability_spec.rb +0 -279
  268. data/spec/models/spree/address_spec.rb +0 -399
  269. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  270. data/spec/models/spree/adjustment_spec.rb +0 -339
  271. data/spec/models/spree/asset_spec.rb +0 -25
  272. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  273. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  274. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  275. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  276. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  277. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  278. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  279. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  280. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  281. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  282. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  283. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  284. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  285. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  286. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
  287. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  288. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  289. data/spec/models/spree/calculator_spec.rb +0 -43
  290. data/spec/models/spree/carton_spec.rb +0 -145
  291. data/spec/models/spree/classification_spec.rb +0 -126
  292. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  293. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  294. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  295. data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
  296. data/spec/models/spree/country_spec.rb +0 -154
  297. data/spec/models/spree/credit_card_spec.rb +0 -373
  298. data/spec/models/spree/customer_return_spec.rb +0 -294
  299. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  300. data/spec/models/spree/exchange_spec.rb +0 -76
  301. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  302. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  303. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  304. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  305. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  306. data/spec/models/spree/gateway_spec.rb +0 -14
  307. data/spec/models/spree/image_spec.rb +0 -25
  308. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  309. data/spec/models/spree/line_item_spec.rb +0 -240
  310. data/spec/models/spree/option_type_spec.rb +0 -16
  311. data/spec/models/spree/option_value_spec.rb +0 -52
  312. data/spec/models/spree/order/address_spec.rb +0 -52
  313. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  314. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  315. data/spec/models/spree/order/checkout_spec.rb +0 -740
  316. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  317. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  318. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  319. data/spec/models/spree/order/payment_spec.rb +0 -280
  320. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  321. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  322. data/spec/models/spree/order/totals_spec.rb +0 -26
  323. data/spec/models/spree/order/validations_spec.rb +0 -17
  324. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  325. data/spec/models/spree/order_capturing_spec.rb +0 -16
  326. data/spec/models/spree/order_contents_spec.rb +0 -362
  327. data/spec/models/spree/order_inventory_spec.rb +0 -285
  328. data/spec/models/spree/order_merger_spec.rb +0 -162
  329. data/spec/models/spree/order_mutex_spec.rb +0 -89
  330. data/spec/models/spree/order_promotion_spec.rb +0 -33
  331. data/spec/models/spree/order_shipping_spec.rb +0 -247
  332. data/spec/models/spree/order_spec.rb +0 -1687
  333. data/spec/models/spree/order_taxation_spec.rb +0 -128
  334. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  335. data/spec/models/spree/order_updater_spec.rb +0 -556
  336. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  337. data/spec/models/spree/payment_create_spec.rb +0 -195
  338. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  339. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  340. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  341. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  342. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  343. data/spec/models/spree/payment_method_spec.rb +0 -408
  344. data/spec/models/spree/payment_spec.rb +0 -1270
  345. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  346. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  347. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  348. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  349. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  350. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  351. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  352. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  353. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  354. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  355. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  356. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  357. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  358. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  359. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  360. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
  361. data/spec/models/spree/preference_spec.rb +0 -79
  362. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  363. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  364. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  365. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  366. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  367. data/spec/models/spree/preferences/store_spec.rb +0 -40
  368. data/spec/models/spree/price_spec.rb +0 -150
  369. data/spec/models/spree/product/scopes_spec.rb +0 -164
  370. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  371. data/spec/models/spree/product_filter_spec.rb +0 -28
  372. data/spec/models/spree/product_property_spec.rb +0 -20
  373. data/spec/models/spree/product_spec.rb +0 -584
  374. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  375. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  376. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  377. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  378. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  379. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  380. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  381. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  382. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  383. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  384. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  385. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  386. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -227
  387. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  388. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  389. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  390. data/spec/models/spree/promotion_action_spec.rb +0 -44
  391. data/spec/models/spree/promotion_category_spec.rb +0 -19
  392. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  393. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  394. data/spec/models/spree/promotion_code_spec.rb +0 -206
  395. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  396. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  397. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  398. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  399. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  400. data/spec/models/spree/promotion_spec.rb +0 -945
  401. data/spec/models/spree/refund_spec.rb +0 -200
  402. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  403. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  404. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  405. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  406. data/spec/models/spree/reimbursement_spec.rb +0 -278
  407. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  408. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  409. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  410. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  411. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  412. data/spec/models/spree/return_authorization_spec.rb +0 -226
  413. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  414. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  415. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  416. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  417. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  418. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  419. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  420. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  421. data/spec/models/spree/return_item_spec.rb +0 -785
  422. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  423. data/spec/models/spree/shipment_spec.rb +0 -914
  424. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  425. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  426. data/spec/models/spree/shipping_method_spec.rb +0 -292
  427. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  428. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  429. data/spec/models/spree/state_spec.rb +0 -43
  430. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  431. data/spec/models/spree/stock/availability_spec.rb +0 -143
  432. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  433. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  434. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  435. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  436. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  437. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  438. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  439. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  440. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  441. data/spec/models/spree/stock/package_spec.rb +0 -182
  442. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  443. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  444. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  445. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  446. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  447. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  448. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  449. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  450. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  451. data/spec/models/spree/stock_item_spec.rb +0 -348
  452. data/spec/models/spree/stock_location_spec.rb +0 -288
  453. data/spec/models/spree/stock_movement_spec.rb +0 -58
  454. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  455. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  456. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  457. data/spec/models/spree/store_credit_spec.rb +0 -900
  458. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  459. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  460. data/spec/models/spree/store_spec.rb +0 -156
  461. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  462. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  463. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  464. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  465. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  466. data/spec/models/spree/tax_category_spec.rb +0 -50
  467. data/spec/models/spree/tax_rate_spec.rb +0 -317
  468. data/spec/models/spree/taxon_spec.rb +0 -197
  469. data/spec/models/spree/taxonomy_spec.rb +0 -15
  470. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
  471. data/spec/models/spree/unit_cancel_spec.rb +0 -126
  472. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
  473. data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
  474. data/spec/models/spree/user_spec.rb +0 -247
  475. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  476. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  477. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  478. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  479. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  480. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  481. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  482. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  483. data/spec/models/spree/variant_spec.rb +0 -862
  484. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  485. data/spec/models/spree/wallet_spec.rb +0 -155
  486. data/spec/models/spree/zone_spec.rb +0 -248
  487. data/spec/rails_helper.rb +0 -46
  488. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  489. data/spec/spec_helper.rb +0 -36
  490. data/spec/support/big_decimal.rb +0 -7
  491. data/spec/support/concerns/default_price.rb +0 -44
  492. data/spec/support/concerns/payment_source.rb +0 -66
  493. data/spec/support/concerns/working_factories.rb +0 -15
  494. 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