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
@@ -2,27 +2,44 @@ require 'spec_helper'
2
2
 
3
3
  module Spree
4
4
  module Stock
5
- describe Estimator, :type => :model do
6
- let!(:shipping_method) { create(:shipping_method) }
7
- let(:package) { build(:stock_package, contents: inventory_units.map { |i| ContentItem.new(inventory_unit) }) }
8
- let(:order) { build(:order_with_line_items) }
5
+ describe Estimator, type: :model do
6
+ let(:shipping_rate) { 4.00 }
7
+ let!(:shipping_method) { create(:shipping_method, cost: shipping_rate, currency: currency) }
8
+ let(:package) do
9
+ build(:stock_package, contents: inventory_units.map { |i| ContentItem.new(i) }).tap do |p|
10
+ p.shipment = p.to_shipment
11
+ end
12
+ end
13
+ let(:order) { create(:order_with_line_items, shipping_method: shipping_method) }
9
14
  let(:inventory_units) { order.inventory_units }
10
15
 
11
- subject { Estimator.new(order) }
16
+ subject { Estimator.new }
12
17
 
13
18
  context "#shipping rates" do
14
19
  before(:each) do
15
- shipping_method.zones.first.members.create(:zoneable => order.ship_address.country)
16
- allow_any_instance_of(ShippingMethod).to receive_message_chain(:calculator, :available?).and_return(true)
17
- allow_any_instance_of(ShippingMethod).to receive_message_chain(:calculator, :compute).and_return(4.00)
18
- allow_any_instance_of(ShippingMethod).to receive_message_chain(:calculator, :preferences).and_return({:currency => currency})
19
- allow_any_instance_of(ShippingMethod).to receive_message_chain(:calculator, :marked_for_destruction?)
20
-
21
- allow(package).to receive_messages(:shipping_methods => [shipping_method])
20
+ shipping_method.zones.first.members.create(zoneable: order.ship_address.country)
22
21
  end
23
22
 
24
23
  let(:currency) { "USD" }
25
24
 
25
+ context 'without a shipment' do
26
+ before { package.shipment = nil }
27
+ it 'raises an error' do
28
+ expect {
29
+ subject.shipping_rates(package)
30
+ }.to raise_error(Spree::Stock::Estimator::ShipmentRequired)
31
+ end
32
+ end
33
+
34
+ context 'without an order' do
35
+ before { package.shipment.order = nil }
36
+ it 'raises an error' do
37
+ expect {
38
+ subject.shipping_rates(package)
39
+ }.to raise_error(Spree::Stock::Estimator::OrderRequired)
40
+ end
41
+ end
42
+
26
43
  shared_examples_for "shipping rate matches" do
27
44
  it "returns shipping rates" do
28
45
  shipping_rates = subject.shipping_rates(package)
@@ -42,12 +59,7 @@ module Spree
42
59
  end
43
60
 
44
61
  context "when the order's ship address is in a different zone" do
45
- before { shipping_method.zones.each{|z| z.members.delete_all} }
46
- it_should_behave_like "shipping rate doesn't match"
47
- end
48
-
49
- context "when the calculator is not available for that order" do
50
- before { allow_any_instance_of(ShippingMethod).to receive_message_chain(:calculator, :available?).and_return(false) }
62
+ before { shipping_method.zones.each{ |z| z.members.delete_all } }
51
63
  it_should_behave_like "shipping rate doesn't match"
52
64
  end
53
65
 
@@ -71,47 +83,51 @@ module Spree
71
83
  end
72
84
 
73
85
  it "sorts shipping rates by cost" do
74
- shipping_methods = 3.times.map { create(:shipping_method) }
75
- allow(shipping_methods[0]).to receive_message_chain(:calculator, :compute).and_return(5.00)
76
- allow(shipping_methods[1]).to receive_message_chain(:calculator, :compute).and_return(3.00)
77
- allow(shipping_methods[2]).to receive_message_chain(:calculator, :compute).and_return(4.00)
78
-
79
- allow(subject).to receive(:shipping_methods).and_return(shipping_methods)
86
+ ShippingMethod.destroy_all
87
+ create(:shipping_method, cost: 5)
88
+ create(:shipping_method, cost: 3)
89
+ create(:shipping_method, cost: 4)
80
90
 
