spree_core 3.0.9 → 3.2.0

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 (627) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/{spree.js.coffee.erb → spree.js.coffee} +13 -4
  3. data/app/helpers/spree/base_helper.rb +5 -2
  4. data/app/helpers/spree/products_helper.rb +37 -12
  5. data/app/mailers/spree/base_mailer.rb +11 -2
  6. data/app/mailers/spree/reimbursement_mailer.rb +6 -6
  7. data/app/models/concerns/spree/acts_as_taggable.rb +11 -0
  8. data/app/models/concerns/spree/adjustment_source.rb +3 -10
  9. data/app/models/concerns/spree/default_price.rb +7 -1
  10. data/app/models/concerns/spree/named_type.rb +1 -1
  11. data/app/models/concerns/spree/ransackable_attributes.rb +6 -1
  12. data/app/models/concerns/spree/user_api_authentication.rb +7 -1
  13. data/app/models/concerns/spree/user_methods.rb +57 -0
  14. data/app/models/concerns/spree/user_reporting.rb +2 -2
  15. data/app/models/concerns/spree/vat_price_calculation.rb +47 -0
  16. data/app/models/spree/ability.rb +9 -1
  17. data/app/models/spree/address.rb +75 -45
  18. data/app/models/spree/adjustable/adjuster/base.rb +25 -0
  19. data/app/models/spree/adjustable/adjuster/promotion.rb +41 -0
  20. data/app/models/spree/adjustable/adjuster/tax.rb +26 -0
  21. data/app/models/spree/adjustable/adjustments_updater.rb +22 -45
  22. data/app/models/spree/adjustment.rb +8 -10
  23. data/app/models/spree/app_configuration.rb +14 -8
  24. data/app/models/spree/base.rb +5 -1
  25. data/app/models/spree/calculator/default_tax.rb +2 -10
  26. data/app/models/spree/calculator/free_shipping.rb +6 -5
  27. data/app/models/spree/calculator.rb +1 -6
  28. data/app/models/spree/classification.rb +7 -3
  29. data/app/models/spree/country.rb +15 -3
  30. data/app/models/spree/credit_card.rb +37 -38
  31. data/app/models/spree/customer_return.rb +7 -15
  32. data/app/models/spree/gateway/bogus.rb +12 -12
  33. data/app/models/spree/gateway/bogus_simple.rb +4 -4
  34. data/app/models/spree/gateway.rb +8 -7
  35. data/app/models/spree/image.rb +3 -3
  36. data/app/models/spree/inventory_unit.rb +13 -14
  37. data/app/models/spree/legacy_user.rb +1 -14
  38. data/app/models/spree/line_item.rb +79 -67
  39. data/app/models/spree/log_entry.rb +1 -4
  40. data/app/models/spree/option_type.rb +15 -6
  41. data/app/models/spree/option_type_prototype.rb +9 -0
  42. data/app/models/spree/option_value.rb +11 -3
  43. data/app/models/spree/option_value_variant.rb +6 -0
  44. data/app/models/spree/order/checkout.rb +10 -13
  45. data/app/models/spree/order/currency_updater.rb +1 -1
  46. data/app/models/spree/order/store_credit.rb +96 -0
  47. data/app/models/spree/order.rb +105 -68
  48. data/app/models/spree/order_contents.rb +13 -7
  49. data/app/models/spree/order_inventory.rb +16 -9
  50. data/app/models/spree/order_promotion.rb +6 -0
  51. data/app/models/spree/order_updater.rb +4 -8
  52. data/app/models/spree/payment/gateway_options.rb +8 -4
  53. data/app/models/spree/payment/processing.rb +1 -1
  54. data/app/models/spree/payment.rb +55 -29
  55. data/app/models/spree/payment_method/store_credit.rb +130 -0
  56. data/app/models/spree/payment_method.rb +18 -13
  57. data/app/models/spree/preference.rb +1 -1
  58. data/app/models/spree/preferences/store.rb +2 -2
  59. data/app/models/spree/price.rb +16 -6
  60. data/app/models/spree/product/scopes.rb +22 -13
  61. data/app/models/spree/product.rb +83 -52
  62. data/app/models/spree/product_option_type.rb +7 -2
  63. data/app/models/spree/product_promotion_rule.rb +9 -0
  64. data/app/models/spree/product_property.rb +9 -10
  65. data/app/models/spree/promotion/actions/create_adjustment.rb +1 -1
  66. data/app/models/spree/promotion/actions/create_line_items.rb +21 -3
  67. data/app/models/spree/promotion/rules/country.rb +23 -0
  68. data/app/models/spree/promotion/rules/option_value.rb +13 -10
  69. data/app/models/spree/promotion/rules/product.rb +3 -1
  70. data/app/models/spree/promotion/rules/taxon.rb +3 -2
  71. data/app/models/spree/promotion/rules/user.rb +4 -4
  72. data/app/models/spree/promotion.rb +55 -19
  73. data/app/models/spree/promotion_action.rb +3 -3
  74. data/app/models/spree/promotion_category.rb +1 -1
  75. data/app/models/spree/promotion_handler/cart.rb +3 -17
  76. data/app/models/spree/promotion_handler/coupon.rb +22 -22
  77. data/app/models/spree/promotion_handler/page.rb +2 -2
  78. data/app/models/spree/promotion_rule_taxon.rb +9 -0
  79. data/app/models/spree/promotion_rule_user.rb +9 -0
  80. data/app/models/spree/property.rb +2 -1
  81. data/app/models/spree/property_prototype.rb +9 -0
  82. data/app/models/spree/prototype.rb +8 -3
  83. data/app/models/spree/prototype_taxon.rb +9 -0
  84. data/app/models/spree/refund.rb +10 -7
  85. data/app/models/spree/refund_reason.rb +2 -2
  86. data/app/models/spree/reimbursement.rb +12 -16
  87. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +23 -6
  88. data/app/models/spree/reimbursement_type/store_credit.rb +28 -0
  89. data/app/models/spree/reimbursement_type.rb +5 -1
  90. data/app/models/spree/return_authorization.rb +8 -13
  91. data/app/models/spree/return_authorization_reason.rb +1 -1
  92. data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +1 -1
  93. data/app/models/spree/return_item.rb +14 -13
  94. data/app/models/spree/role.rb +3 -2
  95. data/app/models/spree/role_user.rb +6 -0
  96. data/app/models/spree/shipment.rb +23 -30
  97. data/app/models/spree/shipment_handler.rb +2 -2
  98. data/app/models/spree/shipping_category.rb +6 -3
  99. data/app/models/spree/shipping_method.rb +12 -11
  100. data/app/models/spree/shipping_method_zone.rb +6 -0
  101. data/app/models/spree/shipping_rate.rb +16 -29
  102. data/app/models/spree/state.rb +3 -2
  103. data/app/models/spree/state_change.rb +1 -1
  104. data/app/models/spree/stock/adjuster.rb +9 -2
  105. data/app/models/spree/stock/content_item.rb +10 -12
  106. data/app/models/spree/stock/coordinator.rb +21 -15
  107. data/app/models/spree/stock/estimator.rb +28 -30
  108. data/app/models/spree/stock/inventory_unit_builder.rb +2 -10
  109. data/app/models/spree/stock/package.rb +11 -3
  110. data/app/models/spree/stock/packer.rb +16 -6
  111. data/app/models/spree/stock/prioritizer.rb +25 -15
  112. data/app/models/spree/stock/quantifier.rb +5 -5
  113. data/app/models/spree/stock/splitter/backordered.rb +2 -2
  114. data/app/models/spree/stock/splitter/shipping_category.rb +6 -1
  115. data/app/models/spree/stock_item.rb +15 -18
  116. data/app/models/spree/stock_location.rb +4 -7
  117. data/app/models/spree/stock_movement.rb +16 -9
  118. data/app/models/spree/stock_transfer.rb +11 -12
  119. data/app/models/spree/store.rb +15 -6
  120. data/app/models/spree/store_credit.rb +252 -0
  121. data/app/models/spree/store_credit_category.rb +22 -0
  122. data/app/models/spree/store_credit_event.rb +38 -0
  123. data/app/models/spree/store_credit_type.rb +6 -0
  124. data/app/models/spree/tag.rb +4 -0
  125. data/app/models/spree/tax_category.rb +3 -8
  126. data/app/models/spree/tax_rate.rb +61 -121
  127. data/app/models/spree/taxon.rb +12 -6
  128. data/app/models/spree/tracker.rb +12 -1
  129. data/app/models/spree/validations/db_maximum_length_validator.rb +2 -1
  130. data/app/models/spree/variant.rb +94 -49
  131. data/app/models/spree/zone.rb +23 -19
  132. data/app/models/spree/zone_member.rb +6 -0
  133. data/app/validators/db_maximum_length_validator.rb +11 -0
  134. data/app/views/layouts/spree/base_mailer.html.erb +38 -781
  135. data/app/views/spree/order_mailer/_adjustment.html.erb +8 -0
  136. data/app/views/spree/order_mailer/_subtotal.html.erb +8 -0
  137. data/app/views/spree/order_mailer/_total.html.erb +8 -0
  138. data/app/views/spree/order_mailer/cancel_email.html.erb +13 -28
  139. data/app/views/spree/order_mailer/cancel_email.text.erb +1 -1
  140. data/app/views/spree/order_mailer/confirm_email.html.erb +49 -63
  141. data/app/views/spree/order_mailer/confirm_email.text.erb +1 -1
  142. data/app/views/spree/shared/_base_mailer_header.html.erb +5 -7
  143. data/app/views/spree/shared/_base_mailer_stylesheets.html.erb +777 -0
  144. data/app/views/spree/shared/_error_messages.html.erb +1 -1
  145. data/app/views/spree/shared/_mailer_line_item.html.erb +12 -0
  146. data/app/views/spree/shared/_paths.html.erb +8 -0
  147. data/app/views/spree/shipment_mailer/shipped_email.html.erb +21 -14
  148. data/app/views/spree/shipment_mailer/shipped_email.text.erb +3 -3
  149. data/config/initializers/acts_as_taggable_on.rb +9 -0
  150. data/config/initializers/friendly_id.rb +0 -81
  151. data/config/initializers/user_class_extensions.rb +7 -38
  152. data/config/locales/en.yml +137 -12
  153. data/config/routes.rb +7 -0
  154. data/db/default/spree/countries.rb +5 -1
  155. data/db/default/spree/default_reimbursement_type.rb +1 -1
  156. data/db/default/spree/roles.rb +2 -2
  157. data/db/default/spree/states.rb +1 -1
  158. data/db/default/spree/zones.rb +4 -5
  159. data/db/migrate/20120831092320_spree_one_two.rb +101 -101
  160. data/db/migrate/20120831092359_spree_promo_one_two.rb +14 -14
  161. data/db/migrate/20120905145253_add_tax_rate_label.rb +1 -1
  162. data/db/migrate/20120905151823_add_toggle_tax_rate_display.rb +2 -2
  163. data/db/migrate/20120929093553_remove_unused_preference_columns.rb +4 -4
  164. data/db/migrate/20121009142519_add_lock_version_to_variant.rb +2 -2
  165. data/db/migrate/20121010142909_add_states_required_to_countries.rb +2 -2
  166. data/db/migrate/20121012071449_add_on_demand_to_product_and_variant.rb +3 -3
  167. data/db/migrate/20121017010007_remove_not_null_constraint_from_products_on_hand.rb +5 -5
  168. data/db/migrate/20121031162139_split_prices_from_variants.rb +10 -10
  169. data/db/migrate/20121107003422_remove_not_null_from_spree_prices_amount.rb +3 -3
  170. data/db/migrate/20121107184631_add_currency_to_line_items.rb +1 -1
  171. data/db/migrate/20121107194006_add_currency_to_orders.rb +1 -1
  172. data/db/migrate/20121109173623_add_cost_currency_to_variants.rb +2 -2
  173. data/db/migrate/20121111231553_remove_display_on_from_payment_methods.rb +1 -1
  174. data/db/migrate/20121124203911_add_position_to_taxonomies.rb +2 -2
  175. data/db/migrate/20121126040517_add_last_ip_to_spree_orders.rb +1 -1
  176. data/db/migrate/20121213162028_add_state_to_spree_adjustments.rb +1 -1
  177. data/db/migrate/20130114053446_add_display_on_to_spree_payment_methods.rb +1 -1
  178. data/db/migrate/20130120201805_add_position_to_product_properties.spree.rb +2 -2
  179. data/db/migrate/20130203232234_add_identifier_to_spree_payments.rb +1 -1
  180. data/db/migrate/20130207155350_add_order_id_index_to_payments.rb +1 -1
  181. data/db/migrate/20130208032954_add_primary_to_spree_products_taxons.rb +1 -1
  182. data/db/migrate/20130211190146_create_spree_stock_items.rb +2 -2
  183. data/db/migrate/20130211191120_create_spree_stock_locations.rb +1 -1
  184. data/db/migrate/20130213191427_create_default_stock.rb +1 -2
  185. data/db/migrate/20130222032153_add_order_id_index_to_shipments.rb +1 -1
  186. data/db/migrate/20130226032817_change_meta_description_on_spree_products_to_text.rb +2 -2
  187. data/db/migrate/20130226191231_add_stock_location_id_to_spree_shipments.rb +1 -1
  188. data/db/migrate/20130227143905_add_pending_to_inventory_unit.rb +3 -3
  189. data/db/migrate/20130228164411_remove_on_demand_from_product_and_variant.rb +1 -1
  190. data/db/migrate/20130228210442_create_shipping_method_zone.rb +3 -3
  191. data/db/migrate/20130301162745_remove_shipping_category_id_from_shipping_method.rb +1 -1
  192. data/db/migrate/20130301162924_create_shipping_method_categories.rb +3 -3
  193. data/db/migrate/20130301205200_add_tracking_url_to_spree_shipping_methods.rb +1 -1
  194. data/db/migrate/20130304162240_create_spree_shipping_rates.rb +5 -5
  195. data/db/migrate/20130304192936_remove_category_match_attributes_from_shipping_method.rb +1 -1
  196. data/db/migrate/20130305143310_create_stock_movements.rb +1 -1
  197. data/db/migrate/20130306181701_add_address_fields_to_stock_location.rb +3 -3
  198. data/db/migrate/20130306191917_add_active_field_to_stock_locations.rb +2 -2
  199. data/db/migrate/20130306195650_add_backorderable_to_stock_item.rb +2 -2
  200. data/db/migrate/20130307161754_add_default_quantity_to_stock_movement.rb +2 -2
  201. data/db/migrate/20130318151756_add_source_and_destination_to_stock_movements.rb +1 -1
  202. data/db/migrate/20130319062004_change_orders_total_precision.rb +5 -5
  203. data/db/migrate/20130319063911_change_spree_payments_amount_precision.rb +2 -2
  204. data/db/migrate/20130319064308_change_spree_return_authorization_amount_precision.rb +2 -2
  205. data/db/migrate/20130319082943_change_adjustments_amount_precision.rb +2 -2
  206. data/db/migrate/20130319183250_add_originator_to_stock_movement.rb +1 -1
  207. data/db/migrate/20130319190507_drop_source_and_destination_from_stock_movement.rb +3 -3
  208. data/db/migrate/20130325163316_migrate_inventory_unit_sold_to_on_hand.rb +3 -3
  209. data/db/migrate/20130326175857_add_stock_location_to_rma.rb +1 -1
  210. data/db/migrate/20130328130308_update_shipment_state_for_canceled_orders.rb +1 -1
  211. data/db/migrate/20130328195253_add_seo_metas_to_taxons.rb +1 -1
  212. data/db/migrate/20130329134939_remove_stock_item_and_variant_lock.rb +1 -1
  213. data/db/migrate/20130413230529_add_name_to_spree_credit_cards.rb +1 -1
  214. data/db/migrate/20130414000512_update_name_fields_on_spree_credit_cards.rb +2 -2
  215. data/db/migrate/20130417120034_add_index_to_source_columns_on_adjustments.rb +1 -1
  216. data/db/migrate/20130417120035_update_adjustment_states.rb +3 -3
  217. data/db/migrate/20130417123427_add_shipping_rates_to_shipments.rb +4 -4
  218. data/db/migrate/20130418125341_create_spree_stock_transfers.rb +1 -1
  219. data/db/migrate/20130423110707_drop_products_count_on_hand.rb +1 -1
  220. data/db/migrate/20130423223847_set_default_shipping_rate_cost.rb +1 -1
  221. data/db/migrate/20130509115210_add_number_to_stock_transfer.rb +1 -1
  222. data/db/migrate/20130514151929_add_sku_index_to_spree_variants.rb +1 -1
  223. data/db/migrate/20130515180736_add_backorderable_default_to_spree_stock_location.rb +1 -1
  224. data/db/migrate/20130516151222_add_propage_all_variants_to_spree_stock_location.rb +1 -1
  225. data/db/migrate/20130611054351_rename_shipping_methods_zones_to_spree_shipping_methods_zones.rb +1 -1
  226. data/db/migrate/20130611185927_add_user_id_index_to_spree_orders.rb +1 -1
  227. data/db/migrate/20130618041418_add_updated_at_to_spree_countries.rb +1 -1
  228. data/db/migrate/20130619012236_add_updated_at_to_spree_states.rb +1 -1
  229. data/db/migrate/20130626232741_add_cvv_result_code_and_cvv_result_message_to_spree_payments.rb +1 -1
  230. data/db/migrate/20130628021056_add_unique_index_to_permalink_on_spree_products.rb +2 -2
  231. data/db/migrate/20130628022817_add_unique_index_to_orders_shipments_and_stock_transfers.rb +4 -4
  232. data/db/migrate/20130708052307_add_deleted_at_to_spree_tax_rates.rb +1 -1
  233. data/db/migrate/20130711200933_remove_lock_version_from_inventory_units.rb +1 -1
  234. data/db/migrate/20130718042445_add_cost_price_to_line_item.rb +2 -2
  235. data/db/migrate/20130718233855_set_backorderable_to_default_to_false.rb +3 -3
  236. data/db/migrate/20130725031716_add_created_by_id_to_spree_orders.rb +1 -1
  237. data/db/migrate/20130729214043_index_completed_at_on_spree_orders.rb +1 -1
  238. data/db/migrate/20130802014537_add_tax_category_id_to_spree_line_items.rb +1 -1
  239. data/db/migrate/20130802022321_migrate_tax_categories_to_line_items.rb +1 -1
  240. data/db/migrate/20130806022521_drop_spree_mail_methods.rb +1 -1
  241. data/db/migrate/20130806145853_set_default_stock_location_on_shipments.rb +1 -1
  242. data/db/migrate/20130807024301_upgrade_adjustments.rb +4 -4
  243. data/db/migrate/20130807024302_rename_adjustment_fields.rb +1 -1
  244. data/db/migrate/20130809164245_add_admin_name_column_to_spree_shipping_methods.rb +1 -1
  245. data/db/migrate/20130809164330_add_admin_name_column_to_spree_stock_locations.rb +1 -1
  246. data/db/migrate/20130813004002_add_shipment_total_to_spree_orders.rb +2 -2
  247. data/db/migrate/20130813140619_expand_order_number_size.rb +3 -3
  248. data/db/migrate/20130813232134_rename_activators_to_promotions.rb +1 -1
  249. data/db/migrate/20130815000406_add_adjustment_total_to_line_items.rb +2 -2
  250. data/db/migrate/20130815024413_add_adjustment_total_to_shipments.rb +2 -2
  251. data/db/migrate/20130826062534_add_depth_to_spree_taxons.rb +1 -1
  252. data/db/migrate/20130828234942_add_tax_total_to_line_items_shipments_and_orders.rb +2 -2
  253. data/db/migrate/20130830001033_add_shipping_category_to_shipping_methods_and_products.rb +2 -2
  254. data/db/migrate/20130830001159_migrate_old_shipping_calculators.rb +1 -1
  255. data/db/migrate/20130903183026_add_code_to_spree_promotion_rules.rb +1 -1
  256. data/db/migrate/20130909115621_change_states_required_for_countries.rb +1 -1
  257. data/db/migrate/20130915032339_add_deleted_at_to_spree_stock_items.rb +1 -1
  258. data/db/migrate/20130917024658_remove_promotions_event_name_field.rb +2 -2
  259. data/db/migrate/20130924040529_add_promo_total_to_line_items_and_shipments_and_orders.rb +1 -1
  260. data/db/migrate/20131001013410_remove_unused_credit_card_fields.rb +2 -2
  261. data/db/migrate/20131026154747_add_track_inventory_to_variant.rb +2 -2
  262. data/db/migrate/20131107132123_add_tax_category_to_variants.rb +1 -1
  263. data/db/migrate/20131113035136_add_channel_to_spree_orders.rb +1 -1
  264. data/db/migrate/20131118043959_add_included_to_adjustments.rb +2 -2
  265. data/db/migrate/20131118050234_rename_tax_total_fields.rb +1 -1
  266. data/db/migrate/20131118183431_add_line_item_id_to_spree_inventory_units.rb +1 -1
  267. data/db/migrate/20131120234456_add_updated_at_to_variants.rb +1 -1
  268. data/db/migrate/20131127001002_add_position_to_classifications.rb +1 -1
  269. data/db/migrate/20131211112807_create_spree_orders_promotions.rb +2 -2
  270. data/db/migrate/20131211192741_unique_shipping_method_categories.rb +1 -1
  271. data/db/migrate/20131218054603_add_item_count_to_spree_orders.rb +2 -2
  272. data/db/migrate/20140106065820_remove_value_type_from_spree_preferences.rb +1 -1
  273. data/db/migrate/20140106224208_rename_permalink_to_slug_for_products.rb +1 -1
  274. data/db/migrate/20140120160805_add_index_to_variant_id_and_currency_on_prices.rb +1 -1
  275. data/db/migrate/20140124023232_rename_activator_id_in_rules_and_actions_to_promotion_id.rb +1 -1
  276. data/db/migrate/20140129024326_add_deleted_at_to_spree_prices.rb +1 -1
  277. data/db/migrate/20140203161722_add_approver_id_and_approved_at_to_orders.rb +1 -1
  278. data/db/migrate/20140204115338_add_confirmation_delivered_to_spree_orders.rb +1 -1
  279. data/db/migrate/20140204192230_add_auto_capture_to_payment_methods.rb +1 -1
  280. data/db/migrate/20140205120320_create_spree_payment_capture_events.rb +1 -1
  281. data/db/migrate/20140205144710_add_uncaptured_amount_to_payments.rb +1 -1
  282. data/db/migrate/20140205181631_default_variant_weight_to_zero.rb +1 -1
  283. data/db/migrate/20140207085910_add_tax_category_id_to_shipping_methods.rb +1 -1
  284. data/db/migrate/20140207093021_add_tax_rate_id_to_shipping_rates.rb +1 -1
  285. data/db/migrate/20140211040159_add_pre_tax_amount_to_line_items_and_shipments.rb +1 -1
  286. data/db/migrate/20140213184916_add_more_indexes.rb +1 -1
  287. data/db/migrate/20140219060952_add_considered_risky_to_orders.rb +2 -2
  288. data/db/migrate/20140227112348_add_preference_store_to_everything.rb +1 -1
  289. data/db/migrate/20140307235515_add_user_id_to_spree_credit_cards.rb +1 -1
  290. data/db/migrate/20140309023735_migrate_old_preferences.rb +1 -1
  291. data/db/migrate/20140309024355_create_spree_stores.rb +2 -2
  292. data/db/migrate/20140309033438_create_store_from_preferences.rb +2 -2
  293. data/db/migrate/20140315053743_add_timestamps_to_spree_assets.rb +1 -1
  294. data/db/migrate/20140318191500_create_spree_taxons_promotion_rules.rb +1 -1
  295. data/db/migrate/20140331100557_add_additional_store_fields.rb +1 -1
  296. data/db/migrate/20140410141842_add_many_missing_indexes.rb +1 -1
  297. data/db/migrate/20140410150358_correct_some_polymorphic_index_and_add_more_missing.rb +1 -1
  298. data/db/migrate/20140415041315_add_user_id_created_by_id_index_to_order.rb +1 -1
  299. data/db/migrate/20140508151342_change_spree_price_amount_precision.rb +5 -5
  300. data/db/migrate/20140518174634_add_token_to_spree_orders.rb +1 -1
  301. data/db/migrate/20140530024945_move_order_token_from_tokenized_permission.rb +2 -2
  302. data/db/migrate/20140601011216_set_shipment_total_for_users_upgrading.rb +1 -1
  303. data/db/migrate/20140604135309_drop_credit_card_first_name_and_last_name.rb +1 -1
  304. data/db/migrate/20140609201656_add_deleted_at_to_spree_promotion_actions.rb +1 -1
  305. data/db/migrate/20140616202624_remove_uncaptured_amount_from_spree_payments.rb +1 -1
  306. data/db/migrate/20140625214618_create_spree_refunds.rb +1 -1
  307. data/db/migrate/20140702140656_create_spree_return_authorization_inventory_unit.rb +1 -1
  308. data/db/migrate/20140707125621_rename_return_authorization_inventory_unit_to_return_items.rb +1 -1
  309. data/db/migrate/20140709160534_backfill_line_item_pre_tax_amount.rb +1 -1
  310. data/db/migrate/20140710041921_recreate_spree_return_authorizations.rb +2 -2
  311. data/db/migrate/20140710181204_add_amount_fields_to_return_items.rb +1 -1
  312. data/db/migrate/20140710190048_drop_return_authorization_amount.rb +1 -1
  313. data/db/migrate/20140713140455_create_spree_return_authorization_reasons.rb +1 -1
  314. data/db/migrate/20140713140527_create_spree_refund_reasons.rb +1 -1
  315. data/db/migrate/20140713142214_rename_return_authorization_reason.rb +1 -1
  316. data/db/migrate/20140715182625_create_spree_promotion_categories.rb +1 -1
  317. data/db/migrate/20140716204111_drop_received_at_on_return_items.rb +1 -1
  318. data/db/migrate/20140716212330_add_reception_and_acceptance_status_to_return_items.rb +1 -1
  319. data/db/migrate/20140717155155_create_default_refund_reason.rb +1 -1
  320. data/db/migrate/20140717185932_add_default_to_spree_stock_locations.rb +1 -1
  321. data/db/migrate/20140718133010_create_spree_customer_returns.rb +1 -1
  322. data/db/migrate/20140718133349_add_customer_return_id_to_return_item.rb +1 -1
  323. data/db/migrate/20140718195325_create_friendly_id_slugs.rb +5 -5
  324. data/db/migrate/20140723004419_rename_spree_refund_return_authorization_id.rb +1 -1
  325. data/db/migrate/20140723152808_increase_return_item_pre_tax_amount_precision.rb +1 -1
  326. data/db/migrate/20140723214541_copy_product_slugs_to_slug_history.rb +2 -2
  327. data/db/migrate/20140725131539_create_spree_reimbursements.rb +1 -1
  328. data/db/migrate/20140728225422_add_promotionable_to_spree_products.rb +1 -1
  329. data/db/migrate/20140729133613_add_exchange_inventory_unit_foreign_keys.rb +1 -1
  330. data/db/migrate/20140730155938_add_acceptance_status_errors_to_return_item.rb +1 -1
  331. data/db/migrate/20140731150017_create_spree_reimbursement_types.rb +1 -1
  332. data/db/migrate/20140804185157_add_default_to_shipment_cost.rb +1 -1
  333. data/db/migrate/20140805171035_add_default_to_spree_credit_cards.rb +1 -1
  334. data/db/migrate/20140805171219_make_existing_credit_cards_default.rb +1 -1
  335. data/db/migrate/20140806144901_add_type_to_reimbursement_type.rb +1 -1
  336. data/db/migrate/20140808184039_create_spree_reimbursement_credits.rb +1 -1
  337. data/db/migrate/20140827170513_add_meta_title_to_spree_products.rb +1 -1
  338. data/db/migrate/20140911173301_add_kind_to_zone.rb +1 -1
  339. data/db/migrate/20140924164824_add_code_to_spree_tax_categories.rb +1 -1
  340. data/db/migrate/20140927193717_default_pre_tax_amount_should_be_zero.rb +1 -1
  341. data/db/migrate/20141002191113_add_code_to_spree_shipping_methods.rb +1 -1
  342. data/db/migrate/20141007230328_add_cancel_audit_fields_to_spree_orders.rb +1 -1
  343. data/db/migrate/20141009204607_add_store_id_to_orders.rb +1 -1
  344. data/db/migrate/20141012083513_create_spree_taxons_prototypes.rb +1 -1
  345. data/db/migrate/20141021194502_add_state_lock_version_to_order.rb +1 -1
  346. data/db/migrate/20141023005240_add_counter_cache_from_spree_variants_to_spree_stock_items.rb +2 -7
  347. data/db/migrate/20141101231208_fix_adjustment_order_presence.rb +1 -1
  348. data/db/migrate/20141105213646_update_classifications_positions.rb +1 -1
  349. data/db/migrate/20141120135441_add_guest_token_index_to_spree_orders.rb +1 -1
  350. data/db/migrate/20141215232040_remove_token_permissions_table.rb +1 -1
  351. data/db/migrate/20141215235502_remove_extra_products_slug_index.rb +1 -1
  352. data/db/migrate/20141217215630_update_product_slug_index.rb +1 -1
  353. data/db/migrate/20141218025915_rename_identifier_to_number_for_payment.rb +1 -1
  354. data/db/migrate/20150118210639_create_spree_store_credits.rb +24 -0
  355. data/db/migrate/20150118211500_create_spree_store_credit_categories.rb +8 -0
  356. data/db/migrate/20150118212051_create_spree_store_credit_events.rb +17 -0
  357. data/db/migrate/20150118212101_create_spree_store_credit_types.rb +10 -0
  358. data/db/migrate/20150121022521_remove_environment_from_payment_method.rb +1 -1
  359. data/db/migrate/20150122145607_add_resellable_to_return_items.rb +1 -1
  360. data/db/migrate/20150122202432_add_code_to_spree_promotion_categories.rb +1 -1
  361. data/db/migrate/20150128032538_remove_environment_from_tracker.rb +1 -1
  362. data/db/migrate/20150128060325_remove_spree_configurations.rb +1 -1
  363. data/db/migrate/20150216173445_add_index_to_spree_stock_items_variant_id.rb +1 -1
  364. data/db/migrate/20150309161154_ensure_payments_have_numbers.rb +1 -1
  365. data/db/migrate/20150314013438_add_missing_indexes_on_spree_tables.rb +67 -0
  366. data/db/migrate/20150317174308_remove_duplicated_indexes_from_multi_columns.rb +18 -0
  367. data/db/migrate/20150324104002_remove_user_index_from_spree_state_changes.rb +14 -0
  368. data/db/migrate/20150515211137_fix_adjustment_order_id.rb +1 -1
  369. data/db/migrate/20150522071831_add_position_to_spree_payment_methods.rb +5 -0
  370. data/db/migrate/20150522181728_add_deleted_at_to_friendly_id_slugs.rb +1 -1
  371. data/db/migrate/20150609093816_increase_scale_on_pre_tax_amounts.rb +1 -1
  372. data/db/migrate/20150626181949_add_taxable_adjustment_total_to_line_item.rb +19 -0
  373. data/db/migrate/20150627090949_migrate_payment_methods_display.rb +12 -0
  374. data/db/migrate/20150707204155_enable_acts_as_paranoid_on_calculators.rb +1 -1
  375. data/db/migrate/20150714154102_spree_payment_method_store_credits.rb +12 -0
  376. data/db/migrate/20150726141425_rename_has_and_belongs_to_associations_to_model_names.rb +18 -0
  377. data/db/migrate/20150727191614_spree_store_credit_types.rb +11 -0
  378. data/db/migrate/20150819154308_add_discontinued_to_products_and_variants.rb +68 -0
  379. data/db/migrate/20151220072838_remove_shipping_method_id_from_spree_orders.rb +13 -0
  380. data/db/migrate/20160207191757_add_id_column_to_earlier_habtm_tables.rb +16 -0
  381. data/db/migrate/20160219165458_add_indexes.rb +14 -0
  382. data/db/migrate/20160509064646_remove_counter_cache_from_spree_variants_to_spree_stock_items.rb +10 -0
  383. data/db/migrate/20160511071954_acts_as_taggable_on_spree_migration.rb +40 -0
  384. data/db/migrate/20160511072249_change_collation_for_spree_tag_names.rb +9 -0
  385. data/db/migrate/20160511072335_add_missing_indexes_to_spree_taggings.rb +14 -0
  386. data/db/migrate/20160608090604_add_zipcode_required_to_spree_countries.rb +7 -0
  387. data/db/migrate/20161014145148_add_created_at_to_variant.rb +8 -0
  388. data/db/migrate/20161014152814_add_null_false_to_spree_variants_timestamps.rb +6 -0
  389. data/lib/generators/spree/custom_user/custom_user_generator.rb +1 -1
  390. data/lib/generators/spree/custom_user/templates/authentication_helpers.rb.tt +3 -3
  391. data/lib/generators/spree/custom_user/templates/migration.rb.tt +2 -2
  392. data/lib/generators/spree/dummy/dummy_generator.rb +11 -11
  393. data/lib/generators/spree/dummy/templates/rails/application.rb +1 -1
  394. data/lib/generators/spree/dummy/templates/rails/database.yml +38 -28
  395. data/lib/generators/spree/dummy/templates/rails/test.rb +4 -3
  396. data/lib/generators/spree/install/install_generator.rb +37 -13
  397. data/lib/spree/core/controller_helpers/auth.rb +1 -1
  398. data/lib/spree/core/controller_helpers/common.rb +6 -6
  399. data/lib/spree/core/controller_helpers/order.rb +9 -10
  400. data/lib/spree/core/controller_helpers/respond_with.rb +1 -1
  401. data/lib/spree/core/controller_helpers/search.rb +1 -1
  402. data/lib/spree/core/controller_helpers/store.rb +29 -0
  403. data/lib/spree/core/delegate_belongs_to.rb +4 -4
  404. data/lib/spree/core/engine.rb +39 -20
  405. data/lib/spree/core/environment.rb +1 -1
  406. data/lib/spree/core/importer/order.rb +37 -40
  407. data/lib/spree/core/importer/product.rb +2 -2
  408. data/lib/spree/core/number_generator.rb +52 -0
  409. data/lib/spree/core/product_duplicator.rb +1 -1
  410. data/lib/spree/core/product_filters.rb +2 -2
  411. data/lib/spree/core/search/base.rb +4 -3
  412. data/lib/spree/core/version.rb +1 -1
  413. data/lib/spree/core.rb +16 -0
  414. data/lib/spree/i18n/initializer.rb +1 -1
  415. data/lib/spree/localized_number.rb +3 -1
  416. data/lib/spree/permitted_attributes.rb +6 -3
  417. data/lib/spree/testing_support/caching.rb +3 -3
  418. data/lib/spree/testing_support/common_rake.rb +3 -3
  419. data/lib/spree/testing_support/controller_requests.rb +4 -4
  420. data/lib/spree/testing_support/factories/address_factory.rb +1 -1
  421. data/lib/spree/testing_support/factories/country_factory.rb +2 -2
  422. data/lib/spree/testing_support/factories/line_item_factory.rb +0 -1
  423. data/lib/spree/testing_support/factories/order_factory.rb +3 -2
  424. data/lib/spree/testing_support/factories/payment_factory.rb +5 -0
  425. data/lib/spree/testing_support/factories/payment_method_factory.rb +8 -0
  426. data/lib/spree/testing_support/factories/promotion_rule_factory.rb +5 -0
  427. data/lib/spree/testing_support/factories/refund_factory.rb +9 -1
  428. data/lib/spree/testing_support/factories/return_authorization_factory.rb +2 -0
  429. data/lib/spree/testing_support/factories/state_factory.rb +2 -2
  430. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +9 -0
  431. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +8 -0
  432. data/lib/spree/testing_support/factories/store_credit_factory.rb +17 -0
  433. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +11 -0
  434. data/lib/spree/testing_support/factories/tag_factory.rb +5 -0
  435. data/lib/spree/testing_support/factories/user_factory.rb +1 -1
  436. data/lib/spree/testing_support/factories/zone_member_factory.rb +6 -0
  437. data/lib/spree/testing_support/factories.rb +3 -3
  438. data/lib/spree/testing_support/kernel.rb +18 -0
  439. data/lib/spree/testing_support/microdata.rb +189 -0
  440. data/lib/spree/testing_support/order_walkthrough.rb +4 -4
  441. data/lib/tasks/core.rake +69 -1
  442. data/lib/tasks/exchanges.rake +2 -2
  443. data/spec/fixtures/microdata.html +22 -0
  444. data/spec/fixtures/microdata_itemref.html +15 -0
  445. data/spec/fixtures/microdata_no_itemscope.html +20 -0
  446. data/spec/helpers/base_helper_spec.rb +74 -11
  447. data/spec/helpers/products_helper_spec.rb +80 -15
  448. data/spec/lib/i18n_spec.rb +13 -13
  449. data/spec/lib/search/base_spec.rb +18 -18
  450. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +6 -4
  451. data/spec/lib/spree/core/controller_helpers/order_spec.rb +15 -0
  452. data/spec/lib/spree/core/controller_helpers/store_spec.rb +56 -0
  453. data/spec/lib/spree/core/importer/order_spec.rb +227 -124
  454. data/spec/lib/spree/core/number_generator_spec.rb +175 -0
  455. data/spec/lib/spree/core_spec.rb +23 -0
  456. data/spec/lib/spree/localized_number_spec.rb +11 -1
  457. data/spec/lib/spree/money_spec.rb +6 -6
  458. data/spec/mailers/order_mailer_spec.rb +11 -13
  459. data/spec/mailers/reimbursement_mailer_spec.rb +2 -2
  460. data/spec/mailers/shipment_mailer_spec.rb +26 -8
  461. data/spec/mailers/test_mailer_spec.rb +16 -2
  462. data/spec/models/option_type_prototype_spec.rb +9 -0
  463. data/spec/models/spree/ability_spec.rb +20 -15
  464. data/spec/models/spree/address_spec.rb +144 -33
  465. data/spec/models/spree/adjustable/adjuster/base_spec.rb +10 -0
  466. data/spec/models/spree/adjustable/adjuster/promotion_spec.rb +211 -0
  467. data/spec/models/spree/adjustable/adjuster/tax_spec.rb +86 -0
  468. data/spec/models/spree/adjustable/adjustments_updater_spec.rb +2 -262
  469. data/spec/models/spree/adjustment_spec.rb +28 -2
  470. data/spec/models/spree/app_configuration_spec.rb +6 -3
  471. data/spec/models/spree/asset_spec.rb +9 -6
  472. data/spec/models/spree/calculator/default_tax_spec.rb +39 -14
  473. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +1 -1
  474. data/spec/models/spree/calculator/flexi_rate_spec.rb +6 -6
  475. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +1 -1
  476. data/spec/models/spree/calculator/price_sack_spec.rb +2 -2
  477. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +4 -8
  478. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +4 -4
  479. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +2 -2
  480. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +6 -6
  481. data/spec/models/spree/calculator/shipping/per_item_spec.rb +2 -2
  482. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +1 -1
  483. data/spec/models/spree/calculator/tiered_percent_spec.rb +1 -1
  484. data/spec/models/spree/calculator_spec.rb +3 -3
  485. data/spec/models/spree/classification_spec.rb +1 -1
  486. data/spec/models/spree/concerns/user_methods_spec.rb +82 -0
  487. data/spec/models/spree/concerns/vat_price_calculation_spec.rb +66 -0
  488. data/spec/models/spree/country_spec.rb +45 -8
  489. data/spec/models/spree/credit_card_spec.rb +13 -9
  490. data/spec/models/spree/customer_return_spec.rb +4 -26
  491. data/spec/models/spree/exchange_spec.rb +1 -1
  492. data/spec/models/spree/gateway/bogus_simple.rb +1 -1
  493. data/spec/models/spree/gateway/bogus_spec.rb +1 -1
  494. data/spec/models/spree/gateway_spec.rb +8 -1
  495. data/spec/models/spree/image_spec.rb +4 -1
  496. data/spec/models/spree/inventory_unit_spec.rb +35 -21
  497. data/spec/models/spree/line_item_spec.rb +100 -21
  498. data/spec/models/spree/option_type_spec.rb +3 -3
  499. data/spec/models/spree/option_value_spec.rb +8 -3
  500. data/spec/models/spree/order/address_spec.rb +1 -1
  501. data/spec/models/spree/order/adjustments_spec.rb +1 -1
  502. data/spec/models/spree/order/callbacks_spec.rb +3 -3
  503. data/spec/models/spree/order/checkout_spec.rb +99 -93
  504. data/spec/models/spree/order/currency_updater_spec.rb +4 -4
  505. data/spec/models/spree/order/finalizing_spec.rb +5 -8
  506. data/spec/models/spree/order/helpers_spec.rb +1 -1
  507. data/spec/models/spree/order/payment_spec.rb +21 -21
  508. data/spec/models/spree/order/risk_assessment_spec.rb +1 -1
  509. data/spec/models/spree/order/state_machine_spec.rb +4 -8
  510. data/spec/models/spree/order/store_credit_spec.rb +426 -0
  511. data/spec/models/spree/order/tax_spec.rb +13 -13
  512. data/spec/models/spree/order/totals_spec.rb +2 -2
  513. data/spec/models/spree/order/updating_spec.rb +4 -4
  514. data/spec/models/spree/order/validations_spec.rb +2 -2
  515. data/spec/models/spree/order_contents_spec.rb +45 -4
  516. data/spec/models/spree/order_inventory_spec.rb +28 -17
  517. data/spec/models/spree/order_merger_spec.rb +3 -1
  518. data/spec/models/spree/order_spec.rb +188 -96
  519. data/spec/models/spree/order_updater_spec.rb +43 -32
  520. data/spec/models/spree/payment/gateway_options_spec.rb +10 -2
  521. data/spec/models/spree/payment/store_credit_spec.rb +60 -0
  522. data/spec/models/spree/payment_method/store_credit_spec.rb +291 -0
  523. data/spec/models/spree/payment_method_spec.rb +22 -14
  524. data/spec/models/spree/payment_spec.rb +75 -82
  525. data/spec/models/spree/preference_spec.rb +1 -1
  526. data/spec/models/spree/preferences/configuration_spec.rb +2 -2
  527. data/spec/models/spree/preferences/preferable_spec.rb +15 -19
  528. data/spec/models/spree/preferences/scoped_store_spec.rb +1 -1
  529. data/spec/models/spree/preferences/store_spec.rb +3 -3
  530. data/spec/models/spree/price_spec.rb +87 -1
  531. data/spec/models/spree/product/scopes_spec.rb +39 -4
  532. data/spec/models/spree/product_duplicator_spec.rb +2 -2
  533. data/spec/models/spree/product_filter_spec.rb +2 -2
  534. data/spec/models/spree/product_option_type_spec.rb +6 -2
  535. data/spec/models/spree/product_promotion_rule_spec.rb +9 -0
  536. data/spec/models/spree/product_property_spec.rb +16 -1
  537. data/spec/models/spree/product_spec.rb +196 -41
  538. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +63 -0
  539. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +6 -6
  540. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +1 -1
  541. data/spec/models/spree/promotion/rules/country_spec.rb +36 -0
  542. data/spec/models/spree/promotion/rules/first_order_spec.rb +11 -11
  543. data/spec/models/spree/promotion/rules/item_total_spec.rb +1 -1
  544. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +1 -1
  545. data/spec/models/spree/promotion/rules/product_spec.rb +8 -8
  546. data/spec/models/spree/promotion/rules/taxon_spec.rb +1 -1
  547. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +3 -3
  548. data/spec/models/spree/promotion/rules/user_spec.rb +15 -7
  549. data/spec/models/spree/promotion_action_spec.rb +2 -2
  550. data/spec/models/spree/promotion_category_spec.rb +1 -1
  551. data/spec/models/spree/promotion_handler/cart_spec.rb +1 -1
  552. data/spec/models/spree/promotion_handler/coupon_spec.rb +28 -28
  553. data/spec/models/spree/promotion_handler/page_spec.rb +6 -6
  554. data/spec/models/spree/promotion_rule_spec.rb +2 -2
  555. data/spec/models/spree/promotion_rule_taxon_spec.rb +9 -0
  556. data/spec/models/spree/promotion_rule_user_spec.rb +9 -0
  557. data/spec/models/spree/promotion_spec.rb +141 -65
  558. data/spec/models/spree/property_prototype_spec.rb +9 -0
  559. data/spec/models/spree/property_spec.rb +1 -1
  560. data/spec/models/spree/prototype_spec.rb +1 -1
  561. data/spec/models/spree/prototype_taxon_spec.rb +9 -0
  562. data/spec/models/spree/refund_reason_spec.rb +20 -0
  563. data/spec/models/spree/refund_spec.rb +1 -1
  564. data/spec/models/spree/reimbursement/credit_spec.rb +1 -1
  565. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +1 -1
  566. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +1 -1
  567. data/spec/models/spree/reimbursement_performer_spec.rb +1 -1
  568. data/spec/models/spree/reimbursement_spec.rb +3 -30
  569. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +18 -6
  570. data/spec/models/spree/reimbursement_type/credit_spec.rb +1 -1
  571. data/spec/models/spree/reimbursement_type/exchange_spec.rb +1 -1
  572. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +1 -1
  573. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +101 -0
  574. data/spec/models/spree/return_authorization_reason_spec.rb +7 -0
  575. data/spec/models/spree/return_authorization_spec.rb +3 -23
  576. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +1 -1
  577. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +1 -1
  578. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +1 -1
  579. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +1 -1
  580. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +1 -1
  581. data/spec/models/spree/return_item_spec.rb +51 -2
  582. data/spec/models/spree/returns_calculator_spec.rb +2 -2
  583. data/spec/models/spree/role_spec.rb +7 -0
  584. data/spec/models/spree/shipment_spec.rb +24 -22
  585. data/spec/models/spree/shipping_calculator_spec.rb +5 -5
  586. data/spec/models/spree/shipping_category_spec.rb +15 -1
  587. data/spec/models/spree/shipping_method_spec.rb +11 -4
  588. data/spec/models/spree/shipping_rate_spec.rb +40 -41
  589. data/spec/models/spree/state_spec.rb +13 -2
  590. data/spec/models/spree/stock/availability_validator_spec.rb +1 -1
  591. data/spec/models/spree/stock/content_item_spec.rb +9 -0
  592. data/spec/models/spree/stock/coordinator_spec.rb +13 -3
  593. data/spec/models/spree/stock/differentiator_spec.rb +1 -1
  594. data/spec/models/spree/stock/estimator_spec.rb +60 -12
  595. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +1 -1
  596. data/spec/models/spree/stock/package_spec.rb +6 -18
  597. data/spec/models/spree/stock/packer_spec.rb +1 -1
  598. data/spec/models/spree/stock/prioritizer_spec.rb +7 -7
  599. data/spec/models/spree/stock/quantifier_spec.rb +61 -32
  600. data/spec/models/spree/stock/splitter/backordered_spec.rb +1 -1
  601. data/spec/models/spree/stock/splitter/base_spec.rb +1 -1
  602. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +3 -3
  603. data/spec/models/spree/stock_item_spec.rb +30 -8
  604. data/spec/models/spree/stock_location_spec.rb +5 -5
  605. data/spec/models/spree/stock_movement_spec.rb +101 -37
  606. data/spec/models/spree/stock_transfer_spec.rb +1 -1
  607. data/spec/models/spree/store_credit_event_spec.rb +101 -0
  608. data/spec/models/spree/store_credit_spec.rb +786 -0
  609. data/spec/models/spree/store_spec.rb +40 -12
  610. data/spec/models/spree/tax_category_spec.rb +7 -2
  611. data/spec/models/spree/tax_rate_spec.rb +288 -109
  612. data/spec/models/spree/taxon_spec.rb +15 -4
  613. data/spec/models/spree/taxonomy_spec.rb +2 -2
  614. data/spec/models/spree/tracker_spec.rb +1 -1
  615. data/spec/models/spree/user_spec.rb +114 -41
  616. data/spec/models/spree/variant_spec.rb +310 -15
  617. data/spec/models/spree/zone_member_spec.rb +38 -0
  618. data/spec/models/spree/zone_spec.rb +38 -10
  619. data/spec/spec_helper.rb +5 -0
  620. data/spec/support/concerns/{adjustment_source_spec.rb → adjustment_source.rb} +0 -0
  621. data/spec/support/concerns/{default_price_spec.rb → default_price.rb} +9 -0
  622. data/spree_core.gemspec +12 -13
  623. data/vendor/assets/javascripts/jquery.payment.js +239 -84
  624. metadata +136 -65
  625. data/CHANGELOG.md +0 -4
  626. data/app/models/concerns/spree/number_generator.rb +0 -39
  627. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -24
