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
@@ -9,15 +9,14 @@ module ThirdParty
9
9
  end
10
10
  end
11
11
 
12
- describe Spree::Product, :type => :model do
13
-
12
+ describe Spree::Product, type: :model do
14
13
  context 'product instance' do
15
14
  let(:product) { create(:product) }
16
- let(:variant) { create(:variant, :product => product) }
15
+ let(:variant) { create(:variant, product: product) }
17
16
 
18
17
  context '#duplicate' do
19
18
  before do
20
- allow(product).to receive_messages :taxons => [create(:taxon)]
19
+ allow(product).to receive_messages taxons: [create(:taxon)]
21
20
  end
22
21
 
23
22
  it 'duplicates product' do
@@ -122,7 +121,7 @@ describe Spree::Product, :type => :model do
122
121
 
123
122
  context "product has variants" do
124
123
  before do
125
- create(:variant, :product => product)
124
+ create(:variant, product: product)
126
125
  end
127
126
 
128
127
  context "#destroy" do
@@ -189,7 +188,35 @@ describe Spree::Product, :type => :model do
189
188
  before { high.option_values.destroy_all }
190
189
 
191
190
  it "returns only variants with option values" do
192
- expect(product.variants_and_option_values).to eq([low])
191
+ Spree::Deprecation.silence do
192
+ expect(product.variants_and_option_values).to eq([low])
193
+ end
194
+ end
195
+ end
196
+
197
+ context "variants_and_option_values_for" do
198
+ let!(:high) { create(:variant, product: product) }
199
+ let!(:low) { create(:variant, product: product) }
200
+
201
+ context "when one product does not have option values" do
202
+ before { high.option_values.destroy_all }
203
+
204
+ it "returns only variants with option values" do
205
+ expect(product.variants_and_option_values_for).to eq([low])
206
+ end
207
+ end
208
+
209
+ context "when asking with different pricing options" do
210
+ let(:pricing_options) { Spree::Config.pricing_options_class.new(currency: "EUR") }
211
+
212
+ before do
213
+ low.prices.create(amount: 99.00, currency: "EUR")
214
+ end
215
+
216
+ it "returns only variants which have matching prices" do
217
+ expect(product.variants_and_option_values_for).to contain_exactly(low, high)
218
+ expect(product.variants_and_option_values_for(pricing_options)).to contain_exactly(low)
219
+ end
193
220
  end
194
221
  end
195
222
 
@@ -278,7 +305,6 @@ describe Spree::Product, :type => :model do
278
305
  end
279
306
 
280
307
  context "slugs" do
281
-
282
308
  it "normalizes slug on update validation" do
283
309
  product.slug = "hey//joe"
284
310
  product.valid?
@@ -332,6 +358,13 @@ describe Spree::Product, :type => :model do
332
358
  end
333
359
  end
334
360
  end
361
+
362
+ context "#really_destroy!" do
363
+ it "destroy the product" do
364
+ product.really_destroy!
365
+ expect(product).not_to be_persisted
366
+ end
367
+ end
335
368
  end
336
369
 
337
370
  context "properties" do
@@ -362,11 +395,11 @@ describe Spree::Product, :type => :model do
362
395
 
363
396
  # Regression test for https://github.com/spree/spree/issues/2455
364
397
  it "should not overwrite properties' presentation names" do
365
- Spree::Property.where(:name => 'foo').first_or_create!(:presentation => "Foo's Presentation Name")
398
+ Spree::Property.where(name: 'foo').first_or_create!(presentation: "Foo's Presentation Name")
366
399
  product.set_property('foo', 'value1')
367
400
  product.set_property('bar', 'value2')
368
- expect(Spree::Property.where(:name => 'foo').first.presentation).to eq("Foo's Presentation Name")
369
- expect(Spree::Property.where(:name => 'bar').first.presentation).to eq("bar")
401
+ expect(Spree::Property.where(name: 'foo').first.presentation).to eq("Foo's Presentation Name")
402
+ expect(Spree::Property.where(name: 'bar').first.presentation).to eq("bar")
370
403
  end
371
404
 
372
405
  # Regression test for https://github.com/spree/spree/issues/4416
@@ -402,16 +435,16 @@ describe Spree::Product, :type => :model do
402
435
 