81
- expect(subject.shipping_rates(package).map(&:cost)).to eq %w[3.00 4.00 5.00].map(&BigDecimal.method(:new))
91
+ expect(subject.shipping_rates(package).map(&:cost)).to eq [3.00, 4.00, 5.00]
82
92
  end
83
93
 
84
94
  context "general shipping methods" do
85
- let(:shipping_methods) { 2.times.map { create(:shipping_method) } }
86
-
87
- it "selects the most affordable shipping rate" do
88
- allow(shipping_methods[0]).to receive_message_chain(:calculator, :compute).and_return(5.00)
89
- allow(shipping_methods[1]).to receive_message_chain(:calculator, :compute).and_return(3.00)
90
-
91
- allow(subject).to receive(:shipping_methods).and_return(shipping_methods)
95
+ before { Spree::ShippingMethod.destroy_all }
96
+
97
+ context 'with two shipping methods of different cost' do
98
+ let!(:shipping_methods) do
99
+ [
100
+ create(:shipping_method, cost: 5),
101
+ create(:shipping_method, cost: 3)
102
+ ]
103
+ end
92
104
 
93
- expect(subject.shipping_rates(package).sort_by(&:cost).map(&:selected)).to eq [true, false]
105
+ it "selects the most affordable shipping rate" do
106
+ expect(subject.shipping_rates(package).sort_by(&:cost).map(&:selected)).to eq [true, false]
107
+ end
94
108
  end
95
109
 
96
- it "selects the most affordable shipping rate and doesn't raise exception over nil cost" do
97
- allow(shipping_methods[0]).to receive_message_chain(:calculator, :compute).and_return(1.00)
98
- allow(shipping_methods[1]).to receive_message_chain(:calculator, :compute).and_return(nil)
110
+ context 'with one of the shipping methods having nil cost' do
111
+ let!(:shipping_methods) do
112
+ [
113
+ create(:shipping_method, cost: 1),
114
+ create(:shipping_method, cost: nil)
115
+ ]
116
+ end
99
117
 
100
- allow(subject).to receive(:shipping_methods).and_return(shipping_methods)
118
+ it "selects the most affordable shipping rate and doesn't raise exception over nil cost" do
119
+ allow(shipping_methods[1]).to receive_message_chain(:calculator, :compute).and_return(nil)
120
+ allow(subject).to receive(:shipping_methods).and_return(shipping_methods)
101
121
 
102
- subject.shipping_rates(package)
122
+ expect(subject.shipping_rates(package).map(&:shipping_method)).to eq([shipping_methods[0]])
123
+ end
103
124
  end
104
125
  end
105
126
 
106
127
  context "involves backend only shipping methods" do
107
- let(:backend_method) { create(:shipping_method, display_on: "back_end") }
108
- let(:generic_method) { create(:shipping_method) }
109
-
110
- before do
111
- allow(backend_method).to receive_message_chain(:calculator, :compute).and_return(0.00)
112
- allow(generic_method).to receive_message_chain(:calculator, :compute).and_return(5.00)
113
- allow(subject).to receive(:shipping_methods).and_return([backend_method, generic_method])
114
- end
128
+ before{ Spree::ShippingMethod.destroy_all }
129
+ let!(:backend_method) { create(:shipping_method, display_on: "back_end", cost: 0.00) }
130
+ let!(:generic_method) { create(:shipping_method, cost: 5.00) }
115
131
 
116
132
  it "does not return backend rates at all" do
117
133
  expect(subject.shipping_rates(package).map(&:shipping_method_id)).to eq([generic_method.id])
@@ -127,22 +143,17 @@ module Spree
127
143
  let!(:tax_rate) { create(:tax_rate, zone: order.tax_zone) }
128
144
 
129
145
  before do
130
- Spree::ShippingMethod.all.each do |sm|
131
- sm.tax_category_id = tax_rate.tax_category_id
132
- sm.save
133
- end
134
- package.shipping_methods.map(&:reload)
146
+ shipping_method.update!(tax_category: tax_rate.tax_category)
135
147
  end