@@ -16,7 +16,6 @@ describe Spree::Order, type: :model do
16
16
  order.run_callbacks(:create)
17
17
  allow(order).to receive_messages payment_required?: true
18
18
  allow(order).to receive_messages process_payments!: true
19
- allow(order).to receive :has_available_shipment
20
19
  end
21
20
 
22
21
  context "when payment processing succeeds" do
@@ -119,6 +118,7 @@ describe Spree::Order, type: :model do
119
118
  allow(shipments).to receive_messages ready: []
120
119
  allow(shipments).to receive_messages pending: []
121
120
  allow(shipments).to receive_messages shipped: []
121
+ allow(shipments).to receive(:sum).with(:cost).and_return(shipment.cost)
122
122
 
123
123
  allow_any_instance_of(Spree::OrderUpdater).to receive(:update_adjustment_total) { 10 }
124
124
  end
@@ -126,7 +126,6 @@ describe Spree::Order, type: :model do
126
126
  it "should send a cancel email" do
127
127
  # Stub methods that cause side-effects in this test
128
128
  allow(shipment).to receive(:cancel!)
129
- allow(order).to receive :has_available_shipment
130
129
  allow(order).to receive :restock_items!
131
130
  mail_message = double "Mail::Message"
132
131
  order_id = nil
