solidus_core 1.2.3 → 1.3.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 (573) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/Rakefile +1 -1
  4. data/app/assets/javascripts/spree.js.coffee.erb +1 -1
  5. data/app/helpers/spree/base_helper.rb +21 -43
  6. data/app/helpers/spree/orders_helper.rb +0 -1
  7. data/app/helpers/spree/products_helper.rb +10 -12
  8. data/app/helpers/spree/taxons_helper.rb +4 -4
  9. data/app/mailers/spree/base_mailer.rb +1 -3
  10. data/app/mailers/spree/carton_mailer.rb +2 -2
  11. data/app/mailers/spree/order_mailer.rb +2 -2
  12. data/app/models/concerns/spree/adjustment_source.rb +12 -16
  13. data/app/models/concerns/spree/calculated_adjustments.rb +17 -14
  14. data/app/models/concerns/spree/default_price.rb +10 -26
  15. data/app/models/concerns/spree/display_money.rb +1 -1
  16. data/app/models/concerns/spree/ordered_property_value_list.rb +10 -12
  17. data/app/models/concerns/spree/ransackable_attributes.rb +6 -5
  18. data/app/models/concerns/spree/user_address_book.rb +87 -81
  19. data/app/models/concerns/spree/user_methods.rb +2 -2
  20. data/app/models/concerns/spree/user_payment_source.rb +12 -8
  21. data/app/models/spree/ability.rb +2 -2
  22. data/app/models/spree/address.rb +37 -38
  23. data/app/models/spree/adjustment.rb +2 -6
  24. data/app/models/spree/app_configuration.rb +60 -5
  25. data/app/models/spree/base.rb +1 -1
  26. data/app/models/spree/calculator/default_tax.rb +28 -24
  27. data/app/models/spree/calculator/flat_percent_item_total.rb +1 -1
  28. data/app/models/spree/calculator/flat_rate.rb +2 -2
  29. data/app/models/spree/calculator/flexi_rate.rb +4 -4
  30. data/app/models/spree/calculator/percent_per_item.rb +8 -9
  31. data/app/models/spree/calculator/price_sack.rb +3 -3
  32. data/app/models/spree/calculator/returns/default_refund_amount.rb +11 -12
  33. data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +1 -1
  34. data/app/models/spree/calculator/shipping/flat_rate.rb +2 -2
  35. data/app/models/spree/calculator/shipping/flexi_rate.rb +3 -3
  36. data/app/models/spree/calculator/shipping/per_item.rb +1 -1
  37. data/app/models/spree/calculator/shipping/price_sack.rb +3 -3
  38. data/app/models/spree/calculator/tiered_flat_rate.rb +2 -1
  39. data/app/models/spree/calculator/tiered_percent.rb +2 -1
  40. data/app/models/spree/calculator.rb +3 -3
  41. data/app/models/spree/carton.rb +2 -2
  42. data/app/models/spree/country.rb +7 -4
  43. data/app/models/spree/credit_card.rb +26 -22
  44. data/app/models/spree/customer_return.rb +8 -7
  45. data/app/models/spree/exchange.rb +1 -9
  46. data/app/models/spree/gateway/bogus.rb +31 -31
  47. data/app/models/spree/gateway/bogus_simple.rb +6 -8
  48. data/app/models/spree/gateway.rb +9 -15
  49. data/app/models/spree/image.rb +3 -3
  50. data/app/models/spree/inventory_unit.rb +23 -23
  51. data/app/models/spree/item_adjustments.rb +3 -2
  52. data/app/models/spree/legacy_user.rb +1 -5
  53. data/app/models/spree/line_item.rb +95 -84
  54. data/app/models/spree/option_type.rb +1 -1
  55. data/app/models/spree/option_value.rb +3 -1
  56. data/app/models/spree/order/checkout.rb +45 -44
  57. data/app/models/spree/order/payments.rb +42 -45
  58. data/app/models/spree/order.rb +70 -75
  59. data/app/models/spree/order_cancellations.rb +4 -4
  60. data/app/models/spree/order_capturing.rb +3 -2
  61. data/app/models/spree/order_contents.rb +61 -59
  62. data/app/models/spree/order_inventory.rb +59 -54
  63. data/app/models/spree/order_mutex.rb +0 -1
  64. data/app/models/spree/order_shipping.rb +8 -9
  65. data/app/models/spree/order_stock_location.rb +3 -3
  66. data/app/models/spree/order_update_attributes.rb +0 -2
  67. data/app/models/spree/order_updater.rb +11 -24
  68. data/app/models/spree/payment/processing.rb +26 -37
  69. data/app/models/spree/payment.rb +68 -71
  70. data/app/models/spree/payment_method/check.rb +2 -2
  71. data/app/models/spree/payment_method/store_credit.rb +6 -7
  72. data/app/models/spree/payment_method.rb +11 -8
  73. data/app/models/spree/preferences/configuration.rb +2 -2
  74. data/app/models/spree/preferences/preferable.rb +1 -1
  75. data/app/models/spree/preferences/preferable_class_methods.rb +1 -1
  76. data/app/models/spree/preferences/scoped_store.rb +6 -5
  77. data/app/models/spree/preferences/static_model_preferences.rb +1 -1
  78. data/app/models/spree/preferences/statically_configurable.rb +2 -2
  79. data/app/models/spree/preferences/store.rb +2 -6
  80. data/app/models/spree/price.rb +17 -19
  81. data/app/models/spree/product/scopes.rb +18 -17
  82. data/app/models/spree/product.rb +28 -11
  83. data/app/models/spree/product_property.rb +2 -0
  84. data/app/models/spree/product_scope/scopes.rb +22 -22
  85. data/app/models/spree/promotion/actions/create_adjustment.rb +3 -4
  86. data/app/models/spree/promotion/actions/create_item_adjustments.rb +8 -8
  87. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +3 -3
  88. data/app/models/spree/promotion/actions/free_shipping.rb +4 -4
  89. data/app/models/spree/promotion/rules/first_order.rb +7 -6
  90. data/app/models/spree/promotion/rules/first_repeat_purchase_since.rb +2 -3
  91. data/app/models/spree/promotion/rules/item_total.rb +5 -2
  92. data/app/models/spree/promotion/rules/nth_order.rb +3 -4
  93. data/app/models/spree/promotion/rules/one_use_per_user.rb +1 -2
  94. data/app/models/spree/promotion/rules/option_value.rb +1 -2
  95. data/app/models/spree/promotion/rules/product.rb +4 -4
  96. data/app/models/spree/promotion/rules/taxon.rb +5 -5
  97. data/app/models/spree/promotion/rules/user.rb +1 -1
  98. data/app/models/spree/promotion/rules/user_logged_in.rb +1 -1
  99. data/app/models/spree/promotion.rb +8 -8
  100. data/app/models/spree/promotion_action.rb +1 -1
  101. data/app/models/spree/promotion_builder.rb +2 -2
  102. data/app/models/spree/promotion_chooser.rb +1 -0
  103. data/app/models/spree/promotion_code/code_builder.rb +3 -3
  104. data/app/models/spree/promotion_handler/cart.rb +17 -16
  105. data/app/models/spree/promotion_handler/coupon.rb +10 -14
  106. data/app/models/spree/promotion_handler/page.rb +4 -4
  107. data/app/models/spree/promotion_rule.rb +4 -3
  108. data/app/models/spree/prototype.rb +0 -1
  109. data/app/models/spree/refund.rb +3 -3
  110. data/app/models/spree/reimbursement/reimbursement_type_engine.rb +1 -3
  111. data/app/models/spree/reimbursement.rb +3 -5
  112. data/app/models/spree/reimbursement_performer.rb +0 -5
  113. data/app/models/spree/reimbursement_tax_calculator.rb +2 -7
  114. data/app/models/spree/reimbursement_type/credit.rb +1 -1
  115. data/app/models/spree/reimbursement_type/original_payment.rb +1 -1
  116. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +3 -3
  117. data/app/models/spree/reimbursement_type/store_credit.rb +1 -1
  118. data/app/models/spree/reimbursement_type.rb +1 -1
  119. data/app/models/spree/return_authorization.rb +38 -37
  120. data/app/models/spree/return_item/eligibility_validator/default.rb +4 -4
  121. data/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +0 -1
  122. data/app/models/spree/return_item/eligibility_validator/rma_required.rb +0 -1
  123. data/app/models/spree/return_item.rb +24 -23
  124. data/app/models/spree/returns_calculator.rb +1 -2
  125. data/app/models/spree/shipment.rb +80 -74
  126. data/app/models/spree/shipping_calculator.rb +4 -5
  127. data/app/models/spree/shipping_manifest.rb +3 -4
  128. data/app/models/spree/shipping_method.rb +54 -23
  129. data/app/models/spree/shipping_method_stock_location.rb +4 -0
  130. data/app/models/spree/shipping_rate.rb +24 -29
  131. data/app/models/spree/shipping_rate_tax.rb +41 -0
  132. data/app/models/spree/state.rb +1 -1
  133. data/app/models/spree/state_change.rb +1 -1
  134. data/app/models/spree/stock/availability_validator.rb +2 -2
  135. data/app/models/spree/stock/coordinator.rb +12 -13
  136. data/app/models/spree/stock/differentiator.rb +1 -0
  137. data/app/models/spree/stock/estimator.rb +18 -25
  138. data/app/models/spree/stock/inventory_unit_builder.rb +1 -1
  139. data/app/models/spree/stock/package.rb +19 -9
  140. data/app/models/spree/stock/packer.rb +2 -3
  141. data/app/models/spree/stock/prioritizer.rb +3 -2
  142. data/app/models/spree/stock/quantifier.rb +2 -3
  143. data/app/models/spree/stock/shipping_rate_selector.rb +0 -1
  144. data/app/models/spree/stock/shipping_rate_sorter.rb +0 -1
  145. data/app/models/spree/stock/splitter/backordered.rb +0 -2
  146. data/app/models/spree/stock/splitter/base.rb +3 -2
  147. data/app/models/spree/stock/splitter/shipping_category.rb +2 -1
  148. data/app/models/spree/stock/splitter/weight.rb +2 -2
  149. data/app/models/spree/stock_item.rb +36 -37
  150. data/app/models/spree/stock_location.rb +17 -13
  151. data/app/models/spree/stock_movement.rb +1 -3
  152. data/app/models/spree/stock_transfer.rb +8 -8
  153. data/app/models/spree/store.rb +6 -0
  154. data/app/models/spree/store_credit.rb +24 -24
  155. data/app/models/spree/store_credit_category.rb +1 -2
  156. data/app/models/spree/tax/item_adjuster.rb +37 -0
  157. data/app/models/spree/tax/order_adjuster.rb +38 -0
  158. data/app/models/spree/tax/shipping_rate_taxer.rb +31 -0
  159. data/app/models/spree/tax/tax_helpers.rb +49 -0
  160. data/app/models/spree/tax/tax_location.rb +33 -0
  161. data/app/models/spree/tax_category.rb +1 -1
  162. data/app/models/spree/tax_rate.rb +46 -111
  163. data/app/models/spree/taxon.rb +36 -12
  164. data/app/models/spree/taxonomy.rb +10 -10
  165. data/app/models/spree/validations/db_maximum_length_validator.rb +0 -1
  166. data/app/models/spree/variant/pricer.rb +19 -0
  167. data/app/models/spree/variant/pricing_options.rb +31 -0
  168. data/app/models/spree/variant/scopes.rb +9 -9
  169. data/app/models/spree/variant.rb +95 -89
  170. data/app/models/spree/variant_property_rule.rb +1 -1
  171. data/app/models/spree/variant_property_rule_value.rb +2 -0
  172. data/app/models/spree/zone.rb +60 -24
  173. data/config/initializers/friendly_id.rb +1 -1
  174. data/config/locales/en.yml +337 -51
  175. data/config/routes.rb +1 -1
  176. data/db/default/spree/countries.rb +9 -15
  177. data/db/default/spree/roles.rb +1 -2
  178. data/db/default/spree/states.rb +7 -11
  179. data/db/default/spree/store_credit.rb +2 -2
  180. data/db/default/spree/stores.rb +2 -1
  181. data/db/migrate/20120831092320_spree_one_two.rb +100 -101
  182. data/db/migrate/20120831092359_spree_promo_one_two.rb +12 -12
  183. data/db/migrate/20120905151823_add_toggle_tax_rate_display.rb +1 -1
  184. data/db/migrate/20121009142519_add_lock_version_to_variant.rb +1 -1
  185. data/db/migrate/20121010142909_add_states_required_to_countries.rb +1 -1
  186. data/db/migrate/20121012071449_add_on_demand_to_product_and_variant.rb +2 -2
  187. data/db/migrate/20121017010007_remove_not_null_constraint_from_products_on_hand.rb +4 -4
  188. data/db/migrate/20121031162139_split_prices_from_variants.rb +8 -8
  189. data/db/migrate/20121107003422_remove_not_null_from_spree_prices_amount.rb +2 -2
  190. data/db/migrate/20121109173623_add_cost_currency_to_variants.rb +1 -1
  191. data/db/migrate/20121124203911_add_position_to_taxonomies.rb +1 -1
  192. data/db/migrate/20130120201805_add_position_to_product_properties.spree.rb +1 -2
  193. data/db/migrate/20130211190146_create_spree_stock_items.rb +1 -1
  194. data/db/migrate/20130213191427_create_default_stock.rb +12 -21
  195. data/db/migrate/20130226032817_change_meta_description_on_spree_products_to_text.rb +1 -1
  196. data/db/migrate/20130227143905_add_pending_to_inventory_unit.rb +2 -2
  197. data/db/migrate/20130228210442_create_shipping_method_zone.rb +1 -1
  198. data/db/migrate/20130301162924_create_shipping_method_categories.rb +2 -2
  199. data/db/migrate/20130304162240_create_spree_shipping_rates.rb +4 -4
  200. data/db/migrate/20130306181701_add_address_fields_to_stock_location.rb +2 -3
  201. data/db/migrate/20130306191917_add_active_field_to_stock_locations.rb +1 -1
  202. data/db/migrate/20130306195650_add_backorderable_to_stock_item.rb +1 -1
  203. data/db/migrate/20130307161754_add_default_quantity_to_stock_movement.rb +1 -1
  204. data/db/migrate/20130319062004_change_orders_total_precision.rb +4 -4
  205. data/db/migrate/20130319063911_change_spree_payments_amount_precision.rb +1 -3
  206. data/db/migrate/20130319064308_change_spree_return_authorization_amount_precision.rb +2 -4
  207. data/db/migrate/20130319082943_change_adjustments_amount_precision.rb +1 -3
  208. data/db/migrate/20130319190507_drop_source_and_destination_from_stock_movement.rb +2 -2
  209. data/db/migrate/20130325163316_migrate_inventory_unit_sold_to_on_hand.rb +2 -2
  210. data/db/migrate/20130417120035_update_adjustment_states.rb +2 -2
  211. data/db/migrate/20130417123427_add_shipping_rates_to_shipments.rb +3 -3
  212. data/db/migrate/20130628021056_add_unique_index_to_permalink_on_spree_products.rb +1 -1
  213. data/db/migrate/20130628022817_add_unique_index_to_orders_shipments_and_stock_transfers.rb +3 -3
  214. data/db/migrate/20130718042445_add_cost_price_to_line_item.rb +1 -1
  215. data/db/migrate/20130718233855_set_backorderable_to_default_to_false.rb +2 -2
  216. data/db/migrate/20130807024301_upgrade_adjustments.rb +3 -3
  217. data/db/migrate/20130813004002_add_shipment_total_to_spree_orders.rb +1 -1
  218. data/db/migrate/20130813140619_expand_order_number_size.rb +2 -2
  219. data/db/migrate/20130815000406_add_adjustment_total_to_line_items.rb +1 -1
  220. data/db/migrate/20130815024413_add_adjustment_total_to_shipments.rb +1 -1
  221. data/db/migrate/20130826062534_add_depth_to_spree_taxons.rb +1 -1
  222. data/db/migrate/20130830001033_add_shipping_category_to_shipping_methods_and_products.rb +1 -1
  223. data/db/migrate/20130830001159_migrate_old_shipping_calculators.rb +1 -1
  224. data/db/migrate/20131001013410_remove_unused_credit_card_fields.rb +1 -0
  225. data/db/migrate/20131026154747_add_track_inventory_to_variant.rb +1 -1
  226. data/db/migrate/20131118043959_add_included_to_adjustments.rb +1 -1
  227. data/db/migrate/20131118183431_add_line_item_id_to_spree_inventory_units.rb +0 -1
  228. data/db/migrate/20131211112807_create_spree_orders_promotions.rb +1 -1
  229. data/db/migrate/20131218054603_add_item_count_to_spree_orders.rb +1 -1
  230. data/db/migrate/20140106065820_remove_value_type_from_spree_preferences.rb +1 -0
  231. data/db/migrate/20140219060952_add_considered_risky_to_orders.rb +1 -1
  232. data/db/migrate/20140309023735_migrate_old_preferences.rb +4 -3
  233. data/db/migrate/20140309033438_create_store_from_preferences.rb +2 -2
  234. data/db/migrate/20140410141842_add_many_missing_indexes.rb +13 -15
  235. data/db/migrate/20140410150358_correct_some_polymorphic_index_and_add_more_missing.rb +38 -40
  236. data/db/migrate/20140508151342_change_spree_price_amount_precision.rb +4 -4
  237. data/db/migrate/20140530024945_move_order_token_from_tokenized_permission.rb +1 -1
  238. data/db/migrate/20140710041921_recreate_spree_return_authorizations.rb +0 -1
  239. data/db/migrate/20140718195325_create_friendly_id_slugs.rb +4 -4
  240. data/db/migrate/20140723214541_copy_product_slugs_to_slug_history.rb +4 -6
  241. data/db/migrate/20140805171219_make_existing_credit_cards_default.rb +1 -0
  242. data/db/migrate/20141217215630_update_product_slug_index.rb +2 -4
  243. data/db/migrate/20150112194216_add_position_to_stock_location.rb +2 -2
  244. data/db/migrate/20150225205344_move_promotion_code_to_promotion_code_value.rb +0 -1
  245. data/db/migrate/20150313201503_copy_shipped_shipments_to_cartons.rb +0 -1
  246. data/db/migrate/20150506181611_create_spree_store_credit_payment_method.rb +3 -3
  247. data/db/migrate/20150515211137_fix_adjustment_order_id.rb +0 -1
  248. data/db/migrate/20150612205731_remove_spree_configurations.rb +2 -2
  249. data/db/migrate/20150619160613_create_adjustment_reason.rb +1 -1
  250. data/db/migrate/20150723224133_remove_unnecessary_indexes.rb +10 -2
  251. data/db/migrate/20150731201146_add_spree_user_addresses.rb +0 -1
  252. data/db/migrate/20150811211025_add_finalized_to_spree_adjustments.rb +1 -1
  253. data/db/migrate/20151001121454_create_spree_shipping_method_stock_locations.rb +13 -0
  254. data/db/migrate/20151002023248_add_foreign_key_to_shipping_method_stock_location.rb +6 -0
  255. data/db/migrate/20151026093607_change_return_item_pre_tax_amount_to_amount.rb +29 -0
  256. data/db/migrate/20160111091912_add_column_available_to_all_on_spree_shipping_method.rb +5 -0
  257. data/db/migrate/20160116133604_add_position_to_spree_payment_methods.rb +5 -0
  258. data/db/migrate/20160122182105_add_carrier_and_service_level_to_spree_shipping_methods.rb +6 -0
  259. data/db/migrate/20160224201413_create_spree_shipping_rate_taxes.rb +11 -0
  260. data/db/migrate/20160229133259_add_cart_tax_country_iso_to_spree_store.rb +5 -0
  261. data/db/migrate/20160301103333_remove_pre_tax_amount_on_line_item_and_shipment.rb +6 -0
  262. data/db/migrate/20160308000300_disallow_adjustment_finalized_nulls.rb +19 -0
  263. data/db/migrate/20160318145302_add_timestamps_to_prices.rb +5 -0
  264. data/db/migrate/20160330204846_add_missing_timestamp_columns.rb +20 -0
  265. data/lib/generators/spree/custom_user/custom_user_generator.rb +3 -8
  266. data/lib/generators/spree/dummy/dummy_generator.rb +17 -19
  267. data/lib/generators/spree/install/install_generator.rb +15 -15
  268. data/lib/generators/spree/install/templates/config/initializers/spree.rb +1 -0
  269. data/lib/spree/core/controller_helpers/auth.rb +2 -4
  270. data/lib/spree/core/controller_helpers/common.rb +42 -43
  271. data/lib/spree/core/controller_helpers/order.rb +5 -9
  272. data/lib/spree/core/controller_helpers/payment_parameters.rb +4 -5
  273. data/lib/spree/core/controller_helpers/pricing.rb +27 -0
  274. data/lib/spree/core/controller_helpers/respond_with.rb +4 -4
  275. data/lib/spree/core/controller_helpers/search.rb +2 -2
  276. data/lib/spree/core/controller_helpers/store.rb +3 -3
  277. data/lib/spree/core/controller_helpers/strong_parameters.rb +4 -4
  278. data/lib/spree/core/current_store.rb +1 -1
  279. data/lib/spree/core/delegate_belongs_to.rb +19 -21
  280. data/lib/spree/core/engine.rb +12 -8
  281. data/lib/spree/core/environment/calculators.rb +0 -1
  282. data/lib/spree/core/environment_extension.rb +4 -4
  283. data/lib/spree/core/importer/order.rb +17 -22
  284. data/lib/spree/core/importer/product.rb +10 -9
  285. data/lib/spree/core/permalinks.rb +16 -16
  286. data/lib/spree/core/product_duplicator.rb +2 -3
  287. data/lib/spree/core/product_filters.rb +15 -16
  288. data/lib/spree/core/role_configuration.rb +2 -2
  289. data/lib/spree/core/search/base.rb +71 -57
  290. data/lib/spree/core/search/variant.rb +2 -4
  291. data/lib/spree/core/unreturned_item_charger.rb +1 -2
  292. data/lib/spree/core/validators/email.rb +2 -2
  293. data/lib/spree/core/version.rb +1 -1
  294. data/lib/spree/core.rb +2 -4
  295. data/lib/spree/i18n.rb +1 -1
  296. data/lib/spree/localized_number.rb +3 -1
  297. data/lib/spree/migrations.rb +27 -26
  298. data/lib/spree/money.rb +19 -4
  299. data/lib/spree/permission_sets/base.rb +1 -1
  300. data/lib/spree/permitted_attributes.rb +7 -7
  301. data/lib/spree/responder.rb +4 -5
  302. data/lib/spree/testing_support/authorization_helpers.rb +1 -1
  303. data/lib/spree/testing_support/caching.rb +8 -8
  304. data/lib/spree/testing_support/capybara_ext.rb +11 -13
  305. data/lib/spree/testing_support/common_rake.rb +4 -4
  306. data/lib/spree/testing_support/controller_requests.rb +1 -1
  307. data/lib/spree/testing_support/extension_rake.rb +1 -2
  308. data/lib/spree/testing_support/factories/address_factory.rb +14 -3
  309. data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +1 -1
  310. data/lib/spree/testing_support/factories/carton_factory.rb +2 -2
  311. data/lib/spree/testing_support/factories/credit_card_factory.rb +4 -0
  312. data/lib/spree/testing_support/factories/customer_return_factory.rb +4 -6
  313. data/lib/spree/testing_support/factories/line_item_factory.rb +1 -1
  314. data/lib/spree/testing_support/factories/order_factory.rb +10 -11
  315. data/lib/spree/testing_support/factories/payment_factory.rb +5 -0
  316. data/lib/spree/testing_support/factories/promotion_category_factory.rb +0 -1
  317. data/lib/spree/testing_support/factories/promotion_factory.rb +0 -1
  318. data/lib/spree/testing_support/factories/refund_factory.rb +1 -1
  319. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  320. data/lib/spree/testing_support/factories/return_item_factory.rb +1 -1
  321. data/lib/spree/testing_support/factories/shipping_method_factory.rb +5 -2
  322. data/lib/spree/testing_support/factories/state_factory.rb +17 -7
  323. data/lib/spree/testing_support/factories/stock_location_factory.rb +4 -4
  324. data/lib/spree/testing_support/factories/stock_transfer_factory.rb +1 -1
  325. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +0 -1
  326. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +0 -2
  327. data/lib/spree/testing_support/factories/tax_category_factory.rb +2 -2
  328. data/lib/spree/testing_support/factories/user_factory.rb +1 -1
  329. data/lib/spree/testing_support/factories/variant_factory.rb +1 -2
  330. data/lib/spree/testing_support/factories/zone_factory.rb +2 -1
  331. data/lib/spree/testing_support/i18n.rb +4 -5
  332. data/lib/spree/testing_support/order_walkthrough.rb +8 -9
  333. data/lib/spree/testing_support/preferences.rb +1 -1
  334. data/lib/spree/testing_support/sequences.rb +5 -4
  335. data/lib/tasks/core.rake +15 -19
  336. data/lib/tasks/email.rake +3 -3
  337. data/lib/tasks/exchanges.rake +12 -14
  338. data/lib/tasks/migrations/assure_store_on_orders.rake +38 -0
  339. data/lib/tasks/migrations/copy_order_bill_address_to_credit_card.rake +2 -2
  340. data/lib/tasks/migrations/copy_shipped_shipments_to_cartons.rake +1 -11
  341. data/lib/tasks/migrations/migrate_shipping_rate_taxes.rake +17 -0
  342. data/lib/tasks/migrations/migrate_user_addresses.rake +1 -1
  343. data/lib/tasks/order_capturing.rake +1 -1
  344. data/lib/tasks/upgrade.rake +11 -0
  345. data/script/rails +0 -1
  346. data/solidus_core.gemspec +6 -8
  347. data/spec/helpers/base_helper_spec.rb +15 -18
  348. data/spec/helpers/order_helper_spec.rb +2 -2
  349. data/spec/helpers/products_helper_spec.rb +43 -51
  350. data/spec/helpers/taxons_helper_spec.rb +1 -1
  351. data/spec/lib/i18n_spec.rb +11 -11
  352. data/spec/lib/search/base_spec.rb +12 -14
  353. data/spec/lib/search/variant_spec.rb +1 -0
  354. data/spec/lib/spree/core/controller_helpers/order_spec.rb +1 -7
  355. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +26 -28
  356. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +63 -0
  357. data/spec/lib/spree/core/controller_helpers/search_spec.rb +4 -2
  358. data/spec/lib/spree/core/delegate_belongs_to_spec.rb +1 -1
  359. data/spec/lib/spree/core/importer/order_spec.rb +95 -90
  360. data/spec/lib/spree/core/role_configuration_spec.rb +16 -16
  361. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +35 -0
  362. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +10 -1
  363. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -1
  364. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +6 -1
  365. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +37 -1
  366. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +2 -2
  367. data/spec/lib/spree/core/testing_support/factories/stock_packer_factory_spec.rb +1 -1
  368. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +1 -2
  369. data/spec/lib/spree/core/testing_support/preferences_spec.rb +26 -0
  370. data/spec/lib/spree/core/unreturned_item_charger_spec.rb +7 -9
  371. data/spec/lib/spree/core/validators/email_spec.rb +8 -6
  372. data/spec/lib/spree/localized_number_spec.rb +1 -3
  373. data/spec/lib/spree/migrations_spec.rb +2 -2
  374. data/spec/lib/spree/money_spec.rb +75 -6
  375. data/spec/lib/tasks/exchanges_spec.rb +2 -12
  376. data/spec/lib/tasks/migrations/copy_shipped_shipments_to_cartons_spec.rb +0 -1
  377. data/spec/lib/tasks/order_capturing_spec.rb +1 -1
  378. data/spec/mailers/carton_mailer_spec.rb +3 -3
  379. data/spec/mailers/order_mailer_spec.rb +9 -11
  380. data/spec/mailers/reimbursement_mailer_spec.rb +2 -2
  381. data/spec/mailers/test_mailer_spec.rb +1 -1
  382. data/spec/models/spree/ability_spec.rb +4 -7
  383. data/spec/models/spree/address_spec.rb +32 -35
  384. data/spec/models/spree/adjustment_reason_spec.rb +0 -2
  385. data/spec/models/spree/adjustment_spec.rb +2 -2
  386. data/spec/models/spree/app_configuration_spec.rb +33 -3
  387. data/spec/models/spree/asset_spec.rb +1 -2
  388. data/spec/models/spree/calculator/default_tax_spec.rb +141 -52
  389. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +1 -1
  390. data/spec/models/spree/calculator/flexi_rate_spec.rb +6 -6
  391. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +1 -1
  392. data/spec/models/spree/calculator/price_sack_spec.rb +2 -2
  393. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +9 -11
  394. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +4 -4
  395. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +2 -2
  396. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +6 -7
  397. data/spec/models/spree/calculator/shipping/per_item_spec.rb +2 -2
  398. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +2 -2
  399. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +1 -2
  400. data/spec/models/spree/calculator/tiered_percent_spec.rb +1 -1
  401. data/spec/models/spree/calculator_spec.rb +3 -8
  402. data/spec/models/spree/carton_spec.rb +1 -1
  403. data/spec/models/spree/classification_spec.rb +1 -1
  404. data/spec/models/spree/concerns/display_money_spec.rb +0 -1
  405. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +26 -1
  406. data/spec/models/spree/concerns/user_address_book_spec.rb +19 -12
  407. data/spec/models/spree/concerns/user_methods_spec.rb +1 -1
  408. data/spec/models/spree/country_spec.rb +52 -0
  409. data/spec/models/spree/credit_card_spec.rb +17 -12
  410. data/spec/models/spree/customer_return_spec.rb +27 -23
  411. data/spec/models/spree/exchange_spec.rb +2 -7
  412. data/spec/models/spree/gateway/bogus_simple.rb +2 -4
  413. data/spec/models/spree/gateway/bogus_spec.rb +4 -2
  414. data/spec/models/spree/gateway_spec.rb +8 -3
  415. data/spec/models/spree/inventory_unit_spec.rb +13 -14
  416. data/spec/models/spree/item_adjustments_spec.rb +36 -40
  417. data/spec/models/spree/line_item_spec.rb +92 -48
  418. data/spec/models/spree/option_type_spec.rb +1 -1
  419. data/spec/models/spree/option_value_spec.rb +1 -1
  420. data/spec/models/spree/order/address_spec.rb +1 -1
  421. data/spec/models/spree/order/callbacks_spec.rb +3 -3
  422. data/spec/models/spree/order/checkout_spec.rb +55 -48
  423. data/spec/models/spree/order/finalizing_spec.rb +8 -9
  424. data/spec/models/spree/order/payment_spec.rb +20 -20
  425. data/spec/models/spree/order/risk_assessment_spec.rb +1 -1
  426. data/spec/models/spree/order/state_machine_spec.rb +40 -131
  427. data/spec/models/spree/order/tax_spec.rb +11 -12
  428. data/spec/models/spree/order/totals_spec.rb +3 -3
  429. data/spec/models/spree/order/updating_spec.rb +2 -2
  430. data/spec/models/spree/order/validations_spec.rb +2 -2
  431. data/spec/models/spree/order_cancellations_spec.rb +1 -1
  432. data/spec/models/spree/order_capturing_spec.rb +1 -1
  433. data/spec/models/spree/order_contents_spec.rb +10 -11
  434. data/spec/models/spree/order_inventory_spec.rb +11 -11
  435. data/spec/models/spree/order_merger_spec.rb +1 -0
  436. data/spec/models/spree/order_shipping_spec.rb +8 -10
  437. data/spec/models/spree/order_spec.rb +137 -124
  438. data/spec/models/spree/order_stock_location_spec.rb +2 -2
  439. data/spec/models/spree/order_update_attributes_spec.rb +6 -10
  440. data/spec/models/spree/order_updater_spec.rb +4 -8
  441. data/spec/models/spree/payment_create_spec.rb +11 -12
  442. data/spec/models/spree/payment_method/store_credit_spec.rb +10 -6
  443. data/spec/models/spree/payment_method_spec.rb +4 -5
  444. data/spec/models/spree/payment_spec.rb +61 -69
  445. data/spec/models/spree/permission_sets/base_spec.rb +1 -1
  446. data/spec/models/spree/permission_sets/configuration_display.rb +0 -1
  447. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -1
  448. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -1
  449. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -1
  450. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -1
  451. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -1
  452. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -1
  453. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -1
  454. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -1
  455. data/spec/models/spree/permission_sets/report_display_spec.rb +0 -1
  456. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -1
  457. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -1
  458. data/spec/models/spree/permission_sets/restricted_stock_transfer_display_spec.rb +0 -1
  459. data/spec/models/spree/permission_sets/restricted_stock_transfer_management_spec.rb +6 -6
  460. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -1
  461. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -1
  462. data/spec/models/spree/permission_sets/stock_transfer_display_spec.rb +0 -1
  463. data/spec/models/spree/permission_sets/stock_transfer_management_spec.rb +0 -2
  464. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -1
  465. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -1
  466. data/spec/models/spree/preference_spec.rb +1 -4
  467. data/spec/models/spree/preferences/configuration_spec.rb +2 -7
  468. data/spec/models/spree/preferences/preferable_spec.rb +13 -24
  469. data/spec/models/spree/preferences/scoped_store_spec.rb +1 -1
  470. data/spec/models/spree/preferences/static_model_preferences_spec.rb +5 -6
  471. data/spec/models/spree/preferences/statically_configurable_spec.rb +2 -6
  472. data/spec/models/spree/preferences/store_spec.rb +2 -3
  473. data/spec/models/spree/price_spec.rb +6 -6
  474. data/spec/models/spree/product/scopes_spec.rb +20 -20
  475. data/spec/models/spree/product_duplicator_spec.rb +16 -29
  476. data/spec/models/spree/product_filter_spec.rb +2 -2
  477. data/spec/models/spree/product_spec.rb +53 -20
  478. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +10 -12
  479. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +4 -4
  480. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +9 -9
  481. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +1 -1
  482. data/spec/models/spree/promotion/rules/first_order_spec.rb +10 -10
  483. data/spec/models/spree/promotion/rules/item_total_spec.rb +63 -19
  484. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +1 -1
  485. data/spec/models/spree/promotion/rules/product_spec.rb +8 -8
  486. data/spec/models/spree/promotion/rules/taxon_spec.rb +4 -4
  487. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +3 -4
  488. data/spec/models/spree/promotion/rules/user_spec.rb +7 -7
  489. data/spec/models/spree/promotion_builder_spec.rb +10 -8
  490. data/spec/models/spree/promotion_category_spec.rb +1 -1
  491. data/spec/models/spree/promotion_code/code_builder_spec.rb +1 -3
  492. data/spec/models/spree/promotion_code_spec.rb +8 -7
  493. data/spec/models/spree/promotion_handler/cart_spec.rb +1 -1
  494. data/spec/models/spree/promotion_handler/coupon_spec.rb +28 -28
  495. data/spec/models/spree/promotion_handler/page_spec.rb +6 -7
  496. data/spec/models/spree/promotion_rule_spec.rb +1 -2
  497. data/spec/models/spree/promotion_spec.rb +25 -21
  498. data/spec/models/spree/refund_spec.rb +8 -11
  499. data/spec/models/spree/reimbursement/credit_spec.rb +2 -2
  500. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +6 -4
  501. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +1 -1
  502. data/spec/models/spree/reimbursement_performer_spec.rb +2 -2
  503. data/spec/models/spree/reimbursement_spec.rb +9 -11
  504. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +4 -5
  505. data/spec/models/spree/reimbursement_type/credit_spec.rb +2 -2
  506. data/spec/models/spree/reimbursement_type/exchange_spec.rb +2 -3
  507. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +4 -4
  508. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +1 -1
  509. data/spec/models/spree/return_authorization_spec.rb +18 -21
  510. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +7 -7
  511. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -1
  512. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -1
  513. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +1 -1
  514. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +1 -1
  515. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +1 -2
  516. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +3 -5
  517. data/spec/models/spree/return_item_spec.rb +29 -31
  518. data/spec/models/spree/returns_calculator_spec.rb +1 -1
  519. data/spec/models/spree/shipment_spec.rb +59 -43
  520. data/spec/models/spree/shipping_calculator_spec.rb +3 -3
  521. data/spec/models/spree/shipping_manifest_spec.rb +8 -7
  522. data/spec/models/spree/shipping_method_spec.rb +149 -24
  523. data/spec/models/spree/shipping_rate_spec.rb +116 -76
  524. data/spec/models/spree/shipping_rate_tax_spec.rb +83 -0
  525. data/spec/models/spree/state_spec.rb +2 -2
  526. data/spec/models/spree/stock/availability_validator_spec.rb +4 -4
  527. data/spec/models/spree/stock/coordinator_spec.rb +33 -49
  528. data/spec/models/spree/stock/differentiator_spec.rb +1 -1
  529. data/spec/models/spree/stock/estimator_spec.rb +83 -54
  530. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +1 -3
  531. data/spec/models/spree/stock/package_spec.rb +27 -10
  532. data/spec/models/spree/stock/packer_spec.rb +4 -4
  533. data/spec/models/spree/stock/prioritizer_spec.rb +1 -1
  534. data/spec/models/spree/stock/quantifier_spec.rb +2 -6
  535. data/spec/models/spree/stock/splitter/backordered_spec.rb +1 -1
  536. data/spec/models/spree/stock/splitter/base_spec.rb +1 -2
  537. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +1 -3
  538. data/spec/models/spree/stock/splitter/weight_spec.rb +3 -3
  539. data/spec/models/spree/stock_item_spec.rb +16 -16
  540. data/spec/models/spree/stock_location_spec.rb +6 -8
  541. data/spec/models/spree/stock_movement_spec.rb +1 -1
  542. data/spec/models/spree/stock_transfer_spec.rb +1 -3
  543. data/spec/models/spree/store_credit_category_spec.rb +1 -1
  544. data/spec/models/spree/store_credit_event_spec.rb +3 -5
  545. data/spec/models/spree/store_credit_spec.rb +24 -23
  546. data/spec/models/spree/store_spec.rb +21 -2
  547. data/spec/models/spree/tax/item_adjuster_spec.rb +74 -0
  548. data/spec/models/spree/tax/order_adjuster_spec.rb +49 -0
  549. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +50 -0
  550. data/spec/models/spree/tax/tax_location_spec.rb +68 -0
  551. data/spec/models/spree/tax/taxation_integration_spec.rb +787 -0
  552. data/spec/models/spree/tax_category_spec.rb +2 -2
  553. data/spec/models/spree/tax_rate_spec.rb +185 -536
  554. data/spec/models/spree/taxon_spec.rb +69 -5
  555. data/spec/models/spree/taxonomy_spec.rb +2 -3
  556. data/spec/models/spree/tracker_spec.rb +1 -1
  557. data/spec/models/spree/transfer_item_spec.rb +1 -1
  558. data/spec/models/spree/unit_cancel_spec.rb +9 -14
  559. data/spec/models/spree/user_spec.rb +19 -24
  560. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +1 -1
  561. data/spec/models/spree/variant/pricer_spec.rb +48 -0
  562. data/spec/models/spree/variant/pricing_options_spec.rb +106 -0
  563. data/spec/models/spree/variant/scopes_spec.rb +31 -8
  564. data/spec/models/spree/variant_property_rule_spec.rb +1 -1
  565. data/spec/models/spree/variant_spec.rb +166 -52
  566. data/spec/models/spree/zone_spec.rb +135 -10
  567. data/spec/support/big_decimal.rb +1 -1
  568. data/spec/support/concerns/working_factories.rb +2 -2
  569. data/spec/support/dummy_ability.rb +0 -1
  570. metadata +55 -44
  571. data/lib/generators/spree/dummy/templates/initializers/devise.rb +0 -3
  572. data/lib/spree/migration_helpers.rb +0 -19
  573. data/vendor/assets/stylesheets/skeleton.css +0 -242
