solidus_core 1.1.4 → 1.2.0.beta1

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 (296) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/logo/solidus_logo.png +0 -0
  3. data/app/helpers/spree/base_helper.rb +2 -3
  4. data/app/models/concerns/spree/adjustment_source.rb +1 -1
  5. data/app/models/concerns/spree/default_price.rb +3 -1
  6. data/app/models/concerns/spree/named_type.rb +1 -1
  7. data/app/models/concerns/spree/user_methods.rb +10 -0
  8. data/app/models/spree/adjustment.rb +1 -1
  9. data/app/models/spree/adjustment_reason.rb +2 -4
  10. data/app/models/spree/app_configuration.rb +36 -0
  11. data/app/models/spree/base.rb +10 -1
  12. data/app/models/spree/calculator/tiered_percent.rb +2 -1
  13. data/app/models/spree/classification.rb +1 -1
  14. data/app/models/spree/country.rb +3 -3
  15. data/app/models/spree/credit_card.rb +2 -2
  16. data/app/models/spree/customer_return.rb +3 -4
  17. data/app/models/spree/inventory_unit.rb +13 -24
  18. data/app/models/spree/item_adjustments.rb +5 -5
  19. data/app/models/spree/line_item.rb +6 -15
  20. data/app/models/spree/log_entry.rb +1 -1
  21. data/app/models/spree/option_type.rb +4 -2
  22. data/app/models/spree/option_type_prototype.rb +6 -0
  23. data/app/models/spree/option_value.rb +1 -1
  24. data/app/models/spree/order.rb +18 -63
  25. data/app/models/spree/order/checkout.rb +4 -2
  26. data/app/models/spree/order_cancellations.rb +52 -1
  27. data/app/models/spree/order_contents.rb +1 -1
  28. data/app/models/spree/order_merger.rb +143 -0
  29. data/app/models/spree/order_shipping.rb +3 -3
  30. data/app/models/spree/order_update_attributes.rb +42 -0
  31. data/app/models/spree/order_updater.rb +1 -1
  32. data/app/models/spree/payment.rb +16 -10
  33. data/app/models/spree/payment_create.rb +68 -0
  34. data/app/models/spree/payment_method.rb +0 -1
  35. data/app/models/spree/preference.rb +1 -1
  36. data/app/models/spree/price.rb +1 -8
  37. data/app/models/spree/product.rb +9 -44
  38. data/app/models/spree/product/scopes.rb +9 -7
  39. data/app/models/spree/promotion/rules/nth_order.rb +1 -1
  40. data/app/models/spree/promotion/rules/taxon.rb +2 -1
  41. data/app/models/spree/promotion_chooser.rb +1 -0
  42. data/app/models/spree/promotion_code.rb +1 -1
  43. data/app/models/spree/promotion_rule_taxon.rb +6 -0
  44. data/app/models/spree/property.rb +2 -1
  45. data/app/models/spree/property_prototype.rb +6 -0
  46. data/app/models/spree/prototype.rb +6 -2
  47. data/app/models/spree/reimbursement.rb +10 -0
  48. data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +1 -1
  49. data/app/models/spree/return_reason.rb +1 -7
  50. data/app/models/spree/role_user.rb +3 -5
  51. data/app/models/spree/shipment.rb +6 -11
  52. data/app/models/spree/shipping_method.rb +1 -7
  53. data/app/models/spree/shipping_rate.rb +3 -14
  54. data/app/models/spree/stock/coordinator.rb +48 -4
  55. data/app/models/spree/stock/estimator.rb +3 -6
  56. data/app/models/spree/stock/packer.rb +18 -2
  57. data/app/models/spree/stock/shipping_rate_selector.rb +16 -0
  58. data/app/models/spree/stock/shipping_rate_sorter.rb +16 -0
  59. data/app/models/spree/stock_item.rb +19 -15
  60. data/app/models/spree/stock_location.rb +2 -12
  61. data/app/models/spree/stock_transfer.rb +3 -3
  62. data/app/models/spree/store_credit.rb +2 -2
  63. data/app/models/spree/tax_category.rb +3 -2
  64. data/app/models/spree/tax_rate.rb +7 -14
  65. data/app/models/spree/taxon.rb +4 -1
  66. data/app/models/spree/taxonomy.rb +1 -1
  67. data/app/models/spree/transfer_item.rb +2 -2
  68. data/app/models/spree/unit_cancel.rb +2 -0
  69. data/app/models/spree/variant.rb +9 -14
  70. data/app/models/spree/zone.rb +6 -0
  71. data/app/models/spree/zone_member.rb +1 -4
  72. data/app/views/spree/order_mailer/cancel_email.text.erb +0 -0
  73. data/config/locales/en.yml +7 -5
  74. data/db/default/spree/countries.rb +1 -1
  75. data/db/default/spree/zones.rb +5 -11
  76. data/db/migrate/20130213191427_create_default_stock.rb +1 -1
  77. data/db/migrate/20130306181701_add_address_fields_to_stock_location.rb +1 -1
  78. data/db/migrate/20140309033438_create_store_from_preferences.rb +5 -2
  79. data/db/migrate/20141009204607_add_store_id_to_orders.rb +6 -2
  80. data/db/migrate/20141215235502_remove_extra_products_slug_index.rb +5 -0
  81. data/db/migrate/20141217215630_update_product_slug_index.rb +6 -0
  82. data/db/migrate/20150225205344_move_promotion_code_to_promotion_code_value.rb +2 -2
  83. data/db/migrate/20150609093816_increase_scale_on_pre_tax_amounts.rb +10 -0
  84. data/db/migrate/20151117063249_convert_habtm_to_hmt_for_properties_prototypes.rb +17 -0
  85. data/db/migrate/20151124062500_convert_habtm_to_hmt_for_option_type_prototypes.rb +17 -0
  86. data/db/migrate/20151126063028_convert_habtm_to_hmt_for_taxons_promotion_rules.rb +15 -0
  87. data/db/migrate/20151219020209_add_stock_item_unique_index.rb +9 -0
  88. data/lib/generators/spree/dummy/dummy_generator.rb +1 -1
  89. data/lib/generators/spree/dummy/templates/rails/database.yml +1 -1
  90. data/lib/generators/spree/install/templates/config/initializers/spree.rb +25 -1
  91. data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/backend/all.js +3 -0
  92. data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/frontend/all.js +3 -0
  93. data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/backend/all.css +3 -0
  94. data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +3 -0
  95. data/lib/spree/core/controller_helpers/common.rb +1 -1
  96. data/lib/spree/core/controller_helpers/order.rb +1 -1
  97. data/lib/spree/core/controller_helpers/payment_parameters.rb +104 -5
  98. data/lib/spree/core/engine.rb +3 -2
  99. data/lib/spree/core/stock_configuration.rb +11 -0
  100. data/lib/spree/core/unreturned_item_charger.rb +4 -4
  101. data/lib/spree/core/version.rb +9 -1
  102. data/lib/spree/permission_sets/restricted_stock_transfer_management.rb +15 -24
  103. data/lib/spree/permitted_attributes.rb +3 -1
  104. data/lib/spree/testing_support/capybara_ext.rb +14 -40
  105. data/lib/spree/testing_support/factories.rb +0 -15
  106. data/lib/spree/testing_support/factories/address_factory.rb +3 -0
  107. data/lib/spree/testing_support/factories/adjustment_factory.rb +9 -1
  108. data/lib/spree/testing_support/factories/carton_factory.rb +4 -1
  109. data/lib/spree/testing_support/factories/customer_return_factory.rb +4 -0
  110. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +5 -0
  111. data/lib/spree/testing_support/factories/line_item_factory.rb +3 -0
  112. data/lib/spree/testing_support/factories/option_type_factory.rb +6 -0
  113. data/lib/spree/testing_support/factories/{options_factory.rb → option_value_factory.rb} +0 -5
  114. data/lib/spree/testing_support/factories/order_factory.rb +13 -3
  115. data/lib/spree/testing_support/factories/order_promotion_factory.rb +3 -0
  116. data/lib/spree/testing_support/factories/payment_factory.rb +13 -5
  117. data/lib/spree/testing_support/factories/price_factory.rb +2 -0
  118. data/lib/spree/testing_support/factories/product_factory.rb +7 -1
  119. data/lib/spree/testing_support/factories/product_option_type_factory.rb +3 -0
  120. data/lib/spree/testing_support/factories/product_property_factory.rb +3 -0
  121. data/lib/spree/testing_support/factories/promotion_code_factory.rb +3 -0
  122. data/lib/spree/testing_support/factories/promotion_factory.rb +3 -0
  123. data/lib/spree/testing_support/factories/prototype_factory.rb +2 -0
  124. data/lib/spree/testing_support/factories/refund_factory.rb +10 -5
  125. data/lib/spree/testing_support/factories/refund_reason_factory.rb +5 -0
  126. data/lib/spree/testing_support/factories/reimbursement_factory.rb +2 -0
  127. data/lib/spree/testing_support/factories/return_authorization_factory.rb +4 -4
  128. data/lib/spree/testing_support/factories/return_item_factory.rb +4 -0
  129. data/lib/spree/testing_support/factories/return_reason_factory.rb +5 -0
  130. data/lib/spree/testing_support/factories/shipment_factory.rb +6 -1
  131. data/lib/spree/testing_support/factories/shipping_method_factory.rb +22 -10
  132. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +9 -0
  133. data/lib/spree/testing_support/factories/state_factory.rb +2 -0
  134. data/lib/spree/testing_support/factories/stock_item_factory.rb +4 -1
  135. data/lib/spree/testing_support/factories/stock_location_factory.rb +8 -0
  136. data/lib/spree/testing_support/factories/stock_movement_factory.rb +2 -0
  137. data/lib/spree/testing_support/factories/{stock_factory.rb → stock_package_factory.rb} +5 -10
  138. data/lib/spree/testing_support/factories/stock_packer_factory.rb +13 -0
  139. data/lib/spree/testing_support/factories/stock_transfer_factory.rb +2 -2
  140. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +4 -1
  141. data/lib/spree/testing_support/factories/store_credit_factory.rb +10 -6
  142. data/lib/spree/testing_support/factories/tax_category_factory.rb +2 -0
  143. data/lib/spree/testing_support/factories/tax_rate_factory.rb +4 -0
  144. data/lib/spree/testing_support/factories/taxon_factory.rb +2 -0
  145. data/lib/spree/testing_support/factories/user_factory.rb +6 -2
  146. data/lib/spree/testing_support/factories/variant_factory.rb +5 -0
  147. data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +3 -0
  148. data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +4 -0
  149. data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +3 -0
  150. data/lib/spree/testing_support/factories/zone_factory.rb +6 -0
  151. data/lib/spree/testing_support/sequences.rb +9 -0
  152. data/lib/tasks/exchanges.rake +4 -3
  153. data/lib/tasks/migrations/copy_shipped_shipments_to_cartons.rake +2 -2
  154. data/solidus_core.gemspec +4 -5
  155. data/spec/helpers/base_helper_spec.rb +6 -6
  156. data/spec/helpers/order_helper_spec.rb +1 -1
  157. data/spec/helpers/products_helper_spec.rb +2 -2
  158. data/spec/helpers/taxons_helper_spec.rb +1 -1
  159. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +107 -7
  160. data/spec/lib/spree/core/importer/order_spec.rb +1 -1
  161. data/spec/lib/spree/core/stock_configuration_spec.rb +16 -0
  162. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +24 -0
  163. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +18 -0
  164. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +12 -0
  165. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +42 -0
  166. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +12 -0
  167. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +12 -0
  168. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +12 -0
  169. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +28 -0
  170. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +12 -0
  171. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +12 -0
  172. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +12 -0
  173. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +12 -0
  174. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +12 -0
  175. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +49 -0
  176. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +12 -0
  177. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +24 -0
  178. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +30 -0
  179. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +12 -0
  180. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +30 -0
  181. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +12 -0
  182. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +12 -0
  183. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +12 -0
  184. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +12 -0
  185. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +30 -0
  186. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +12 -0
  187. data/spec/lib/spree/core/testing_support/factories/prototype_factory_spec.rb +12 -0
  188. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +12 -0
  189. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +12 -0
  190. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +12 -0
  191. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +12 -0
  192. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +12 -0
  193. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +18 -0
  194. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +12 -0
  195. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +18 -0
  196. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +12 -0
  197. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +12 -0
  198. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +28 -0
  199. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +12 -0
  200. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +12 -0
  201. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +12 -0
  202. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +24 -0
  203. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +12 -0
  204. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +26 -0
  205. data/spec/lib/spree/core/testing_support/factories/stock_packer_factory_spec.rb +16 -0
  206. data/spec/lib/spree/core/testing_support/factories/stock_transfer_factory_spec.rb +12 -0
  207. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +12 -0
  208. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +42 -0
  209. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +12 -0
  210. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +18 -0
  211. data/spec/lib/spree/core/testing_support/factories/store_credit_update_reason_factory_spec.rb +12 -0
  212. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +12 -0
  213. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +12 -0
  214. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +12 -0
  215. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +12 -0
  216. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +12 -0
  217. data/spec/lib/spree/core/testing_support/factories/tracker_factory_spec.rb +12 -0
  218. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +22 -0
  219. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +36 -0
  220. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +12 -0
  221. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +12 -0
  222. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +12 -0
  223. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +18 -0
  224. data/spec/lib/spree/core/unreturned_item_charger_spec.rb +1 -1
  225. data/spec/lib/spree/core/version_spec.rb +17 -0
  226. data/spec/lib/spree/money_spec.rb +1 -1
  227. data/spec/mailers/carton_mailer_spec.rb +1 -1
  228. data/spec/mailers/order_mailer_spec.rb +1 -1
  229. data/spec/mailers/reimbursement_mailer_spec.rb +1 -3
  230. data/spec/mailers/test_mailer_spec.rb +1 -3
  231. data/spec/models/spree/address_spec.rb +4 -4
  232. data/spec/models/spree/adjustment_reason_spec.rb +1 -3
  233. data/spec/models/spree/app_configuration_spec.rb +4 -0
  234. data/spec/models/spree/calculator/price_sack_spec.rb +3 -3
  235. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +3 -3
  236. data/spec/models/spree/calculator/tiered_percent_spec.rb +86 -10
  237. data/spec/models/spree/carton_spec.rb +3 -1
  238. data/spec/models/spree/classification_spec.rb +3 -3
  239. data/spec/models/spree/credit_card_spec.rb +16 -16
  240. data/spec/models/spree/customer_return_spec.rb +1 -1
  241. data/spec/models/spree/gateway/bogus_simple.rb +1 -1
  242. data/spec/models/spree/inventory_unit_spec.rb +3 -3
  243. data/spec/models/spree/item_adjustments_spec.rb +1 -1
  244. data/spec/models/spree/line_item_spec.rb +2 -2
  245. data/spec/models/spree/option_type_spec.rb +2 -2
  246. data/spec/models/spree/option_value_spec.rb +2 -2
  247. data/spec/models/spree/order/callbacks_spec.rb +1 -1
  248. data/spec/models/spree/order/checkout_spec.rb +16 -11
  249. data/spec/models/spree/order/payment_spec.rb +24 -22
  250. data/spec/models/spree/order/state_machine_spec.rb +1 -1
  251. data/spec/models/spree/order/validations_spec.rb +1 -1
  252. data/spec/models/spree/order_cancellations_spec.rb +63 -0
  253. data/spec/models/spree/order_contents_spec.rb +1 -1
  254. data/spec/models/spree/order_merger_spec.rb +133 -0
  255. data/spec/models/spree/order_spec.rb +39 -159
  256. data/spec/models/spree/order_update_attributes_spec.rb +82 -0
  257. data/spec/models/spree/order_updater_spec.rb +6 -4
  258. data/spec/models/spree/payment_create_spec.rb +131 -0
  259. data/spec/models/spree/payment_spec.rb +130 -48
  260. data/spec/models/spree/permission_sets/restricted_stock_transfer_management_spec.rb +91 -33
  261. data/spec/models/spree/product_filter_spec.rb +3 -3
  262. data/spec/models/spree/product_spec.rb +80 -26
  263. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +1 -1
  264. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +2 -2
  265. data/spec/models/spree/promotion/rules/nth_order_spec.rb +1 -1
  266. data/spec/models/spree/promotion/rules/user_spec.rb +2 -2
  267. data/spec/models/spree/promotion_handler/coupon_spec.rb +2 -2
  268. data/spec/models/spree/promotion_spec.rb +18 -18
  269. data/spec/models/spree/reimbursement_spec.rb +22 -0
  270. data/spec/models/spree/return_item_spec.rb +2 -2
  271. data/spec/models/spree/shipment_spec.rb +28 -12
  272. data/spec/models/spree/shipping_method_spec.rb +2 -2
  273. data/spec/models/spree/shipping_rate_spec.rb +3 -3
  274. data/spec/models/spree/stock/coordinator_spec.rb +5 -0
  275. data/spec/models/spree/stock/estimator_spec.rb +35 -1
  276. data/spec/models/spree/stock/package_spec.rb +1 -1
  277. data/spec/models/spree/stock/packer_spec.rb +2 -3
  278. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +16 -0
  279. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +16 -0
  280. data/spec/models/spree/stock_item_spec.rb +5 -7
  281. data/spec/models/spree/stock_location_spec.rb +5 -9
  282. data/spec/models/spree/stock_transfer_spec.rb +33 -13
  283. data/spec/models/spree/store_credit_event_spec.rb +1 -1
  284. data/spec/models/spree/store_credit_spec.rb +1 -1
  285. data/spec/models/spree/tax_rate_spec.rb +381 -120
  286. data/spec/models/spree/taxon_spec.rb +3 -3
  287. data/spec/models/spree/transfer_item_spec.rb +4 -4
  288. data/spec/models/spree/unit_cancel_spec.rb +1 -1
  289. data/spec/models/spree/variant_spec.rb +3 -3
  290. data/spec/models/spree/zone_spec.rb +35 -1
  291. data/spec/support/concerns/working_factories.rb +9 -0
  292. data/vendor/assets/javascripts/jquery-migrate-1.0.0.js +498 -0
  293. data/vendor/assets/javascripts/jquery.payment.js +231 -80
  294. metadata +103 -27
  295. data/app/models/spree/order/currency_updater.rb +0 -40
  296. data/spec/models/spree/order/currency_updater_spec.rb +0 -32