@@ -144,9 +143,8 @@ describe Spree::Order, type: :model do
144
143
  allow(shipment).to receive(:ensure_correct_adjustment)
145
144
  allow(shipment).to receive(:update_order)
146
145
  allow(Spree::OrderMailer).to receive(:cancel_email).and_return(mail_message = double)
147
- allow(mail_message).to receive :deliver
146
+ allow(mail_message).to receive :deliver_later
148
147
 
149
- allow(order).to receive :has_available_shipment
150
148
  end
151
149
  end
152
150
 
@@ -158,7 +156,6 @@ describe Spree::Order, type: :model do
158
156
  # Stubs methods that cause unwanted side effects in this test
159
157
  allow(Spree::OrderMailer).to receive(:cancel_email).and_return(mail_message = double)
160
158
  allow(mail_message).to receive :deliver_later
161
- allow(order).to receive :has_available_shipment
162
159
  allow(order).to receive :restock_items!
163
160
  allow(shipment).to receive(:cancel!)
164
161
  allow(payment).to receive(:cancel!)
@@ -166,6 +163,7 @@ describe Spree::Order, type: :model do
166
163
  allow(order).to receive_message_chain(:payments, :completed).and_return([payment])
167
164
  allow(order).to receive_message_chain(:payments, :completed, :includes).and_return([payment])