@@ -14,24 +14,16 @@ describe Spree::Shipment, type: :model do
14
14
  shipping_rates: [
15
15
  Spree::ShippingRate.new(
16
16
  shipping_method: shipping_method,
17
- selected: true,
18
- ),
17
+ selected: true
18
+ )
19
19
  ],
20
- stock_location: stock_location,
20
+ stock_location: stock_location
21
21
  )
22
22
  end
23
23
 
24
24
  let(:variant) { mock_model(Spree::Variant) }
25
25
  let(:line_item) { mock_model(Spree::LineItem, variant: variant) }
26
26
 
27
- describe "precision of pre_tax_amount" do
28
- let!(:line_item) { create :line_item, pre_tax_amount: 4.2051 }
29
-
30
- it "keeps four digits of precision even when reloading" do
31
- expect(line_item.reload.pre_tax_amount).to eq(4.2051)
32
- end
33
- end
34
-
35
27
  # Regression test for https://github.com/spree/spree/issues/4063
36
28
  context "number generation" do
37
29
  before { allow(order).to receive :update! }
@@ -47,7 +39,7 @@ describe Spree::Shipment, type: :model do
47
39
  it 'is backordered if one if its inventory_units is backordered' do
48
40
  shipment.inventory_units = [
49
41
  build(:inventory_unit, state: 'backordered', shipment: nil),
50
- build(:inventory_unit, state: 'shipped', shipment: nil),
42
+ build(:inventory_unit, state: 'shipped', shipment: nil)
51
43
  ]