136
148
 
137
-
138
149
  it "links the shipping rate and the tax rate" do
139
150
  shipping_rates = subject.shipping_rates(package)
140
- expect(shipping_rates.first.tax_rate).to eq(tax_rate)
151
+ expect(shipping_rates.first.taxes.first.tax_rate).to eq(tax_rate)
141
152
  end
142
153
  end
143
154
 
144
155
  it 'uses the configured shipping rate selector' do
145
- shipping_rate = Spree::ShippingRate.new
156
+ shipping_rate = build(:shipping_rate)
146
157
  allow(Spree::ShippingRate).to receive(:new).and_return(shipping_rate)
147
158
 
148
159
  selector_class = Class.new do
@@ -174,6 +185,24 @@ module Spree
174
185
 
175
186
  Spree::Config.shipping_rate_sorter_class = nil
176
187
  end
188
+
189
+ it 'uses the configured shipping rate taxer' do
190
+ class Spree::Tax::TestTaxer
191
+ def initialize
192
+ end
193
+
194
+ def tax(_)
195
+ Spree::ShippingRate.new
196
+ end
197
+ end
198
+ Spree::Config.shipping_rate_taxer_class = Spree::Tax::TestTaxer
199
+
200
+ shipping_rate = Spree::ShippingRate.new
201
+ allow(Spree::ShippingRate).to receive(:new).and_return(shipping_rate)
202
+
203
+ expect(Spree::Tax::TestTaxer).to receive(:new).and_call_original
204
+ subject.shipping_rates(package)
205
+ end
177
206
  end
178
207
  end
179
208
  end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  module Spree
4
4
  module Stock
5
- describe InventoryUnitBuilder, :type => :model do
5
+ describe InventoryUnitBuilder, type: :model do
6
6
  let(:line_item_1) { build(:line_item) }
7
7
  let(:line_item_2) { build(:line_item, quantity: 2) }
8
8
  let(:order) { build(:order, line_items: [line_item_1, line_item_2]) }
@@ -30,9 +30,7 @@ module Spree
30
30
  it "associates the inventory units to the order" do
31
31
  expect(subject.units.map(&:order).uniq).to eq [order]
32
32
  end
33
-
34
33
  end
35
-
36
34
  end
37
35
  end
38
36
  end
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  module Spree
4
4
  module Stock
5
- describe Package, :type => :model do
5
+ describe Package, type: :model do
6
6
  let(:variant) { build(:variant, weight: 25.0) }
7
7
  let(:stock_location) { build(:stock_location) }
8
8
  let(:order) { build(:order) }
@@ -10,7 +10,7 @@ module Spree
10
10
  subject { Package.new(stock_location) }
11
11
 
12
12
  def build_inventory_unit
13
- build(:inventory_unit, variant: variant)
13
+ build(:inventory_unit, variant: variant, order: order)
14
14
  end
15
15
 
16
16
  it 'calculates the weight of all the contents' do
@@ -47,6 +47,24 @@ module Spree
47
47
  expect(item.quantity).to eq 1
48
48
  end
49
49
 
50
+ it 'builds the correct list of shipping methods based on stock location and categories' do
51
+ category1 = create(:shipping_category)
52
+ category2 = create(:shipping_category)
53
+ method1 = create(:shipping_method, available_to_all: true)
54
+ method2 = create(:shipping_method, stock_locations: [stock_location])
55
+ method1.shipping_categories = [category1, category2]
56
+ method2.shipping_categories = [category1, category2]
57
+ variant1 = mock_model(Variant, shipping_category_id: category1.id)
58
+ variant2 = mock_model(Variant, shipping_category_id: category2.id)
59
+ variant3 = mock_model(Variant, shipping_category_id: nil)
60
+ contents = [ContentItem.new(build(:inventory_unit, variant: variant1)),
61
+ ContentItem.new(build(:inventory_unit, variant: variant1)),
62
+ ContentItem.new(build(:inventory_unit, variant: variant2)),
63
+ ContentItem.new(build(:inventory_unit, variant: variant3))]
64
+
65
+ package = Package.new(stock_location, contents)
66
+ expect(package.shipping_methods).to match_array([method1, method2])
67
+ end
50
68
  # Contains regression test for https://github.com/spree/spree/issues/2804