403
436
  context "when prototype with option types is supplied" do
404
437
  def build_option_type_with_values(name, values)
405
- ot = create(:option_type, :name => name)
438
+ ot = create(:option_type, name: name)
406
439
  values.each do |val|
407
- ot.option_values.create(:name => val.downcase, :presentation => val)
440
+ ot.option_values.create(name: val.downcase, presentation: val)
408
441
  end
409
442
  ot
410
443
  end
411
444
 
412
445
  let(:prototype) do
413
446
  size = build_option_type_with_values("size", %w(Small Medium Large))
414
- create(:prototype, :name => "Size", :option_types => [ size ])
447
+ create(:prototype, name: "Size", option_types: [size])
415
448
  end
416
449
 
417
450
  let(:option_values_hash) do
@@ -465,12 +498,12 @@ describe Spree::Product, :type => :model do
465
498
  context "#images" do
466
499
  let(:product) { create(:product) }
467
500
  let(:image) { File.open(File.expand_path('../../../fixtures/thinking-cat.jpg', __FILE__)) }
468
- let(:params) { {:viewable_id => product.master.id, :viewable_type => 'Spree::Variant', :attachment => image, :alt => "position 2", :position => 2} }
501
+ let(:params) { { viewable_id: product.master.id, viewable_type: 'Spree::Variant', attachment: image, alt: "position 2", position: 2 } }
469
502
 
470
503
  before do
471
504
  Spree::Image.create(params)
472
- Spree::Image.create(params.merge({:alt => "position 1", :position => 1}))
473
- Spree::Image.create(params.merge({:viewable_type => 'ThirdParty::Extension', :alt => "position 1", :position => 2}))
505
+ Spree::Image.create(params.merge({ alt: "position 1", position: 1 }))
506
+ Spree::Image.create(params.merge({ viewable_type: 'ThirdParty::Extension', alt: "position 1", position: 2 }))
474
507
  end
475
508
 
476
509
  it "only looks for variant images" do
@@ -498,18 +531,18 @@ describe Spree::Product, :type => :model do
498
531
  context '#total_on_hand' do
499
532
  it 'should be infinite if track_inventory_levels is false' do
500
533
  Spree::Config[:track_inventory_levels] = false
501
- expect(build(:product, :variants_including_master => [build(:master_variant)]).total_on_hand).to eql(Float::INFINITY)
534
+ expect(build(:product, variants_including_master: [build(:master_variant)]).total_on_hand).to eql(Float::INFINITY)
502
535
  end
503
536
 
504
537
  it 'should be infinite if variant is on demand' do
505
538
  Spree::Config[:track_inventory_levels] = true
506
- expect(build(:product, :variants_including_master => [build(:on_demand_master_variant)]).total_on_hand).to eql(Float::INFINITY)
539
+ expect(build(:product, variants_including_master: [build(:on_demand_master_variant)]).total_on_hand).to eql(Float::INFINITY)
507
540
  end
508
541
 
509
542
  it 'should return sum of stock items count_on_hand' do
510
543
  product = create(:product)
511
544
  product.stock_items.first.set_count_on_hand 5
512
- product.variants_including_master(true) # force load association
545
+ product.variants_including_master.reload # force load association
513
546
  expect(product.total_on_hand).to eql(5)
514
547
  end
515
548
 
@@ -545,7 +578,7 @@ describe Spree::Product, :type => :model do
545
578
  end
546
579
 
547
580
  context 'initializing with variant attributes' do
548
- let(:attributes) { {sku: 'FOO'} }
581
+ let(:attributes) { { sku: 'FOO' } }
549
582
 
550
583
  it_behaves_like "new product with master"
551
584
 
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::Promotion::Actions::CreateAdjustment, :type => :model do
4
- let(:order) { create(:order_with_line_items, :line_items_count => 1) }
3
+ describe Spree::Promotion::Actions::CreateAdjustment, type: :model do
4
+ let(:order) { create(:order_with_line_items, line_items_count: 1) }
5
5
  let(:promotion) { create(:promotion) }
6
6
  let(:action) { Spree::Promotion::Actions::CreateAdjustment.new }
7
7
  let(:payload) { { order: order } }