52
44
  expect(shipment).to be_backordered
53
45
  end
@@ -64,7 +56,7 @@ describe Spree::Shipment, type: :model do
64
56
  end
65
57
 
66
58
  it 'returns pending if backordered' do
67
- allow(shipment).to receive_messages inventory_units: [mock_model(Spree::InventoryUnit, backordered?: true)]
59
+ allow(shipment).to receive_messages inventory_units: [mock_model(Spree::InventoryUnit, allow_ship?: false, canceled?: false)]
68
60
  expect(shipment.determine_state(order)).to eq 'pending'
69
61
  end
70
62
 
@@ -165,10 +157,12 @@ describe Spree::Shipment, type: :model do
165
157
  let(:shipment) { create(:shipment) }
166
158
  let(:shipping_method1) { create(:shipping_method) }
167
159
  let(:shipping_method2) { create(:shipping_method) }
168
- let(:shipping_rates) { [
160
+ let(:shipping_rates) {
161
+ [
169
162
  Spree::ShippingRate.new(shipping_method: shipping_method1, cost: 10.00, selected: true),
170
163
  Spree::ShippingRate.new(shipping_method: shipping_method2, cost: 20.00)
171
- ] }
164
+ ]
165
+ }
172
166
 
173
167
  it 'returns shipping_method from selected shipping_rate' do
