solidus_core 2.10.2 → 2.11.0

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