168
165
  allow(order).to receive_message_chain(:payments, :last).and_return(payment)
166
+ allow(order).to receive_message_chain(:payments, :store_credits, :pending).and_return([])
169
167
  end
170
168
 
171
169
  context "without shipped items" do
@@ -205,12 +203,10 @@ describe Spree::Order, type: :model do
205
203
  # Another regression test for #729
206
204
  context "#resume" do
207
205
  before do
208
- allow(order).to receive_messages email: "user@spreecommerce.com"
206
+ allow(order).to receive_messages email: "user@spreecommerce.org"
209
207
  allow(order).to receive_messages state: "canceled"
210
208
  allow(order).to receive_messages allow_resume?: true
211
209
 
212
- # Stubs method that cause unwanted side effects in this test
213
- allow(order).to receive :has_available_shipment
214
210
  end
215
211
  end
216
212
  end
@@ -0,0 +1,426 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples "check total store credit from payments" do
4
+ context 'with valid payments' do
5
+ let(:order) { payment.order }
6
+ let!(:payment) { create(:store_credit_payment) }
7
+ let!(:second_payment) { create(:store_credit_payment, order: order) }
8
+
9
+ subject { order }
10
+
11
+ it 'returns the sum of the payment amounts' do
12
+ expect(subject.total_applicable_store_credit).to eq (payment.amount + second_payment.amount)
13
+ end
14
+ end
15
+
16
+ context 'without valid payments' do
17
+ let(:order) { create(:order) }
18
+
19
+ subject { order }
20
+
21
+ it 'returns 0' do
22
+ expect(subject.total_applicable_store_credit).to be_zero
23
+ end
24
+ end
25
+ end
26
+
27
+ describe 'Order' do
28
+ describe '#add_store_credit_payments' do
29
+ let(:order_total) { 500.00 }
30
+
31
+ before { create(:store_credit_payment_method) }
32
+
33
+ subject { order.add_store_credit_payments }
34
+
35
+ context 'there is no store credit' do
36
+ let(:order) { create(:store_credits_order_without_user, total: order_total) }
37
+
38
+ before do
39
+ # callbacks recalculate total based on line items
40
+ # this ensures the total is what we expect
41
+ order.update_column(:total, order_total)
42
+ subject
43
+ order.reload
44
+ end
45
+
46
+ it 'does not create a store credit payment' do
47
+ expect(order.payments.count).to eq 0
48
+ end
49
+ end
50
+
51
+ context 'there is enough store credit to pay for the entire order' do
52
+ let(:store_credit) { create(:store_credit, amount: order_total) }
53
+ let(:order) { create(:order, user: store_credit.user, total: order_total) }
54
+
55
+ before do
56
+ subject
57
+ order.reload
58
+ end
59
+
60
+ it 'creates a store credit payment for the full amount' do
61
+ expect(order.payments.count).to eq 1
62
+ expect(order.payments.first).to be_store_credit
63
+ expect(order.payments.first.amount).to eq order_total
64
+ end
65
+ end
66
+
67
+ context 'the available store credit is not enough to pay for the entire order' do
68
+ let(:expected_cc_total) { 100.0 }
69
+ let(:store_credit_total) { order_total - expected_cc_total }
70
+ let(:store_credit) { create(:store_credit, amount: store_credit_total) }
71
+ let(:order) { create(:order, user: store_credit.user, total: order_total) }
72
+
73
+ before do
74
+ # callbacks recalculate total based on line items
75
+ # this ensures the total is what we expect
76
+ order.update_column(:total, order_total)
77
+ subject
78
+ order.reload
79
+ end
80
+
81
+ it 'creates a store credit payment for the available amount' do
82
+ expect(order.payments.count).to eq 1
83
+ expect(order.payments.first).to be_store_credit
84
+ expect(order.payments.first.amount).to eq store_credit_total
85
+ end
86
+ end
87
+
88
+ context 'there are multiple store credits' do
89
+ context 'they have different credit type priorities' do
90
+ let(:amount_difference) { 100 }
91
+ let!(:primary_store_credit) { create(:store_credit, amount: (order_total - amount_difference)) }
92
+ let!(:secondary_store_credit) do
93
+ create(:store_credit, amount: order_total, user: primary_store_credit.user,
94
+ credit_type: create(:secondary_credit_type))
95
+ end
96
+ let(:order) { create(:order, user: primary_store_credit.user, total: order_total) }
97
+
98
+ before do
99
+ Timecop.scale(3600)
100
+ subject
101
+ order.reload
102
+ end
103
+
104
+ after { Timecop.return }
105
+
106
+ it 'uses the primary store credit type over the secondary' do
107
+ primary_payment = order.payments.first
108
+ secondary_payment = order.payments.last
109
+
110
+ expect(order.payments.size).to eq 2
111
+ expect(primary_payment.source).to eq primary_store_credit
112
+ expect(secondary_payment.source).to eq secondary_store_credit
113
+ expect(primary_payment.amount).to eq(order_total - amount_difference)
114
+ expect(secondary_payment.amount).to eq(amount_difference)
115
+ end
116
+ end
117
+ end
118
+ end
119
+
120
+ describe '#covered_by_store_credit' do
121
+ context "order doesn't have an associated user" do
122
+ subject { create(:store_credits_order_without_user) }
123
+
124
+ it 'returns false' do
125
+ expect(subject.covered_by_store_credit).to be false
126
+ end
127
+ end
128
+
129
+ context 'order has an associated user' do
130
+ let(:user) { create(:user) }
131
+
132
+ subject { create(:order, user: user) }
133
+
134
+ context 'user has enough store credit to pay for the order' do
135
+ before do
136
+ allow(user).to receive(:total_available_store_credit).and_return(10.0)
137
+ allow(subject).to receive(:total).and_return(5.0)
138
+ end
139
+
140
+ it 'returns true' do
141
+ expect(subject.covered_by_store_credit).to be true
142
+ end
143
+ end
144
+
145
+ context 'user does not have enough store credit to pay for the order' do
146
+ before do
147
+ allow(user).to receive(:total_available_store_credit).and_return(0.0)
148
+ allow(subject).to receive(:total).and_return(5.0)
149
+ end
150
+
151
+ it 'returns false' do
152
+ expect(subject.covered_by_store_credit).to be false
153
+ end
154
+ end
155
+ end
156
+ end
157
+
158
+ describe '#total_available_store_credit' do
159
+ context 'order does not have an associated user' do
160
+ subject { create(:store_credits_order_without_user) }
161
+
162
+ it 'returns 0' do
163
+ expect(subject.total_available_store_credit).to be_zero
164
+ end
165
+ end
166
+
167
+ context 'order has an associated user' do
168
+ let(:user) { create(:user) }
169
+ let(:available_store_credit) { 25.0 }
170
+
171
+ subject { create(:order, user: user) }
172
+
173
+ before do
174
+ allow(user).to receive(:total_available_store_credit).and_return(available_store_credit)
175
+ end
176
+
177
+ it "returns the user's available store credit" do
178
+ expect(subject.total_available_store_credit).to eq available_store_credit
179
+ end
180
+ end
181
+ end
182
+
183
+ describe '#could_use_store_credit?' do
184
+ context 'order does not have an associated user' do
185
+ subject { create(:store_credits_order_without_user) }
186
+
187
+ it { expect(subject.could_use_store_credit?).to be false }
188
+ end
189
+
190
+ context 'order has an associated user' do
191
+ let(:user) { create(:user) }
192
+
193
+ subject { create(:order, user: user) }
194
+
195
+ context 'without store credit' do
196
+ it { expect(subject.could_use_store_credit?).to be false }
197
+ end
198
+
199
+ context 'with store credit' do
200
+ let(:available_store_credit) { 25.0 }
201
+
202
+ before do
203
+ allow(user).to receive(:total_available_store_credit).and_return(available_store_credit)
204
+ end
205
+
206
+ it { expect(subject.could_use_store_credit?).to be true }
207
+ end
208
+ end
209
+ end
210
+
211
+ describe '#order_total_after_store_credit' do
212
+ let(:order_total) { 100.0 }
213
+
214
+ subject { create(:order, total: order_total) }
215
+
216
+ before do
217
+ allow(subject).to receive(:total_applicable_store_credit).and_return(applicable_store_credit)
218
+ end
219
+
220
+ context "order's user has store credits" do
221
+ let(:applicable_store_credit) { 10.0 }
222
+
223
+ it 'deducts the applicable store credit' do
224
+ expect(subject.order_total_after_store_credit).to eq (order_total - applicable_store_credit)
225
+ end
226
+ end
227
+
228
+ context "order's user does not have any store credits" do
229
+ let(:applicable_store_credit) { 0.0 }
230
+
231
+ it 'returns the order total' do
232
+ expect(subject.order_total_after_store_credit).to eq order_total
233
+ end
234
+ end
235
+ end
236
+
237
+ describe '#total_applicable_store_credit' do
238
+ context 'order is in the confirm state' do
239
+ before { order.update_attributes(state: 'confirm') }
240
+ include_examples 'check total store credit from payments'
241
+ end
242
+
243
+ context 'order is completed' do
244
+ before { order.update_attributes(state: 'complete') }
245
+ include_examples 'check total store credit from payments'
246
+ end
247
+
248
+ context 'order is in any state other than confirm or complete' do
249
+ context 'the associated user has store credits' do
250
+ let(:store_credit) { create(:store_credit) }
251
+ let(:order) { create(:order, user: store_credit.user) }
252
+
253
+ subject { order }
254
+
255
+ context 'the store credit is more than the order total' do
256
+ let(:order_total) { store_credit.amount - 1 }
257
+
258
+ before { order.update_attributes(total: order_total) }
259
+
260
+ it 'returns the order total' do
261
+ expect(subject.total_applicable_store_credit).to eq order_total
262
+ end
263
+ end
264
+
265
+ context 'the store credit is less than the order total' do
266
+ let(:order_total) { store_credit.amount * 10 }
267
+
268
+ before { order.update_attributes(total: order_total) }
269
+
270
+ it 'returns the store credit amount' do
271
+ expect(subject.total_applicable_store_credit).to eq store_credit.amount
272
+ end
273
+ end
274
+ end
275
+
276
+ context 'the associated user does not have store credits' do
277
+ let(:order) { create(:order) }
278
+
279
+ subject { order }
280
+
281
+ it 'returns 0' do
282
+ expect(subject.total_applicable_store_credit).to be_zero
283
+ end
284
+ end
285
+
286
+ context 'the order does not have an associated user' do
287
+ subject { create(:store_credits_order_without_user) }
288
+
289
+ it 'returns 0' do
290
+ expect(subject.total_applicable_store_credit).to be_zero
291
+ end
292
+ end
293
+ end
294
+ end
295
+
296
+ describe '#total_applied_store_credit' do
297
+ context 'with valid payments' do
298
+ let(:order) { payment.order }
299
+ let!(:payment) { create(:store_credit_payment) }
300
+ let!(:second_payment) { create(:store_credit_payment, order: order) }
301
+
302
+ subject { order }
303
+
304
+ it 'returns the sum of the payment amounts' do
305
+ expect(subject.total_applied_store_credit).to eq (payment.amount + second_payment.amount)
306
+ end
307
+ end
308
+
309
+ context 'without valid payments' do
310
+ let(:order) { create(:order) }
311
+
312
+ subject { order }
313
+
314
+ it 'returns 0' do
315
+ expect(subject.total_applied_store_credit).to be_zero
316
+ end
317
+ end
318
+ end
319
+
320
+ describe '#using_store_credit?' do
321
+ subject { create(:order) }
322
+
323
+ context 'order has store credit payment' do
324
+ before { allow(subject).to receive(:total_applied_store_credit).and_return(10.0) }
325
+ it { expect(subject.using_store_credit?).to be true }
326
+ end
327
+
328
+ context 'order has no store credit payments' do
329
+ before { allow(subject).to receive(:total_applied_store_credit).and_return(0.0) }
330
+ it { expect(subject.using_store_credit?).to be false }
331
+ end
332
+ end
333
+
334
+ describe '#display_total_applicable_store_credit' do
335
+ let(:total_applicable_store_credit) { 10.00 }
336
+
337
+ subject { create(:order) }
338
+
339
+ before do
340
+ allow(subject).to receive(:total_applicable_store_credit).and_return(total_applicable_store_credit)
341
+ end
342
+
343
+ it 'returns a money instance' do
344
+ expect(subject.display_total_applicable_store_credit).to be_a(Spree::Money)
345
+ end
346
+
347
+ it 'returns a negative amount' do
348
+ expect(subject.display_total_applicable_store_credit.money.cents).to eq (total_applicable_store_credit * -100.0)
349
+ end
350
+ end
351
+
352
+ describe '#display_total_applied_store_credit' do
353
+ let(:total_applied_store_credit) { 10.00 }
354
+
355
+ subject { create(:order) }
356
+
357
+ before do
358
+ allow(subject).to receive(:total_applied_store_credit).and_return(total_applied_store_credit)
359
+ end
360
+
361
+ it 'returns a money instance' do
362
+ expect(subject.display_total_applied_store_credit).to be_a(Spree::Money)
363
+ end
364
+
365
+ it 'returns a negative amount' do
366
+ expect(subject.display_total_applied_store_credit.money.cents).to eq (total_applied_store_credit * -100.0)
367
+ end
368
+ end
369
+
370
+ describe '#display_order_total_after_store_credit' do
371
+ let(:order_total_after_store_credit) { 10.00 }
372
+
373
+ subject { create(:order) }
374
+
375
+ before do
376
+ allow(subject).to receive(:order_total_after_store_credit).and_return(order_total_after_store_credit)
377
+ end
378
+
379
+ it 'returns a money instance' do
380
+ expect(subject.display_order_total_after_store_credit).to be_a(Spree::Money)
381
+ end
382
+
383
+ it 'returns the order_total_after_store_credit amount' do
384
+ expect(subject.display_order_total_after_store_credit.money.cents).to eq (order_total_after_store_credit * 100.0)
385
+ end
386
+ end
387
+
388
+ describe '#display_total_available_store_credit' do
389
+ let(:total_available_store_credit) { 10.00 }
390
+
391
+ subject { create(:order) }
392
+
393
+ before do
394
+ allow(subject).to receive(:total_available_store_credit).and_return(total_available_store_credit)
395
+ end
396
+
397
+ it 'returns a money instance' do
398
+ expect(subject.display_total_available_store_credit).to be_a(Spree::Money)
399
+ end
400
+
401
+ it 'returns the total_available_store_credit amount' do
402
+ expect(subject.display_total_available_store_credit.money.cents).to eq (total_available_store_credit * 100.0)
403
+ end
404
+ end
405
+
406
+ describe '#display_store_credit_remaining_after_capture' do
407
+ let(:total_available_store_credit) { 10.00 }
408
+ let(:total_applicable_store_credit) { 5.00 }
409
+
410
+ subject { create(:order) }
411
+
412
+ before do
413
+ allow(subject).to receive(:total_available_store_credit).and_return(total_available_store_credit)
414
+ allow(subject).to receive(:total_applicable_store_credit).and_return(total_applicable_store_credit)
415
+ end
416
+
417
+ it 'returns a money instance' do
418
+ expect(subject.display_store_credit_remaining_after_capture).to be_a(Spree::Money)
419
+ end
420
+
421
+ it "returns all of the user's available store credit minus what's applied to the order amount" do
422
+ amount_remaining = total_available_store_credit - total_applicable_store_credit
423
+ expect(subject.display_store_credit_remaining_after_capture.money.cents).to eq (amount_remaining * 100.0)
424
+ end
425
+ end
426
+ end
@@ -1,13 +1,13 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Spree
4
- describe Spree::Order, :type => :model do
4
+ describe Spree::Order, type: :model do
5
5
  let(:order) { stub_model(Spree::Order) }