51
69
  it 'builds a list of shipping methods common to all categories' do
52
70
  category1 = create(:shipping_category)
@@ -55,20 +73,20 @@ module Spree
55
73
  method2 = create(:shipping_method)
56
74
  method1.shipping_categories = [category1, category2]
57
75
  method2.shipping_categories = [category1]
58
- variant1 = mock_model(Variant, shipping_category: category1)
59
- variant2 = mock_model(Variant, shipping_category: category2)
60
- variant3 = mock_model(Variant, shipping_category: nil)
76
+ variant1 = mock_model(Variant, shipping_category_id: category1.id)
77
+ variant2 = mock_model(Variant, shipping_category_id: category2.id)
78
+ variant3 = mock_model(Variant, shipping_category_id: nil)
61
79
  contents = [ContentItem.new(build(:inventory_unit, variant: variant1)),
62
80
  ContentItem.new(build(:inventory_unit, variant: variant1)),
63
81
  ContentItem.new(build(:inventory_unit, variant: variant2)),
64
82
  ContentItem.new(build(:inventory_unit, variant: variant3))]
65
83
 
66
84
  package = Package.new(stock_location, contents)
67
- expect(package.shipping_methods).to eq([method1])
85
+ expect(package.shipping_methods).to match_array([method1])
68
86
  end
69
87
 
70
88
  it 'builds an empty list of shipping methods when no categories' do
71
- variant = mock_model(Variant, shipping_category: nil)
89
+ variant = mock_model(Variant, shipping_category_id: nil)
72
90
  contents = [ContentItem.new(build(:inventory_unit, variant: variant))]
73
91
  package = Package.new(stock_location, contents)
74
92
  expect(package.shipping_methods).to be_empty
@@ -79,9 +97,9 @@ module Spree
79
97
  subject.add build_inventory_unit, :backordered
80
98
 
81
99
  shipping_method = build(:shipping_method)
82
- subject.shipping_rates = [ Spree::ShippingRate.new(shipping_method: shipping_method, cost: 10.00, selected: true) ]
83
100
 
84
101
  shipment = subject.to_shipment
102
+ shipment.shipping_rates = [Spree::ShippingRate.new(shipping_method: shipping_method, cost: 10.00, selected: true)]
85
103
  expect(shipment.stock_location).to eq subject.stock_location
86
104
  expect(shipment.inventory_units.size).to eq 3
87
105
 
@@ -95,6 +113,7 @@ module Spree
95
113
  expect(last_unit.state).to eq 'backordered'
96
114
 
97
115
  expect(shipment.shipping_method).to eq shipping_method
116
+ expect(shipment.address).to eq order.ship_address
98
117
  end
99
118
 
100
119
  it 'does not add an inventory unit to a package twice' do
@@ -124,7 +143,6 @@ module Spree
124
143
  describe "#remove" do
125
144
  let(:unit) { build_inventory_unit }
126
145
  context "there is a content item for the inventory unit" do
127
-
128
146
  before { subject.add unit }
129
147
 
130
148
  it "removes that content item" do
@@ -143,7 +161,6 @@ module Spree
143
161
  describe "#order" do
144
162
  let(:unit) { build_inventory_unit }
145
163
  context "there is an inventory unit" do
146
-
147
164
  before { subject.add unit }
148
165
 
149
166
  it "returns an order" do
@@ -2,8 +2,8 @@ require 'spec_helper'
2
2
 
3
3
  module Spree
4
4
  module Stock
5
- describe Packer, :type => :model do
6
- let!(:inventory_units) { 5.times.map { build(:inventory_unit) } }
5
+ describe Packer, type: :model do
6
+ let!(:inventory_units) { Array.new(5) { build(:inventory_unit) } }
7
7
  let(:stock_location) { create(:stock_location) }
8
8
 
9
9
  subject { Packer.new(stock_location, inventory_units) }