@@ -9,21 +9,19 @@ describe Spree::Promotion::Actions::CreateAdjustment, :type => :model do
9
9
  # From promotion spec:
10
10
  context "#perform" do
11
11
  before do
12
- action.calculator = Spree::Calculator::FlatRate.new(:preferred_amount => 10)
12
+ action.calculator = Spree::Calculator::FlatRate.new(preferred_amount: 10)
13
13
  promotion.promotion_actions = [action]
14
- allow(action).to receive_messages(:promotion => promotion)
14
+ allow(action).to receive_messages(promotion: promotion)
15
15
  end
16
16
 
17
- # Regression test for https://github.com/spree/spree/issues/3966
18
- it "does not apply an adjustment if the amount is 0" do
17
+ it "does apply an adjustment if the amount is 0" do
19
18
  action.calculator.preferred_amount = 0
20
19
  action.perform(payload)
21
- expect(promotion.usage_count).to eq(0)
22
- expect(order.adjustments.count).to eq(0)
20
+ expect(order.adjustments.count).to eq(1)
23
21
  end
24
22
 
25
23
  it "should create a discount with correct negative amount" do
26
- order.shipments.create!(:cost => 10)
24
+ order.shipments.create!(cost: 10)
27
25
 
28
26
  action.perform(payload)
29
27
  expect(promotion.usage_count).to eq(0)
@@ -38,7 +36,7 @@ describe Spree::Promotion::Actions::CreateAdjustment, :type => :model do
38
36
  end
39
37
 
40
38
  it "should not create a discount when order already has one from this promotion" do
41
- order.shipments.create!(:cost => 10)
39
+ order.shipments.create!(cost: 10)
42
40
 
43
41
  action.perform(payload)
44
42
  action.perform(payload)
@@ -62,7 +60,7 @@ describe Spree::Promotion::Actions::CreateAdjustment, :type => :model do
62
60
 
63
61
  context "#destroy" do
64
62
  before(:each) do
65
- action.calculator = Spree::Calculator::FlatRate.new(:preferred_amount => 10)
63
+ action.calculator = Spree::Calculator::FlatRate.new(preferred_amount: 10)
66
64
  promotion.promotion_actions = [action]
67
65
  end
68
66
 
@@ -76,7 +74,7 @@ describe Spree::Promotion::Actions::CreateAdjustment, :type => :model do
76
74
 
77
75
  context "when order is complete" do
78
76
  let(:order) do
79
- create(:completed_order_with_totals, :line_items_count => 1)
77
+ create(:completed_order_with_totals, line_items_count: 1)
80
78
  end
81
79
 
82
80
  before(:each) do
@@ -3,11 +3,11 @@ require 'spec_helper'
3
3
  module Spree
4
4
  class Promotion
5
5
  module Actions
6
- describe CreateItemAdjustments, :type => :model do
6
+ describe CreateItemAdjustments, type: :model do
7
7
  let(:order) { create(:order) }
8
8
  let(:promotion) { create(:promotion) }
9
9
  let(:action) { CreateItemAdjustments.new }
10
- let!(:line_item) { create(:line_item, :order => order) }
10
+ let!(:line_item) { create(:line_item, order: order) }
11
11
  let(:payload) { { order: order, promotion: promotion } }
12
12
 
13
13
  before do
@@ -19,7 +19,7 @@ module Spree
19
19
  # Regression test for https://github.com/spree/spree/issues/3966
20
20
  context "when calculator computes 0" do
21
21
  before do
22
- allow(action).to receive_messages :compute_amount => 0
22
+ allow(action).to receive_messages compute_amount: 0
23
23
  end
24
24
 
25
25
  it "does not create an adjustment when calculator returns 0" do
@@ -31,7 +31,7 @@ module Spree
31
31
  context "when calculator returns a non-zero value" do
32
32
  before do
33
33
  promotion.promotion_actions = [action]
34
- allow(action).to receive_messages :compute_amount => 10
34
+ allow(action).to receive_messages compute_amount: 10
35
35
  end
36
36
 
37
37
  it "creates adjustment with item as adjustable" do
@@ -28,15 +28,15 @@ module Spree::Promotion::Actions
28
28
  end