@@ -228,4 +228,26 @@ describe Spree::Reimbursement, type: :model do
228
228
  expect(subject.customer_return).to eq customer_return
229
229
  end
230
230
  end
231
+
232
+ describe "#return_all" do
233
+ subject { reimbursement.return_all }
234
+
235
+ let!(:default_refund_reason) { Spree::RefundReason.find_or_create_by!(name: Spree::RefundReason::RETURN_PROCESSING_REASON, mutable: false) }
236
+ let(:order) { create(:shipped_order, line_items_count: 1) }
237
+ let(:inventory_unit) { order.inventory_units.first }
238
+ let(:return_item) { build(:return_item, inventory_unit: inventory_unit) }
239
+ let(:reimbursement) { build(:reimbursement, order: order, return_items: [return_item]) }
240
+
241
+ it "accepts all the return items" do
242
+ expect { subject }.to change { return_item.acceptance_status }.to "accepted"
243
+ end
244
+
245
+ it "persists the reimbursement" do
246
+ expect { subject }.to change { reimbursement.persisted? }.to true
247
+ end
248
+
249
+ it "performs a reimbursment" do
250
+ expect { subject }.to change { reimbursement.refunds.count }.by(1)
251
+ end
252
+ end
231
253
  end
@@ -18,7 +18,7 @@ describe Spree::ReturnItem, :type => :model do
18
18
  end
