solidus_core 2.10.0 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (495) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree.js.erb +31 -2
  3. data/app/controllers/spree/base_controller.rb +1 -0
  4. data/app/mailers/spree/base_mailer.rb +4 -0
  5. data/app/mailers/spree/order_mailer.rb +1 -1
  6. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +69 -0
  7. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
  8. data/app/models/concerns/spree/active_storage_adapter.rb +116 -0
  9. data/app/models/concerns/spree/default_price.rb +1 -1
  10. data/app/models/concerns/spree/soft_deletable.rb +18 -0
  11. data/app/models/concerns/spree/user_address_book.rb +86 -32
  12. data/app/models/concerns/spree/user_methods.rb +3 -2
  13. data/app/models/spree/ability.rb +34 -10
  14. data/app/models/spree/address/name.rb +49 -0
  15. data/app/models/spree/address/state_validator.rb +71 -0
  16. data/app/models/spree/address.rb +94 -17
  17. data/app/models/spree/adjustment.rb +1 -1
  18. data/app/models/spree/base.rb +1 -0
  19. data/app/models/spree/calculator/default_tax.rb +1 -1
  20. data/app/models/spree/calculator/percent_per_item.rb +4 -4
  21. data/app/models/spree/calculator/price_sack.rb +1 -1
  22. data/app/models/spree/credit_card.rb +2 -2
  23. data/app/models/spree/customer_return.rb +4 -2
  24. data/app/models/spree/exchange.rb +1 -1
  25. data/app/models/spree/image/active_storage_attachment.rb +21 -0
  26. data/app/models/spree/inventory_unit.rb +1 -1
  27. data/app/models/spree/line_item.rb +13 -4
  28. data/app/models/spree/option_type.rb +1 -1
  29. data/app/models/spree/option_value.rb +2 -2
  30. data/app/models/spree/order/checkout.rb +1 -0
  31. data/app/models/spree/order.rb +91 -20
  32. data/app/models/spree/order_inventory.rb +16 -4
  33. data/app/models/spree/order_merger.rb +6 -4
  34. data/app/models/spree/order_promotion.rb +1 -1
  35. data/app/models/spree/order_updater.rb +11 -10
  36. data/app/models/spree/payment/cancellation.rb +3 -3
  37. data/app/models/spree/payment/processing.rb +54 -30
  38. data/app/models/spree/payment.rb +3 -3
  39. data/app/models/spree/payment_method.rb +8 -9
  40. data/app/models/spree/preference.rb +1 -1
  41. data/app/models/spree/price.rb +2 -8
  42. data/app/models/spree/product/scopes.rb +10 -5
  43. data/app/models/spree/product.rb +19 -14
  44. data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
  45. data/app/models/spree/promotion.rb +18 -7
  46. data/app/models/spree/promotion_action.rb +1 -7
  47. data/app/models/spree/promotion_code.rb +6 -1
  48. data/app/models/spree/promotion_code_batch.rb +1 -1
  49. data/app/models/spree/promotion_handler/coupon.rb +2 -2
  50. data/app/models/spree/promotion_rule.rb +1 -1
  51. data/app/models/spree/promotion_rule_role.rb +1 -1
  52. data/app/models/spree/refund.rb +54 -12
  53. data/app/models/spree/reimbursement.rb +27 -0
  54. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +10 -3
  55. data/app/models/spree/return_authorization.rb +1 -1
  56. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
  57. data/app/models/spree/return_item.rb +21 -10
  58. data/app/models/spree/role.rb +1 -1
  59. data/app/models/spree/shipment.rb +2 -2
  60. data/app/models/spree/shipping_calculator.rb +1 -1
  61. data/app/models/spree/shipping_manifest.rb +2 -2
  62. data/app/models/spree/shipping_method.rb +2 -9
  63. data/app/models/spree/shipping_rate.rb +1 -1
  64. data/app/models/spree/shipping_rate_tax.rb +1 -1
  65. data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
  66. data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
  67. data/app/models/spree/stock/package.rb +1 -1
  68. data/app/models/spree/stock/simple_coordinator.rb +1 -3
  69. data/app/models/spree/stock_item.rb +2 -8
  70. data/app/models/spree/stock_movement.rb +2 -0
  71. data/app/models/spree/store.rb +1 -1
  72. data/app/models/spree/store_credit.rb +1 -7
  73. data/app/models/spree/store_credit_category.rb +30 -3
  74. data/app/models/spree/store_credit_event.rb +1 -7
  75. data/app/models/spree/store_credit_reason.rb +0 -4
  76. data/app/models/spree/tax/tax_helpers.rb +1 -1
  77. data/app/models/spree/tax_category.rb +2 -8
  78. data/app/models/spree/tax_rate.rb +7 -7
  79. data/app/models/spree/taxon/active_storage_attachment.rb +19 -0
  80. data/app/models/spree/taxon.rb +1 -1
  81. data/app/models/spree/user_address.rb +8 -2
  82. data/app/models/spree/variant.rb +7 -13
  83. data/app/models/spree/variant_property_rule.rb +5 -1
  84. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +8 -3
  85. data/app/models/spree/zone.rb +1 -1
  86. data/config/locales/en.yml +44 -5
  87. data/db/default/spree/countries.rb +1 -1
  88. data/db/default/spree/states.rb +12 -4
  89. data/db/default/spree/store_credit.rb +2 -2
  90. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
  91. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
  92. data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
  93. data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
  94. data/lib/generators/solidus/install/install_generator.rb +253 -0
  95. data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +36 -5
  96. data/lib/generators/spree/install/install_generator.rb +7 -189
  97. data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
  98. data/lib/spree/app_configuration.rb +117 -51
  99. data/lib/spree/awesome_nested_set_override.rb +44 -0
  100. data/lib/spree/core/controller_helpers/auth.rb +17 -4
  101. data/lib/spree/core/controller_helpers/current_host.rb +17 -0
  102. data/lib/spree/core/controller_helpers/order.rb +8 -7
  103. data/lib/spree/core/controller_helpers/strong_parameters.rb +21 -7
  104. data/lib/spree/core/engine.rb +39 -2
  105. data/lib/spree/core/importer/order.rb +26 -11
  106. data/lib/spree/core/permalinks.rb +1 -3
  107. data/lib/spree/core/product_filters.rb +6 -5
  108. data/lib/spree/core/state_machines/order.rb +249 -0
  109. data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
  110. data/lib/spree/core/state_machines.rb +20 -1
  111. data/lib/spree/core/version.rb +1 -1
  112. data/lib/spree/core.rb +5 -11
  113. data/lib/spree/encryptor.rb +25 -0
  114. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  115. data/lib/spree/event/configuration.rb +11 -6
  116. data/lib/spree/event/subscriber.rb +38 -18
  117. data/lib/spree/event/subscriber_registry.rb +92 -0
  118. data/lib/spree/event.rb +40 -7
  119. data/lib/spree/i18n.rb +1 -1
  120. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  121. data/lib/spree/paranoia_deprecations.rb +32 -12
  122. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  123. data/lib/spree/permission_sets/default_customer.rb +16 -16
  124. data/lib/spree/permission_sets/order_display.rb +11 -11
  125. data/lib/spree/permission_sets/order_management.rb +1 -1
  126. data/lib/spree/permission_sets/product_display.rb +9 -9
  127. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  128. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  129. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  130. data/lib/spree/permission_sets/stock_display.rb +2 -2
  131. data/lib/spree/permission_sets/stock_management.rb +1 -1
  132. data/lib/spree/permission_sets/user_display.rb +3 -3
  133. data/lib/spree/permission_sets/user_management.rb +4 -3
  134. data/lib/spree/permitted_attributes.rb +79 -9
  135. data/lib/spree/preferences/preferable.rb +4 -3
  136. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  137. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  138. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  139. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  140. data/lib/spree/testing_support/capybara_ext.rb +3 -0
  141. data/lib/spree/testing_support/common_rake.rb +3 -3
  142. data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
  143. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
  144. data/lib/spree/testing_support/dummy_app.rb +44 -23
  145. data/lib/spree/testing_support/factories/address_factory.rb +1 -2
  146. data/lib/spree/testing_support/factories/image_factory.rb +1 -1
  147. data/lib/spree/testing_support/factories/promotion_factory.rb +6 -0
  148. data/lib/spree/testing_support/factories/refund_factory.rb +1 -0
  149. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  150. data/lib/spree/testing_support/factories/return_item_factory.rb +0 -1
  151. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +8 -0
  152. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -0
  153. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +3 -1
  154. data/lib/spree/testing_support/factories/taxon_factory.rb +4 -0
  155. data/lib/spree/testing_support/factories/user_factory.rb +4 -1
  156. data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
  157. data/lib/spree/testing_support/job_helpers.rb +24 -0
  158. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  159. data/lib/spree/testing_support/preferences.rb +3 -1
  160. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  161. data/lib/spree/testing_support/translations.rb +25 -0
  162. data/solidus_core.gemspec +8 -5
  163. metadata +81 -359
  164. data/script/rails +0 -10
  165. data/spec/fixtures/thinking-cat.jpg +0 -0
  166. data/spec/helpers/base_helper_spec.rb +0 -168
  167. data/spec/helpers/products_helper_spec.rb +0 -202
  168. data/spec/helpers/taxons_helper_spec.rb +0 -43
  169. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  170. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  171. data/spec/lib/i18n_spec.rb +0 -97
  172. data/spec/lib/search/base_spec.rb +0 -91
  173. data/spec/lib/search/variant_spec.rb +0 -115
  174. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  175. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  176. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  177. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  178. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  179. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  180. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  181. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  182. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -41
  183. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  184. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  185. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  186. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  187. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
  188. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  189. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  190. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  191. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  192. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  193. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  194. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  195. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  196. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  197. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  198. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  199. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  200. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  201. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  202. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  203. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  204. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  205. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  206. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  207. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  208. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  209. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  210. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  211. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  212. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  213. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  214. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  215. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  216. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  217. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  218. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  219. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  220. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  221. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  222. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  223. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  224. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  225. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  226. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  227. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  228. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  229. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  230. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  231. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  232. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  233. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  234. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  235. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  236. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  237. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  238. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  239. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  240. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  241. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  242. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  243. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  244. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  245. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  246. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  247. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  248. data/spec/lib/spree/core/version_spec.rb +0 -19
  249. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  250. data/spec/lib/spree/event_spec.rb +0 -130
  251. data/spec/lib/spree/localized_number_spec.rb +0 -45
  252. data/spec/lib/spree/migrations_spec.rb +0 -32
  253. data/spec/lib/spree/money_spec.rb +0 -298
  254. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  255. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  256. data/spec/lib/tasks/dummy_task.rake +0 -12
  257. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  258. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  259. data/spec/mailers/carton_mailer_spec.rb +0 -44
  260. data/spec/mailers/order_mailer_spec.rb +0 -117
  261. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  262. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  263. data/spec/mailers/test_mailer_spec.rb +0 -13
  264. data/spec/models/spree/ability_spec.rb +0 -279
  265. data/spec/models/spree/address_spec.rb +0 -399
  266. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  267. data/spec/models/spree/adjustment_spec.rb +0 -339
  268. data/spec/models/spree/asset_spec.rb +0 -25
  269. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  270. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  271. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  272. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  273. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  274. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  275. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  276. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  277. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  278. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  279. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  280. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  281. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  282. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  283. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
  284. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  285. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  286. data/spec/models/spree/calculator_spec.rb +0 -43
  287. data/spec/models/spree/carton_spec.rb +0 -145
  288. data/spec/models/spree/classification_spec.rb +0 -126
  289. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  290. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  291. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  292. data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
  293. data/spec/models/spree/country_spec.rb +0 -154
  294. data/spec/models/spree/credit_card_spec.rb +0 -373
  295. data/spec/models/spree/customer_return_spec.rb +0 -294
  296. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  297. data/spec/models/spree/exchange_spec.rb +0 -76
  298. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  299. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  300. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  301. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  302. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  303. data/spec/models/spree/gateway_spec.rb +0 -14
  304. data/spec/models/spree/image_spec.rb +0 -25
  305. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  306. data/spec/models/spree/line_item_spec.rb +0 -240
  307. data/spec/models/spree/option_type_spec.rb +0 -16
  308. data/spec/models/spree/option_value_spec.rb +0 -52
  309. data/spec/models/spree/order/address_spec.rb +0 -52
  310. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  311. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  312. data/spec/models/spree/order/checkout_spec.rb +0 -740
  313. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  314. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  315. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  316. data/spec/models/spree/order/payment_spec.rb +0 -280
  317. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  318. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  319. data/spec/models/spree/order/totals_spec.rb +0 -26
  320. data/spec/models/spree/order/validations_spec.rb +0 -17
  321. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  322. data/spec/models/spree/order_capturing_spec.rb +0 -16
  323. data/spec/models/spree/order_contents_spec.rb +0 -362
  324. data/spec/models/spree/order_inventory_spec.rb +0 -285
  325. data/spec/models/spree/order_merger_spec.rb +0 -162
  326. data/spec/models/spree/order_mutex_spec.rb +0 -89
  327. data/spec/models/spree/order_promotion_spec.rb +0 -33
  328. data/spec/models/spree/order_shipping_spec.rb +0 -247
  329. data/spec/models/spree/order_spec.rb +0 -1687
  330. data/spec/models/spree/order_taxation_spec.rb +0 -128
  331. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  332. data/spec/models/spree/order_updater_spec.rb +0 -556
  333. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  334. data/spec/models/spree/payment_create_spec.rb +0 -195
  335. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  336. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  337. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  338. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  339. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  340. data/spec/models/spree/payment_method_spec.rb +0 -408
  341. data/spec/models/spree/payment_spec.rb +0 -1270
  342. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  343. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  344. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  345. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  346. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  347. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  348. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  349. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  350. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  351. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  352. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  353. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  354. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  355. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  356. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  357. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
  358. data/spec/models/spree/preference_spec.rb +0 -79
  359. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  360. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  361. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  362. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  363. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  364. data/spec/models/spree/preferences/store_spec.rb +0 -40
  365. data/spec/models/spree/price_spec.rb +0 -150
  366. data/spec/models/spree/product/scopes_spec.rb +0 -164
  367. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  368. data/spec/models/spree/product_filter_spec.rb +0 -28
  369. data/spec/models/spree/product_property_spec.rb +0 -20
  370. data/spec/models/spree/product_spec.rb +0 -584
  371. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  372. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  373. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  374. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  375. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  376. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  377. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  378. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  379. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  380. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  381. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  382. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  383. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -226
  384. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  385. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  386. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  387. data/spec/models/spree/promotion_action_spec.rb +0 -44
  388. data/spec/models/spree/promotion_category_spec.rb +0 -19
  389. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  390. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  391. data/spec/models/spree/promotion_code_spec.rb +0 -206
  392. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  393. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  394. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  395. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  396. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  397. data/spec/models/spree/promotion_spec.rb +0 -945
  398. data/spec/models/spree/refund_spec.rb +0 -200
  399. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  400. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  401. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  402. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  403. data/spec/models/spree/reimbursement_spec.rb +0 -278
  404. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  405. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  406. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  407. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  408. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  409. data/spec/models/spree/return_authorization_spec.rb +0 -226
  410. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  411. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  412. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  413. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  414. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  415. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  416. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  417. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  418. data/spec/models/spree/return_item_spec.rb +0 -785
  419. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  420. data/spec/models/spree/shipment_spec.rb +0 -914
  421. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  422. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  423. data/spec/models/spree/shipping_method_spec.rb +0 -292
  424. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  425. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  426. data/spec/models/spree/state_spec.rb +0 -43
  427. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  428. data/spec/models/spree/stock/availability_spec.rb +0 -143
  429. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  430. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  431. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  432. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  433. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  434. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  435. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  436. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  437. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  438. data/spec/models/spree/stock/package_spec.rb +0 -182
  439. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  440. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  441. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  442. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  443. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  444. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  445. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  446. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  447. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  448. data/spec/models/spree/stock_item_spec.rb +0 -348
  449. data/spec/models/spree/stock_location_spec.rb +0 -288
  450. data/spec/models/spree/stock_movement_spec.rb +0 -58
  451. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  452. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  453. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  454. data/spec/models/spree/store_credit_spec.rb +0 -900
  455. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  456. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  457. data/spec/models/spree/store_spec.rb +0 -156
  458. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  459. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  460. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  461. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  462. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  463. data/spec/models/spree/tax_category_spec.rb +0 -50
  464. data/spec/models/spree/tax_rate_spec.rb +0 -317
  465. data/spec/models/spree/taxon_spec.rb +0 -197
  466. data/spec/models/spree/taxonomy_spec.rb +0 -15
  467. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
  468. data/spec/models/spree/unit_cancel_spec.rb +0 -126
  469. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
  470. data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
  471. data/spec/models/spree/user_spec.rb +0 -247
  472. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  473. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  474. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  475. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  476. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  477. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  478. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  479. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  480. data/spec/models/spree/variant_spec.rb +0 -862
  481. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  482. data/spec/models/spree/wallet_spec.rb +0 -155
  483. data/spec/models/spree/zone_spec.rb +0 -248
  484. data/spec/rails_helper.rb +0 -46
  485. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  486. data/spec/spec_helper.rb +0 -36
  487. data/spec/support/big_decimal.rb +0 -7
  488. data/spec/support/concerns/default_price.rb +0 -44
  489. data/spec/support/concerns/payment_source.rb +0 -66
  490. data/spec/support/concerns/working_factories.rb +0 -15
  491. data/spec/support/dummy_ability.rb +0 -7
  492. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
  493. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
  494. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
  495. /data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