174
168
  shipment.shipping_rates.delete_all
@@ -181,7 +175,7 @@ describe Spree::Shipment, type: :model do
181
175
  before { allow(shipment).to receive(:can_get_rates?){ true } }
182
176
 
183
177
  it 'should request new rates, and maintain shipping_method selection' do
184
- expect(Spree::Stock::Estimator).to receive(:new).with(shipment.order).and_return(mock_estimator)
178
+ expect(Spree::Stock::Estimator).to receive(:new).with(no_args).and_return(mock_estimator)
185
179
  allow(shipment).to receive_messages(shipping_method: shipping_method2)
186
180
 
187
181
  expect(shipment.refresh_rates).to eq(shipping_rates)
@@ -189,7 +183,7 @@ describe Spree::Shipment, type: :model do
189
183
  end
190
184
 
191
185
  it 'should handle no shipping_method selection' do
192
- expect(Spree::Stock::Estimator).to receive(:new).with(shipment.order).and_return(mock_estimator)
186
+ expect(Spree::Stock::Estimator).to receive(:new).with(no_args).and_return(mock_estimator)
193
187
  allow(shipment).to receive_messages(shipping_method: nil)
194
188
  expect(shipment.refresh_rates).to eq(shipping_rates)
195
189
  expect(shipment.reload.selected_shipping_rate).not_to be_nil