@@ -63,12 +63,12 @@ module Spree
63
63
  let(:order) { build(:order_with_line_items, line_items_count: 1) }
64
64
  let(:line_item) { order.line_items.first }
65
65
  let(:inventory_units) {
66
- 30.times.map do
66
+ Array.new(30) do
67
67
  build(
68
68
  :inventory_unit,
69
69
  order: order,
70
70
  line_item: line_item,
71
- variant: variant,
71
+ variant: variant
72
72
  )
73
73
  end
74
74
  }
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  module Spree
4
4
  module Stock
5
- describe Prioritizer, :type => :model do
5
+ describe Prioritizer, type: :model do
6
6
  let(:order) { mock_model(Order) }
7
7
  let(:stock_location) { build(:stock_location) }
8
8
  let(:variant) { build(:variant) }
@@ -10,10 +10,9 @@ end
10
10
 
11
11
  module Spree
12
12
  module Stock
13
- describe Quantifier, :type => :model do
14
-
13
+ describe Quantifier, type: :model do
15
14
  let(:target_stock_location) { nil }
16
- let!(:stock_location) { create :stock_location_with_items }
15
+ let!(:stock_location) { create :stock_location_with_items }
17
16
  let!(:stock_item) { stock_location.stock_items.order(:id).first }
18
17
 
19
18
  subject { described_class.new(stock_item.variant, target_stock_location) }
@@ -58,7 +57,6 @@ module Spree
58
57
  expect(subject.can_supply?(11)).to be false
59
58
  end
60
59
  end
61
-
62
60
  end
63
61
 
64
62
  context 'with multiple stock locations/items' do
@@ -91,7 +89,6 @@ module Spree
91
89
  expect(subject.can_supply?(16)).to be false
92
90
  end
93
91
  end
94
-
95
92
  end
96
93
 
97
94
  context 'with a specific stock location' do
@@ -109,7 +106,6 @@ module Spree
109
106
  expect(subject.can_supply?(6)).to eq false
110
107
  end
111
108
  end
112
-
113
109
  end
114
110
  end
115
111
  end
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  module Spree
4
4
  module Stock
5
5
  module Splitter
6
- describe Backordered, :type => :model do
6
+ describe Backordered, type: :model do
7
7
  let(:variant) { build(:variant) }
8
8
 
9
9
  let(:packer) { build(:stock_packer) }
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  module Spree
4
4
  module Stock
5
5
  module Splitter
6
- describe Base, :type => :model do
6
+ describe Base, type: :model do
7
7
  let(:packer) { build(:stock_packer) }
8
8
 
9
9
  it 'continues to splitter chain' do
@@ -14,7 +14,6 @@ module Spree
14
14
  expect(splitter1).to receive(:split).with(packages)
15
15
  splitter2.split(packages)
16
16
  end
17
-
18
17
  end
19
18
  end
20
19
  end
@@ -3,8 +3,7 @@ require 'spec_helper'
3
3
  module Spree
4
4
  module Stock
5
5
  module Splitter
6
- describe ShippingCategory, :type => :model do
7
-
6
+ describe ShippingCategory, type: :model do
8
7
  let(:order) { create(:order_with_line_items, line_items_count: 1) }
9
8
  let(:line_item) { order.line_items.first }
10
9
  let(:variant1) { build(:variant) }
@@ -43,7 +42,6 @@ module Spree
43
42
  expect(packages[2].quantity).to eq 6
44
43
  expect(packages[3].quantity).to eq 9
45
44
  end
46
-
47
45
  end
48
46
  end
49
47
  end
@@ -3,9 +3,9 @@ require 'spec_helper'
3
3
  module Spree
4
4
  module Stock
5
5
  module Splitter
6
- describe Weight, :type => :model do
6
+ describe Weight, type: :model do
7
7
  let(:packer) { build(:stock_packer) }
8
- let(:variant) { build(:base_variant, :weight => 100) }
8
+ let(:variant) { build(:base_variant, weight: 100) }
9
9
 
10
10
  subject { Weight.new(packer) }
11
11
 
@@ -18,7 +18,7 @@ module Spree
18
18
 
19
19
  it 'handles packages that can not be reduced' do