19
19
 
20
20
  describe '#receive!' do
21
- let(:now) { Time.now }
21
+ let(:now) { Time.current }
22
22
  let(:order) { create(:shipped_order)}
23
23
  let(:inventory_unit) { create(:inventory_unit, order: order,state: 'shipped') }
24
24
  let!(:customer_return) { create(:customer_return_without_return_items, return_items: [return_item], stock_location_id: inventory_unit.shipment.stock_location_id) }
@@ -660,7 +660,7 @@ describe Spree::ReturnItem, :type => :model do
660
660
  let(:old_reception_status) { 'cancelled' }
661
661
 
662
662
  it 'succeeds' do
663
- expect { subject.save! }.to_not raise_error
663
+ subject.save!
664
664
  end
665
665
  end
666
666
 
@@ -1,8 +1,7 @@
1
1
  require 'spec_helper'
2
2
  require 'benchmark'
3
3
 
4
- describe Spree::Shipment, :type => :model do
5
- let(:stock_location) { create(:stock_location) }
4
+ describe Spree::Shipment, type: :model do
6
5
  let(:order) { create(:order_ready_to_ship, line_items_count: 1) }
7
6
  let(:shipping_method) { create(:shipping_method, name: "UPS") }
8
7
  let(:stock_location) { create(:stock_location) }