29
29
  context "and an item with a quantity of 2" do
30
30
  let(:quantity) { 2 }
31
- it { is_expected.to eq -10 }
31
+ it { is_expected.to eq(-10) }
32
32
  end
33
33
  context "and an item with a quantity of 3" do
34
34
  let(:quantity) { 3 }
35
- it { is_expected.to eq -10 }
35
+ it { is_expected.to eq(-10) }
36
36
  end
37
37
  context "and an item with a quantity of 4" do
38
38
  let(:quantity) { 4 }
39
- it { is_expected.to eq -20 }
39
+ it { is_expected.to eq(-20) }
40
40
  end
41
41
  end
42
42
 
@@ -49,11 +49,11 @@ module Spree::Promotion::Actions
49
49
  before { action.perform({ order: order, promotion: promotion }) }
50
50
  describe "the adjustment for the first item" do
51
51
  let(:line_item) { item_a }
52
- it { is_expected.to eq -10 }
52
+ it { is_expected.to eq(-10) }
53
53
  end
54
54
  describe "the adjustment for the second item" do
55
55
  let(:line_item) { item_b }
56
- it { is_expected.to eq -5 }
56
+ it { is_expected.to eq(-5) }
57
57
  end
58
58
  describe "the adjustment for the third item" do
59
59
  let(:line_item) { item_c }
@@ -71,7 +71,7 @@ module Spree::Promotion::Actions
71
71
  FactoryGirl.create :line_item, order: other_order, quantity: 3
72
72
  action.perform({ order: other_order, promotion: promotion })
73
73
  end
74
- it { is_expected.to eq -10 }
74
+ it { is_expected.to eq(-10) }
75
75
  end
76
76
  end
77
77
 
@@ -88,11 +88,11 @@ module Spree::Promotion::Actions
88
88
  let!(:item_b) { FactoryGirl.create :line_item, order: order, quantity: 1, price: 10 }
89
89
  describe "the adjustment for the first item" do
90
90
  let(:line_item) { item_a }
91
- it { is_expected.to eq -2 }
91
+ it { is_expected.to eq(-2) }
92
92
  end
93
93
  describe "the adjustment for the second item" do
94
94
  let(:line_item) { item_b }
95
- it { is_expected.to eq -1 }
95
+ it { is_expected.to eq(-1) }
96
96
  end
97
97
  end
98
98
 
@@ -101,7 +101,7 @@ module Spree::Promotion::Actions
101
101
  let!(:item_b) { FactoryGirl.create :line_item, order: order, quantity: 1, price: 20 }
102
102
  describe "the adjustment for the first item" do
103
103
  let(:line_item) { item_a }
104
- it { is_expected.to eq -3 }
104
+ it { is_expected.to eq(-3) }
105
105
  end
106
106
  describe "the adjustment for the second item" do
107
107
  let(:line_item) { item_b }
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::Promotion::Actions::FreeShipping, :type => :model do
3
+ describe Spree::Promotion::Actions::FreeShipping, type: :model do
4
4
  let(:order) { create(:completed_order_with_totals) }
5
5
  let(:promotion_code) { create(:promotion_code, value: 'somecode') }
6
6
  let(:promotion) { promotion_code.promotion }
@@ -1,8 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::Promotion::Rules::FirstOrder, :type => :model do
3
+ describe Spree::Promotion::Rules::FirstOrder, type: :model do
4
4
  let(:rule) { Spree::Promotion::Rules::FirstOrder.new }
5
- let(:order) { mock_model(Spree::Order, :user => nil, :email => nil) }
5
+ let(:order) { mock_model(Spree::Order, user: nil, email: nil) }
6
6
  let(:user) { mock_model(Spree::LegacyUser) }
7
7
 
8
8
  context "without a user or email" do
@@ -18,31 +18,31 @@ describe Spree::Promotion::Rules::FirstOrder, :type => :model do
18
18
  context "for a signed user" do
19
19
  context "with no completed orders" do
20
20
  before(:each) do
21
- allow(user).to receive_message_chain(:orders, :complete => [])
21
+ allow(user).to receive_message_chain(:orders, complete: [])
22
22
  end
23
23
 
24
24
  specify do
