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,113 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.shared_examples_for 'unlimited supply' do
6
- it 'can_supply? any amount' do
7
- expect(subject.can_supply?(1)).to eq true
8
- expect(subject.can_supply?(101)).to eq true
9
- expect(subject.can_supply?(100_001)).to eq true
10
- end
11
- end
12
-
13
- module Spree
14
- module Stock
15
- RSpec.describe Quantifier, type: :model do
16
- let(:target_stock_location) { nil }
17
- let!(:stock_location) { create :stock_location_with_items }
18
- let!(:stock_item) { stock_location.stock_items.order(:id).first }
19
-
20
- subject { described_class.new(stock_item.variant, target_stock_location) }
21
-
22
- specify { expect(subject.stock_items).to eq([stock_item]) }
23
-
24
- context 'with a single stock location/item' do
25
- it 'total_on_hand should match stock_item' do
26
- expect(subject.total_on_hand).to eq stock_item.count_on_hand
27
- end
28
-
29
- context 'when track_inventory_levels is false' do
30
- before { stub_spree_preferences(track_inventory_levels: false) }
31
-
32
- specify { expect(subject.total_on_hand).to eq(Float::INFINITY) }
33
-
34
- it_should_behave_like 'unlimited supply'
35
- end
36
-
37
- context 'when variant inventory tracking is off' do
38
- before { stock_item.variant.track_inventory = false }
39
-
40
- specify { expect(subject.total_on_hand).to eq(Float::INFINITY) }
41
-
42
- it_should_behave_like 'unlimited supply'
43
- end
44
-
45
- context 'when stock item allows backordering' do
46
- specify { expect(subject.backorderable?).to be true }
47
-
48
- it_should_behave_like 'unlimited supply'
49
- end
50
-
51
- context 'when stock item prevents backordering' do
52
- before { stock_item.update(backorderable: false) }
53
-
54
- specify { expect(subject.backorderable?).to be false }
55
-
56
- it 'can_supply? only upto total_on_hand' do
57
- expect(subject.can_supply?(1)).to be true
58
- expect(subject.can_supply?(10)).to be true
59
- expect(subject.can_supply?(11)).to be false
60
- end
61
- end
62
- end
63
-
64
- context 'with multiple stock locations/items' do
65
- let!(:stock_location_2) { create :stock_location }
66
- let!(:stock_location_3) { create :stock_location, active: false }
67
-
68
- before do
69
- stock_location_2.stock_items.where(variant_id: stock_item.variant).update_all(count_on_hand: 5, backorderable: false)
70
- stock_location_3.stock_items.where(variant_id: stock_item.variant).update_all(count_on_hand: 5, backorderable: false)
71
- end
72
-
73
- it 'total_on_hand should total all active stock_items' do
74
- expect(subject.total_on_hand).to eq(15)
75
- end
76
-
77
- context 'when any stock item allows backordering' do
78
- specify { expect(subject.backorderable?).to be true }
79
-
80
- it_should_behave_like 'unlimited supply'
81
- end
82
-
83
- context 'when all stock items prevent backordering' do
84
- before { stock_item.update(backorderable: false) }
85
-
86
- specify { expect(subject.backorderable?).to be false }
87
-
88
- it 'can_supply? upto total_on_hand' do
89
- expect(subject.can_supply?(1)).to be true
90
- expect(subject.can_supply?(15)).to be true
91
- expect(subject.can_supply?(16)).to be false
92
- end
93
- end
94
- end
95
-
96
- context 'with a specific stock location' do
97
- let!(:stock_location_2) { create :stock_location }
98
- let!(:stock_location_3) { create :stock_location, active: false }
99
- let(:target_stock_location) { stock_location_3 }
100
-
101
- before do
102
- Spree::StockItem.update_all(count_on_hand: 0, backorderable: false)
103
- stock_location_3.stock_items.where(variant_id: stock_item.variant).update_all(count_on_hand: 5, backorderable: false)
104
- end
105
-
106
- it 'can_supply? only upto total_on_hand' do
107
- expect(subject.can_supply?(5)).to eq true
108
- expect(subject.can_supply?(6)).to eq false
109
- end
110
- end
111
- end
112
- end
113
- end
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Stock::ShippingRateSelector do
6
- describe '#sort' do
7
- it 'sorts by increasing cost' do
8
- cheapest_shipping_rate = Spree::ShippingRate.new(cost: 1.00)
9
- middle_shipping_rate = Spree::ShippingRate.new(cost: 5.00)
10
- expensive_shipping_rate = Spree::ShippingRate.new(cost: 42.00)
11
- shipping_rates = [expensive_shipping_rate, middle_shipping_rate, cheapest_shipping_rate]
12
-
13
- sorter = Spree::Stock::ShippingRateSelector.new(shipping_rates)
14
-
15
- expect(sorter.find_default).to eq(cheapest_shipping_rate)
16
- end
17
- end
18
- end
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- RSpec.describe Spree::Stock::ShippingRateSorter do
6
- describe '#sort' do
7
- it 'sorts by increasing cost' do
8
- cheapest_shipping_rate = Spree::ShippingRate.new(cost: 1.00)
9
- middle_shipping_rate = Spree::ShippingRate.new(cost: 5.00)
10
- expensive_shipping_rate = Spree::ShippingRate.new(cost: 42.00)
11
- shipping_rates = [expensive_shipping_rate, middle_shipping_rate, cheapest_shipping_rate]
12
-
13
- sorter = Spree::Stock::ShippingRateSorter.new(shipping_rates)
14
-
15
- expect(sorter.sort).to eq([cheapest_shipping_rate, middle_shipping_rate, expensive_shipping_rate])
16
- end
17
- end
18
- end
@@ -1,264 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree
6
- module Stock
7
- RSpec.describe SimpleCoordinator, type: :model do
8
- let(:order) { create(:order_with_line_items, line_items_count: 2) }
9
-
10
- subject { SimpleCoordinator.new(order) }
11
-
12
- describe "#shipments" do
13
- it 'uses the pluggable estimator class' do
14
- expect(Spree::Config.stock).to receive(:estimator_class).and_call_original
15
- subject.shipments
16
- end
17
-
18
- it 'uses the configured stock location filter' do
19
- expect(Spree::Config.stock).to receive(:location_filter_class).and_call_original
20
- subject.shipments
21
- end
22
-
23
- it 'uses the configured stock location sorter' do
24
- expect(Spree::Config.stock).to receive(:location_sorter_class).and_call_original
25
- subject.shipments
26
- end
27
-
28
- it 'uses the pluggable allocator class' do
29
- expect(Spree::Config.stock).to receive(:allocator_class).and_call_original
30
- subject.shipments
31
- end
32
-
33
- it 'builds shipments' do
34
- expect(subject.shipments.size).to eq(1)
35
- end
36
-
37
- it "builds a shipment for all active stock locations" do
38
- subject.shipments.count == StockLocation.count
39
- end
40
-
41
- context "missing stock items in active stock location" do
42
- let!(:another_location) { create(:stock_location, propagate_all_variants: false) }
43
-
44
- it "builds shipments only for valid active stock locations" do
45
- expect(subject.shipments.count).to eq(StockLocation.count - 1)
46
- end
47
- end
48
-
49
- it "does not unintentionally add shipments to the order" do
50
- subject.shipments
51
- expect {
52
- order.recalculate
53
- }.not_to change {
54
- order.shipments.count
55
- }
56
- end
57
- end
58
-
59
- describe "#allocate_inventory" do
60
- it 'is deprecated' do
61
- expect(Spree::Deprecation).to receive(:warn)
62
- subject.send :allocate_inventory, subject.instance_variable_get(:@availability).on_hand_by_stock_location_id
63
- end
64
- end
65
-
66
- # regression spec
67
- context "when there is one unit that has stock in a stock location that a non-tracked unit has no stock item in" do
68
- let!(:stock_location_1) { create(:stock_location, propagate_all_variants: false, active: true) }
69
- let!(:stock_location_2) { create(:stock_location, propagate_all_variants: false, active: true) }
70
-
71
- let!(:variant_1) do
72
- create(:variant, track_inventory: true).tap do |variant|
73
- variant.stock_items.destroy_all
74
- stock_item = variant.stock_items.create!(stock_location: stock_location_1)
75
- stock_item.set_count_on_hand(10)
76
- end
77
- end
78
- let!(:variant_2) do
79
- create(:variant, track_inventory: false).tap do |variant|
80
- variant.stock_items.destroy_all
81
- stock_item = variant.stock_items.create!(stock_location: stock_location_2)
82
- stock_item.set_count_on_hand(0)
83
- end
84
- end
85
-
86
- let!(:order) { create(:order, line_items: [create(:line_item, variant: variant_1), create(:line_item, variant: variant_2)]) }
87
-
88
- it "splits the inventory units to stock locations that they have stock items for" do
89
- shipments = subject.shipments
90
-
91
- expect(shipments.size).to eq 2
92
-
93
- location_1_shipment = shipments.detect { |shipment| shipment.stock_location == stock_location_1 }
94
- location_2_shipment = shipments.detect { |shipment| shipment.stock_location == stock_location_2 }
95
-
96
- expect(location_1_shipment).to be_present
97
- expect(location_2_shipment).to be_present
98
-
99
- expect(location_1_shipment.inventory_units.map(&:variant)).to eq [variant_1]
100
- expect(location_2_shipment.inventory_units.map(&:variant)).to eq [variant_2]
101
- end
102
- end
103
-
104
- context "with no backordering" do
105
- let!(:stock_location_1) { create(:stock_location, propagate_all_variants: false, active: true) }
106
-
107
- let!(:variant) { create(:variant, track_inventory: true) }
108
-
109
- before do
110
- stock_item_one = variant.stock_items.create!(stock_location: stock_location_1, backorderable: false)
111
- stock_item_one.set_count_on_hand(location_1_inventory)
112
- end
113
-
114
- let!(:order) { create(:order) }
115
- let!(:line_item) { create(:line_item, order: order, variant: variant, quantity: 5) }
116
- before { order.reload }
117
- let(:shipments) { subject.shipments }
118
-
119
- shared_examples "a fulfillable package" do
120
- it "packages correctly" do
121
- expect(shipments).not_to be_empty
122
- inventory_units = shipments.flat_map { |shipment| shipment.inventory_units }
123
- expect(inventory_units.size).to eq(5)
124
- expect(inventory_units.uniq.size).to eq(5)
125
- end
126
- end
127
-
128
- shared_examples "an unfulfillable package" do
129
- it "raises exception" do
130
- expect{ shipments }.to raise_error(Spree::Order::InsufficientStock)
131
- end
132
- end
133
-
134
- context 'with no stock locations' do
135
- let(:location_1_inventory) { 0 }
136
- before { variant.stock_items.each(&:really_destroy!) }
137
- it_behaves_like "an unfulfillable package"
138
- end
139
-
140
- context 'with a single stock location' do
141
- context "with no inventory" do
142
- let(:location_1_inventory) { 0 }
143
- it_behaves_like "an unfulfillable package"
144
- end
145
-
146
- context "with insufficient inventory" do
147
- let(:location_1_inventory) { 1 }
148
- it_behaves_like "an unfulfillable package"
149
- end
150
-
151
- context "with sufficient inventory" do
152
- let(:location_1_inventory) { 5 }
153
- it_behaves_like "a fulfillable package"
154
- end
155
- end
156
-
157
- context 'with two stock locations' do
158
- let!(:stock_location_2) { create(:stock_location, propagate_all_variants: false, active: true) }
159
- before do
160
- stock_item_two = variant.stock_items.create!(stock_location: stock_location_2, backorderable: false)
161
- stock_item_two.set_count_on_hand(location_2_inventory)
162
- end
163
-
164
- context "with no inventory" do
165
- let(:location_1_inventory) { 0 }
166
- let(:location_2_inventory) { 0 }
167
- it_behaves_like "an unfulfillable package"
168
- end
169
-
170
- context "with some but insufficient inventory in each location" do
171
- let(:location_1_inventory) { 1 }
172
- let(:location_2_inventory) { 1 }
173
- it_behaves_like "an unfulfillable package"
174
- end
175
-
176
- context "has sufficient inventory in the first location" do
177
- let(:location_1_inventory) { 5 }
178
- let(:location_2_inventory) { 0 }
179
- it_behaves_like "a fulfillable package"
180
- end
181
-
182
- context "has sufficient inventory in the second location" do
183
- let(:location_1_inventory) { 0 }
184
- let(:location_2_inventory) { 5 }
185
- it_behaves_like "a fulfillable package"
186
- end
187
-
188
- context "with sufficient inventory only across both locations" do
189
- let(:location_1_inventory) { 2 }
190
- let(:location_2_inventory) { 3 }
191
- it_behaves_like "a fulfillable package"
192
- end
193
-
194
- context "has sufficient inventory in the second location and some in the first" do
195
- let(:location_1_inventory) { 2 }
196
- let(:location_2_inventory) { 5 }
197
- it_behaves_like "a fulfillable package"
198
- end
199
-
200
- context "has sufficient inventory in the first location and some in the second" do
201
- let(:location_1_inventory) { 5 }
202
- let(:location_2_inventory) { 2 }
203
- it_behaves_like "a fulfillable package"
204
- end
205
-
206
- context "with sufficient inventory in both locations" do
207
- let(:location_1_inventory) { 5 }
208
- let(:location_2_inventory) { 5 }
209
- it_behaves_like "a fulfillable package"
210
- end
211
- end
212
-
213
- context 'with three stock locations' do
214
- let!(:stock_location_2) { create(:stock_location, propagate_all_variants: false, active: true) }
215
- let!(:stock_location_3) { create(:stock_location, propagate_all_variants: false, active: true) }
216
- before do
217
- stock_item_two = variant.stock_items.create!(stock_location: stock_location_2, backorderable: false)
218
- stock_item_two.set_count_on_hand(location_2_inventory)
219
-
220
- stock_item_three = variant.stock_items.create!(stock_location: stock_location_3, backorderable: false)
221
- stock_item_three.set_count_on_hand(location_3_inventory)
222
- end
223
-
224
- # Regression test for https://github.com/solidusio/solidus/issues/2122
225
- context "with sufficient inventory in first two locations" do
226
- let(:location_1_inventory) { 3 }
227
- let(:location_2_inventory) { 3 }
228
- let(:location_3_inventory) { 3 }
229
-
230
- it_behaves_like "a fulfillable package"
231
-
232
- it "creates only two packages" do
233
- expect(shipments.count).to eq(2)
234
- end
235
- end
236
-
237
- context "with sufficient inventory only across all three locations" do
238
- let(:location_1_inventory) { 2 }
239
- let(:location_2_inventory) { 2 }
240
- let(:location_3_inventory) { 2 }
241
-
242
- it_behaves_like "a fulfillable package"
243
-
244
- it "creates three packages" do
245
- expect(shipments.count).to eq(3)
246
- end
247
- end
248
-
249
- context "with sufficient inventory only across all three locations" do
250
- let(:location_1_inventory) { 2 }
251
- let(:location_2_inventory) { 2 }
252
- let(:location_3_inventory) { 2 }
253
-
254
- it_behaves_like "a fulfillable package"
255
-
256
- it "creates three packages" do
257
- expect(shipments.count).to eq(3)
258
- end
259
- end
260
- end
261
- end
262
- end
263
- end
264
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree
6
- module Stock
7
- module Splitter
8
- RSpec.describe Backordered, type: :model do
9
- let(:variant) { build(:variant) }
10
-
11
- let(:stock_location) { mock_model(Spree::StockLocation) }
12
-
13
- subject { Backordered.new(stock_location) }
14
-
15
- it 'splits packages by status' do
16
- package = Package.new(stock_location)
17
- 4.times { package.add build(:inventory_unit, variant: variant) }
18
- 5.times { package.add build(:inventory_unit, variant: variant), :backordered }
19
-
20
- packages = subject.split([package])
21
- expect(packages.count).to eq 2
22
- expect(packages.first.quantity).to eq 4
23
- expect(packages.first.on_hand.count).to eq 4
24
- expect(packages.first.backordered.count).to eq 0
25
-
26
- expect(packages[1].contents.count).to eq 5
27
- end
28
- end
29
- end
30
- end
31
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree
6
- module Stock
7
- module Splitter
8
- RSpec.describe Base, type: :model do
9
- let(:stock_location) { mock_model(Spree::StockLocation) }
10
-
11
- it 'continues to splitter chain' do
12
- splitter_one = Base.new(stock_location)
13
- splitter_two = Base.new(stock_location, splitter_one)
14
- packages = []
15
-
16
- expect(splitter_one).to receive(:split).with(packages)
17
- splitter_two.split(packages)
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,48 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree
6
- module Stock
7
- RSpec.describe Splitter::ShippingCategory, type: :model do
8
- let(:order) { create(:order_with_line_items, line_items_count: 1) }
9
- let(:line_item) { order.line_items.first }
10
- let(:variant1) { build(:variant) }
11
- let(:variant2) { build(:variant) }
12
- let(:shipping_category_1) { create(:shipping_category, name: 'A') }
13
- let(:shipping_category_2) { create(:shipping_category, name: 'B') }
14
-
15
- def inventory_unit1
16
- build(:inventory_unit, variant: variant1, order: order, line_item: line_item).tap do |inventory_unit|
17
- inventory_unit.variant.product.shipping_category = shipping_category_1
18
- end
19
- end
20
-
21
- def inventory_unit2
22
- build(:inventory_unit, variant: variant2, order: order, line_item: line_item).tap do |inventory_unit|
23
- inventory_unit.variant.product.shipping_category = shipping_category_2
24
- end
25
- end
26
-
27
- let(:stock_location) { mock_model(Spree::StockLocation) }
28
-
29
- subject { described_class.new(stock_location) }
30
-
31
- it 'splits each package by shipping category' do
32
- package_one = Package.new(stock_location)
33
- 4.times { package_one.add inventory_unit1 }
34
- 8.times { package_one.add inventory_unit2 }
35
-
36
- package_two = Package.new(stock_location)
37
- 6.times { package_two.add inventory_unit1 }
38
- 9.times { package_two.add inventory_unit2, :backordered }
39
-
40
- packages = subject.split([package_one, package_two])
41
- expect(packages[0].quantity).to eq 4
42
- expect(packages[1].quantity).to eq 8
43
- expect(packages[2].quantity).to eq 6
44
- expect(packages[3].quantity).to eq 9
45
- end
46
- end
47
- end
48
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree
6
- module Stock
7
- module Splitter
8
- RSpec.describe Weight, type: :model do
9
- let(:stock_location) { mock_model(Spree::StockLocation) }
10
- let(:variant) { build(:base_variant, weight: 100) }
11
-
12
- subject { Weight.new(stock_location) }
13
-
14
- it 'splits and keeps splitting until all packages are underweight' do
15
- package = Package.new(stock_location)
16
- 4.times { package.add build(:inventory_unit, variant: variant) }
17
- packages = subject.split([package])
18
- expect(packages.size).to eq 4
19
- end
20
-
21
- it 'handles packages that can not be reduced' do
22
- package = Package.new(stock_location)
23
- allow(variant).to receive_messages(weight: 200)
24
- 2.times { package.add build(:inventory_unit, variant: variant) }
25
- packages = subject.split([package])
26
- expect(packages.size).to eq 2
27
- end
28
- end
29
- end
30
- end
31
- end
@@ -1,66 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree::Stock
6
- RSpec.describe SplitterChain, type: :model do
7
- let(:stock_location) { mock_model(Spree::StockLocation) }
8
- let(:splitter1) { Class.new(Splitter::Base) }
9
- let(:splitter2) { Class.new(Splitter::Base) }
10
-
11
- let(:package) { double(:package) }
12
- let(:packages) { [package] }
13
-
14
- subject { described_class.new(stock_location, splitters) }
15
-
16
- context 'with no splitters' do
17
- let(:splitters) { [] }
18
-
19
- it "returns the packages unchanged" do
20
- expect(subject.split(packages)).to eq packages
21
- end
22
- end
23
-
24
- context 'with one splitter' do
25
- let(:splitters) { [splitter1] }
26
-
27
- it 'returns the result form the splitter' do
28
- expected = double(:expected_packages)
29
- expect_any_instance_of(splitter1).to receive(:split).with(packages).and_return(expected)
30
-
31
- expect(subject.split(packages)).to be expected
32
- end
33
-
34
- it 'builds the splitters correctly' do
35
- expect(splitter1).to receive(:new).with(stock_location, nil).and_call_original
36
-
37
- subject.split(packages)
38
- end
39
- end
40
-
41
- context 'with multiple splitters' do
42
- let(:splitters) { [splitter1, splitter2] }
43
-
44
- it 'builds the splitters in order' do
45
- expect(splitter1).to receive(:new).with(stock_location, splitter2).and_call_original
46
- expect(splitter2).to receive(:new).with(stock_location, nil).and_call_original
47
-
48
- subject.split(packages)
49
- end
50
-
51
- it 'calls the splitters in order' do
52
- expect_any_instance_of(splitter1).to receive(:split).with(packages).and_call_original
53
- expect_any_instance_of(splitter2).to receive(:split).with(packages).and_call_original
54
-
55
- subject.split(packages)
56
- end
57
-
58
- it 'returns the final result' do
59
- expected = double(:expected_packages)
60
- expect_any_instance_of(splitter2).to receive(:split).with(packages).and_return(expected)
61
-
62
- expect(subject.split(packages)).to be expected
63
- end
64
- end
65
- end
66
- end