6
6
 
7
7
  context "#tax_zone" do
8
8
  let(:bill_address) { create :address }
9
9
  let(:ship_address) { create :address }
10
- let(:order) { Spree::Order.create(:ship_address => ship_address, :bill_address => bill_address) }
10
+ let(:order) { Spree::Order.create(ship_address: ship_address, bill_address: bill_address) }
11
11
  let(:zone) { create :zone }
12
12
 
13
13
  context "when no zones exist" do
@@ -16,8 +16,8 @@ module Spree
16
16
  end
17
17
  end
18
18
 
19
- context "when :tax_using_ship_address => true" do
20
- before { Spree::Config.set(:tax_using_ship_address => true) }
19
+ context "when tax_using_ship_address: true" do
20
+ before { Spree::Config.set(tax_using_ship_address: true) }
21
21
 
22
22
  it "should calculate using ship_address" do
23
23
  expect(Spree::Zone).to receive(:match).at_least(:once).with(ship_address)
@@ -26,8 +26,8 @@ module Spree
26
26
  end
27
27
  end
28
28
 
29
- context "when :tax_using_ship_address => false" do
30
- before { Spree::Config.set(:tax_using_ship_address => false) }
29
+ context "when tax_using_ship_address: false" do
30
+ before { Spree::Config.set(tax_using_ship_address: false) }
31
31
 