25
- allow(order).to receive_messages(:user => user)
25
+ allow(order).to receive_messages(user: user)
26
26
  expect(rule).to be_eligible(order)
27
27
  end
28
28
 
29
29
  it "should be eligible when user passed in payload data" do
30
- expect(rule).to be_eligible(order, :user => user)
30
+ expect(rule).to be_eligible(order, user: user)
31
31
  end
32
32
  end
33
33
 
34
34
  context "with completed orders" do
35
35
  before(:each) do
36
- allow(order).to receive_messages(:user => user)
36
+ allow(order).to receive_messages(user: user)
37
37
  end
38
38
 
39
39
  it "should be eligible when checked against first completed order" do
40
- allow(user).to receive_message_chain(:orders, :complete => [order])
40
+ allow(user).to receive_message_chain(:orders, complete: [order])
41
41
  expect(rule).to be_eligible(order)
42
42
  end
43
43
 
44
44
  context "with another order" do
45
- before { allow(user).to receive_message_chain(:orders, :complete => [mock_model(Spree::Order)]) }
45
+ before { allow(user).to receive_message_chain(:orders, complete: [mock_model(Spree::Order)]) }
46
46
  it { expect(rule).not_to be_eligible(order) }
47
47
  it "sets an error message" do
48
48
  rule.eligible?(order)
@@ -55,14 +55,14 @@ describe Spree::Promotion::Rules::FirstOrder, :type => :model do
55
55
 
56
56
  context "for a guest user" do
57
57
  let(:email) { 'user@spreecommerce.com' }
58
- before { allow(order).to receive_messages :email => 'user@spreecommerce.com' }
58
+ before { allow(order).to receive_messages email: 'user@spreecommerce.com' }
59
59
 
60
60
  context "with no other orders" do
61
61
  it { expect(rule).to be_eligible(order) }
62
62
  end
63
63
 
64
64
  context "with another order" do
65
- before { allow(rule).to receive_messages(:orders_by_email => [mock_model(Spree::Order)]) }
65
+ before { allow(rule).to receive_messages(orders_by_email: [mock_model(Spree::Order)]) }
66
66
  it { expect(rule).not_to be_eligible(order) }
67
67
  it "sets an error message" do
68
68
  rule.eligible?(order)
@@ -1,24 +1,42 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::Promotion::Rules::ItemTotal, :type => :model do
4
- let(:rule) { Spree::Promotion::Rules::ItemTotal.new }
5
- let(:order) { double(:order) }
6
-
7
- before { rule.preferred_amount = 50 }
3
+ describe Spree::Promotion::Rules::ItemTotal, type: :model do
4
+ let(:rule) do
5
+ Spree::Promotion::Rules::ItemTotal.new(
6
+ preferred_amount: preferred_amount,
7
+ preferred_operator: preferred_operator
8
+ )
9
+ end
10
+ let(:order) { double(:order, item_total: item_total, currency: order_currency) }
11
+ let(:preferred_amount) { 50 }
12
+ let(:order_currency) { 'USD' }
8
13
 
9
14
  context "preferred operator set to gt" do
10
- before { rule.preferred_operator = 'gt' }
15
+ let(:preferred_operator) { 'gt' }
16
+
17
+ context "item total is greater than preferred amount" do
18
+ let(:item_total) { 51 }
19
+
20
+ it "should be eligible when item total is greater than preferred amount" do
21
+ expect(rule).to be_eligible(order)
22
+ end
23
+
24
+ context "when the order is a different currency" do
25
+ let(:order_currency) { "CAD" }
11
26
 
12
- it "should be eligible when item total is greater than preferred amount" do
13
- allow(order).to receive_messages :item_total => 51
14
- expect(rule).to be_eligible(order)
27
+ it "is not eligible" do
28
+ expect(rule).not_to be_eligible(order)
29
+ end
30
+ end
15
31
  end
16
32
 
17
33
  context "when item total is equal to preferred amount" do
18
- before { allow(order).to receive_messages item_total: 50 }
34
+ let(:item_total) { 50 }
35
+
19
36
  it "is not eligible" do
20
37
  expect(rule).not_to be_eligible(order)
21
38
  end
39
+
22
40
  it "set an error message" do
23
41
  rule.eligible?(order)