@@ -1,348 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::StockItem, type: :model do
6
- let(:stock_location) { create(:stock_location_with_items) }
7
-
8
- subject { stock_location.stock_items.order(:id).first }
9
-
10
- it 'maintains the count on hand for a variant' do
11
- expect(subject.count_on_hand).to eq 10
12
- end
13
-
14
- it "can return the stock item's variant's name" do
15
- expect(subject.variant_name).to eq(subject.variant.name)
16
- end
17
-
18
- context "available to be included in shipment" do
19
- context "has stock" do
20
- it { expect(subject).to be_available }
21
- end
22
-
23
- context "backorderable" do
24
- before { subject.backorderable = true }
25
- it { expect(subject).to be_available }
26
- end
27
-
28
- context "no stock and not backorderable" do
29
- before do
30
- subject.backorderable = false
31
- allow(subject).to receive_messages(count_on_hand: 0)
32
- end
33
-
34
- it { expect(subject).not_to be_available }
35
- end
36
- end
37
-
38
- describe 'reduce_count_on_hand_to_zero' do
39
- context 'when count_on_hand > 0' do
40
- before(:each) do
41
- subject.update_column('count_on_hand', 4)
42
- subject.reduce_count_on_hand_to_zero
43
- end
44
-
45
- it { expect(subject.count_on_hand).to eq(0) }
46
- end
47
-
48
- context 'when count_on_hand > 0' do
49
- before(:each) do
50
- subject.update_column('count_on_hand', -4)
51
- @count_on_hand = subject.count_on_hand
52
- subject.reduce_count_on_hand_to_zero
53
- end
54
-
55
- it { expect(subject.count_on_hand).to eq(@count_on_hand) }
56
- end
57
- end
58
-
59
- context "adjust count_on_hand" do
60
- let!(:current_on_hand) { subject.count_on_hand }
61
-
62
- it 'is updated pessimistically' do
63
- copy = Spree::StockItem.find(subject.id)
64
-
65
- subject.adjust_count_on_hand(5)
66
- expect(subject.count_on_hand).to eq(current_on_hand + 5)
67
-
68
- expect(copy.count_on_hand).to eq(current_on_hand)
69
- copy.adjust_count_on_hand(5)
70
- expect(copy.count_on_hand).to eq(current_on_hand + 10)
71
- end
72
-
73
- context "item out of stock (by two items)" do
74
- let(:inventory_unit) { double('InventoryUnit') }
75
- let(:inventory_unit_2) { double('InventoryUnit2') }
76
-
77
- before do
78
- allow(subject).to receive_messages(backordered_inventory_units: [inventory_unit, inventory_unit_2])
79
- subject.update_column(:count_on_hand, -2)
80
- end
81
-
82
- # Regression test for https://github.com/spree/spree/issues/3755
83
- it "processes existing backorders, even with negative stock" do
84
- expect(inventory_unit).to receive(:fill_backorder)
85
- expect(inventory_unit_2).not_to receive(:fill_backorder)
86
- subject.adjust_count_on_hand(1)
87
- expect(subject.count_on_hand).to eq(-1)
88
- end
89
-
90
- # Test for https://github.com/spree/spree/issues/3755
91
- it "does not process backorders when stock is adjusted negatively" do
92
- expect(inventory_unit).not_to receive(:fill_backorder)
93
- expect(inventory_unit_2).not_to receive(:fill_backorder)
94
- subject.adjust_count_on_hand(-1)
95
- expect(subject.count_on_hand).to eq(-3)
96
- end
97
-
98
- context "adds new items" do
99
- before { allow(subject).to receive_messages(backordered_inventory_units: [inventory_unit, inventory_unit_2]) }
100
-
101
- it "fills existing backorders" do
102
- expect(inventory_unit).to receive(:fill_backorder)
103
- expect(inventory_unit_2).to receive(:fill_backorder)
104
-
105
- subject.adjust_count_on_hand(3)
106
- expect(subject.count_on_hand).to eq(1)
107
- end
108
- end
109
- end
110
- end
111
-
112
- context "set count_on_hand" do
113
- let!(:current_on_hand) { subject.count_on_hand }
114
-
115
- it 'is updated pessimistically' do
116
- copy = Spree::StockItem.find(subject.id)
117
-
118
- subject.set_count_on_hand(5)
119
- expect(subject.count_on_hand).to eq(5)
120
-
121
- expect(copy.count_on_hand).to eq(current_on_hand)
122
- copy.set_count_on_hand(10)
123
- expect(copy.count_on_hand).to eq(current_on_hand)
124
- end
125
-
126
- context "item out of stock (by two items)" do
127
- let(:inventory_unit) { double('InventoryUnit') }
128
- let(:inventory_unit_2) { double('InventoryUnit2') }
129
-
130
- before { subject.set_count_on_hand(-2) }
131
-
132
- it "doesn't process backorders" do
133
- expect(subject).not_to receive(:backordered_inventory_units)
134
- end
135
-
136
- context "adds new items" do
137
- before { allow(subject).to receive_messages(backordered_inventory_units: [inventory_unit, inventory_unit_2]) }
138
-
139
- it "fills existing backorders" do
140
- expect(inventory_unit).to receive(:fill_backorder)
141
- expect(inventory_unit_2).to receive(:fill_backorder)
142
-
143
- subject.set_count_on_hand(1)
144
- expect(subject.count_on_hand).to eq(1)
145
- end
146
- end
147
- end
148
- end
149
-
150
- context "with stock movements" do
151
- before { Spree::StockMovement.create(stock_item: subject, quantity: 1) }
152
-
153
- it "doesnt raise ReadOnlyRecord error" do
154
- subject.discard
155
- end
156
- end
157
-
158
- context "destroyed" do
159
- before { subject.discard }
160
-
161
- it "recreates stock item just fine" do
162
- stock_location.stock_items.create!(variant: subject.variant)
163
- end
164
-
165
- it "doesnt allow recreating more than one stock item at once" do
166
- stock_location.stock_items.create!(variant: subject.variant)
167
-
168
- expect {
169
- stock_location.stock_items.create!(variant: subject.variant)
170
- }.to raise_error ActiveRecord::RecordInvalid
171
- end
172
- end
173
-
174
- describe "#after_save" do
175
- before do
176
- subject.variant.update_column(:updated_at, 1.day.ago)
177
- end
178
-
179
- context "inventory_cache_threshold is not set (default)" do
180
- context "in_stock? changes" do
181
- it "touches its variant" do
182
- expect do
183
- subject.set_count_on_hand(0)
184
- end.to change { subject.variant.updated_at }
185
- end
186
- end
187
-
188
- context "in_stock? does not change" do
189
- it "touches its variant" do
190
- expect do
191
- subject.set_count_on_hand(-1)
192
- end.to change { subject.variant.updated_at }
193
- end
194
- end
195
- end
196
-
197
- context "inventory_cache_threshold is set" do
198
- before do
199
- stub_spree_preferences(inventory_cache_threshold: inventory_cache_threshold)
200
- end
201
-
202
- let(:inventory_cache_threshold) { 5 }
203
-
204
- before do
205
- subject.set_count_on_hand(existing_count_on_hand)
206
- subject.variant.update_column(:updated_at, 1.day.ago)
207
- end
208
-
209
- context "beginning above threshold" do
210
- let(:existing_count_on_hand) { 10 }
211
-
212
- it "count on hand falls below threshold" do
213
- expect do
214
- subject.set_count_on_hand(3)
215
- end.to change { subject.variant.updated_at }
216
- end
217
-
218
- it "count on hand stays above threshold" do
219
- expect do
220
- subject.set_count_on_hand(8)
221
- end.not_to change { subject.variant.updated_at }
222
- end
223
- end
224
-
225
- context "beginning below threshold" do
226
- let(:existing_count_on_hand) { 2 }
227
-
228
- it "count on hand rises above threshold" do
229
- expect do
230
- subject.set_count_on_hand(7)
231
- end.to change { subject.variant.updated_at }
232
- end
233
-
234
- it "count on hand stays below threshold" do
235
- expect do
236
- subject.set_count_on_hand(3)
237
- end.to change { subject.variant.updated_at }
238
- end
239
- end
240
- end
241
-
242
- context "when deprecated binary_inventory_cache is used" do
243
- before do
244
- stub_spree_preferences(binary_inventory_cache: binary_inventory_cache)
245
- allow(Spree::Deprecation).to receive(:warn)
246
- subject.set_count_on_hand(9)
247
- end
248
-
249
- context "binary_inventory_cache is set to true" do
250
- let(:binary_inventory_cache) { true }
251
-
252
- it "logs a deprecation warning" do
253
- expect(Spree::Deprecation).to have_received(:warn)
254
- end
255
- end
256
-
257
- context "binary_inventory_cache is set to false" do
258
- let(:binary_inventory_cache) { false }
259
-
260
- it "inventory_cache_threshold remains nil" do
261
- expect(Spree::Config.inventory_cache_threshold).to be_nil
262
- end
263
-
264
- it "does not log a deprecation warning" do
265
- expect(Spree::Deprecation).not_to have_received(:warn)
266
- end
267
- end
268
- end
269
- end
270
-
271
- describe "#after_touch" do
272
- before { subject.variant.update_column(:updated_at, 1.day.ago) }
273
-
274
- it "touches its variant" do
275
- expect do
276
- subject.touch
277
- end.to change { subject.variant.updated_at }
278
- end
279
- end
280
-
281
- # Regression test for https://github.com/spree/spree/issues/4651
282
- context "variant" do
283
- it "can be found even if the variant is soft-deleted" do
284
- subject.variant.discard
285
- expect(subject.reload.variant).not_to be_nil
286
- end
287
- end
288
-
289
- describe 'validations' do
290
- before do
291
- subject.backorderable = backorderable
292
- subject.send(:count_on_hand=, count_on_hand)
293
- end
294
-
295
- describe 'count_on_hand' do
296
- shared_examples_for 'valid count_on_hand' do
297
- it 'has :no errors_on' do
298
- expect(subject).to be_valid
299
- expect(subject.errors[:count_on_hand].size).to eq(0)
300
- end
301
- end
302
-
303
- shared_examples_for 'invalid count_on_hand' do
304
- it 'has the correct error on count_on_hand' do
305
- expect(subject).not_to be_valid
306
- expect(subject.errors[:count_on_hand].size).to eq(1)
307
- expect(subject.errors[:count_on_hand]).to include('must be greater than or equal to 0')
308
- end
309
- end
310
-
311
- context 'when backorderable' do
312
- let(:backorderable) { true }
313
-
314
- context 'when count_on_hand is positive' do
315
- let(:count_on_hand) { 3 }
316
- it_should_behave_like "valid count_on_hand"
317
- end
318
-
319
- context 'when count_on_hand is negative' do
320
- let(:count_on_hand) { -3 }
321
-
322
- it_should_behave_like "valid count_on_hand"
323
-
324
- it "can't be changed to not backorderable" do
325
- expect(subject).to be_valid
326
- subject.backorderable = false
327
- expect(subject).not_to be_valid
328
- end
329
- end
330
- end
331
-
332
- context 'when not backorderable' do
333
- let(:backorderable) { false }
334
-
335
- context 'when count_on_hand is positive' do
336
- let(:count_on_hand) { 3 }
337
- it_should_behave_like "valid count_on_hand"
338
- end
339
-
340
- context 'when count_on_hand is negative' do
341
- let(:count_on_hand) { -3 }
342
-
343
- it_should_behave_like "invalid count_on_hand"
344
- end
345
- end
346
- end
347
- end
348
- end
@@ -1,288 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree
6
- RSpec.describe StockLocation, type: :model do
7
- subject { create(:stock_location_with_items, backorderable_default: true) }
8
- let(:stock_item) { subject.stock_items.order(:id).first }
9
- let(:variant) { stock_item.variant }
10
-
11
- it 'creates stock_items for all variants' do
12
- expect(subject.stock_items.count).to eq Variant.count
13
- end
14
-
15
- context "handling stock items" do
16
- let!(:variant) { create(:variant) }
17
-
18
- context "given a variant" do
19
- subject { StockLocation.create(name: "testing", propagate_all_variants: false) }
20
-
21
- context "set up" do
22
- it "creates stock item" do
23
- expect(subject).to receive(:propagate_variant)
24
- subject.set_up_stock_item(variant)
25
- end
26
-
27
- context "stock item exists" do
28
- let!(:stock_item) { subject.propagate_variant(variant) }
29
-
30
- it "returns existing stock item" do
31
- expect(subject.set_up_stock_item(variant)).to eq(stock_item)
32
- end
33
- end
34
- end
35
-
36
- context "propagate variants" do
37
- let(:stock_item) { subject.propagate_variant(variant) }
38
-
39
- it "creates a new stock item" do
40
- expect {
41
- subject.propagate_variant(variant)
42
- }.to change{ StockItem.count }.by(1)
43
- end
44
-
45
- context "passes backorderable default config" do
46
- context "true" do
47
- before { subject.backorderable_default = true }
48
- it { expect(stock_item.backorderable).to be true }
49
- end
50
-
51
- context "false" do
52
- before { subject.backorderable_default = false }
53
- it { expect(stock_item.backorderable).to be false }
54
- end
55
- end
56
- end
57
-
58
- context "propagate all variants" do
59
- subject { StockLocation.new(name: "testing") }
60
-
61
- context "true" do
62
- before { subject.propagate_all_variants = true }
63
-
64
- specify do
65
- expect(subject).to receive(:propagate_variant).at_least(:once)
66
- subject.save!
67
- end
68
- end
69
-
70
- context "false" do
71
- before { subject.propagate_all_variants = false }
72
-
73
- specify do
74
- expect(subject).not_to receive(:propagate_variant)
75
- subject.save!
76
- end
77
- end
78
- end
79
- end
80
- end
81
-
82
- it 'finds a stock_item for a variant' do
83
- stock_item = subject.stock_item(variant)
84
- expect(stock_item.count_on_hand).to eq 10
85
- end
86
-
87
- it 'finds a stock_item for a variant by id' do
88
- stock_item = subject.stock_item(variant.id)
89
- expect(stock_item.variant).to eq variant
90
- end
91
-
92
- it 'returns nil when stock_item is not found for variant' do
93
- stock_item = subject.stock_item(0)
94
- expect(stock_item).to be_nil
95
- end
96
-
97
- describe '#stock_item_or_create' do
98
- before do
99
- variant = create(:variant)
100
- variant.stock_items.each(&:really_destroy!)
101
- variant.save
102
- end
103
-
104
- it 'creates a stock_item if not found for a variant' do
105
- stock_item = subject.stock_item_or_create(variant)
106
- expect(stock_item.variant).to eq variant
107
- end
108
-
109
- it 'creates a stock_item if not found for a variant_id' do
110
- stock_item = subject.stock_item_or_create(variant.id)
111
- expect(stock_item.variant).to eq variant
112
- end
113
- end
114
-
115
- it 'finds a count_on_hand for a variant' do
116
- expect(subject.count_on_hand(variant)).to eq 10
117
- end
118
-
119
- it 'finds determines if you a variant is backorderable' do
120
- expect(subject.backorderable?(variant)).to be true
121
- end
122
-
123
- it 'restocks a variant with a positive stock movement' do
124
- originator = double
125
- expect(subject).to receive(:move).with(variant, 5, originator)
126
- subject.restock(variant, 5, originator)
127
- end
128
-
129
- it 'unstocks a variant with a negative stock movement' do
130
- originator = double
131
- expect(subject).to receive(:move).with(variant, -5, originator)
132
- subject.unstock(variant, 5, originator)
133
- end
134
-
135
- it 'it creates a stock_movement' do
136
- expect {
137
- subject.move variant, 5
138
- }.to change { subject.stock_movements.where(stock_item_id: stock_item).count }.by(1)
139
- end
140
-
141
- it 'can be deactivated' do
142
- create(:stock_location, active: true)
143
- create(:stock_location, active: false)
144
- expect(Spree::StockLocation.active.count).to eq 1
145
- end
146
-
147
- it 'ensures only one stock location is default at a time' do
148
- first = create(:stock_location, active: true, default: true)
149
- second = create(:stock_location, active: true, default: true)
150
-
151
- expect(first.reload.default).to eq false
152
- expect(second.reload.default).to eq true
153
-
154
- first.default = true
155
- first.save!
156
-
157
- expect(first.reload.default).to eq true
158
- expect(second.reload.default).to eq false
159
- end
160
-
161
- context 'fill_status' do
162
- it 'all on_hand with no backordered' do
163
- on_hand, backordered = subject.fill_status(variant, 5)
164
- expect(on_hand).to eq 5
165
- expect(backordered).to eq 0
166
- end
167
-
168
- it 'some on_hand with some backordered' do
169
- on_hand, backordered = subject.fill_status(variant, 20)
170
- expect(on_hand).to eq 10
171
- expect(backordered).to eq 10
172
- end
173
-
174
- it 'zero on_hand with all backordered' do
175
- stock_item.set_count_on_hand(0)
176
-
177
- on_hand, backordered = subject.fill_status(variant, 20)
178
- expect(on_hand).to eq 0
179
- expect(backordered).to eq 20
180
- end
181
-
182
- context 'when backordering is not allowed' do
183
- before do
184
- stock_item.update!(backorderable: false)
185
- end
186
-
187
- it 'all on_hand' do
188
- stock_item.set_count_on_hand(10)
189
-
190
- on_hand, backordered = subject.fill_status(variant, 5)
191
- expect(on_hand).to eq 5
192
- expect(backordered).to eq 0
193
- end
194
-
195
- it 'some on_hand' do
196
- stock_item.set_count_on_hand(10)
197
-
198
- on_hand, backordered = subject.fill_status(variant, 20)
199
- expect(on_hand).to eq 10
200
- expect(backordered).to eq 0
201
- end
202
-
203
- it 'zero on_hand' do
204
- stock_item.set_count_on_hand(0)
205
-
206
- on_hand, backordered = subject.fill_status(variant, 20)
207
- expect(on_hand).to eq 0
208
- expect(backordered).to eq 0
209
- end
210
- end
211
-
212
- context 'without stock_items' do
213
- subject { create(:stock_location) }
214
- let(:variant) { create(:base_variant) }
215
-
216
- it 'zero on_hand and backordered' do
217
- subject
218
- variant.stock_items.each(&:really_destroy!)
219
- on_hand, backordered = subject.fill_status(variant, 1)
220
- expect(on_hand).to eq 0
221
- expect(backordered).to eq 0
222
- end
223
- end
224
-
225
- context 'with soft-deleted stock_items' do
226
- subject { create(:stock_location) }
227
- let(:variant) { create(:base_variant) }
228
-
229
- it 'zero on_hand and backordered' do
230
- subject
231
- variant.stock_items.discard_all
232
- on_hand, backordered = subject.fill_status(variant, 1)
233
- expect(on_hand).to eq 0
234
- expect(backordered).to eq 0
235
- end
236
- end
237
- end
238
-
239
- context '#state_text' do
240
- context 'state is blank' do
241
- subject { StockLocation.create(name: "testing", state: nil, state_name: 'virginia') }
242
- specify { expect(subject.state_text).to eq('virginia') }
243
- end
244
-
245
- context 'both name and abbr is present' do
246
- let(:state) { stub_model(Spree::State, name: 'virginia', abbr: 'va') }
247
- subject { StockLocation.create(name: "testing", state: state, state_name: nil) }
248
- specify { expect(subject.state_text).to eq('va') }
249
- end
250
-
251
- context 'only name is present' do
252
- let(:state) { stub_model(Spree::State, name: 'virginia', abbr: nil) }
253
- subject { StockLocation.create(name: "testing", state: state, state_name: nil) }
254
- specify { expect(subject.state_text).to eq('virginia') }
255
- end
256
- end
257
-
258
- describe "#move" do
259
- let!(:variant) { create(:variant) }
260
- def move
261
- subject.move(variant, quantity)
262
- end
263
-
264
- context "no stock item exists" do
265
- before { subject.stock_items.each(&:really_destroy!) }
266
- context "positive movement" do
267
- let(:quantity) { 1 }
268
- it "creates a stock item" do
269
- expect { move }.to change { subject.stock_items.count }.by 1
270
- end
271
- end
272
-
273
- # We should not be creating stock items that do not exist
274
- # for the sake of a negative movement.
275
- context "negative movement" do
276
- let(:quantity) { -1 }
277
- it "raises an error" do
278
- expect {
279
- expect {
280
- move
281
- }.to raise_error StockLocation::InvalidMovementError
282
- }.not_to change { subject.stock_items.count }
283
- end
284
- end
285
- end
286
- end
287
- end
288
- end
@@ -1,58 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::StockMovement, type: :model do
6
- let(:stock_location) { create(:stock_location_with_items) }
7
- let(:stock_item) { stock_location.stock_items.order(:id).first }
8
- subject { build(:stock_movement, stock_item: stock_item) }
9
-
10
- it 'should belong to a stock item' do
11
- expect(subject).to respond_to(:stock_item)
12
- end
13
-
14
- it 'is readonly unless new' do
15
- subject.save
16
- expect {
17
- subject.save
18
- }.to raise_error(ActiveRecord::ReadOnlyRecord)
19
- end
20
-
21
- it 'does not update count on hand when track inventory levels is false' do
22
- stub_spree_preferences(track_inventory_levels: false)
23
- subject.quantity = 1
24
- subject.save
25
- stock_item.reload
26
- expect(stock_item.count_on_hand).to eq(10)
27
- end
28
-
29
- it 'does not update count on hand when variant inventory tracking is off' do
30
- stock_item.variant.track_inventory = false
31
- subject.quantity = 1
32
- subject.save
33
- stock_item.reload
34
- expect(stock_item.count_on_hand).to eq(10)
35
- end
36
-
37
- context "when quantity is negative" do
38
- context "after save" do
39
- it "should decrement the stock item count on hand" do
40
- subject.quantity = -1
41
- subject.save
42
- stock_item.reload
43
- expect(stock_item.count_on_hand).to eq(9)
44
- end
45
- end
46
- end
47
-
48
- context "when quantity is positive" do
49
- context "after save" do
50
- it "should increment the stock item count on hand" do
51
- subject.quantity = 1
52
- subject.save
53
- stock_item.reload
54
- expect(stock_item.count_on_hand).to eq(11)
55
- end
56
- end
57
- end
58
- end