32
32
  it "should calculate using bill_address" do
33
33
  expect(Spree::Zone).to receive(:match).at_least(:once).with(bill_address)
@@ -38,12 +38,12 @@ module Spree
38
38
 
39
39
  context "when there is a default tax zone" do
40
40
  before do
41
- @default_zone = create(:zone, :name => "foo_zone")
42
- allow(Spree::Zone).to receive_messages :default_tax => @default_zone
41
+ @default_zone = create(:zone, name: "foo_zone")
42
+ allow(Spree::Zone).to receive_messages default_tax: @default_zone
43
43
  end
44
44
 
45
45
  context "when there is a matching zone" do
46
- before { allow(Spree::Zone).to receive_messages(:match => zone) }
46
+ before { allow(Spree::Zone).to receive_messages(match: zone) }
47
47
 
48
48
  it "should return the matching zone" do
49
49
  expect(order.tax_zone).to eq(zone)
@@ -51,7 +51,7 @@ module Spree
51
51
  end
52
52
 
53
53
  context "when there is no matching zone" do
54
- before { allow(Spree::Zone).to receive_messages(:match => nil) }
54
+ before { allow(Spree::Zone).to receive_messages(match: nil) }
55
55
 
56
56
  it "should return the default tax zone" do
57
57
  expect(order.tax_zone).to eq(@default_zone)