@@ -203,7 +197,7 @@ describe Spree::Shipment, type: :model do
203
197
  end
204
198
 
205
199
  it "can't get rates without a shipping address" do
206
- shipment.order(ship_address: nil)
200
+ shipment.order.update_attributes!(ship_address: nil)
207
201
  expect(shipment.refresh_rates).to eq([])
208
202
  end
209
203
 
@@ -228,22 +222,31 @@ describe Spree::Shipment, type: :model do
228
222
  expect(package.on_hand.count).to eq 1
229
223
  expect(package.backordered.count).to eq 1
230
224
  end
225
+
226
+ it 'should set the shipment to itself' do
227
+ expect(shipment.to_package.shipment).to eq(shipment)
228
+ end
231
229
  end
232
230
  end
233
231
  end
234
232
 
235
233
  context "#update!" do
236
234
  shared_examples_for "immutable once shipped" do
235
+ before { shipment.update_columns(state: 'shipped') }
236
+
237
237
  it "should remain in shipped state once shipped" do
238
- shipment.state = 'shipped'
239
- expect(shipment).to receive(:update_columns).with(state: 'shipped', updated_at: kind_of(Time))
240
- shipment.update!(order)
238
+ expect {
239
+ shipment.update!(order)
240
+ }.not_to change { shipment.state }
241
241
  end