24
42
  expect(rule.eligibility_errors.full_messages.first).
@@ -27,10 +45,12 @@ describe Spree::Promotion::Rules::ItemTotal, :type => :model do
27
45
  end
28
46
 
29
47
  context "when item total is lower than preferred amount" do
30
- before { allow(order).to receive_messages item_total: 49 }
48
+ let(:item_total) { 49 }
49
+
31
50
  it "is not eligible" do
32
51
  expect(rule).not_to be_eligible(order)
33
52
  end
53
+
34
54
  it "set an error message" do
35
55
  rule.eligible?(order)
36
56
  expect(rule.eligibility_errors.full_messages.first).
@@ -40,23 +60,47 @@ describe Spree::Promotion::Rules::ItemTotal, :type => :model do
40
60
  end
41
61
 
42
62
  context "preferred operator set to gte" do
43
- before { rule.preferred_operator = 'gte' }
63
+ let(:preferred_operator) { 'gte' }
64
+
65
+ context "total is greater than preferred amount" do
66
+ let(:item_total) { 51 }
44
67
 
45
- it "should be eligible when item total is greater than preferred amount" do
46
- allow(order).to receive_messages :item_total => 51
47
- expect(rule).to be_eligible(order)
68
+ it "should be eligible when item total is greater than preferred amount" do
69
+ expect(rule).to be_eligible(order)
70
+ end
71
+
72
+ context "when the order is a different currency" do
73
+ let(:order_currency) { "CAD" }
74
+
75
+ it "is not eligible" do
76
+ expect(rule).not_to be_eligible(order)
77
+ end
78
+ end
48
79
  end
49
80
 
50
- it "should be eligible when item total is equal to preferred amount" do
51
- allow(order).to receive_messages :item_total => 50
52
- expect(rule).to be_eligible(order)
81
+ context "item total is equal to preferred amount" do
82
+ let(:item_total) { 50 }
83
+
84
+ it "should be eligible" do
85
+ expect(rule).to be_eligible(order)
86
+ end
87
+
88
+ context "when the order is a different currency" do
89
+ let(:order_currency) { "CAD" }
90
+
91
+ it "is not eligible" do
92
+ expect(rule).not_to be_eligible(order)
93
+ end
94
+ end
53
95
  end
54
96
 
55
97
  context "when item total is lower than preferred amount" do
56
- before { allow(order).to receive_messages item_total: 49 }
98
+ let(:item_total) { 49 }
99
+
57
100
  it "is not eligible" do
58
101
  expect(rule).not_to be_eligible(order)
59
102
  end
103
+
60
104
  it "set an error message" do
61
105
  rule.eligible?(order)
62
106
  expect(rule.eligibility_errors.full_messages.first).
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::Promotion::Rules::OneUsePerUser, :type => :model do
3
+ describe Spree::Promotion::Rules::OneUsePerUser, type: :model do
4
4
  let(:rule) { described_class.new }
5
5
 
6
6
  describe '#eligible?(order)' do
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::Promotion::Rules::Product, :type => :model do
3
+ describe Spree::Promotion::Rules::Product, type: :model do
4
4
  let(:rule) { Spree::Promotion::Rules::Product.new(rule_options) }
5
5
  let(:rule_options) { {} }
6
6
 
@@ -8,7 +8,7 @@ describe Spree::Promotion::Rules::Product, :type => :model do
8
8
  let(:order) { Spree::Order.new }
9
9
 
10
10
  it "should be eligible if there are no products" do
11
- allow(rule).to receive_messages(:eligible_products => [])
11
+ allow(rule).to receive_messages(eligible_products: [])
12
12
  expect(rule).to be_eligible(order)
13
13
  end
14
14
 
@@ -20,8 +20,8 @@ describe Spree::Promotion::Rules::Product, :type => :model do
20
20
  let(:rule_options) { super().merge(preferred_match_policy: 'any') }
21
21
 
22
22
  it "should be eligible if any of the products is in eligible products" do
23
- allow(order).to receive_messages(:products => [@product1, @product2])
24
- allow(rule).to receive_messages(:eligible_products => [@product2, @product3])
23
+ allow(order).to receive_messages(products: [@product1, @product2])
24
+ allow(rule).to receive_messages(eligible_products: [@product2, @product3])
25
25
  expect(rule).to be_eligible(order)