@@ -60,10 +60,10 @@ module Spree
60
60
  end
61
61
 
62
62
  context "when no default tax zone" do
63
- before { allow(Spree::Zone).to receive_messages :default_tax => nil }
63
+ before { allow(Spree::Zone).to receive_messages default_tax: nil }
64
64
 
65
65
  context "when there is a matching zone" do
66
- before { allow(Spree::Zone).to receive_messages(:match => zone) }
66
+ before { allow(Spree::Zone).to receive_messages(match: zone) }
67
67
 
68
68
  it "should return the matching zone" do
69
69
  expect(order.tax_zone).to eq(zone)
@@ -71,7 +71,7 @@ module Spree
71
71
  end
72
72
 
73
73
  context "when there is no matching zone" do
74
- before { allow(Spree::Zone).to receive_messages(:match => nil) }
74
+ before { allow(Spree::Zone).to receive_messages(match: nil) }
75
75
 
76
76
  it "should return nil" do
77
77
  expect(order.tax_zone).to be_nil
@@ -1,13 +1,13 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Spree
4
- describe Order, :type => :model do
4
+ describe Order, type: :model do
5
5
  let(:order) { Order.create }
6
6
  let(:shirt) { create(:variant) }
7
7
 
8
8
  context "adds item to cart and activates promo" do