@@ -33,11 +32,9 @@ describe Spree::Shipment, :type => :model do
33
32
  end
34
33
  end
35
34
 
36
- # Regression test for #4063
35
+ # Regression test for https://github.com/spree/spree/issues/4063
37
36
  context "number generation" do
38
- before do
39
- allow(order).to receive :update!
40
- end
37
+ before { allow(order).to receive :update! }
41
38
 
42
39
  it "generates a number containing a letter + 11 numbers" do
43
40
  shipment.save
@@ -210,6 +207,11 @@ describe Spree::Shipment, :type => :model do
210
207
  expect(shipment.refresh_rates).to eq([])
211
208
  end
212
209
 
210
+ it 'uses the pluggable estimator class' do
211
+ expect(Spree::StockConfiguration).to receive(:estimator_class).and_call_original
212
+ shipment.refresh_rates
213
+ end
214
+
213
215
  context 'to_package' do
214
216
  let(:inventory_units) do
215
217
  [build(:inventory_unit, line_item: line_item, variant: variant, state: 'on_hand'),
@@ -314,7 +316,7 @@ describe Spree::Shipment, :type => :model do
314
316
  shipment.update!(order)
315
317
  end
316
318
 
317
- # Regression test for #4347
319
+ # Regression test for https://github.com/spree/spree/issues/4347
318
320
  context "with adjustments" do
319
321
  before do
320
322
  shipment.adjustments << Spree::Adjustment.create(order: order, label: "Label", amount: 5)
@@ -322,7 +324,7 @@ describe Spree::Shipment, :type => :model do
322
324
 
323
325
  it "transitions to shipped" do
324
326
  shipment.update_column(:state, "ready")
325
- expect { shipment.ship! }.not_to raise_error
327
+ shipment.ship!
326
328
  end
327
329
  end
328
330
  end
@@ -493,7 +495,7 @@ describe Spree::Shipment, :type => :model do
493
495
  end
494
496
 
495
497
  context "#ready" do
496
- # Regression test for #2040
498
+ # Regression test for https://github.com/spree/spree/issues/2040
497
499
  it "cannot ready a shipment for an order if the order is unpaid" do
498
500
  expect(order).to receive_messages(paid?: false)
499
501
  expect(shipment).not_to be_can_ready
@@ -633,7 +635,7 @@ describe Spree::Shipment, :type => :model do
633
635
  end
634
636
  end
635
637
 
636
- # Regression test for #3349
638
+ # Regression test for https://github.com/spree/spree/issues/3349
637
639
  context "#destroy" do
638
640
  it "destroys linked shipping_rates" do
639
641
  reflection = Spree::Shipment.reflect_on_association(:shipping_rates)
@@ -641,8 +643,8 @@ describe Spree::Shipment, :type => :model do
641
643
  end
642
644
  end
643
645
 
644
- # Regression test for #4072 (kinda)
645
- # The need for this was discovered in the research for #4702
646
+ # Regression test for https://github.com/spree/spree/issues/4072 (kinda)
647
+ # The need for this was discovered in the research for https://github.com/spree/spree/issues/4702
646
648
  context "state changes" do
647
649
  before do
648
650
  # Must be stubbed so transition can succeed
@@ -750,4 +752,18 @@ describe Spree::Shipment, :type => :model do
750
752
  end
751
753
  end
752
754
  end
755
+
756
+ describe ".by_store" do
757
+ it "returns shipments by store" do
758
+ olivanders_store = create(:store, name: 'Olivanders')
759
+ wizard_shipment = create(:shipment, order: create(:order, store: olivanders_store))
760
+ create(:shipment, order: build(:order, store: create(:store, name: 'Target')))
761
+
762
+ shipments = Spree::Shipment.by_store(olivanders_store)
763
+
764
+ expect(Spree::Shipment.count).to eq(2)
765
+ expect(shipments.count).to eq(1)
766
+ expect(shipments.first).to eq(wizard_shipment)
767
+ end
768
+ end
753
769
  end
@@ -20,7 +20,7 @@ describe Spree::ShippingMethod, :type => :model do
20
20
  end
21
21
  end
22
22
 
23
- # Regression test for #4492
23
+ # Regression test for https://github.com/spree/spree/issues/4492
24
24
  context "#shipments" do
25
25
  let!(:shipping_method) { create(:shipping_method) }
26
26
  let!(:shipment) do
@@ -77,7 +77,7 @@ describe Spree::ShippingMethod, :type => :model do
77
77
  end
78
78
  end
79
79
 
80
- # Regression test for #4320
80
+ # Regression test for https://github.com/spree/spree/issues/4320
81
81
  context "soft deletion" do
82
82
  let(:shipping_method) { create(:shipping_method) }
83
83
  it "soft-deletes when destroy is called" do
@@ -97,14 +97,14 @@ describe Spree::ShippingRate, :type => :model do
97
97
  end
98
98
  end
99
99
 
100
- # Regression test for #3829
100
+ # Regression test for https://github.com/spree/spree/issues/3829
101
101
  context "#shipping_method" do
102
102
  it "can be retrieved" do
103
103
  expect(shipping_rate.shipping_method.reload).to eq(shipping_method)
104
104
  end
105
105
 
106
106
  it "can be retrieved even when deleted" do
107
- shipping_method.update_column(:deleted_at, Time.now)
107
+ shipping_method.update_column(:deleted_at, Time.current)
108
108
  shipping_rate.save
109
109
  shipping_rate.reload
110
110
  expect(shipping_rate.shipping_method).to eq(shipping_method)
@@ -123,7 +123,7 @@ describe Spree::ShippingRate, :type => :model do
123
123
  end
124
124
 
125
125
  it "can be retrieved even when deleted" do
126
- tax_rate.update_column(:deleted_at, Time.now)
126
+ tax_rate.update_column(:deleted_at, Time.current)
127
127
  shipping_rate.save
128
128
  shipping_rate.reload
129
129
  expect(shipping_rate.tax_rate).to eq(tax_rate)
@@ -15,6 +15,11 @@ module Spree
15
15
  expect(subject).to receive(:estimate_packages).ordered
16
16
  subject.packages
17
17
  end
18
+
19
+ it 'uses the pluggable estimator class' do
20
+ expect(Spree::StockConfiguration).to receive(:estimator_class).and_call_original
21
+ subject.packages
22
+ end
18
23
  end
19
24
 
20
25
  describe "#shipments" do
@@ -117,7 +117,7 @@ module Spree
117
117
  expect(subject.shipping_rates(package).map(&:shipping_method_id)).to eq([generic_method.id])
118
118
  end
119
119
 
120
- # regression for #3287
120
+ # regression for https://github.com/spree/spree/issues/3287
121
121
  it "doesn't select backend rates even if they're more affordable" do
122
122
  expect(subject.shipping_rates(package).map(&:selected)).to eq [true]
123
123
  end
@@ -140,6 +140,40 @@ module Spree
140
140
  expect(shipping_rates.first.tax_rate).to eq(tax_rate)
141
141
  end
142
142
  end
143
+
144
+ it 'uses the configured shipping rate selector' do
145
+ shipping_rate = Spree::ShippingRate.new
146
+ allow(Spree::ShippingRate).to receive(:new).and_return(shipping_rate)
147
+
148
+ selector_class = Class.new do
149
+ def initialize(_); end;
150
+
151
+ def find_default
152
+ Spree::ShippingRate.new
153
+ end
154
+ end
155
+ Spree::Config.shipping_rate_selector_class = selector_class
156
+
157
+ subject.shipping_rates(package)
158
+
159
+ expect(shipping_rate.selected).to eq(true)
160
+
161
+ Spree::Config.shipping_rate_selector_class = nil
162
+ end
163
+
164
+ it 'uses the configured shipping rate sorter' do
165
+ class Spree::Stock::TestSorter; end;
166
+ Spree::Config.shipping_rate_sorter_class = Spree::Stock::TestSorter
167
+
168
+ sorter = double(:sorter, sort: nil)
169
+ allow(Spree::Stock::TestSorter).to receive(:new).and_return(sorter)
170
+
171
+ subject.shipping_rates(package)
172
+
173
+ expect(sorter).to have_received(:sort)
174
+
175
+ Spree::Config.shipping_rate_sorter_class = nil
176
+ end
143
177
  end
144
178
  end
145
179
  end
@@ -47,7 +47,7 @@ module Spree
47
47
  expect(item.quantity).to eq 1
48
48
  end
49
49
 
50
- # Contains regression test for #2804
50
+ # Contains regression test for https://github.com/spree/spree/issues/2804
51
51
  it 'builds a list of shipping methods common to all categories' do
52
52
  category1 = create(:shipping_category)
53
53
  category2 = create(:shipping_category)
@@ -28,9 +28,8 @@ module Spree
28
28
  end
29
29
 
30
30
  it 'variants are added as backordered without enough on_hand' do
31
- expect(stock_location).to receive(:fill_status).exactly(5).times.and_return(
32
- *(Array.new(3, [1,0]) + Array.new(2, [0,1]))
33
- )
31
+ inventory_units[0..2].each { |iu| stock_location.stock_item(iu.variant_id).set_count_on_hand(1) }
32
+ inventory_units[3..4].each { |iu| stock_location.stock_item(iu.variant_id).set_count_on_hand(0) }
34
33
 
35
34
  package = subject.default_package
36
35
  expect(package.on_hand.size).to eq 3
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Stock::ShippingRateSelector do
4
+ describe '#sort' do
5
+ it 'sorts by increasing cost' do
6
+ cheapest_shipping_rate = Spree::ShippingRate.new(cost: 1.00)
7
+ middle_shipping_rate = Spree::ShippingRate.new(cost: 5.00)
8
+ expensive_shipping_rate = Spree::ShippingRate.new(cost: 42.00)
9
+ shipping_rates = [expensive_shipping_rate, middle_shipping_rate, cheapest_shipping_rate]
10
+
11
+ sorter = Spree::Stock::ShippingRateSelector.new(shipping_rates)
12
+
13
+ expect(sorter.find_default).to eq(cheapest_shipping_rate)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Stock::ShippingRateSorter do
4
+ describe '#sort' do
5
+ it 'sorts by increasing cost' do
6
+ cheapest_shipping_rate = Spree::ShippingRate.new(cost: 1.00)
7
+ middle_shipping_rate = Spree::ShippingRate.new(cost: 5.00)
8
+ expensive_shipping_rate = Spree::ShippingRate.new(cost: 42.00)
9
+ shipping_rates = [expensive_shipping_rate, middle_shipping_rate, cheapest_shipping_rate]
10
+
11
+ sorter = Spree::Stock::ShippingRateSorter.new(shipping_rates)
12
+
13
+ expect(sorter.sort).to eq([cheapest_shipping_rate, middle_shipping_rate, expensive_shipping_rate])
14
+ end
15
+ end
16
+ end
@@ -77,7 +77,7 @@ describe Spree::StockItem, :type => :model do
77
77
  subject.update_column(:count_on_hand, -2)
78
78
  end
79
79
 
80
- # Regression test for #3755
80
+ # Regression test for https://github.com/spree/spree/issues/3755
81
81
  it "processes existing backorders, even with negative stock" do
82
82
  expect(inventory_unit).to receive(:fill_backorder)
83
83
  expect(inventory_unit_2).not_to receive(:fill_backorder)
@@ -85,7 +85,7 @@ describe Spree::StockItem, :type => :model do
85
85
  expect(subject.count_on_hand).to eq(-1)
86
86
  end
87
87
 
88
- # Test for #3755
88
+ # Test for https://github.com/spree/spree/issues/3755
89
89
  it "does not process backorders when stock is adjusted negatively" do
90
90
  expect(inventory_unit).not_to receive(:fill_backorder)
91
91
  expect(inventory_unit_2).not_to receive(:fill_backorder)
@@ -149,7 +149,7 @@ describe Spree::StockItem, :type => :model do
149
149
  before { Spree::StockMovement.create(stock_item: subject, quantity: 1) }
150
150
 
151
151
  it "doesnt raise ReadOnlyRecord error" do
152
- expect { subject.destroy }.not_to raise_error
152
+ subject.destroy
153
153
  end
154
154
  end
155
155
 
@@ -157,9 +157,7 @@ describe Spree::StockItem, :type => :model do
157
157
  before { subject.destroy }
158
158
 
159
159
  it "recreates stock item just fine" do
160
- expect {
161
- stock_location.stock_items.create!(variant: subject.variant)
162
- }.not_to raise_error
160
+ stock_location.stock_items.create!(variant: subject.variant)
163
161
  end
164
162
 
165
163
  it "doesnt allow recreating more than one stock item at once" do
@@ -264,7 +262,7 @@ describe Spree::StockItem, :type => :model do
264
262
  end
265
263
  end
266
264
 
267
- # Regression test for #4651
265
+ # Regression test for https://github.com/spree/spree/issues/4651
268
266
  context "variant" do
269
267
  it "can be found even if the variant is deleted" do
270
268
  subject.variant.destroy
@@ -170,10 +170,7 @@ module Spree
170
170
  end
171
171
 
172
172
  it 'zero on_hand with all backordered' do
173
- zero_stock_item = mock_model(StockItem,
174
- count_on_hand: 0,
175
- backorderable?: true)
176
- expect(subject).to receive(:stock_item).with(variant).and_return(zero_stock_item)
173
+ stock_item.set_count_on_hand(0)
177
174
 
178
175
  on_hand, backordered = subject.fill_status(variant, 20)
179
176
  expect(on_hand).to eq 0
@@ -182,12 +179,11 @@ module Spree
182
179
 
183
180
  context 'when backordering is not allowed' do
184
181
  before do
185
- @stock_item = mock_model(StockItem, backorderable?: false)
186
- expect(subject).to receive(:stock_item).with(variant).and_return(@stock_item)
182
+ stock_item.update!(backorderable: false)
187
183
  end
188
184
 
189
185
  it 'all on_hand' do
190
- allow(@stock_item).to receive_messages(count_on_hand: 10)
186
+ stock_item.set_count_on_hand(10)
191
187
 
192
188
  on_hand, backordered = subject.fill_status(variant, 5)
193
189
  expect(on_hand).to eq 5
@@ -195,7 +191,7 @@ module Spree
195
191
  end
196
192
 
197
193
  it 'some on_hand' do
198
- allow(@stock_item).to receive_messages(count_on_hand: 10)
194
+ stock_item.set_count_on_hand(10)
199
195
 
200
196
  on_hand, backordered = subject.fill_status(variant, 20)
201
197
  expect(on_hand).to eq 10
@@ -203,7 +199,7 @@ module Spree
203
199
  end
204
200
 
205
201
  it 'zero on_hand' do
206
- allow(@stock_item).to receive_messages(count_on_hand: 0)
202
+ stock_item.set_count_on_hand(0)
207
203
 
208
204
  on_hand, backordered = subject.fill_status(variant, 20)
209
205
  expect(on_hand).to eq 0
@@ -48,7 +48,7 @@ module Spree
48
48
 
49
49
  context "finalized" do
50
50
  before do
51
- stock_transfer.update_attributes(finalized_at: Time.now)
51
+ stock_transfer.update_attributes(finalized_at: Time.current)
52
52
  end
53
53
 
54
54
  it { is_expected.to eq false }
@@ -56,7 +56,7 @@ module Spree
56
56
 
57
57
  context "shipped" do
58
58
  before do
59
- stock_transfer.update_attributes(shipped_at: Time.now)
59
+ stock_transfer.update_attributes(shipped_at: Time.current)
60
60
  end
61
61
 
62
62
  it { is_expected.to eq false }
@@ -64,7 +64,7 @@ module Spree
64
64
 
65
65
  context "closed" do
66
66
  before do
67
- stock_transfer.update_attributes(closed_at: Time.now)
67
+ stock_transfer.update_attributes(closed_at: Time.current)
68
68
  end
69
69
 
70
70
  it { is_expected.to eq false }
@@ -72,7 +72,7 @@ module Spree
72
72
 
73
73
  context "finalized and closed" do
74
74
  before do
75
- stock_transfer.update_attributes(finalized_at: Time.now, closed_at: Time.now)
75
+ stock_transfer.update_attributes(finalized_at: Time.current, closed_at: Time.current)
76
76
  end
77
77
 
78
78
  it { is_expected.to eq false }
@@ -80,7 +80,7 @@ module Spree
80
80
 
81
81
  context "shipped and closed" do
82
82
  before do
83
- stock_transfer.update_attributes(shipped_at: Time.now, closed_at: Time.now)
83
+ stock_transfer.update_attributes(shipped_at: Time.current, closed_at: Time.current)
84
84
  end
85
85
 
86
86
  it { is_expected.to eq false }
@@ -88,7 +88,7 @@ module Spree
88
88
 
89
89
  context "finalized and shipped" do
90
90
  before do
91
- stock_transfer.update_attributes(finalized_at: Time.now, shipped_at: Time.now)
91
+ stock_transfer.update_attributes(finalized_at: Time.current, shipped_at: Time.current)
92
92
  end
93
93
 
94
94
  it { is_expected.to eq true }
@@ -100,7 +100,7 @@ module Spree
100
100
 
101
101
  context "finalized" do
102
102
  before do
103
- stock_transfer.update_attributes(finalized_at: Time.now)
103
+ stock_transfer.update_attributes(finalized_at: Time.current)
104
104
  end
105
105
 
106
106
  it { is_expected.to eq false }
@@ -108,7 +108,7 @@ module Spree
108
108
 
109
109
  context "shipped" do
110
110
  before do
111
- stock_transfer.update_attributes(shipped_at: Time.now)
111
+ stock_transfer.update_attributes(shipped_at: Time.current)
112
112
  end
113
113
 
114
114
  it { is_expected.to eq false }
@@ -116,7 +116,7 @@ module Spree
116
116
 
117
117
  context "closed" do
118
118
  before do
119
- stock_transfer.update_attributes(closed_at: Time.now)
119
+ stock_transfer.update_attributes(closed_at: Time.current)
120
120
  end
121
121
 
122
122
  it { is_expected.to eq false }
@@ -124,7 +124,7 @@ module Spree
124
124
 
125
125
  context "finalized and closed" do
126
126
  before do
127
- stock_transfer.update_attributes(finalized_at: Time.now, closed_at: Time.now)
127
+ stock_transfer.update_attributes(finalized_at: Time.current, closed_at: Time.current)
128
128
  end
129
129
 
130
130
  it { is_expected.to eq false }
@@ -132,7 +132,7 @@ module Spree
132
132
 
133
133
  context "shipped and closed" do
134
134
  before do
135
- stock_transfer.update_attributes(shipped_at: Time.now, closed_at: Time.now)
135
+ stock_transfer.update_attributes(shipped_at: Time.current, closed_at: Time.current)
136
136
  end
137
137
 
138
138
  it { is_expected.to eq false }
@@ -165,7 +165,7 @@ module Spree
165
165
 
166
166
  context "can't be finalized" do
167
167
  before do
168
- stock_transfer.update_attributes(finalized_at: Time.now)
168
+ stock_transfer.update_attributes(finalized_at: Time.current)
169
169
  end
170
170
 
171
171
  it "doesn't set a finalized_at date" do
@@ -225,7 +225,7 @@ module Spree
225
225
 
226
226
  context "stock transfer is finalized" do
227
227
  before do
228
- stock_transfer.update_attributes!(finalized_at: Time.now)
228
+ stock_transfer.update_attributes!(finalized_at: Time.current)
229
229
  end
230
230
 
231
231
  it "doesn't destroy the stock transfer" do
@@ -249,6 +249,26 @@ module Spree
249
249
  end
250
250
  end
251
251
 
252
+ describe '#ship' do
253
+ let(:stock_transfer) { create(:stock_transfer, tracking_number: "ABC123") }
254
+
255
+ context "tracking number is provided" do
256
+ subject { stock_transfer.ship(tracking_number: "XYZ123") }
257
+
258
+ it "updates the tracking number" do
259
+ expect { subject }.to change { stock_transfer.tracking_number }.from("ABC123").to("XYZ123")
260
+ end
261
+ end
262
+
263
+ context "tracking number is not provided" do
264
+ subject { stock_transfer.ship }
265
+
266
+ it "preserves the existing tracking number" do
267
+ expect { subject }.to_not change { stock_transfer.tracking_number }.from("ABC123")
268
+ end
269
+ end
270
+ end
271
+
252
272
  describe '#transfer' do
253
273
  let(:stock_transfer) { create(:stock_transfer_with_items) }
254
274