20
20
  package = Package.new(packer.stock_location)
21
- allow(variant).to receive_messages(:weight => 200)
21
+ allow(variant).to receive_messages(weight: 200)
22
22
  2.times { package.add build(:inventory_unit, variant: variant) }
23
23
  packages = subject.split([package])
24
24
  expect(packages.size).to eq 2
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::StockItem, :type => :model do
3
+ describe Spree::StockItem, type: :model do
4
4
  let(:stock_location) { create(:stock_location_with_items) }
5
5
 
6
6
  subject { stock_location.stock_items.order(:id).first }
@@ -37,21 +37,21 @@ describe Spree::StockItem, :type => :model do
37
37
  context 'when count_on_hand > 0' do
38
38
  before(:each) do
39
39
  subject.update_column('count_on_hand', 4)
40
- subject.reduce_count_on_hand_to_zero
41
- end
40
+ subject.reduce_count_on_hand_to_zero
41
+ end
42
42
 
43
- it { expect(subject.count_on_hand).to eq(0) }
44
- end
43
+ it { expect(subject.count_on_hand).to eq(0) }
44
+ end
45
45
 
46
- context 'when count_on_hand > 0' do
47
- before(:each) do
48
- subject.update_column('count_on_hand', -4)
49
- @count_on_hand = subject.count_on_hand
50
- subject.reduce_count_on_hand_to_zero
51
- end
46
+ context 'when count_on_hand > 0' do
47
+ before(:each) do
48
+ subject.update_column('count_on_hand', -4)
49
+ @count_on_hand = subject.count_on_hand
50
+ subject.reduce_count_on_hand_to_zero
51
+ end
52
52
 
53
- it { expect(subject.count_on_hand).to eq(@count_on_hand) }
54
- end
53
+ it { expect(subject.count_on_hand).to eq(@count_on_hand) }
54
+ end
55
55
  end
56
56
 
57
57
  context "adjust count_on_hand" do
@@ -73,7 +73,7 @@ describe Spree::StockItem, :type => :model do
73
73
  let(:inventory_unit_2) { double('InventoryUnit2') }
74
74
 
75
75
  before do
76
- allow(subject).to receive_messages(:backordered_inventory_units => [inventory_unit, inventory_unit_2])
76
+ allow(subject).to receive_messages(backordered_inventory_units: [inventory_unit, inventory_unit_2])
77
77
  subject.update_column(:count_on_hand, -2)
78
78
  end
79
79
 
@@ -94,7 +94,7 @@ describe Spree::StockItem, :type => :model do
94
94
  end
95
95
 
96
96
  context "adds new items" do
97
- before { allow(subject).to receive_messages(:backordered_inventory_units => [inventory_unit, inventory_unit_2]) }
97
+ before { allow(subject).to receive_messages(backordered_inventory_units: [inventory_unit, inventory_unit_2]) }
98
98
 
99
99
  it "fills existing backorders" do
100
100
  expect(inventory_unit).to receive(:fill_backorder)
@@ -132,7 +132,7 @@ describe Spree::StockItem, :type => :model do
132
132
  end
133
133
 
134
134
  context "adds new items" do
135
- before { allow(subject).to receive_messages(:backordered_inventory_units => [inventory_unit, inventory_unit_2]) }
135
+ before { allow(subject).to receive_messages(backordered_inventory_units: [inventory_unit, inventory_unit_2]) }
136
136
 
137
137
  it "fills existing backorders" do
138
138
  expect(inventory_unit).to receive(:fill_backorder)
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Spree
4
- describe StockLocation, :type => :model do
4
+ describe StockLocation, type: :model do
5
5
  subject { create(:stock_location_with_items, backorderable_default: true) }
6
6
  let(:stock_item) { subject.stock_items.order(:id).first }
7
7
  let(:variant) { stock_item.variant }
@@ -88,7 +88,7 @@ module Spree
88
88
  end
89
89
 
90
90
  it 'returns nil when stock_item is not found for variant' do
91
- stock_item = subject.stock_item(100)
91
+ stock_item = subject.stock_item(0)
92
92
  expect(stock_item).to be_nil