9
9
  let(:promotion) { Promotion.create name: 'Huhu' }
10
- let(:calculator) { Calculator::FlatPercentItemTotal.new(:preferred_flat_percent => 10) }
10
+ let(:calculator) { Calculator::FlatPercentItemTotal.new(preferred_flat_percent: 10) }
11
11
  let!(:action) { Promotion::Actions::CreateAdjustment.create(promotion: promotion, calculator: calculator) }
12
12
 
13
13
  before { order.contents.add(shirt, 1) }
@@ -1,17 +1,17 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::Order, :type => :model do
3
+ describe Spree::Order, type: :model do
4
4
  let(:order) { create(:order) }
5
5
 
6
- context "#update!" do
7
- let(:line_items) { [mock_model(Spree::LineItem, :amount => 5) ]}
6
+ context "#update_with_updater!" do
7
+ let(:line_items) { [mock_model(Spree::LineItem, amount: 5) ]}
8
8
 
9
9
  context "when there are update hooks" do
10
10
  before { Spree::Order.register_update_hook :foo }
11
11
  after { Spree::Order.update_hooks.clear }
12
12
  it "should call each of the update hooks" do
13
13
  expect(order).to receive :foo
14
- order.update!
14
+ order.update_with_updater!
15
15
  end
16
16
  end
17
17
  end
@@ -1,12 +1,12 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  module Spree
4
- describe Spree::Order, :type => :model do
4
+ describe Spree::Order, type: :model do
5
5
  context "validations" do
6
6
  # Regression test for #2214
7
7
  it "does not return two error messages when email is blank" do
8
8
  order = Spree::Order.new
9
- allow(order).to receive_messages(:require_email => true)
9
+ allow(order).to receive_messages(require_email: true)
10
10
  order.valid?
11
11
  expect(order.errors[:email]).to eq(["can't be blank"])
12
12
  end