solidus_core 2.10.3 → 2.11.4

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.

Potentially problematic release.


This version of solidus_core might be problematic. Click here for more details.

Files changed (552) 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 +2 -2
  19. data/app/models/spree/calculator.rb +4 -4
  20. data/app/models/spree/calculator/default_tax.rb +1 -1
  21. data/app/models/spree/calculator/free_shipping.rb +1 -0
  22. data/app/models/spree/calculator/percent_per_item.rb +6 -4
  23. data/app/models/spree/calculator/price_sack.rb +2 -1
  24. data/app/models/spree/credit_card.rb +2 -2
  25. data/app/models/spree/customer_return.rb +4 -2
  26. data/app/models/spree/exchange.rb +1 -1
  27. data/app/models/spree/image/active_storage_attachment.rb +21 -0
  28. data/app/models/spree/inventory_unit.rb +1 -1
  29. data/app/models/spree/line_item.rb +13 -4
  30. data/app/models/spree/option_type.rb +1 -1
  31. data/app/models/spree/option_value.rb +2 -2
  32. data/app/models/spree/order.rb +91 -20
  33. data/app/models/spree/order/checkout.rb +1 -0
  34. data/app/models/spree/order/payments.rb +2 -2
  35. data/app/models/spree/order_inventory.rb +16 -4
  36. data/app/models/spree/order_merger.rb +6 -4
  37. data/app/models/spree/order_promotion.rb +1 -1
  38. data/app/models/spree/order_updater.rb +11 -10
  39. data/app/models/spree/payment.rb +3 -3
  40. data/app/models/spree/payment/cancellation.rb +3 -22
  41. data/app/models/spree/payment/processing.rb +54 -30
  42. data/app/models/spree/payment_method.rb +8 -9
  43. data/app/models/spree/payment_source.rb +2 -2
  44. data/app/models/spree/preference.rb +1 -1
  45. data/app/models/spree/price.rb +2 -8
  46. data/app/models/spree/product.rb +19 -14
  47. data/app/models/spree/product/scopes.rb +9 -5
  48. data/app/models/spree/promotion.rb +18 -7
  49. data/app/models/spree/promotion/actions/free_shipping.rb +6 -5
  50. data/app/models/spree/promotion_action.rb +1 -7
  51. data/app/models/spree/promotion_code.rb +6 -1
  52. data/app/models/spree/promotion_code_batch.rb +1 -1
  53. data/app/models/spree/promotion_handler/coupon.rb +2 -2
  54. data/app/models/spree/promotion_rule.rb +1 -1
  55. data/app/models/spree/promotion_rule_role.rb +1 -1
  56. data/app/models/spree/refund.rb +60 -12
  57. data/app/models/spree/reimbursement.rb +27 -0
  58. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +10 -3
  59. data/app/models/spree/return_authorization.rb +1 -1
  60. data/app/models/spree/return_item.rb +21 -10
  61. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +1 -1
  62. data/app/models/spree/role.rb +1 -1
  63. data/app/models/spree/shipment.rb +2 -2
  64. data/app/models/spree/shipping_calculator.rb +1 -1
  65. data/app/models/spree/shipping_manifest.rb +2 -2
  66. data/app/models/spree/shipping_method.rb +2 -9
  67. data/app/models/spree/shipping_rate.rb +1 -1
  68. data/app/models/spree/shipping_rate_tax.rb +1 -1
  69. data/app/models/spree/stock/inventory_unit_builder.rb +18 -7
  70. data/app/models/spree/stock/inventory_units_finalizer.rb +3 -5
  71. data/app/models/spree/stock/package.rb +1 -1
  72. data/app/models/spree/stock/simple_coordinator.rb +1 -3
  73. data/app/models/spree/stock_item.rb +2 -8
  74. data/app/models/spree/stock_movement.rb +2 -0
  75. data/app/models/spree/store.rb +1 -1
  76. data/app/models/spree/store_credit.rb +1 -7
  77. data/app/models/spree/store_credit_category.rb +30 -3
  78. data/app/models/spree/store_credit_event.rb +1 -7
  79. data/app/models/spree/store_credit_reason.rb +0 -4
  80. data/app/models/spree/tax/tax_helpers.rb +1 -1
  81. data/app/models/spree/tax_category.rb +2 -8
  82. data/app/models/spree/tax_rate.rb +7 -7
  83. data/app/models/spree/taxon.rb +1 -1
  84. data/app/models/spree/taxon/active_storage_attachment.rb +19 -0
  85. data/app/models/spree/user_address.rb +8 -2
  86. data/app/models/spree/variant.rb +7 -13
  87. data/app/models/spree/variant_property_rule.rb +5 -1
  88. data/app/models/spree/wallet/add_payment_sources_to_wallet.rb +8 -3
  89. data/app/models/spree/zone.rb +1 -1
  90. data/config/locales/en.yml +44 -5
  91. data/db/default/spree/countries.rb +1 -1
  92. data/db/default/spree/states.rb +12 -4
  93. data/db/default/spree/store_credit.rb +2 -2
  94. data/db/migrate/20180416083007_add_apply_to_all_to_variant_property_rule.rb +12 -0
  95. data/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb +6 -0
  96. data/db/migrate/20200530111458_add_bcc_email_to_spree_stores.rb +7 -0
  97. data/db/migrate/20201008213609_add_discontinue_on_to_spree_products.rb +7 -0
  98. data/lib/generators/solidus/install/install_generator.rb +253 -0
  99. data/lib/generators/{spree → solidus}/install/templates/config/initializers/spree.rb.tt +36 -5
  100. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/backend/all.js +0 -0
  101. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/javascripts/spree/frontend/all.js +0 -0
  102. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/backend/all.css +0 -0
  103. data/lib/generators/{spree → solidus}/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +0 -0
  104. data/lib/generators/spree/dummy/templates/rails/test.rb +1 -1
  105. data/lib/generators/spree/install/install_generator.rb +7 -189
  106. data/lib/solidus/migrations/promotions_with_code_handlers.rb +1 -1
  107. data/lib/spree/app_configuration.rb +117 -51
  108. data/lib/spree/awesome_nested_set_override.rb +44 -0
  109. data/lib/spree/core.rb +6 -11
  110. data/lib/spree/core/controller_helpers/auth.rb +17 -4
  111. data/lib/spree/core/controller_helpers/current_host.rb +17 -0
  112. data/lib/spree/core/controller_helpers/order.rb +8 -7
  113. data/lib/spree/core/engine.rb +39 -2
  114. data/lib/spree/core/importer/order.rb +24 -10
  115. data/lib/spree/core/permalinks.rb +1 -3
  116. data/lib/spree/core/product_filters.rb +6 -5
  117. data/lib/spree/core/state_machines.rb +20 -1
  118. data/lib/spree/core/state_machines/order.rb +249 -0
  119. data/lib/spree/core/state_machines/return_item/reception_status.rb +2 -2
  120. data/lib/spree/core/version.rb +1 -1
  121. data/lib/spree/encryptor.rb +25 -0
  122. data/lib/spree/event.rb +40 -7
  123. data/lib/spree/event/adapters/active_support_notifications.rb +32 -0
  124. data/lib/spree/event/configuration.rb +11 -6
  125. data/lib/spree/event/subscriber.rb +38 -18
  126. data/lib/spree/event/subscriber_registry.rb +92 -0
  127. data/lib/spree/i18n.rb +1 -1
  128. data/lib/spree/mailer_previews/carton_preview.rb +2 -1
  129. data/lib/spree/paranoia_deprecations.rb +32 -12
  130. data/lib/spree/permission_sets/configuration_display.rb +14 -14
  131. data/lib/spree/permission_sets/default_customer.rb +16 -16
  132. data/lib/spree/permission_sets/order_display.rb +11 -11
  133. data/lib/spree/permission_sets/order_management.rb +1 -1
  134. data/lib/spree/permission_sets/product_display.rb +9 -9
  135. data/lib/spree/permission_sets/promotion_display.rb +5 -5
  136. data/lib/spree/permission_sets/restricted_stock_display.rb +2 -2
  137. data/lib/spree/permission_sets/restricted_stock_management.rb +1 -1
  138. data/lib/spree/permission_sets/stock_display.rb +2 -2
  139. data/lib/spree/permission_sets/stock_management.rb +1 -1
  140. data/lib/spree/permission_sets/user_display.rb +3 -3
  141. data/lib/spree/permission_sets/user_management.rb +4 -3
  142. data/lib/spree/permitted_attributes.rb +9 -8
  143. data/lib/spree/preferences/preferable.rb +4 -3
  144. data/lib/spree/preferences/preferable_class_methods.rb +22 -3
  145. data/lib/spree/testing_support.rb +40 -0
  146. data/lib/spree/testing_support/ability_helpers.rb +9 -9
  147. data/lib/spree/testing_support/authorization_helpers.rb +1 -0
  148. data/lib/spree/testing_support/blacklist_urls.rb +23 -0
  149. data/lib/spree/testing_support/capybara_ext.rb +3 -0
  150. data/lib/spree/testing_support/common_rake.rb +3 -3
  151. data/lib/spree/testing_support/dummy_app.rb +44 -23
  152. data/lib/spree/testing_support/dummy_app/migrations.rb +5 -6
  153. data/lib/spree/testing_support/dummy_app/rake_tasks.rb +1 -3
  154. data/lib/spree/testing_support/factories.rb +2 -4
  155. data/lib/spree/testing_support/factories/address_factory.rb +3 -4
  156. data/lib/spree/testing_support/factories/adjustment_factory.rb +2 -5
  157. data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +3 -0
  158. data/lib/spree/testing_support/factories/calculator_factory.rb +3 -0
  159. data/lib/spree/testing_support/factories/carton_factory.rb +2 -2
  160. data/lib/spree/testing_support/factories/country_factory.rb +3 -0
  161. data/lib/spree/testing_support/factories/credit_card_factory.rb +3 -0
  162. data/lib/spree/testing_support/factories/customer_return_factory.rb +2 -3
  163. data/lib/spree/testing_support/factories/image_factory.rb +4 -1
  164. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +2 -4
  165. data/lib/spree/testing_support/factories/line_item_factory.rb +2 -2
  166. data/lib/spree/testing_support/factories/option_type_factory.rb +3 -0
  167. data/lib/spree/testing_support/factories/option_value_factory.rb +3 -0
  168. data/lib/spree/testing_support/factories/order_factory.rb +2 -6
  169. data/lib/spree/testing_support/factories/order_promotion_factory.rb +2 -2
  170. data/lib/spree/testing_support/factories/payment_factory.rb +2 -4
  171. data/lib/spree/testing_support/factories/payment_method_factory.rb +3 -0
  172. data/lib/spree/testing_support/factories/price_factory.rb +2 -1
  173. data/lib/spree/testing_support/factories/product_factory.rb +2 -5
  174. data/lib/spree/testing_support/factories/product_option_type_factory.rb +2 -2
  175. data/lib/spree/testing_support/factories/product_property_factory.rb +2 -2
  176. data/lib/spree/testing_support/factories/promotion_category_factory.rb +3 -0
  177. data/lib/spree/testing_support/factories/promotion_code_factory.rb +2 -2
  178. data/lib/spree/testing_support/factories/promotion_factory.rb +8 -2
  179. data/lib/spree/testing_support/factories/property_factory.rb +3 -0
  180. data/lib/spree/testing_support/factories/refund_factory.rb +3 -2
  181. data/lib/spree/testing_support/factories/refund_reason_factory.rb +3 -0
  182. data/lib/spree/testing_support/factories/reimbursement_factory.rb +3 -2
  183. data/lib/spree/testing_support/factories/reimbursement_type_factory.rb +3 -0
  184. data/lib/spree/testing_support/factories/return_authorization_factory.rb +2 -3
  185. data/lib/spree/testing_support/factories/return_item_factory.rb +2 -4
  186. data/lib/spree/testing_support/factories/return_reason_factory.rb +3 -0
  187. data/lib/spree/testing_support/factories/role_factory.rb +3 -0
  188. data/lib/spree/testing_support/factories/shipment_factory.rb +2 -3
  189. data/lib/spree/testing_support/factories/shipping_category_factory.rb +3 -0
  190. data/lib/spree/testing_support/factories/shipping_method_factory.rb +2 -3
  191. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +2 -2
  192. data/lib/spree/testing_support/factories/state_factory.rb +2 -1
  193. data/lib/spree/testing_support/factories/stock_item_factory.rb +2 -2
  194. data/lib/spree/testing_support/factories/stock_location_factory.rb +2 -3
  195. data/lib/spree/testing_support/factories/stock_movement_factory.rb +2 -1
  196. data/lib/spree/testing_support/factories/stock_package_factory.rb +2 -2
  197. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +11 -0
  198. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +3 -2
  199. data/lib/spree/testing_support/factories/store_credit_factory.rb +2 -3
  200. data/lib/spree/testing_support/factories/store_credit_reason_factory.rb +6 -1
  201. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +3 -0
  202. data/lib/spree/testing_support/factories/store_factory.rb +4 -1
  203. data/lib/spree/testing_support/factories/tax_category_factory.rb +2 -1
  204. data/lib/spree/testing_support/factories/tax_rate_factory.rb +2 -3
  205. data/lib/spree/testing_support/factories/taxon_factory.rb +6 -1
  206. data/lib/spree/testing_support/factories/taxonomy_factory.rb +3 -0
  207. data/lib/spree/testing_support/factories/user_factory.rb +2 -3
  208. data/lib/spree/testing_support/factories/variant_factory.rb +2 -4
  209. data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +2 -2
  210. data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +2 -3
  211. data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +2 -2
  212. data/lib/spree/testing_support/factories/zone_factory.rb +3 -3
  213. data/lib/spree/testing_support/fixtures/blank.jpg +0 -0
  214. data/lib/spree/testing_support/job_helpers.rb +24 -0
  215. data/lib/spree/testing_support/order_walkthrough.rb +1 -1
  216. data/lib/spree/testing_support/precompiled_assets.rb +15 -0
  217. data/lib/spree/testing_support/preferences.rb +3 -1
  218. data/lib/spree/testing_support/shared_examples/gallery.rb +1 -1
  219. data/lib/spree/testing_support/translations.rb +25 -0
  220. data/{app/models → lib}/spree/user_class_handle.rb +0 -0
  221. data/lib/tasks/email.rake +3 -2
  222. data/solidus_core.gemspec +8 -5
  223. metadata +97 -374
  224. data/script/rails +0 -10
  225. data/spec/fixtures/thinking-cat.jpg +0 -0
  226. data/spec/helpers/base_helper_spec.rb +0 -168
  227. data/spec/helpers/products_helper_spec.rb +0 -202
  228. data/spec/helpers/taxons_helper_spec.rb +0 -43
  229. data/spec/jobs/promotion_code_batch_job_spec.rb +0 -96
  230. data/spec/lib/calculated_adjustments_spec.rb +0 -133
  231. data/spec/lib/i18n_spec.rb +0 -97
  232. data/spec/lib/search/base_spec.rb +0 -91
  233. data/spec/lib/search/variant_spec.rb +0 -115
  234. data/spec/lib/spree/app_configuration_spec.rb +0 -140
  235. data/spec/lib/spree/core/class_constantizer_spec.rb +0 -91
  236. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -73
  237. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -126
  238. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +0 -195
  239. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +0 -94
  240. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -21
  241. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -18
  242. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -48
  243. data/spec/lib/spree/core/current_store_spec.rb +0 -33
  244. data/spec/lib/spree/core/environment_extension_spec.rb +0 -46
  245. data/spec/lib/spree/core/importer/order_spec.rb +0 -484
  246. data/spec/lib/spree/core/role_configuration_spec.rb +0 -155
  247. data/spec/lib/spree/core/stock_configuration_spec.rb +0 -95
  248. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +0 -61
  249. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +0 -20
  250. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +0 -14
  251. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +0 -44
  252. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +0 -14
  253. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +0 -14
  254. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +0 -14
  255. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +0 -39
  256. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +0 -14
  257. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +0 -14
  258. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +0 -14
  259. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +0 -14
  260. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +0 -14
  261. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -376
  262. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +0 -14
  263. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +0 -40
  264. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +0 -32
  265. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +0 -14
  266. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +0 -32
  267. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +0 -14
  268. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +0 -14
  269. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +0 -14
  270. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +0 -14
  271. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +0 -32
  272. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +0 -14
  273. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +0 -14
  274. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +0 -14
  275. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +0 -20
  276. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +0 -14
  277. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +0 -14
  278. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +0 -20
  279. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +0 -14
  280. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +0 -20
  281. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +0 -14
  282. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +0 -14
  283. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +0 -44
  284. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +0 -14
  285. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +0 -59
  286. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +0 -14
  287. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +0 -35
  288. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +0 -14
  289. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +0 -28
  290. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +0 -14
  291. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +0 -43
  292. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +0 -14
  293. data/spec/lib/spree/core/testing_support/factories/store_credit_reason_factory_spec.rb +0 -14
  294. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +0 -20
  295. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +0 -14
  296. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +0 -14
  297. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +0 -14
  298. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +0 -14
  299. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +0 -14
  300. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +0 -24
  301. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +0 -56
  302. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +0 -14
  303. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +0 -14
  304. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +0 -14
  305. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +0 -20
  306. data/spec/lib/spree/core/testing_support/preferences_spec.rb +0 -61
  307. data/spec/lib/spree/core/validators/email_spec.rb +0 -53
  308. data/spec/lib/spree/core/version_spec.rb +0 -19
  309. data/spec/lib/spree/event/subscriber_spec.rb +0 -85
  310. data/spec/lib/spree/event_spec.rb +0 -130
  311. data/spec/lib/spree/localized_number_spec.rb +0 -45
  312. data/spec/lib/spree/migrations_spec.rb +0 -32
  313. data/spec/lib/spree/money_spec.rb +0 -298
  314. data/spec/lib/spree/permission_sets/default_customer_spec.rb +0 -22
  315. data/spec/lib/spree/permitted_attributes_spec.rb +0 -41
  316. data/spec/lib/spree/promo/environment_spec.rb +0 -53
  317. data/spec/lib/tasks/dummy_task.rake +0 -12
  318. data/spec/lib/tasks/dummy_task_spec.rb +0 -30
  319. data/spec/lib/tasks/migrations/migrate_shipping_rate_taxes_spec.rb +0 -21
  320. data/spec/mailers/carton_mailer_spec.rb +0 -44
  321. data/spec/mailers/order_mailer_spec.rb +0 -117
  322. data/spec/mailers/promotion_code_batch_mailer_spec.rb +0 -47
  323. data/spec/mailers/reimbursement_mailer_spec.rb +0 -36
  324. data/spec/mailers/test_mailer_spec.rb +0 -13
  325. data/spec/models/spree/ability_spec.rb +0 -279
  326. data/spec/models/spree/address_spec.rb +0 -399
  327. data/spec/models/spree/adjustment_reason_spec.rb +0 -11
  328. data/spec/models/spree/adjustment_spec.rb +0 -339
  329. data/spec/models/spree/asset_spec.rb +0 -25
  330. data/spec/models/spree/calculator/default_tax_spec.rb +0 -260
  331. data/spec/models/spree/calculator/distributed_amount_spec.rb +0 -82
  332. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -39
  333. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -52
  334. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -158
  335. data/spec/models/spree/calculator/free_shipping_spec.rb +0 -8
  336. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -20
  337. data/spec/models/spree/calculator/percent_per_item_spec.rb +0 -12
  338. data/spec/models/spree/calculator/price_sack_spec.rb +0 -35
  339. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -70
  340. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -44
  341. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -18
  342. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -56
  343. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -25
  344. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -44
  345. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -99
  346. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -197
  347. data/spec/models/spree/calculator_spec.rb +0 -43
  348. data/spec/models/spree/carton_spec.rb +0 -145
  349. data/spec/models/spree/classification_spec.rb +0 -126
  350. data/spec/models/spree/concerns/display_money_spec.rb +0 -44
  351. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +0 -52
  352. data/spec/models/spree/concerns/user_address_book_spec.rb +0 -358
  353. data/spec/models/spree/concerns/user_methods_spec.rb +0 -122
  354. data/spec/models/spree/country_spec.rb +0 -154
  355. data/spec/models/spree/credit_card_spec.rb +0 -373
  356. data/spec/models/spree/customer_return_spec.rb +0 -294
  357. data/spec/models/spree/distributed_amounts_handler_spec.rb +0 -83
  358. data/spec/models/spree/exchange_spec.rb +0 -76
  359. data/spec/models/spree/fulfilment_changer_spec.rb +0 -340
  360. data/spec/models/spree/gallery/product_gallery_spec.rb +0 -21
  361. data/spec/models/spree/gallery/variant_gallery_spec.rb +0 -21
  362. data/spec/models/spree/gateway/bogus_simple.rb +0 -14
  363. data/spec/models/spree/gateway/bogus_spec.rb +0 -14
  364. data/spec/models/spree/gateway_spec.rb +0 -14
  365. data/spec/models/spree/image_spec.rb +0 -25
  366. data/spec/models/spree/inventory_unit_spec.rb +0 -309
  367. data/spec/models/spree/line_item_spec.rb +0 -240
  368. data/spec/models/spree/option_type_spec.rb +0 -16
  369. data/spec/models/spree/option_value_spec.rb +0 -52
  370. data/spec/models/spree/order/address_spec.rb +0 -52
  371. data/spec/models/spree/order/adjustments_spec.rb +0 -29
  372. data/spec/models/spree/order/callbacks_spec.rb +0 -44
  373. data/spec/models/spree/order/checkout_spec.rb +0 -740
  374. data/spec/models/spree/order/finalizing_spec.rb +0 -92
  375. data/spec/models/spree/order/number_generator_spec.rb +0 -47
  376. data/spec/models/spree/order/outstanding_balance_integration_spec.rb +0 -138
  377. data/spec/models/spree/order/payment_spec.rb +0 -280
  378. data/spec/models/spree/order/risk_assessment_spec.rb +0 -70
  379. data/spec/models/spree/order/state_machine_spec.rb +0 -122
  380. data/spec/models/spree/order/totals_spec.rb +0 -26
  381. data/spec/models/spree/order/validations_spec.rb +0 -17
  382. data/spec/models/spree/order_cancellations_spec.rb +0 -233
  383. data/spec/models/spree/order_capturing_spec.rb +0 -16
  384. data/spec/models/spree/order_contents_spec.rb +0 -362
  385. data/spec/models/spree/order_inventory_spec.rb +0 -285
  386. data/spec/models/spree/order_merger_spec.rb +0 -162
  387. data/spec/models/spree/order_mutex_spec.rb +0 -89
  388. data/spec/models/spree/order_promotion_spec.rb +0 -33
  389. data/spec/models/spree/order_shipping_spec.rb +0 -247
  390. data/spec/models/spree/order_spec.rb +0 -1687
  391. data/spec/models/spree/order_taxation_spec.rb +0 -128
  392. data/spec/models/spree/order_update_attributes_spec.rb +0 -49
  393. data/spec/models/spree/order_updater_spec.rb +0 -556
  394. data/spec/models/spree/payment/cancellation_spec.rb +0 -84
  395. data/spec/models/spree/payment_create_spec.rb +0 -195
  396. data/spec/models/spree/payment_method/bogus_credit_card_spec.rb +0 -10
  397. data/spec/models/spree/payment_method/check_spec.rb +0 -80
  398. data/spec/models/spree/payment_method/credit_card_spec.rb +0 -68
  399. data/spec/models/spree/payment_method/simple_bogus_credit_card_spec.rb +0 -20
  400. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -325
  401. data/spec/models/spree/payment_method_spec.rb +0 -408
  402. data/spec/models/spree/payment_spec.rb +0 -1270
  403. data/spec/models/spree/permission_sets/base_spec.rb +0 -14
  404. data/spec/models/spree/permission_sets/configuration_display.rb +0 -79
  405. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -49
  406. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -23
  407. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -56
  408. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -43
  409. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -57
  410. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -39
  411. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -41
  412. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -29
  413. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -42
  414. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -42
  415. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -25
  416. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -23
  417. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -39
  418. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -58
  419. data/spec/models/spree/preference_spec.rb +0 -79
  420. data/spec/models/spree/preferences/configuration_spec.rb +0 -27
  421. data/spec/models/spree/preferences/preferable_spec.rb +0 -334
  422. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -62
  423. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -79
  424. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -67
  425. data/spec/models/spree/preferences/store_spec.rb +0 -40
  426. data/spec/models/spree/price_spec.rb +0 -150
  427. data/spec/models/spree/product/scopes_spec.rb +0 -164
  428. data/spec/models/spree/product_duplicator_spec.rb +0 -92
  429. data/spec/models/spree/product_filter_spec.rb +0 -28
  430. data/spec/models/spree/product_property_spec.rb +0 -20
  431. data/spec/models/spree/product_spec.rb +0 -584
  432. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -126
  433. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -198
  434. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -298
  435. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -61
  436. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -87
  437. data/spec/models/spree/promotion/rules/first_repeat_purchase_since_spec.rb +0 -71
  438. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -128
  439. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -72
  440. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -54
  441. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -96
  442. data/spec/models/spree/promotion/rules/product_spec.rb +0 -193
  443. data/spec/models/spree/promotion/rules/store_spec.rb +0 -35
  444. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -227
  445. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -33
  446. data/spec/models/spree/promotion/rules/user_role_spec.rb +0 -88
  447. data/spec/models/spree/promotion/rules/user_spec.rb +0 -39
  448. data/spec/models/spree/promotion_action_spec.rb +0 -44
  449. data/spec/models/spree/promotion_category_spec.rb +0 -19
  450. data/spec/models/spree/promotion_code/batch_builder_spec.rb +0 -107
  451. data/spec/models/spree/promotion_code_batch_spec.rb +0 -54
  452. data/spec/models/spree/promotion_code_spec.rb +0 -206
  453. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -132
  454. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -419
  455. data/spec/models/spree/promotion_handler/page_spec.rb +0 -45
  456. data/spec/models/spree/promotion_handler/shipping_spec.rb +0 -96
  457. data/spec/models/spree/promotion_rule_spec.rb +0 -34
  458. data/spec/models/spree/promotion_spec.rb +0 -945
  459. data/spec/models/spree/refund_spec.rb +0 -200
  460. data/spec/models/spree/reimbursement/credit_spec.rb +0 -38
  461. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -144
  462. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -85
  463. data/spec/models/spree/reimbursement_performer_spec.rb +0 -33
  464. data/spec/models/spree/reimbursement_spec.rb +0 -278
  465. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -52
  466. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -56
  467. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -48
  468. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -110
  469. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -111
  470. data/spec/models/spree/return_authorization_spec.rb +0 -226
  471. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -79
  472. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -59
  473. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -86
  474. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -35
  475. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -31
  476. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -42
  477. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -66
  478. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  479. data/spec/models/spree/return_item_spec.rb +0 -785
  480. data/spec/models/spree/returns_calculator_spec.rb +0 -16
  481. data/spec/models/spree/shipment_spec.rb +0 -914
  482. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  483. data/spec/models/spree/shipping_manifest_spec.rb +0 -110
  484. data/spec/models/spree/shipping_method_spec.rb +0 -292
  485. data/spec/models/spree/shipping_rate_spec.rb +0 -154
  486. data/spec/models/spree/shipping_rate_tax_spec.rb +0 -79
  487. data/spec/models/spree/state_spec.rb +0 -43
  488. data/spec/models/spree/stock/allocator/on_hand_first_spec.rb +0 -146
  489. data/spec/models/spree/stock/availability_spec.rb +0 -143
  490. data/spec/models/spree/stock/availability_validator_spec.rb +0 -140
  491. data/spec/models/spree/stock/content_item_spec.rb +0 -70
  492. data/spec/models/spree/stock/differentiator_spec.rb +0 -41
  493. data/spec/models/spree/stock/estimator_spec.rb +0 -241
  494. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -34
  495. data/spec/models/spree/stock/inventory_units_finalizer_spec.rb +0 -58
  496. data/spec/models/spree/stock/location_filter/active_spec.rb +0 -22
  497. data/spec/models/spree/stock/location_sorter/default_first_spec.rb +0 -22
  498. data/spec/models/spree/stock/location_sorter/unsorted_spec.rb +0 -21
  499. data/spec/models/spree/stock/package_spec.rb +0 -182
  500. data/spec/models/spree/stock/quantifier_spec.rb +0 -113
  501. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +0 -18
  502. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +0 -18
  503. data/spec/models/spree/stock/simple_coordinator_spec.rb +0 -264
  504. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -31
  505. data/spec/models/spree/stock/splitter/base_spec.rb +0 -22
  506. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -48
  507. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -31
  508. data/spec/models/spree/stock/splitter_chain_spec.rb +0 -66
  509. data/spec/models/spree/stock_item_spec.rb +0 -348
  510. data/spec/models/spree/stock_location_spec.rb +0 -288
  511. data/spec/models/spree/stock_movement_spec.rb +0 -58
  512. data/spec/models/spree/stock_quantities_spec.rb +0 -249
  513. data/spec/models/spree/store_credit_category_spec.rb +0 -19
  514. data/spec/models/spree/store_credit_event_spec.rb +0 -328
  515. data/spec/models/spree/store_credit_spec.rb +0 -900
  516. data/spec/models/spree/store_selector/by_server_name_spec.rb +0 -28
  517. data/spec/models/spree/store_selector/legacy_spec.rb +0 -46
  518. data/spec/models/spree/store_spec.rb +0 -156
  519. data/spec/models/spree/tax/order_adjuster_spec.rb +0 -35
  520. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +0 -59
  521. data/spec/models/spree/tax/tax_location_spec.rb +0 -79
  522. data/spec/models/spree/tax/taxation_integration_spec.rb +0 -815
  523. data/spec/models/spree/tax_calculator/default_spec.rb +0 -56
  524. data/spec/models/spree/tax_category_spec.rb +0 -50
  525. data/spec/models/spree/tax_rate_spec.rb +0 -317
  526. data/spec/models/spree/taxon_spec.rb +0 -197
  527. data/spec/models/spree/taxonomy_spec.rb +0 -15
  528. data/spec/models/spree/taxons/paperclip_attachment_spec.rb +0 -29
  529. data/spec/models/spree/unit_cancel_spec.rb +0 -126
  530. data/spec/models/spree/user_last_url_storer/rules/authentication_rule_spec.rb +0 -31
  531. data/spec/models/spree/user_last_url_storer_spec.rb +0 -60
  532. data/spec/models/spree/user_spec.rb +0 -247
  533. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -33
  534. data/spec/models/spree/variant/price_selector_spec.rb +0 -90
  535. data/spec/models/spree/variant/pricing_options_spec.rb +0 -204
  536. data/spec/models/spree/variant/scopes_spec.rb +0 -94
  537. data/spec/models/spree/variant/vat_price_generator_spec.rb +0 -77
  538. data/spec/models/spree/variant_property_rule_condition_spec.rb +0 -17
  539. data/spec/models/spree/variant_property_rule_spec.rb +0 -85
  540. data/spec/models/spree/variant_property_rule_value_spec.rb +0 -20
  541. data/spec/models/spree/variant_spec.rb +0 -862
  542. data/spec/models/spree/wallet_payment_source_spec.rb +0 -77
  543. data/spec/models/spree/wallet_spec.rb +0 -155
  544. data/spec/models/spree/zone_spec.rb +0 -248
  545. data/spec/rails_helper.rb +0 -46
  546. data/spec/shared_examples/calculator_shared_examples.rb +0 -10
  547. data/spec/spec_helper.rb +0 -36
  548. data/spec/support/big_decimal.rb +0 -7
  549. data/spec/support/concerns/default_price.rb +0 -44
  550. data/spec/support/concerns/payment_source.rb +0 -66
  551. data/spec/support/concerns/working_factories.rb +0 -15
  552. 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 { described_class.new }
9
-
10
- it 'compute 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!(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!(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!(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!(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!(backorderable: false)
772
- inventory_unit.update!(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