93
93
  end
94
94
 
@@ -137,14 +137,14 @@ module Spree
137
137
  end
138
138
 
139
139
  it 'can be deactivated' do
140
- create(:stock_location, :active => true)
141
- create(:stock_location, :active => false)
140
+ create(:stock_location, active: true)
141
+ create(:stock_location, active: false)
142
142
  expect(Spree::StockLocation.active.count).to eq 1
143
143
  end
144
144
 
145
145
  it 'ensures only one stock location is default at a time' do
146
- first = create(:stock_location, :active => true, :default => true)
147
- second = create(:stock_location, :active => true, :default => true)
146
+ first = create(:stock_location, active: true, default: true)
147
+ second = create(:stock_location, active: true, default: true)
148
148
 
149
149
  expect(first.reload.default).to eq false
150
150
  expect(second.reload.default).to eq true
@@ -240,7 +240,6 @@ module Spree
240
240
  end
241
241
  end
242
242
 
243
-
244
243
  describe "#move" do
245
244
  let!(:variant) { create(:variant) }
246
245
  def move
@@ -268,7 +267,6 @@ module Spree
268
267
  }.not_to change { subject.stock_items.count }
269
268
  end
270
269
  end
271
-
272
270
  end
273
271
  end
274
272
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::StockMovement, :type => :model do
3
+ describe Spree::StockMovement, type: :model do
4
4
  let(:stock_location) { create(:stock_location_with_items) }
5
5
  let(:stock_item) { stock_location.stock_items.order(:id).first }
6
6
  subject { build(:stock_movement, stock_item: stock_item) }
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Spree
4
- describe StockTransfer, :type => :model do
4
+ describe StockTransfer, type: :model do
5
5
  let(:destination_location) { create(:stock_location_with_items) }
6
6
  let(:source_location) { create(:stock_location_with_items) }
7
7
  let(:stock_item) { source_location.stock_items.order(:id).first }
@@ -279,7 +279,6 @@ module Spree
279
279
  subject { stock_transfer.transfer }
280
280
 
281
281
  context 'with enough stock' do
282
-
283
282
  it 'creates stock movements for transfer items' do
284
283
  expect{ subject }.to change{ Spree::StockMovement.count }.by(stock_transfer.transfer_items.count)
285
284
  end
@@ -303,7 +302,6 @@ module Spree
303
302
  it 'returns false' do
304
303
  expect(subject).to eq false
305
304
  end
306
-
307
305
  end
308
306
  end
309
307
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::StoreCreditCategory, :type => :model do
3
+ describe Spree::StoreCreditCategory, type: :model do
4
4
  describe "#non_expiring?" do
5
5
  let(:store_credit_category) { build(:store_credit_category, name: category_name) }
6
6
 
@@ -1,12 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Spree::StoreCreditEvent do
4
-
5
4
  describe ".exposed_events" do
6
-
7
5
  [
8
6
  Spree::StoreCredit::ELIGIBLE_ACTION,
9
- Spree::StoreCredit::AUTHORIZE_ACTION,
7
+ Spree::StoreCredit::AUTHORIZE_ACTION
10
8
  ].each do |action|
11
9
  let(:action) { action }
12
10
  it "excludes #{action} actions" do
@@ -19,7 +17,7 @@ describe Spree::StoreCreditEvent do
19
17
  Spree::StoreCredit::VOID_ACTION,
20
18
  Spree::StoreCredit::CREDIT_ACTION,
21
19
  Spree::StoreCredit::CAPTURE_ACTION,
22
- Spree::StoreCredit::ALLOCATION_ACTION,
20
+ Spree::StoreCredit::ALLOCATION_ACTION
23
21
  ].each do |action|
24
22
  it "includes #{action} actions" do
25
23
  event = create(:store_credit_event, action: action)
@@ -231,7 +229,7 @@ describe Spree::StoreCreditEvent do
231
229
  end
232
230
 
233
231
  describe "#display_action" do
234
- subject { event.display_action }
232
+ subject { event.display_action }
235
233
 
236
234
  context "capture event" do
237
235
  let(:event) { create(:store_credit_capture_event) }