solidus_core 2.9.6 → 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 (575) 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/helpers/spree/base_helper.rb +4 -4
  5. data/app/helpers/spree/products_helper.rb +2 -1
  6. data/app/jobs/spree/promotion_code_batch_job.rb +2 -2
  7. data/app/mailers/spree/base_mailer.rb +4 -0
  8. data/app/mailers/spree/order_mailer.rb +1 -1
  9. data/app/models/concerns/spree/active_storage_adapter.rb +116 -0
  10. data/app/models/concerns/spree/active_storage_adapter/attachment.rb +69 -0
  11. data/app/models/concerns/spree/active_storage_adapter/normalization.rb +39 -0
  12. data/app/models/concerns/spree/default_price.rb +1 -1
  13. data/app/models/concerns/spree/soft_deletable.rb +18 -0
  14. data/app/models/concerns/spree/user_address_book.rb +87 -33
  15. data/app/models/concerns/spree/user_methods.rb +5 -4
  16. data/app/models/spree/ability.rb +34 -10
  17. data/app/models/spree/address.rb +103 -30
  18. data/app/models/spree/address/name.rb +49 -0
  19. data/app/models/spree/address/state_validator.rb +71 -0
  20. data/app/models/spree/adjustment.rb +21 -10
  21. data/app/models/spree/asset.rb +1 -1
  22. data/app/models/spree/base.rb +1 -2
  23. data/app/models/spree/calculator.rb +1 -1
  24. data/app/models/spree/calculator/default_tax.rb +1 -1
  25. data/app/models/spree/calculator/percent_per_item.rb +4 -4
  26. data/app/models/spree/calculator/price_sack.rb +1 -1
  27. data/app/models/spree/calculator/shipping/flexi_rate.rb +2 -2
  28. data/app/models/spree/calculator/tiered_flat_rate.rb +5 -5
  29. data/app/models/spree/calculator/tiered_percent.rb +6 -6
  30. data/app/models/spree/carton.rb +3 -3
  31. data/app/models/spree/classification.rb +2 -2
  32. data/app/models/spree/credit_card.rb +6 -6
  33. data/app/models/spree/customer_return.rb +5 -3
  34. data/app/models/spree/exchange.rb +1 -1
  35. data/app/models/spree/image/active_storage_attachment.rb +21 -0
  36. data/app/models/spree/image/paperclip_attachment.rb +1 -1
  37. data/app/models/spree/inventory_unit.rb +5 -23
  38. data/app/models/spree/line_item.rb +16 -7
  39. data/app/models/spree/line_item_action.rb +2 -2
  40. data/app/models/spree/log_entry.rb +1 -1
  41. data/app/models/spree/option_type.rb +1 -1
  42. data/app/models/spree/option_value.rb +3 -3
  43. data/app/models/spree/option_values_variant.rb +2 -2
  44. data/app/models/spree/order.rb +85 -30
  45. data/app/models/spree/order/checkout.rb +2 -1
  46. data/app/models/spree/order/payments.rb +2 -2
  47. data/app/models/spree/order_cancellations.rb +1 -1
  48. data/app/models/spree/order_capturing.rb +2 -2
  49. data/app/models/spree/order_contents.rb +2 -2
  50. data/app/models/spree/order_inventory.rb +16 -4
  51. data/app/models/spree/order_merger.rb +6 -4
  52. data/app/models/spree/order_mutex.rb +1 -1
  53. data/app/models/spree/order_promotion.rb +4 -4
  54. data/app/models/spree/order_shipping.rb +1 -1
  55. data/app/models/spree/order_taxation.rb +3 -3
  56. data/app/models/spree/order_updater.rb +11 -10
  57. data/app/models/spree/payment.rb +10 -47
  58. data/app/models/spree/payment/cancellation.rb +3 -3
  59. data/app/models/spree/payment/processing.rb +57 -33
  60. data/app/models/spree/payment_capture_event.rb +1 -1
  61. data/app/models/spree/payment_method.rb +13 -11
  62. data/app/models/spree/payment_method/bogus_credit_card.rb +1 -1
  63. data/app/models/spree/payment_source.rb +1 -1
  64. data/app/models/spree/preference.rb +1 -1
  65. data/app/models/spree/price.rb +3 -9
  66. data/app/models/spree/product.rb +24 -19
  67. data/app/models/spree/product/scopes.rb +223 -210
  68. data/app/models/spree/product_option_type.rb +2 -2
  69. data/app/models/spree/product_promotion_rule.rb +2 -2
  70. data/app/models/spree/product_property.rb +2 -2
  71. data/app/models/spree/promotion.rb +46 -20
  72. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +1 -1
  73. data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
  74. data/app/models/spree/promotion/rules/option_value.rb +2 -2
  75. data/app/models/spree/promotion/rules/product.rb +3 -3
  76. data/app/models/spree/promotion_action.rb +3 -9
  77. data/app/models/spree/promotion_chooser.rb +2 -2
  78. data/app/models/spree/promotion_code.rb +17 -11
  79. data/app/models/spree/promotion_code/batch_builder.rb +3 -3
  80. data/app/models/spree/promotion_code_batch.rb +2 -2
  81. data/app/models/spree/promotion_handler/coupon.rb +2 -2
  82. data/app/models/spree/promotion_rule.rb +3 -3
  83. data/app/models/spree/promotion_rule_role.rb +3 -3
  84. data/app/models/spree/promotion_rule_store.rb +2 -2
  85. data/app/models/spree/promotion_rule_taxon.rb +2 -2
  86. data/app/models/spree/promotion_rule_user.rb +2 -2
  87. data/app/models/spree/refund.rb +59 -17
  88. data/app/models/spree/reimbursement.rb +32 -13
  89. data/app/models/spree/reimbursement/credit.rb +2 -2
  90. data/app/models/spree/reimbursement/reimbursement_type_engine.rb +1 -1
  91. data/app/models/spree/reimbursement_tax_calculator.rb +1 -1
  92. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +12 -5
  93. data/app/models/spree/return_authorization.rb +5 -11
  94. data/app/models/spree/return_item.rb +33 -61
  95. data/app/models/spree/return_item/eligibility_validator/default.rb +1 -1
  96. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
  97. data/app/models/spree/role.rb +1 -1
  98. data/app/models/spree/role_user.rb +2 -2
  99. data/app/models/spree/shipment.rb +9 -43
  100. data/app/models/spree/shipping_calculator.rb +1 -5
  101. data/app/models/spree/shipping_manifest.rb +5 -5
  102. data/app/models/spree/shipping_method.rb +3 -10
  103. data/app/models/spree/shipping_method_category.rb +2 -2
  104. data/app/models/spree/shipping_method_stock_location.rb +2 -2
  105. data/app/models/spree/shipping_method_zone.rb +2 -2
  106. data/app/models/spree/shipping_rate.rb +2 -2
  107. data/app/models/spree/shipping_rate_tax.rb +3 -3
  108. data/app/models/spree/state.rb +2 -2
  109. data/app/models/spree/state_change.rb +2 -2
  110. data/app/models/spree/stock/differentiator.rb +1 -1
  111. data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
  112. data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
  113. data/app/models/spree/stock/package.rb +2 -2
  114. data/app/models/spree/stock/simple_coordinator.rb +1 -3
  115. data/app/models/spree/stock_item.rb +4 -10
  116. data/app/models/spree/stock_location.rb +2 -2
  117. data/app/models/spree/stock_movement.rb +4 -2
  118. data/app/models/spree/stock_quantities.rb +13 -12
  119. data/app/models/spree/store.rb +1 -1
  120. data/app/models/spree/store_credit.rb +9 -15
  121. data/app/models/spree/store_credit_category.rb +30 -3
  122. data/app/models/spree/store_credit_event.rb +4 -10
  123. data/app/models/spree/store_credit_reason.rb +0 -4
  124. data/app/models/spree/store_payment_method.rb +2 -2
  125. data/app/models/spree/store_shipping_method.rb +2 -2
  126. data/app/models/spree/tax/tax_helpers.rb +1 -1
  127. data/app/models/spree/tax_calculator/default.rb +0 -4
  128. data/app/models/spree/tax_calculator/shipping_rate.rb +0 -3
  129. data/app/models/spree/tax_category.rb +2 -8
  130. data/app/models/spree/tax_rate.rb +12 -8
  131. data/app/models/spree/tax_rate_tax_category.rb +2 -2
  132. data/app/models/spree/taxon.rb +1 -1
  133. data/app/models/spree/taxon/active_storage_attachment.rb +19 -0
  134. data/app/models/spree/taxon/paperclip_attachment.rb +13 -0
  135. data/app/models/spree/unit_cancel.rb +5 -2
  136. data/app/models/spree/user_address.rb +10 -4
  137. data/app/models/spree/user_last_url_storer.rb +46 -0
  138. data/app/models/spree/user_last_url_storer/rules/authentication_rule.rb +36 -0
  139. data/app/models/spree/user_stock_location.rb +2 -2
  140. data/app/models/spree/variant.rb +17 -23
  141. data/app/models/spree/variant/scopes.rb +37 -29
  142. data/app/models/spree/variant_property_rule.rb +6 -2
  143. data/app/models/spree/variant_property_rule_condition.rb +2 -2
  144. data/app/models/spree/variant_property_rule_value.rb +2 -2
  145. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +9 -4
  146. data/app/models/spree/wallet_payment_source.rb +2 -2
  147. data/app/models/spree/zone.rb +2 -2
  148. data/app/models/spree/zone_member.rb +2 -2
  149. data/config/initializers/inflections.rb +5 -0
  150. data/config/initializers/money.rb +2 -0
  151. data/config/locales/en.yml +78 -8
  152. data/db/default/spree/countries.rb +1 -1
  153. data/db/default/spree/states.rb +12 -4
  154. data/db/default/spree/store_credit.rb +2 -2
  155. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
  156. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
  157. data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
  158. data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
  159. data/lib/generators/solidus/install/install_generator.rb +253 -0
  160. data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +42 -3
  161. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
  162. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
  163. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
  164. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
  165. data/lib/generators/spree/dummy/dummy_generator.rb +2 -0
  166. data/lib/generators/spree/install/install_generator.rb +7 -189
  167. data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
  168. data/lib/spree/app_configuration.rb +135 -54
  169. data/lib/spree/awesome_nested_set_override.rb +44 -0
  170. data/lib/spree/core.rb +6 -0
  171. data/lib/spree/core/controller_helpers/auth.rb +18 -17
  172. data/lib/spree/core/controller_helpers/current_host.rb +17 -0
  173. data/lib/spree/core/controller_helpers/order.rb +8 -7
  174. data/lib/spree/core/engine.rb +41 -4
  175. data/lib/spree/core/importer/order.rb +47 -33
  176. data/lib/spree/core/importer/product.rb +2 -2
  177. data/lib/spree/core/permalinks.rb +1 -3
  178. data/lib/spree/core/product_filters.rb +16 -15
  179. data/lib/spree/core/role_configuration.rb +2 -2
  180. data/lib/spree/core/search/variant.rb +1 -1
  181. data/lib/spree/core/state_machines.rb +97 -0
  182. data/lib/spree/core/state_machines/inventory_unit.rb +42 -0
  183. data/lib/spree/core/state_machines/order.rb +249 -0
  184. data/lib/spree/core/state_machines/payment.rb +61 -0
  185. data/lib/spree/core/state_machines/reimbursement.rb +33 -0
  186. data/lib/spree/core/state_machines/return_authorization.rb +32 -0
  187. data/lib/spree/core/state_machines/return_item/acceptance_status.rb +51 -0
  188. data/lib/spree/core/state_machines/return_item/reception_status.rb +42 -0
  189. data/lib/spree/core/state_machines/shipment.rb +58 -0
  190. data/lib/spree/core/stock_configuration.rb +1 -0
  191. data/lib/spree/core/validators/email.rb +1 -8
  192. data/lib/spree/core/version.rb +1 -1
  193. data/lib/spree/encryptor.rb +25 -0
  194. data/lib/spree/event.rb +40 -7
  195. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  196. data/lib/spree/event/configuration.rb +11 -6
  197. data/lib/spree/event/subscriber.rb +38 -18
  198. data/lib/spree/event/subscriber_registry.rb +92 -0
  199. data/lib/spree/i18n.rb +1 -1
  200. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  201. data/lib/spree/money.rb +2 -2
  202. data/lib/spree/paranoia_deprecations.rb +32 -12
  203. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  204. data/lib/spree/permission_sets/default_customer.rb +16 -16
  205. data/lib/spree/permission_sets/order_display.rb +11 -11
  206. data/lib/spree/permission_sets/order_management.rb +1 -1
  207. data/lib/spree/permission_sets/product_display.rb +9 -9
  208. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  209. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  210. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  211. data/lib/spree/permission_sets/stock_display.rb +2 -2
  212. data/lib/spree/permission_sets/stock_management.rb +1 -1
  213. data/lib/spree/permission_sets/user_display.rb +3 -3
  214. data/lib/spree/permission_sets/user_management.rb +7 -3
  215. data/lib/spree/permitted_attributes.rb +7 -6
  216. data/lib/spree/preferences/preferable.rb +4 -3
  217. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  218. data/lib/spree/preferences/static_model_preferences.rb +2 -2
  219. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  220. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  221. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  222. data/lib/spree/testing_support/capybara_ext.rb +3 -0
  223. data/lib/spree/testing_support/common_rake.rb +3 -3
  224. data/lib/spree/testing_support/dummy_app.rb +45 -21
  225. data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
  226. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +6 -4
  227. data/lib/spree/testing_support/factories/address_factory.rb +1 -2
  228. data/lib/spree/testing_support/factories/image_factory.rb +1 -1
  229. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +8 -1
  230. data/lib/spree/testing_support/factories/promotion_factory.rb +13 -0
  231. data/lib/spree/testing_support/factories/refund_factory.rb +1 -0
  232. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  233. data/lib/spree/testing_support/factories/return_item_factory.rb +0 -1
  234. data/lib/spree/testing_support/factories/stock_package_factory.rb +1 -1
  235. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +8 -0
  236. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +1 -0
  237. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +3 -1
  238. data/lib/spree/testing_support/factories/taxon_factory.rb +4 -0
  239. data/lib/spree/testing_support/factories/user_factory.rb +4 -1
  240. data/lib/spree/testing_support/factories/zone_factory.rb +1 -1
  241. data/lib/spree/testing_support/job_helpers.rb +24 -0
  242. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  243. data/lib/spree/testing_support/preferences.rb +3 -1
  244. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  245. data/lib/spree/testing_support/translations.rb +25 -0
  246. data/solidus_core.gemspec +12 -9
  247. metadata +120 -393
  248. data/script/rails +0 -10
  249. data/spec/fixtures/thinking-cat.jpg +0 -0
  250. data/spec/helpers/base_helper_spec.rb +0 -168
  251. data/spec/helpers/products_helper_spec.rb +0 -202
  252. data/spec/helpers/taxons_helper_spec.rb +0 -43
  253. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  254. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  255. data/spec/lib/i18n_spec.rb +0 -97
  256. data/spec/lib/search/base_spec.rb +0 -87
  257. data/spec/lib/search/variant_spec.rb +0 -115
  258. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  259. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  260. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  261. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  262. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  263. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  264. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  265. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  266. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -48
  267. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  268. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  269. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  270. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  271. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -59
  272. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  273. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  274. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  275. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  276. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  277. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  278. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  279. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  280. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  281. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  282. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  283. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  284. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  285. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  286. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  287. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  288. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  289. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  290. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  291. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  292. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  293. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  294. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  295. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  296. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  297. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  298. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  299. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  300. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  301. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  302. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  303. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  304. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  305. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  306. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  307. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  308. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  309. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  310. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  311. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  312. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  313. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  314. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  315. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  316. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  317. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  318. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  319. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  320. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  321. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  322. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  323. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  324. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  325. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  326. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  327. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  328. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  329. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  330. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  331. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  332. data/spec/lib/spree/core/version_spec.rb +0 -19
  333. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  334. data/spec/lib/spree/event_spec.rb +0 -118
  335. data/spec/lib/spree/localized_number_spec.rb +0 -45
  336. data/spec/lib/spree/migrations_spec.rb +0 -32
  337. data/spec/lib/spree/money_spec.rb +0 -298
  338. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  339. data/spec/lib/spree/permitted_attributes_spec.rb +0 -41
  340. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  341. data/spec/lib/tasks/dummy_task.rake +0 -12
  342. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  343. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  344. data/spec/mailers/carton_mailer_spec.rb +0 -44
  345. data/spec/mailers/order_mailer_spec.rb +0 -117
  346. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  347. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  348. data/spec/mailers/test_mailer_spec.rb +0 -13
  349. data/spec/migrate/20190106184413_remove_code_from_spree_promotions_spec.rb +0 -148
  350. data/spec/models/spree/ability_spec.rb +0 -279
  351. data/spec/models/spree/address_spec.rb +0 -376
  352. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  353. data/spec/models/spree/adjustment_spec.rb +0 -339
  354. data/spec/models/spree/asset_spec.rb +0 -25
  355. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  356. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  357. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  358. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  359. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  360. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  361. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  362. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  363. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  364. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  365. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  366. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  367. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  368. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  369. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -35
  370. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  371. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  372. data/spec/models/spree/calculator_spec.rb +0 -43
  373. data/spec/models/spree/carton_spec.rb +0 -137
  374. data/spec/models/spree/classification_spec.rb +0 -114
  375. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  376. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  377. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  378. data/spec/models/spree/concerns/user_methods_spec.rb +0 -121
  379. data/spec/models/spree/country_spec.rb +0 -154
  380. data/spec/models/spree/credit_card_spec.rb +0 -373
  381. data/spec/models/spree/customer_return_spec.rb +0 -294
  382. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  383. data/spec/models/spree/exchange_spec.rb +0 -76
  384. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  385. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  386. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  387. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  388. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  389. data/spec/models/spree/gateway_spec.rb +0 -14
  390. data/spec/models/spree/image_spec.rb +0 -25
  391. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  392. data/spec/models/spree/line_item_spec.rb +0 -240
  393. data/spec/models/spree/option_type_spec.rb +0 -16
  394. data/spec/models/spree/option_value_spec.rb +0 -52
  395. data/spec/models/spree/order/address_spec.rb +0 -52
  396. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  397. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  398. data/spec/models/spree/order/checkout_spec.rb +0 -740
  399. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  400. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  401. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  402. data/spec/models/spree/order/payment_spec.rb +0 -280
  403. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  404. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  405. data/spec/models/spree/order/totals_spec.rb +0 -26
  406. data/spec/models/spree/order/updating_spec.rb +0 -18
  407. data/spec/models/spree/order/validations_spec.rb +0 -17
  408. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  409. data/spec/models/spree/order_capturing_spec.rb +0 -16
  410. data/spec/models/spree/order_contents_spec.rb +0 -362
  411. data/spec/models/spree/order_inventory_spec.rb +0 -285
  412. data/spec/models/spree/order_merger_spec.rb +0 -162
  413. data/spec/models/spree/order_mutex_spec.rb +0 -89
  414. data/spec/models/spree/order_promotion_spec.rb +0 -33
  415. data/spec/models/spree/order_shipping_spec.rb +0 -247
  416. data/spec/models/spree/order_spec.rb +0 -1694
  417. data/spec/models/spree/order_taxation_spec.rb +0 -128
  418. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  419. data/spec/models/spree/order_updater_spec.rb +0 -555
  420. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  421. data/spec/models/spree/payment_create_spec.rb +0 -205
  422. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  423. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  424. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  425. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  426. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  427. data/spec/models/spree/payment_method_spec.rb +0 -408
  428. data/spec/models/spree/payment_spec.rb +0 -1270
  429. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  430. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  431. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  432. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  433. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  434. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  435. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  436. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  437. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  438. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  439. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  440. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  441. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  442. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  443. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  444. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -56
  445. data/spec/models/spree/preference_spec.rb +0 -79
  446. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  447. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  448. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  449. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  450. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  451. data/spec/models/spree/preferences/store_spec.rb +0 -40
  452. data/spec/models/spree/price_spec.rb +0 -150
  453. data/spec/models/spree/product/scopes_spec.rb +0 -164
  454. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  455. data/spec/models/spree/product_filter_spec.rb +0 -28
  456. data/spec/models/spree/product_property_spec.rb +0 -20
  457. data/spec/models/spree/product_spec.rb +0 -584
  458. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  459. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  460. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  461. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  462. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  463. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  464. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  465. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  466. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  467. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  468. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  469. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  470. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -227
  471. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  472. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  473. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  474. data/spec/models/spree/promotion_action_spec.rb +0 -44
  475. data/spec/models/spree/promotion_category_spec.rb +0 -19
  476. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  477. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  478. data/spec/models/spree/promotion_code_spec.rb +0 -206
  479. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  480. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  481. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  482. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  483. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  484. data/spec/models/spree/promotion_spec.rb +0 -928
  485. data/spec/models/spree/refund_spec.rb +0 -200
  486. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  487. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  488. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  489. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  490. data/spec/models/spree/reimbursement_spec.rb +0 -278
  491. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  492. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  493. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  494. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  495. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  496. data/spec/models/spree/return_authorization_spec.rb +0 -226
  497. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  498. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  499. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  500. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  501. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  502. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  503. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  504. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  505. data/spec/models/spree/return_item_spec.rb +0 -785
  506. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  507. data/spec/models/spree/shipment_spec.rb +0 -914
  508. data/spec/models/spree/shipping_calculator_spec.rb +0 -57
  509. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  510. data/spec/models/spree/shipping_method_spec.rb +0 -260
  511. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  512. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  513. data/spec/models/spree/state_spec.rb +0 -43
  514. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  515. data/spec/models/spree/stock/availability_spec.rb +0 -143
  516. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  517. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  518. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  519. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  520. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  521. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  522. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  523. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  524. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  525. data/spec/models/spree/stock/package_spec.rb +0 -182
  526. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  527. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  528. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  529. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  530. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  531. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  532. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  533. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  534. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  535. data/spec/models/spree/stock_item_spec.rb +0 -348
  536. data/spec/models/spree/stock_location_spec.rb +0 -288
  537. data/spec/models/spree/stock_movement_spec.rb +0 -58
  538. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  539. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  540. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  541. data/spec/models/spree/store_credit_spec.rb +0 -900
  542. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  543. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  544. data/spec/models/spree/store_spec.rb +0 -156
  545. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  546. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  547. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  548. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  549. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  550. data/spec/models/spree/tax_category_spec.rb +0 -50
  551. data/spec/models/spree/tax_rate_spec.rb +0 -316
  552. data/spec/models/spree/taxon_spec.rb +0 -197
  553. data/spec/models/spree/taxonomy_spec.rb +0 -15
  554. data/spec/models/spree/unit_cancel_spec.rb +0 -121
  555. data/spec/models/spree/user_spec.rb +0 -247
  556. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  557. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  558. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  559. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  560. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  561. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  562. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  563. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  564. data/spec/models/spree/variant_spec.rb +0 -862
  565. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  566. data/spec/models/spree/wallet_spec.rb +0 -155
  567. data/spec/models/spree/zone_spec.rb +0 -248
  568. data/spec/rails_helper.rb +0 -46
  569. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  570. data/spec/spec_helper.rb +0 -36
  571. data/spec/support/big_decimal.rb +0 -7
  572. data/spec/support/concerns/default_price.rb +0 -44
  573. data/spec/support/concerns/payment_source.rb +0 -66
  574. data/spec/support/concerns/working_factories.rb +0 -15
  575. data/spec/support/dummy_ability.rb +0 -7
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
-
5
- module Spree
6
- RSpec.describe ReturnsCalculator, type: :model do
7
- let(:return_item) { build(:return_item) }
8
- subject { ReturnsCalculator.new }
9
-
10
- it 'compute_shipment must be overridden' do
11
- expect {
12
- subject.compute(return_item)
13
- }.to raise_error NotImplementedError
14
- end
15
- end
16
- end
@@ -1,914 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
- require 'benchmark'
5
-
6
- RSpec.describe Spree::Shipment, type: :model do
7
- let(:order) { create(:order_ready_to_ship, line_items_count: 1) }
8
- let(:shipping_method) { create(:shipping_method, name: "UPS") }
9
- let(:stock_location) { create(:stock_location) }
10
- let(:shipment) do
11
- order.shipments.create!(
12
- state: 'pending',
13
- cost: 1,
14
- inventory_units: order.inventory_units,
15
- shipping_rates: [shipping_rate],
16
- stock_location: stock_location
17
- )
18
- end
19
- let(:shipping_rate) do
20
- Spree::ShippingRate.create!(
21
- shipping_method: shipping_method,
22
- selected: true
23
- )
24
- end
25
-
26
- let(:variant) { mock_model(Spree::Variant) }
27
- let(:line_item) { mock_model(Spree::LineItem, variant: variant) }
28
-
29
- context '#transfer_to_location' do
30
- it 'transfers unit to a new shipment with given location' do
31
- order = create(:completed_order_with_totals, line_items_count: 2)
32
- shipment = order.shipments.first
33
- variant = order.inventory_units.map(&:variant).first
34
-
35
- aggregate_failures("verifying new shipment attributes") do
36
- expect do
37
- Spree::Deprecation.silence do
38
- shipment.transfer_to_location(variant, 1, stock_location)
39
- end
40
- end.to change { Spree::Shipment.count }.by(1)
41
-
42
- new_shipment = order.shipments.order(:created_at).last
43
- expect(new_shipment.number).to_not eq(shipment.number)
44
- expect(new_shipment.stock_location).to eq(stock_location)
45
- expect(new_shipment.line_items.count).to eq(1)
46
- expect(new_shipment.line_items.first.variant).to eq(variant)
47
- end
48
- end
49
- end
50
-
51
- # Regression test for https://github.com/spree/spree/issues/4063
52
- context "number generation" do
53
- before { allow(order).to receive :update! }
54
-
55
- it "generates a number containing a letter + 11 numbers" do
56
- shipment.save
57
- expect(shipment.number[0]).to eq("H")
58
- expect(/\d{11}/.match(shipment.number)).not_to be_nil
59
- expect(shipment.number.length).to eq(12)
60
- end
61
- end
62
-
63
- it 'is backordered if one if its inventory_units is backordered' do
64
- shipment.inventory_units = [
65
- build(:inventory_unit, state: 'backordered', shipment: nil),
66
- build(:inventory_unit, state: 'shipped', shipment: nil)
67
- ]
68
- expect(shipment).to be_backordered
69
- end
70
-
71
- context '#determine_state' do
72
- it 'returns canceled if order is canceled?' do
73
- allow(order).to receive_messages canceled?: true
74
- expect(shipment.determine_state(order)).to eq 'canceled'
75
- end
76
-
77
- it 'returns pending unless order.can_ship?' do
78
- allow(order).to receive_messages can_ship?: false
79
- expect(shipment.determine_state(order)).to eq 'pending'
80
- end
81
-
82
- it 'returns pending if backordered' do
83
- allow(shipment).to receive_messages inventory_units: [mock_model(Spree::InventoryUnit, allow_ship?: false, canceled?: false, shipped?: false)]
84
- expect(shipment.determine_state(order)).to eq 'pending'
85
- end
86
-
87
- it 'returns shipped when already shipped' do
88
- allow(shipment).to receive_messages state: 'shipped'
89
- expect(shipment.determine_state(order)).to eq 'shipped'
90
- end
91
-
92
- it 'returns pending when unpaid' do
93
- allow(order).to receive_messages paid?: false
94
- expect(shipment.determine_state(order)).to eq 'pending'
95
- end
96
-
97
- it 'returns ready when paid' do
98
- allow(order).to receive_messages paid?: true
99
- expect(shipment.determine_state(order)).to eq 'ready'
100
- end
101
- end
102
-
103
- context "display_amount" do
104
- it "retuns a Spree::Money" do
105
- shipment.cost = 21.22
106
- expect(shipment.display_amount).to eq(Spree::Money.new(21.22))
107
- end
108
- end
109
-
110
- context "display_total" do
111
- it "retuns a Spree::Money" do
112
- allow(shipment).to receive(:total) { 21.22 }
113
- expect(shipment.display_total).to eq(Spree::Money.new(21.22))
114
- end
115
- end
116
-
117
- context "display_item_cost" do
118
- it "retuns a Spree::Money" do
119
- allow(shipment).to receive(:item_cost) { 21.22 }
120
- expect(shipment.display_item_cost).to eq(Spree::Money.new(21.22))
121
- end
122
- end
123
-
124
- context "#item_cost" do
125
- let(:shipment) { order.shipments[0] }
126
-
127
- let(:order) do
128
- create(
129
- :order_ready_to_ship,
130
- line_items_attributes: [{ price: 10, variant: variant }],
131
- ship_address: ship_address,
132
- )
133
- end
134
-
135
- let!(:ship_address) { create(:address) }
136
- let!(:tax_zone) { create(:global_zone) } # will include the above address
137
- let!(:tax_rate) { create(:tax_rate, amount: 0.1, zone: tax_zone, tax_categories: [tax_category]) }
138
- let(:tax_category) { create(:tax_category) }
139
- let(:variant) { create(:variant, tax_category: tax_category) }
140
-
141
- it 'should equal line items final amount with tax' do
142
- expect(shipment.item_cost).to eql(11.0)
143
- end
144
- end
145
-
146
- it "#discounted_cost" do
147
- shipment = create(:shipment)
148
- shipment.cost = 10
149
- shipment.promo_total = -1
150
- expect(Spree::Deprecation.silence { shipment.discounted_cost }).to eq(9)
151
- end
152
-
153
- describe '#total_before_tax' do
154
- before do
155
- shipment.update_attributes!(cost: 10)
156
- end
157
- let!(:admin_adjustment) { create(:adjustment, adjustable: shipment, order: shipment.order, amount: -1, source: nil) }
158
- let!(:promo_adjustment) { create(:adjustment, adjustable: shipment, order: shipment.order, amount: -2, source: promo_action) }
159
- let!(:ineligible_promo_adjustment) { create(:adjustment, eligible: false, adjustable: shipment, order: shipment.order, amount: -4, source: promo_action) }
160
- let(:promo_action) { promo.actions[0] }
161
- let(:promo) { create(:promotion, :with_line_item_adjustment) }
162
-
163
- it 'returns the amount minus any adjustments' do
164
- expect(shipment.total_before_tax).to eq(10 - 1 - 2)
165
- end
166
- end
167
-
168
- it "#tax_total with included taxes" do
169
- shipment = Spree::Shipment.new
170
- expect(shipment.tax_total).to eq(0)
171
- shipment.included_tax_total = 10
172
- expect(shipment.tax_total).to eq(10)
173
- end
174
-
175
- it "#tax_total with additional taxes" do
176
- shipment = Spree::Shipment.new
177
- expect(shipment.tax_total).to eq(0)
178
- shipment.additional_tax_total = 10
179
- expect(shipment.tax_total).to eq(10)
180
- end
181
-
182
- it "#total" do
183
- shipment = Spree::Shipment.new
184
- shipment.cost = 10
185
- shipment.adjustment_total = -2
186
- shipment.included_tax_total = 1
187
- expect(shipment.total).to eq(8)
188
- end
189
-
190
- context "manifest" do
191
- let(:order) { create(:order) }
192
- let(:variant) { create(:variant) }
193
- let!(:line_item) { order.contents.add variant }
194
- let!(:shipment) { order.create_proposed_shipments.first }
195
-
196
- it "returns variant expected" do
197
- expect(shipment.manifest.first.variant).to eq variant
198
- end
199
-
200
- context "variant was removed" do
201
- before { variant.discard }
202
-
203
- it "still returns variant expected" do
204
- expect(shipment.manifest.first.variant).to eq variant
205
- end
206
- end
207
- end
208
-
209
- context 'shipping_rates' do
210
- let(:shipment) { create(:shipment) }
211
- let(:shipping_method1) { create(:shipping_method) }
212
- let(:shipping_method2) { create(:shipping_method) }
213
- let(:shipping_rates) {
214
- [
215
- Spree::ShippingRate.new(shipping_method: shipping_method1, cost: 10.00, selected: true),
216
- Spree::ShippingRate.new(shipping_method: shipping_method2, cost: 20.00)
217
- ]
218
- }
219
-
220
- it 'returns shipping_method from selected shipping_rate' do
221
- shipment.shipping_rates.delete_all
222
- shipment.shipping_rates.create shipping_method: shipping_method1, cost: 10.00, selected: true
223
- expect(shipment.shipping_method).to eq shipping_method1
224
- end
225
-
226
- context 'refresh_rates' do
227
- let(:mock_estimator) { double('estimator', shipping_rates: shipping_rates) }
228
- before { allow(shipment).to receive(:can_get_rates?){ true } }
229
-
230
- it 'should request new rates, and maintain shipping_method selection' do
231
- expect(Spree::Stock::Estimator).to receive(:new).with(no_args).and_return(mock_estimator)
232
- allow(shipment).to receive_messages(shipping_method: shipping_method2)
233
-
234
- expect(shipment.refresh_rates).to eq(shipping_rates)
235
- expect(shipment.reload.selected_shipping_rate.shipping_method_id).to eq(shipping_method2.id)
236
- end
237
-
238
- it 'should handle no shipping_method selection' do
239
- expect(Spree::Stock::Estimator).to receive(:new).with(no_args).and_return(mock_estimator)
240
- allow(shipment).to receive_messages(shipping_method: nil)
241
- expect(shipment.refresh_rates).to eq(shipping_rates)
242
- expect(shipment.reload.selected_shipping_rate).not_to be_nil
243
- end
244
-
245
- it 'should not refresh if shipment is shipped' do
246
- expect(Spree::Stock::Estimator).not_to receive(:new)
247
- shipment.shipping_rates.delete_all
248
- allow(shipment).to receive_messages(shipped?: true)
249
- expect(shipment.refresh_rates).to eq([])
250
- end
251
-
252
- it "can't get rates without a shipping address" do
253
- shipment.order.update_attributes!(ship_address: nil)
254
- expect(shipment.refresh_rates).to eq([])
255
- end
256
-
257
- it 'uses the pluggable estimator class' do
258
- expect(Spree::Config.stock).to receive(:estimator_class).and_call_original
259
- shipment.refresh_rates
260
- end
261
-
262
- context 'to_package' do
263
- let(:inventory_units) do
264
- [build(:inventory_unit, line_item: line_item, variant: variant, state: 'on_hand'),
265
- build(:inventory_unit, line_item: line_item, variant: variant, state: 'backordered')]
266
- end
267
-
268
- before do
269
- allow(line_item).to receive(:order) { order }
270
- shipment.inventory_units = inventory_units
271
- allow(shipment.inventory_units).to receive_message_chain(:includes, :joins).and_return inventory_units
272
- end
273
-
274
- it 'should use symbols for states when adding contents to package' do
275
- package = shipment.to_package
276
- expect(package.on_hand.count).to eq 1
277
- expect(package.backordered.count).to eq 1
278
- end
279
-
280
- it 'should set the shipment to itself' do
281
- expect(shipment.to_package.shipment).to eq(shipment)
282
- end
283
- end
284
- end
285
- end
286
-
287
- context "#update_state" do
288
- shared_examples_for "immutable once shipped" do
289
- before { shipment.update_columns(state: 'shipped') }
290
-
291
- it "should remain in shipped state once shipped" do
292
- expect {
293
- shipment.update_state
294
- }.not_to change { shipment.state }
295
- end
296
- end
297
-
298
- shared_examples_for "pending if backordered" do
299
- it "should have a state of pending if backordered" do
300
- # Set as ready so we can test for change
301
- shipment.update_attributes!(state: 'ready')
302
-
303
- allow(shipment).to receive_messages(inventory_units: [mock_model(Spree::InventoryUnit, allow_ship?: false, canceled?: false, shipped?: false)])
304
- expect(shipment).to receive(:update_columns).with(state: 'pending', updated_at: kind_of(Time))
305
- shipment.update_state
306
- end
307
- end
308
-
309
- context "when order cannot ship" do
310
- before { allow(order).to receive_messages can_ship?: false }
311
- it "should result in a 'pending' state" do
312
- # Set as ready so we can test for change
313
- shipment.update_attributes!(state: 'ready')
314
- expect(shipment).to receive(:update_columns).with(state: 'pending', updated_at: kind_of(Time))
315
- shipment.update_state
316
- end
317
- end
318
-
319
- context "when order is paid" do
320
- before { allow(order).to receive_messages paid?: true }
321
- it "should result in a 'ready' state" do
322
- expect(shipment).to receive(:update_columns).with(state: 'ready', updated_at: kind_of(Time))
323
- shipment.update_state
324
- end
325
- it_should_behave_like 'immutable once shipped'
326
- it_should_behave_like 'pending if backordered'
327
- end
328
-
329
- context "when payment is not required" do
330
- before do
331
- stub_spree_preferences(require_payment_to_ship: false)
332
- end
333
-
334
- it "should result in a 'ready' state" do
335
- expect(shipment).to receive(:update_columns).with(state: 'ready', updated_at: kind_of(Time))
336
- shipment.update_state
337
- end
338
- it_should_behave_like 'immutable once shipped'
339
- it_should_behave_like 'pending if backordered'
340
- end
341
-
342
- context "when order has balance due" do
343
- before { allow(order).to receive_messages paid?: false }
344
- it "should result in a 'pending' state" do
345
- shipment.state = 'ready'
346
- expect(shipment).to receive(:update_columns).with(state: 'pending', updated_at: kind_of(Time))
347
- shipment.update_state
348
- end
349
- it_should_behave_like 'immutable once shipped'
350
- it_should_behave_like 'pending if backordered'
351
- end
352
-
353
- context "when order has a credit owed" do
354
- before { allow(order).to receive_messages payment_state: 'credit_owed', paid?: true }
355
- it "should result in a 'ready' state" do
356
- shipment.state = 'pending'
357
- expect(shipment).to receive(:update_columns).with(state: 'ready', updated_at: kind_of(Time))
358
- shipment.update_state
359
- end
360
- it_should_behave_like 'immutable once shipped'
361
- it_should_behave_like 'pending if backordered'
362
- end
363
-
364
- context "when shipment state changes to shipped" do
365
- it "should call after_ship" do
366
- shipment.state = 'pending'
367
- expect(shipment).to receive :after_ship
368
- allow(shipment).to receive_messages determine_state: 'shipped'
369
- expect(shipment).to receive(:update_columns).with(state: 'shipped', updated_at: kind_of(Time))
370
- shipment.update_state
371
- end
372
-
373
- # Regression test for https://github.com/spree/spree/issues/4347
374
- context "with adjustments" do
375
- before do
376
- shipment.adjustments << Spree::Adjustment.create(order: order, label: "Label", amount: 5)
377
- end
378
-
379
- it "transitions to shipped" do
380
- shipment.update_column(:state, "ready")
381
- shipment.ship!
382
- end
383
- end
384
- end
385
- end
386
-
387
- context "when order is completed" do
388
- before do
389
- allow(order).to receive_messages completed?: true
390
- allow(order).to receive_messages canceled?: false
391
- end
392
-
393
- context "with inventory tracking" do
394
- before { stub_spree_preferences(track_inventory_levels: true) }
395
-
396
- it "should validate with inventory" do
397
- shipment.inventory_units = [create(:inventory_unit)]
398
- expect(shipment.valid?).to be true
399
- end
400
- end
401
-
402
- context "without inventory tracking" do
403
- before { stub_spree_preferences(track_inventory_levels: false) }
404
-
405
- it "should validate with no inventory" do
406
- expect(shipment.valid?).to be true
407
- end
408
- end
409
- end
410
-
411
- context "#cancel" do
412
- it 'cancels the shipment' do
413
- allow(shipment.order).to receive(:update!)
414
-
415
- shipment.state = 'pending'
416
- without_partial_double_verification do
417
- expect(shipment).to receive(:after_cancel)
418
- end
419
- shipment.cancel!
420
- expect(shipment.state).to eq 'canceled'
421
- end
422
-
423
- it 'restocks the items' do
424
- variant = shipment.inventory_units.first.variant
425
- shipment.stock_location = mock_model(Spree::StockLocation)
426
- expect(shipment.stock_location).to receive(:restock).with(variant, 1, shipment)
427
- shipment.after_cancel
428
- end
429
-
430
- context "with backordered inventory units" do
431
- let(:order) { create(:order) }
432
- let(:variant) { create(:variant) }
433
- let(:other_order) { create(:order) }
434
-
435
- before do
436
- order.contents.add variant
437
- order.create_proposed_shipments
438
-
439
- other_order.contents.add variant
440
- other_order.create_proposed_shipments
441
- end
442
-
443
- it "doesn't fill backorders when restocking inventory units" do
444
- shipment = order.shipments.first
445
- expect(shipment.inventory_units.count).to eq 1
446
- expect(shipment.inventory_units.first).to be_backordered
447
-
448
- other_shipment = other_order.shipments.first
449
- expect(other_shipment.inventory_units.count).to eq 1
450
- expect(other_shipment.inventory_units.first).to be_backordered
451
-
452
- expect {
453
- shipment.cancel!
454
- }.not_to change { other_shipment.inventory_units.first.state }
455
- end
456
- end
457
- end
458
-
459
- context "#resume" do
460
- let(:inventory_unit) { create(:inventory_unit) }
461
-
462
- before { shipment.state = 'canceled' }
463
-
464
- context "when order cannot ship" do
465
- before { allow(order).to receive_messages(can_ship?: false) }
466
- it "should result in a 'pending' state" do
467
- shipment.resume!
468
- expect(shipment.state).to eq 'pending'
469
- end
470
- end
471
-
472
- context "when order is not paid" do
473
- before { allow(order).to receive_messages(paid?: false) }
474
- it "should result in a 'ready' state" do
475
- shipment.resume!
476
- expect(shipment.state).to eq 'pending'
477
- end
478
- end
479
-
480
- context "when any inventory is backordered" do
481
- before { allow_any_instance_of(Spree::InventoryUnit).to receive(:allow_ship?).and_return(false) }
482
- it "should result in a 'ready' state" do
483
- shipment.resume!
484
- expect(shipment.state).to eq 'pending'
485
- end
486
- end
487
-
488
- context "when the order is paid, shippable, and not backordered" do
489
- before do
490
- allow(order).to receive_messages(can_ship?: true)
491
- allow(order).to receive_messages(paid?: true)
492
- allow_any_instance_of(Spree::InventoryUnit).to receive(:allow_ship?).and_return(true)
493
- end
494
-
495
- it "should result in a 'ready' state" do
496
- shipment.resume!
497
- expect(shipment.state).to eq 'ready'
498
- end
499
- end
500
-
501
- it 'unstocks them items' do
502
- variant = shipment.inventory_units.first.variant
503
- shipment.stock_location = mock_model(Spree::StockLocation)
504
- expect(shipment.stock_location).to receive(:unstock).with(variant, 1, shipment)
505
- shipment.after_resume
506
- end
507
- end
508
-
509
- context "#ship" do
510
- context "when the shipment is canceled" do
511
- let(:address){ create(:address) }
512
- let(:order){ create(:order_with_line_items, ship_address: address) }
513
- let(:shipment_with_inventory_units) { create(:shipment, order: order, state: 'canceled') }
514
- let(:subject) { shipment_with_inventory_units.ship! }
515
- before do
516
- allow(order).to receive(:update!)
517
- end
518
-
519
- it 'unstocks them items' do
520
- expect(shipment_with_inventory_units.stock_location).to receive(:unstock).with(an_instance_of(Spree::Variant), 1, shipment_with_inventory_units)
521
- subject
522
- end
523
- end
524
-
525
- ['ready', 'canceled'].each do |state|
526
- context "from #{state}" do
527
- before do
528
- allow(order).to receive(:update!)
529
- allow(shipment).to receive_messages(state: state)
530
- end
531
-
532
- it "finalizes adjustments" do
533
- shipment.adjustments.each do |adjustment|
534
- expect(adjustment).to receive(:finalize!)
535
- end
536
- shipment.ship!
537
- end
538
- end
539
- end
540
- end
541
-
542
- context "#ready" do
543
- # Regression test for https://github.com/spree/spree/issues/2040
544
- it "cannot ready a shipment for an order if the order is unpaid" do
545
- expect(order).to receive_messages(paid?: false)
546
- expect(shipment).not_to be_can_ready
547
- end
548
- end
549
-
550
- context "updates cost when selected shipping rate is present" do
551
- let(:shipment) { create(:shipment) }
552
- before { shipment.selected_shipping_rate.update!(cost: 5) }
553
-
554
- it "updates shipment totals" do
555
- expect {
556
- shipment.update_amounts
557
- }.to change { shipment.cost }.to(5)
558
- end
559
- end
560
-
561
- context "changes shipping rate via general update" do
562
- let!(:ship_address) { create(:address) }
563
- let!(:tax_zone) { create(:global_zone) } # will include the above address
564
- let!(:tax_rate) { create(:tax_rate, amount: 0.10, zone: tax_zone, tax_categories: [tax_category]) }
565
- let(:tax_category) { create(:tax_category) }
566
-
567
- let(:order) do
568
- create(
569
- :order_ready_to_ship,
570
- ship_address: ship_address,
571
- shipment_cost: 10,
572
- shipping_method: ten_dollar_shipping_method,
573
- line_items_count: 1,
574
- line_items_price: 100,
575
- )
576
- end
577
-
578
- let(:ten_dollar_shipping_method) { create(:shipping_method, tax_category: tax_category, zones: [tax_zone], cost: 10) }
579
- let(:twenty_dollar_shipping_method) { create(:shipping_method, tax_category: tax_category, zones: [tax_zone], cost: 20) }
580
-
581
- let(:shipment) { order.shipments[0] }
582
-
583
- let(:twenty_dollar_shipping_rate) do
584
- create(:shipping_rate, cost: 20, shipment: shipment, shipping_method: twenty_dollar_shipping_method)
585
- end
586
-
587
- it "updates everything around order shipment total and state" do
588
- expect(shipment.state).to eq 'ready'
589
- expect(shipment.cost).to eq 10
590
- expect(shipment.additional_tax_total).to eq 1
591
-
592
- expect(order.shipment_total).to eq 10
593
- expect(order.total).to eq 121 # shipment: 10 + 1 (tax) + line item: 100 + 10 (tax)
594
- expect(order.payment_state).to eq 'paid'
595
-
596
- shipment.update_attributes_and_order selected_shipping_rate_id: twenty_dollar_shipping_rate.id
597
-
598
- expect(shipment.state).to eq 'pending'
599
- expect(shipment.cost).to eq 20
600
- expect(shipment.additional_tax_total).to eq 2
601
-
602
- expect(order.shipment_total).to eq 20
603
- expect(order.total).to eq 132 # shipment: 20 + 2 (tax) + line item: 100 + 10 (tax)
604
- expect(order.payment_state).to eq 'balance_due'
605
- end
606
- end
607
-
608
- context "currency" do
609
- it "returns the order currency" do
610
- expect(shipment.currency).to eq(order.currency)
611
- end
612
- end
613
-
614
- context "nil costs" do
615
- it "sets cost to 0" do
616
- shipment = Spree::Shipment.new
617
- shipment.valid?
618
- expect(shipment.cost).to eq 0
619
- end
620
- end
621
-
622
- context "#tracking_url" do
623
- subject { shipment.tracking_url }
624
-
625
- context "when tracking has not yet been set" do
626
- it { is_expected.to be nil }
627
- end
628
-
629
- context "when tracking has been set, but a shipping method is not present" do
630
- before do
631
- shipment.tracking = "12345"
632
- shipment.shipping_rates.clear
633
- end
634
-
635
- it { is_expected.to be nil }
636
- end
637
-
638
- context "when tracking has been set and a shipping method exists" do
639
- before do
640
- shipment.tracking = "12345"
641
- shipment.shipping_method.update(tracking_url: "https://example.com/:tracking")
642
- end
643
-
644
- it "builds the tracking url with the shipping method" do
645
- expect(subject).to eql("https://example.com/12345")
646
- end
647
- end
648
- end
649
-
650
- context "set up new inventory units" do
651
- # let(:line_item) { double(
652
- let(:variant) { double("Variant", id: 9) }
653
-
654
- let(:inventory_units) { double }
655
-
656
- let(:params) do
657
- { variant_id: variant.id, state: 'on_hand', line_item_id: line_item.id }
658
- end
659
-
660
- before { allow(shipment).to receive_messages inventory_units: inventory_units }
661
-
662
- it "associates variant and order" do
663
- expect(inventory_units).to receive(:create).with(params)
664
- shipment.set_up_inventory('on_hand', variant, order, line_item)
665
- end
666
- end
667
-
668
- # Regression test for https://github.com/spree/spree/issues/3349
669
- context "#destroy" do
670
- let(:shipping_rate) do
671
- Spree::ShippingRate.create!(
672
- shipping_method: shipping_method,
673
- selected: true,
674
- taxes: [Spree::ShippingRateTax.new(amount: 20)]
675
- )
676
- end
677
- it "destroys linked shipping_rates and shipping_rate_taxes" do
678
- shipping_rate = shipment.shipping_rates.first
679
- shipping_rate_tax = shipping_rate.taxes.first
680
-
681
- shipment.destroy
682
-
683
- expect{ shipping_rate.reload }.to raise_error(ActiveRecord::RecordNotFound)
684
- expect{ shipping_rate_tax.reload }.to raise_error(ActiveRecord::RecordNotFound)
685
- end
686
- end
687
-
688
- # Regression test for https://github.com/spree/spree/issues/4072 (kinda)
689
- # The need for this was discovered in the research for https://github.com/spree/spree/issues/4702
690
- context "state changes" do
691
- before do
692
- # Must be stubbed so transition can succeed
693
- allow(order).to receive_messages paid?: true
694
- end
695
-
696
- it "are logged to the database" do
697
- expect(shipment.state_changes).to be_empty
698
- expect(shipment.ready!).to be true
699
- expect(shipment.state_changes.count).to eq(1)
700
- state_change = shipment.state_changes.first
701
- expect(state_change.previous_state).to eq('pending')
702
- expect(state_change.next_state).to eq('ready')
703
- end
704
- end
705
-
706
- context "don't require shipment" do
707
- let(:stock_location) { create(:stock_location, fulfillable: false) }
708
- let(:unshippable_shipment) do
709
- create(
710
- :shipment,
711
- stock_location: stock_location,
712
- inventory_units: [build(:inventory_unit)]
713
- )
714
- end
715
-
716
- before { allow(order).to receive_messages paid?: true }
717
-
718
- it 'proceeds automatically to shipped state' do
719
- unshippable_shipment.ready!
720
- expect(unshippable_shipment.state).to eq('shipped')
721
- end
722
-
723
- it 'does not send a confirmation email' do
724
- expect {
725
- unshippable_shipment.ready!
726
- unshippable_shipment.inventory_units.reload.each do |unit|
727
- expect(unit.state).to eq('shipped')
728
- end
729
- }.not_to change{ ActionMailer::Base.deliveries.count }
730
- end
731
- end
732
-
733
- context "destroy prevention" do
734
- it "can be destroyed when pending" do
735
- shipment = create(:shipment, state: "pending")
736
- expect(shipment.destroy).to be_truthy
737
- expect { shipment.reload }.to raise_error(ActiveRecord::RecordNotFound)
738
- end
739
-
740
- it "can be destroyed when ready" do
741
- shipment = create(:shipment, state: "ready")
742
- expect(shipment.destroy).to be_truthy
743
- expect { shipment.reload }.to raise_error(ActiveRecord::RecordNotFound)
744
- end
745
-
746
- it "cannot be destroyed when shipped" do
747
- shipment = create(:shipment, state: "shipped")
748
- expect(shipment.destroy).to eq false
749
- expect(shipment.errors.full_messages.join).to match /Cannot destroy/
750
- expect { shipment.reload }.not_to raise_error
751
- end
752
-
753
- it "cannot be destroyed when canceled" do
754
- shipment = create(:shipment, state: "canceled")
755
- expect(shipment.destroy).to eq false
756
- expect(shipment.errors.full_messages.join).to match /Cannot destroy/
757
- expect { shipment.reload }.not_to raise_error
758
- end
759
- end
760
-
761
- describe "#finalize!" do
762
- let(:inventory_unit) { shipment.inventory_units.first }
763
- let(:stock_item) { inventory_unit.variant.stock_items.find_by(stock_location: stock_location) }
764
- let(:inventory_unit_finalizer) { double(:inventory_unit_finalizer, run!: [true]) }
765
-
766
- before do
767
- allow(Spree::Stock::InventoryUnitsFinalizer)
768
- .to receive(:new).and_return(inventory_unit_finalizer)
769
-
770
- stock_item.set_count_on_hand(10)
771
- stock_item.update_attributes!(backorderable: false)
772
- inventory_unit.update_attributes!(pending: true)
773
- end
774
-
775
- subject { shipment.finalize! }
776
-
777
- it "call run! on Spree::Stock::InventoryUnitsFinalizer" do
778
- expect(inventory_unit_finalizer).to receive(:run!)
779
-
780
- subject
781
- end
782
-
783
- context "inventory unit already finalized" do
784
- let(:inventory_unit) { build(:inventory_unit, pending: false) }
785
-
786
- it "doesn't pass the inventory unit" do
787
- expect(Spree::Stock::InventoryUnitsFinalizer)
788
- .to receive(:new).with([])
789
-
790
- subject
791
- end
792
-
793
- it "doesn't update the associated inventory units" do
794
- expect { subject }.to_not change { inventory_unit.reload.updated_at }
795
- end
796
-
797
- it "doesn't unstock the variant" do
798
- expect { subject }.to_not change { stock_item.reload.count_on_hand }
799
- end
800
- end
801
- end
802
-
803
- describe ".by_store" do
804
- it "returns shipments by store" do
805
- olivanders_store = create(:store, name: 'Olivanders')
806
- wizard_shipment = create(:shipment, order: create(:order, store: olivanders_store))
807
- create(:shipment, order: build(:order, store: create(:store, name: 'Target')))
808
-
809
- shipments = Spree::Shipment.by_store(olivanders_store)
810
-
811
- expect(Spree::Shipment.count).to eq(2)
812
- expect(shipments.count).to eq(1)
813
- expect(shipments.first).to eq(wizard_shipment)
814
- end
815
- end
816
-
817
- describe '#selected_shipping_rate_id=' do
818
- let!(:air_shipping_method) { create(:shipping_method, name: "Air") }
819
- let(:new_rate) { shipment.shipping_rates.create!(shipping_method: air_shipping_method) }
820
-
821
- context 'selecting the same id' do
822
- it 'keeps the same shipping rate selected' do
823
- expect {
824
- shipment.selected_shipping_rate_id = shipping_rate.id
825
- }.not_to change { shipping_rate.selected }.from(true)
826
- end
827
- end
828
-
829
- context 'when the id exists' do
830
- it 'sets the new shipping rate as selected' do
831
- expect {
832
- shipment.selected_shipping_rate_id = new_rate.id
833
- }.to change { new_rate.selected }.from(false).to(true)
834
- end
835
-
836
- it 'sets the old shipping rate as not selected' do
837
- expect {
838
- shipment.selected_shipping_rate_id = new_rate.id
839
- }.to change { shipping_rate.selected }.from(true).to(false)
840
- end
841
- end
842
-
843
- context 'when the id does not exist' do
844
- it 'raises a RecordNotFound error' do
845
- expect {
846
- shipment.selected_shipping_rate_id = -1
847
- }.to raise_error(ArgumentError)
848
-
849
- # Should not change selection
850
- expect(shipping_rate.reload).to be_selected
851
- end
852
- end
853
- end
854
-
855
- describe "#shipping_method" do
856
- let(:shipment) { create(:shipment) }
857
-
858
- subject { shipment.shipping_method }
859
-
860
- context "when no shipping rate is selected" do
861
- before do
862
- shipment.shipping_rates.update_all(selected: false)
863
- shipment.reload
864
- end
865
-
866
- it { is_expected.to be_nil }
867
- end
868
-
869
- context "when a shipping rate is selected" do
870
- it "is expected to be the shipping rate's shipping method" do
871
- expect(shipment.shipping_method).to eq(shipment.selected_shipping_rate.shipping_method)
872
- end
873
- end
874
- end
875
-
876
- describe '#can_transition_from_pending_to_ready?' do
877
- let(:shipment) { create(:shipment, order: order) }
878
-
879
- subject { shipment.can_transition_from_pending_to_ready? }
880
-
881
- context "with backordered inventory" do
882
- before { shipment.inventory_units.update_all(state: "backordered") }
883
-
884
- it "returns false" do
885
- expect(subject).to be false
886
- end
887
- end
888
-
889
- context "with on_hand inventory" do
890
- before { shipment.inventory_units.update_all(state: "on_hand") }
891
-
892
- it "returns true" do
893
- expect(subject).to be true
894
- end
895
- end
896
-
897
- context "with shipped inventory" do
898
- before { shipment.inventory_units.update_all(state: "shipped") }
899
-
900
- it "returns true" do
901
- expect(subject).to be true
902
- end
903
- end
904
- end
905
-
906
- describe '#cartons' do
907
- let(:carton) { create(:carton) }
908
- let(:shipment) { carton.shipments.first }
909
-
910
- subject { shipment.cartons }
911
-
912
- it { is_expected.to include carton }
913
- end
914
- end