26
26
  end
27
27
 
@@ -43,8 +43,8 @@ describe Spree::Promotion::Rules::Product, :type => :model do
43
43
  let(:rule_options) { super().merge(preferred_match_policy: 'all') }
44
44
 
45
45
  it "should be eligible if all of the eligible products are ordered" do
46
- allow(order).to receive_messages(:products => [@product3, @product2, @product1])
47
- allow(rule).to receive_messages(:eligible_products => [@product2, @product3])
46
+ allow(order).to receive_messages(products: [@product3, @product2, @product1])
47
+ allow(rule).to receive_messages(eligible_products: [@product2, @product3])
48
48
  expect(rule).to be_eligible(order)
49
49
  end
50
50
 
@@ -66,8 +66,8 @@ describe Spree::Promotion::Rules::Product, :type => :model do
66
66
  let(:rule_options) { super().merge(preferred_match_policy: 'none') }
67
67
 
68
68
  it "should be eligible if none of the order's products are in eligible products" do
69
- allow(order).to receive_messages(:products => [@product1])
70
- allow(rule).to receive_messages(:eligible_products => [@product2, @product3])
69
+ allow(order).to receive_messages(products: [@product1])
70
+ allow(rule).to receive_messages(eligible_products: [@product2, @product3])
71
71
  expect(rule).to be_eligible(order)
72
72
  end
73
73
 
@@ -1,11 +1,11 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::Promotion::Rules::Taxon, :type => :model do
3
+ describe Spree::Promotion::Rules::Taxon, type: :model do
4
4
  let(:rule) { Spree::Promotion::Rules::Taxon.create!(promotion: create(:promotion)) }
5
5
 
6
6
  context '#elegible?(order)' do
7
7
  let(:taxon){ create :taxon, name: 'first' }
8
- let(:taxon2){ create :taxon, name: 'second'}
8
+ let(:taxon2){ create :taxon, name: 'second' }
9
9
  let(:order){ create :order_with_line_items }
10
10
 
11
11
  before do
@@ -53,7 +53,7 @@ describe Spree::Promotion::Rules::Taxon, :type => :model do
53
53
  before do
54
54
  taxon.children << taxon2
55
55
  order.products.first.taxons << taxon2
56
- rule.taxons << taxon2
56
+ rule.taxons << taxon
57
57
  end
58
58
 
59
59
  it{ expect(rule).to be_eligible(order) }
@@ -75,7 +75,7 @@ describe Spree::Promotion::Rules::Taxon, :type => :model do
75
75
  end
76
76
 
77
77
  context "when order does not have all prefered taxons" do
78
- before { rule.taxons << taxon }
78
+ before { rule.taxons << taxon }
79
79
  it { expect(rule).not_to be_eligible(order) }
80
80
  it "sets an error message" do
81
81
  rule.eligible?(order)
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::Promotion::Rules::UserLoggedIn, :type => :model do
3
+ describe Spree::Promotion::Rules::UserLoggedIn, type: :model do
4
4
  let(:rule) { Spree::Promotion::Rules::UserLoggedIn.new }
5
5
 
6
6
  context "#eligible?(order)" do
@@ -8,13 +8,13 @@ describe Spree::Promotion::Rules::UserLoggedIn, :type => :model do
8
8
 
9
9
  it "should be eligible if order has an associated user" do
10
10
  user = double('User')
11
- allow(order).to receive_messages(:user => user)
11
+ allow(order).to receive_messages(user: user)
12
12
 
13
13
  expect(rule).to be_eligible(order)
14
14
  end
15
15
 
16
16
  context "when user is not logged in" do
17
- before { allow(order).to receive_messages(:user => nil) } # better to be explicit here
17
+ before { allow(order).to receive_messages(user: nil) } # better to be explicit here
18
18
  it { expect(rule).not_to be_eligible(order) }
19
19
  it "sets an error message" do
20
20
  rule.eligible?(order)
@@ -24,4 +24,3 @@ describe Spree::Promotion::Rules::UserLoggedIn, :type => :model do
24
24
  end
25
25
  end
26
26
  end
27
-