242
242
  end
243
243
 
244
244
  shared_examples_for "pending if backordered" do
245
245
  it "should have a state of pending if backordered" do
246
- allow(shipment).to receive_messages(inventory_units: [mock_model(Spree::InventoryUnit, backordered?: true)])
246
+ # Set as ready so we can test for change
247
+ shipment.update_attributes!(state: 'ready')
248
+
249
+ allow(shipment).to receive_messages(inventory_units: [mock_model(Spree::InventoryUnit, allow_ship?: false, canceled?: false)])
247
250
  expect(shipment).to receive(:update_columns).with(state: 'pending', updated_at: kind_of(Time))
248
251
  shipment.update!(order)
249
252
  end
@@ -252,6 +255,8 @@ describe Spree::Shipment, type: :model do
252
255
  context "when order cannot ship" do
253
256
  before { allow(order).to receive_messages can_ship?: false }
254
257
  it "should result in a 'pending' state" do
258
+ # Set as ready so we can test for change
259
+ shipment.update_attributes!(state: 'ready')
255
260
  expect(shipment).to receive(:update_columns).with(state: 'pending', updated_at: kind_of(Time))
256
261
  shipment.update!(order)
257
262
  end
@@ -269,14 +274,9 @@ describe Spree::Shipment, type: :model do
269
274
 
270
275
  context "when payment is not required" do
271
276
  before do
272
- @original_require_payment = Spree::Config[:require_payment_to_ship]
273
277
  Spree::Config[:require_payment_to_ship] = false
274
278
  end
275
279
 
276
- after do
277
- Spree::Config[:require_payment_to_ship] = @original_require_payment
278
- end
279
-
280
280
  it "should result in a 'ready' state" do
281
281
  expect(shipment).to receive(:update_columns).with(state: 'ready', updated_at: kind_of(Time))
282
282
  shipment.update!(order)
@@ -331,8 +331,6 @@ describe Spree::Shipment, type: :model do
331
331
  end
332
332
 
333
333
  context "when order is completed" do
334
- after { Spree::Config.set track_inventory_levels: true }
335
-
336
334
  before do
337
335
  allow(order).to receive_messages completed?: true
338
336
  allow(order).to receive_messages canceled?: false
@@ -424,7 +422,7 @@ describe Spree::Shipment, type: :model do
424
422
  end
425
423
 
426
424
  context "when any inventory is backordered" do
427
- before { allow_any_instance_of(Spree::InventoryUnit).to receive(:backordered?).and_return(true) }
425
+ before { allow_any_instance_of(Spree::InventoryUnit).to receive(:allow_ship?).and_return(false) }
428
426
  it "should result in a 'ready' state" do
429
427
  shipment.resume!
430
428
  expect(shipment.state).to eq 'pending'
@@ -435,7 +433,7 @@ describe Spree::Shipment, type: :model do
435
433
  before do
436
434
  allow(order).to receive_messages(can_ship?: true)
437
435
  allow(order).to receive_messages(paid?: true)
438
- allow_any_instance_of(Spree::InventoryUnit).to receive(:backordered?).and_return(false)
436
+ allow_any_instance_of(Spree::InventoryUnit).to receive(:allow_ship?).and_return(true)
439
437
  end
440
438
 
441
439
  it "should result in a 'ready' state" do
@@ -538,9 +536,14 @@ describe Spree::Shipment, type: :model do
538
536
  end
539
537
 
540
538
  context "changes shipping rate via general update" do
539
+ let(:store) { create :store }
541
540
  let(:order) do
542
541
  Spree::Order.create(
543
- payment_total: 100, payment_state: 'paid', total: 100, item_total: 100
542
+ payment_total: 100,
543
+ payment_state: 'paid',
544
+ total: 100,
545
+ item_total: 100,
546
+ store: store
544
547
  )
545
548
  end
546
549
 
@@ -603,17 +606,30 @@ describe Spree::Shipment, type: :model do
603
606
  end
604
607
 
605
608
  context "#tracking_url" do
606
- subject do
607
- shipment.tracking_url
609
+ subject { shipment.tracking_url }
610
+
611
+ context "when tracking has not yet been set" do
612
+ it { is_expected.to be nil }
608
613
  end
609
614
 
610
- before do
611
- shipping_method.update!(tracking_url: "https://example.com/:tracking")
612
- shipment.tracking = '1Z12345'
615
+ context "when tracking has been set, but a shipping method is not present" do
616
+ before do
617
+ shipment.tracking = "12345"
618
+ shipment.shipping_rates.clear
619
+ end
620
+
621
+ it { is_expected.to be nil }
613
622
  end
614
623
 
615
- it "uses shipping method to determine url" do
616
- is_expected.to eq("https://example.com/1Z12345")
624
+ context "when tracking has been set and a shipping method exists" do
625
+ before do
626
+ shipment.tracking = "12345"
627
+ shipment.shipping_method.update(tracking_url: "https://example.com/:tracking")
628
+ end
629
+
630
+ it "builds the tracking url with the shipping method" do
631
+ expect(subject).to eql("https://example.com/12345")
632
+ end
617
633
  end
618
634
  end
619
635
 
@@ -631,7 +647,7 @@ describe Spree::Shipment, type: :model do
631
647
 
632
648
  it "associates variant and order" do
633
649
  expect(inventory_units).to receive(:create).with(params)
634
- unit = shipment.set_up_inventory('on_hand', variant, order, line_item)
650
+ shipment.set_up_inventory('on_hand', variant, order, line_item)
635
651
  end
636
652
  end
637
653
 
@@ -648,7 +664,7 @@ describe Spree::Shipment, type: :model do
648
664
  context "state changes" do
649
665
  before do
650
666
  # Must be stubbed so transition can succeed
651
- allow(order).to receive_messages :paid? => true
667
+ allow(order).to receive_messages paid?: true
652
668
  end
653
669
 
654
670
  it "are logged to the database" do
@@ -662,13 +678,13 @@ describe Spree::Shipment, type: :model do
662
678
  end
663
679
 
664
680
  context "don't require shipment" do
665
- let(:stock_location) { create(:stock_location, fulfillable: false)}
681
+ let(:stock_location) { create(:stock_location, fulfillable: false) }
666
682
  let(:unshippable_shipment) do
667
683
  create(
668
684
  :shipment,
669
685
  address: create(:address),
670
686
  stock_location: stock_location,
671
- inventory_units: [build(:inventory_unit)],
687
+ inventory_units: [build(:inventory_unit)]
672
688
  )
673
689
  end
674
690
 
@@ -1,9 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Spree
4
- describe ShippingCalculator, :type => :model do
5
- let(:variant1) { build(:variant, :price => 10) }
6
- let(:variant2) { build(:variant, :price => 20) }
4
+ describe ShippingCalculator, type: :model do
5
+ let(:variant1) { build(:variant, price: 10) }
6
+ let(:variant2) { build(:variant, price: 20) }
7
7
 
8
8
  let(:package) do
9
9
  build(:stock_package, variants_contents: { variant1 => 2, variant2 => 1 })
@@ -1,14 +1,15 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Spree
4
- describe ShippingManifest, :type => :model do
4
+ describe ShippingManifest, type: :model do
5
+ let!(:store) { create :store }
5
6
  let(:order) { Order.create! }
6
7
  let(:variant) { create :variant }
7
8
  let!(:shipment) { create(:shipment, state: 'pending', order: order) }
8
9
  let(:manifest) { described_class.new(inventory_units: inventory_units) }
9
10
 
10
- def build_unit(variant, attrs={})
11
- attrs = {order: order, variant: variant, shipment: shipment}.merge(attrs)
11
+ def build_unit(variant, attrs = {})
12
+ attrs = { order: order, variant: variant, shipment: shipment }.merge(attrs)
12
13
  attrs[:line_item] = attrs[:order].contents.add(attrs[:variant])
13
14
  InventoryUnit.new(attrs)
14
15
  end
@@ -30,7 +31,7 @@ module Spree
30
31
  expect(manifest.items[0]).to have_attributes(
31
32
  variant: variant,
32
33
  quantity: 1,
33
- states: {"on_hand" => 1}
34
+ states: { "on_hand" => 1 }
34
35
  )
35
36
  end
36
37
  end
@@ -42,7 +43,7 @@ module Spree
42
43
  expect(manifest.items[0]).to have_attributes(
43
44
  variant: variant,
44
45
  quantity: 2,
45
- states: {"on_hand" => 2}
46
+ states: { "on_hand" => 2 }
46
47
  )
47
48
  end
48
49
  end
@@ -55,12 +56,12 @@ module Spree
55
56
  expect(manifest.items[0]).to have_attributes(
56
57
  variant: variant,
57
58
  quantity: 1,
58
- states: {"on_hand" => 1}
59
+ states: { "on_hand" => 1 }
59
60
  )
60
61
  expect(manifest.items[1]).to have_attributes(
61
62
  variant: variant2,
62
63
  quantity: 1,
63
- states: {"on_hand" => 1}
64
+ states: { "on_hand" => 1 }
64
65
  )
65
66
  end
66
67
  end
@@ -3,29 +3,13 @@ require 'spec_helper'
3
3
  class DummyShippingCalculator < Spree::ShippingCalculator
4
4
  end
5
5
 
6
- describe Spree::ShippingMethod, :type => :model do
7
- let(:shipping_method){ create(:shipping_method) }
8
-
9
- context 'calculators' do
10
- it "Should reject calculators that don't inherit from Spree::ShippingCalculator" do
11
- allow(Spree::ShippingMethod).to receive_message_chain(:spree_calculators, :shipping_methods).and_return([
12
- Spree::Calculator::Shipping::FlatPercentItemTotal,
13
- Spree::Calculator::Shipping::PriceSack,
14
- Spree::Calculator::DefaultTax,
15
- DummyShippingCalculator # included as regression test for https://github.com/spree/spree/issues/3109
16
- ])
17
-
18
- expect(Spree::ShippingMethod.calculators).to eq([Spree::Calculator::Shipping::FlatPercentItemTotal, Spree::Calculator::Shipping::PriceSack, DummyShippingCalculator ])
19
- expect(Spree::ShippingMethod.calculators).not_to eq([Spree::Calculator::DefaultTax])
20
- end
21
- end
22
-
6
+ describe Spree::ShippingMethod, type: :model do
23
7
  # Regression test for https://github.com/spree/spree/issues/4492
24
8
  context "#shipments" do
25
9
  let!(:shipping_method) { create(:shipping_method) }
26
10
  let!(:shipment) do
27
11
  shipment = create(:shipment)
28
- shipment.shipping_rates.create!(:shipping_method => shipping_method)
12
+ shipment.shipping_rates.create!(shipping_method: shipping_method)
29
13
  shipment
30
14
  end
31
15
 
@@ -53,12 +37,6 @@ describe Spree::ShippingMethod, :type => :model do
53
37
  end
54
38
  end
55
39
 
56
- context 'factory' do
57
- it "should set calculable correctly" do
58
- expect(shipping_method.calculator.calculable).to eq(shipping_method)
59
- end
60
- end
61
-
62
40
  context "generating tracking URLs" do
63
41
  context "shipping method has a tracking URL mask on file" do
64
42
  let(:tracking_url) { "https://track-o-matic.com/:tracking" }
@@ -85,4 +63,151 @@ describe Spree::ShippingMethod, :type => :model do
85
63
  expect(shipping_method.deleted_at).not_to be_blank
86
64
  end
87
65
  end
66
+
67
+ describe ".with_all_shipping_category_ids" do
68
+ let(:category1) { create(:shipping_category) }
69
+ let(:category2) { create(:shipping_category) }
70
+
71
+ def matching(categories)
72
+ described_class.with_all_shipping_category_ids(categories.map(&:id))
73
+ end
74
+
75
+ context "with one associated shipping category" do
76
+ let!(:shipping_method) { create(:shipping_method, shipping_categories: [category1]) }
77
+
78
+ it "should match the associated category" do
79
+ expect(matching([category1])).to eq [shipping_method]
80
+ end
81
+
82
+ it "should not match the other category" do
83
+ expect(matching([category2])).to be_empty
84
+ end
85
+
86
+ it "should not match both categories" do
87
+ expect(matching([category1, category2])).to be_empty
88
+ end
89
+
90
+ context "with additional joins" do
91
+ before do
92
+ shipping_method.zones << create(:zone)
93
+ end
94
+ it "should not match both categories" do
95
+ result =
96
+ described_class.
97
+ joins(:zones).
98
+ with_all_shipping_category_ids([category1.id, category2.id])
99
+ expect(result).to be_empty
100
+ end
101
+ end
102
+ end
103
+
104
+ context "with two associated shipping categories" do
105
+ let!(:shipping_method) { create(:shipping_method, shipping_categories: [category1, category2]) }
106
+
107
+ it "should match the associated category" do
108
+ expect(matching([category1])).to eq [shipping_method]
109
+ end
110
+
111
+ it "should match both categories" do
112
+ expect(matching([category1, category2])).to eq [shipping_method]
113
+ end
114
+ end
115
+
116
+ context "with several shipping methods" do
117
+ let!(:shipping_method1) { create(:shipping_method, shipping_categories: [category1]) }
118
+ let!(:shipping_method2) { create(:shipping_method, shipping_categories: [category1, category2]) }
119
+ let!(:shipping_method3) { create(:shipping_method, shipping_categories: [category2]) }
120
+
121
+ it "matches correctly" do
122
+ expect(matching([category1])).to match_array [shipping_method1, shipping_method2]
123
+ end
124
+ end
125
+ end
126
+
127
+ describe ".available_in_stock_location" do
128
+ let!(:stock_location) { create :stock_location }
129
+ let!(:other_stock_location) { create :stock_location }
130
+
131
+ subject { described_class.available_in_stock_location(stock_location) }
132
+
133
+ context "when available_to_all" do
134
+ let!(:shipping_method) { create(:shipping_method, available_to_all: true) }
135
+
136
+ it "returns the shipping_method" do
137
+ is_expected.to eq [shipping_method]
138
+ end
139
+ end
140
+
141
+ context "when in stock location" do
142
+ let!(:shipping_method) { create(:shipping_method, available_to_all: false, stock_locations: [stock_location]) }
143
+
144
+ it "returns the shipping_method" do
145
+ is_expected.to eq [shipping_method]
146
+ end
147
+ end
148
+
149
+ context "when available_to_all and in stock location" do
150
+ let!(:shipping_method) { create(:shipping_method, available_to_all: true, stock_locations: [stock_location]) }
151
+
152
+ it "returns the shipping_method" do
153
+ is_expected.to eq [shipping_method]
154
+ end
155
+ end
156
+
157
+ context "when in no stock locations" do
158
+ let!(:shipping_method) { create(:shipping_method, available_to_all: false) }
159
+
160
+ it "returns no results" do
161
+ is_expected.to be_empty
162
+ end
163
+ end
164
+
165
+ context "when in another stock location" do
166
+ let!(:shipping_method) { create(:shipping_method, available_to_all: false, stock_locations: [other_stock_location]) }
167
+
168
+ it "returns no results" do
169
+ is_expected.to be_empty
170
+ end
171
+ end
172
+
173
+ context "when available_to_all and in another stock location" do
174
+ let!(:shipping_method) { create(:shipping_method, available_to_all: true, stock_locations: [other_stock_location]) }
175
+
176
+ it "returns the shipping_method" do
177
+ is_expected.to eq [shipping_method]
178
+ end
179
+ end
180
+
181
+ context "when multiple shipping methods match" do
182
+ let!(:shipping_method1) { create(:shipping_method, available_to_all: true, stock_locations: [other_stock_location]) }
183
+ let!(:shipping_method2) { create(:shipping_method, available_to_all: false, stock_locations: [stock_location]) }
184
+ let!(:shipping_method3) { create(:shipping_method, available_to_all: false, stock_locations: [other_stock_location]) }
185
+
186
+ it "returns both matching shipping_methods" do
187
+ is_expected.to match_array([shipping_method1, shipping_method2])
188
+ end
189
+ end
190
+ end
191
+
192
+ describe ".available_for_address" do
193
+ let!(:included_country) { create(:country, iso: "US") }
194
+ let!(:excluded_country) { create(:country, iso: "CA") }
195
+ let!(:included_zone) { create(:zone, countries: [included_country]) }
196
+ let!(:excluded_zone) { create(:zone, countries: [excluded_country]) }
197
+ let!(:shipping_method) { create(:shipping_method, zones: [included_zone]) }
198
+
199
+ let(:matches) { described_class.available_for_address(address) }
200
+ subject { matches }
201
+
202
+ context "address included in zone" do
203
+ let!(:address) { create(:address, country_iso_code: 'US') }
204
+
205
+ it { is_expected.to include(shipping_method) }
206
+ end
207
+
208
+ context "address included other zone" do
209
+ let!(:address) { create(:address, country_iso_code: 'CA') }
210
+ it { is_expected.to_not include(shipping_method) }
211
+ end
212
+ end
88
213
  end