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
@@ -1,5 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::ProductOptionType, :type => :model do
4
-
3
+ describe Spree::ProductOptionType do
4
+ describe 'Validations' do
5
+ it { is_expected.to validate_presence_of(:product) }
6
+ it { is_expected.to validate_presence_of(:option_type) }
7
+ it { is_expected.to validate_uniqueness_of(:product_id).scoped_to(:option_type_id).allow_nil }
8
+ end
5
9
  end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::ProductPromotionRule do
4
+ describe 'Validations' do
5
+ it { is_expected.to validate_presence_of(:product) }
6
+ it { is_expected.to validate_presence_of(:promotion_rule) }
7
+ it { is_expected.to validate_uniqueness_of(:product_id).scoped_to(:promotion_rule_id).allow_nil }
8
+ end
9
+ end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::ProductProperty, :type => :model do
3
+ describe Spree::ProductProperty, type: :model do
4
4
  context "touching" do
5
5
  it "should update product" do
6
6
  pp = create(:product_property)
@@ -8,4 +8,19 @@ describe Spree::ProductProperty, :type => :model do
8
8
  pp.touch
9
9
  end
10
10
  end
11
+
12
+ context 'property_name=' do
13
+ before do
14
+ @pp = create(:product_property)
15
+ end
16
+
17
+ it "should assign property" do
18
+ @pp.property_name = "Size"
19
+ expect(@pp.property.name).to eq('Size')
20
+ end
21
+ end
22
+
23
+ context 'ransackable_associations' do
24
+ it { expect(Spree::ProductProperty.whitelisted_ransackable_associations).to include('property') }
25
+ end
11
26
  end
@@ -9,15 +9,42 @@ module ThirdParty
9
9
  end
10
10
  end
11
11
 
12
- describe Spree::Product, :type => :model do
12
+ describe Spree::Product, type: :model do
13
+
14
+ describe 'Associations' do
15
+ it 'should have many promotions' do
16
+ is_expected.to have_many(:promotions).
17
+ class_name('Spree::Promotion').through(:promotion_rules)
18
+ end
19
+
20
+ it 'should have many possible_promotions' do
21
+ is_expected.to have_many(:possible_promotions).
22
+ class_name('Spree::Promotion').through(:promotion_rules).source(:promotion)
23
+ end
24
+
25
+ it do
26
+ is_expected.to have_many(:variants).
27
+ class_name('Spree::Variant').
28
+ inverse_of(:product).
29
+ conditions(is_master: false).
30
+ order(:position)
31
+ end
32
+
33
+ it do
34
+ is_expected.to have_many(:variants_including_master).
35
+ class_name('Spree::Variant').
36
+ inverse_of(:product).
37
+ order(:position)
38
+ end
39
+ end
13
40
 
14
41
  context 'product instance' do
15
42
  let(:product) { create(:product) }
16
- let(:variant) { create(:variant, :product => product) }
43
+ let(:variant) { create(:variant, product: product) }
17
44
 
18
45
  context '#duplicate' do
19
46
  before do
20
- allow(product).to receive_messages :taxons => [create(:taxon)]
47
+ allow(product).to receive_messages taxons: [create(:taxon)]
21
48
  end
22
49
 
23
50
  it 'duplicates product' do
@@ -88,7 +115,7 @@ describe Spree::Product, :type => :model do
88
115
 
89
116
  context "product has variants" do
90
117
  before do
91
- create(:variant, :product => product)
118
+ create(:variant, product: product)
92
119
  end
93
120
 
94
121
  context "#destroy" do
@@ -148,6 +175,17 @@ describe Spree::Product, :type => :model do
148
175
  end
149
176
  end
150
177
 
178
+ context "#can_supply?" do
179
+ it "should be true" do
180
+ expect(product.can_supply?).to be(true)
181
+ end
182
+
183
+ it "should be false" do
184
+ product.variants_including_master.each { |v| v.stock_items.update_all count_on_hand: 0, backorderable: false }
185
+ expect(product.can_supply?).to be(false)
186
+ end
187
+ end
188
+
151
189
  context "variants_and_option_values" do
152
190
  let!(:high) { create(:variant, product: product) }
153
191
  let!(:low) { create(:variant, product: product) }
@@ -159,20 +197,6 @@ describe Spree::Product, :type => :model do
159
197
  end
160
198
  end
161
199
 
162
- describe 'Variants sorting' do
163
- context 'without master variant' do
164
- it 'sorts variants by position' do
165
- expect(product.variants.to_sql).to match(/ORDER BY (\`|\")spree_variants(\`|\").position ASC/)
166
- end
167
- end
168
-
169
- context 'with master variant' do
170
- it 'sorts variants by position' do
171
- expect(product.variants_including_master.to_sql).to match(/ORDER BY (\`|\")spree_variants(\`|\").position ASC/)
172
- end
173
- end
174
- end
175
-
176
200
  context "has stock movements" do
177
201
  let(:variant) { product.master }
178
202
  let(:stock_item) { variant.stock_items.first }
@@ -199,6 +223,16 @@ describe Spree::Product, :type => :model do
199
223
  expect(product.slug).not_to match "/"
200
224
  end
201
225
 
226
+ it "stores old slugs in FriendlyIds history" do
227
+ # create_slug is a private method, included by FriendlyId::History
228
+ # it's effect is rather complex and dependent on state and config.
229
+ # However, when a new slug is set, it should call slugs.create!
230
+ expect(product.slugs).to receive(:create!)
231
+ # Set it, otherwise the create_slug method avoids writing a new one
232
+ product.slug = "custom-slug"
233
+ product.run_callbacks :save
234
+ end
235
+
202
236
  context "when product destroyed" do
203
237
 
204
238
  it "renames slug" do
@@ -244,6 +278,40 @@ describe Spree::Product, :type => :model do
244
278
  end
245
279
  end
246
280
 
281
+ describe "#discontinue_on_must_be_later_than_available_on" do
282
+ before { product.available_on = Date.today }
283
+
284
+ context "available_on is a date earlier than discontinue_on" do
285
+ before { product.discontinue_on = 5.days.from_now }
286
+
287
+ it "is valid" do
288
+ expect(product).to be_valid
289
+ end
290
+ end
291
+
292
+ context "available_on is a date earlier than discontinue_on" do
293
+ before { product.discontinue_on = 5.days.ago }
294
+
295
+ context "is not valid" do
296
+ before { product.valid? }
297
+
298
+ it { expect(product).not_to be_valid }
299
+ it { expect(product.errors[:discontinue_on]).to include(I18n.t(:invalid_date_range, scope: 'activerecord.errors.models.spree/product.attributes.discontinue_on')) }
300
+ end
301
+ end
302
+
303
+ context "available_on and discontinue_on are nil" do
304
+ before do
305
+ product.discontinue_on = nil
306
+ product.available_on = nil
307
+ end
308
+
309
+ it "is valid" do
310
+ expect(product).to be_valid
311
+ end
312
+ end
313
+ end
314
+
247
315
  context "hard deletion" do
248
316
  it "doesnt raise ActiveRecordError error" do
249
317
  expect { product.really_destroy! }.to_not raise_error
@@ -298,29 +366,47 @@ describe Spree::Product, :type => :model do
298
366
  }.to change { product.properties.length }.by(1)
299
367
  end
300
368
 
369
+ context 'optional property_presentation' do
370
+ subject { Spree::Property.where(name: 'foo').first.presentation }
371
+ let(:name) { 'foo' }
372
+ let(:presentation) { 'baz' }
373
+
374
+ describe 'is not used' do
375
+ before { product.set_property(name, 'bar') }
376
+ it { is_expected.to eq name }
377
+ end
378
+
379
+ describe 'is used' do
380
+ before { product.set_property(name, 'bar', presentation) }
381
+ it { is_expected.to eq presentation }
382
+ end
383
+ end
384
+
301
385
  # Regression test for #2455
302
386
  it "should not overwrite properties' presentation names" do
303
- Spree::Property.where(:name => 'foo').first_or_create!(:presentation => "Foo's Presentation Name")
387
+ Spree::Property.where(name: 'foo').first_or_create!(presentation: "Foo's Presentation Name")
304
388
  product.set_property('foo', 'value1')
305
389
  product.set_property('bar', 'value2')
306
- expect(Spree::Property.where(:name => 'foo').first.presentation).to eq("Foo's Presentation Name")
307
- expect(Spree::Property.where(:name => 'bar').first.presentation).to eq("bar")
390
+ expect(Spree::Property.where(name: 'foo').first.presentation).to eq("Foo's Presentation Name")
391
+ expect(Spree::Property.where(name: 'bar').first.presentation).to eq("bar")
308
392
  end
309
393
 
310
394
  # Regression test for #4416
311
395
  context "#possible_promotions" do
312
- let!(:promotion) do
313
- create(:promotion, advertise: true, starts_at: 1.day.ago)
314
- end
315
- let!(:rule) do
316
- Spree::Promotion::Rules::Product.create(
317
- promotion: promotion,
318
- products: [product]
319
- )
396
+ let!(:possible_promotion) { create(:promotion, advertise: true, starts_at: 1.day.ago) }
397
+ let!(:unadvertised_promotion) { create(:promotion, advertise: false, starts_at: 1.day.ago) }
398
+ let!(:inactive_promotion) { create(:promotion, advertise: true, starts_at: 1.day.since) }
399
+
400
+ before do
401
+ product.promotion_rules.create!(promotion: possible_promotion)
402
+ product.promotion_rules.create!(promotion: unadvertised_promotion)
403
+ product.promotion_rules.create!(promotion: inactive_promotion)
320
404
  end
321
405
 
322
406
  it "lists the promotion as a possible promotion" do
323
- expect(product.possible_promotions).to include(promotion)
407
+ expect(product.possible_promotions).to include(possible_promotion)
408
+ expect(product.possible_promotions).to_not include(unadvertised_promotion)
409
+ expect(product.possible_promotions).to_not include(inactive_promotion)
324
410
  end
325
411
  end
326
412
  end
@@ -340,16 +426,14 @@ describe Spree::Product, :type => :model do
340
426
 
341
427
  context "when prototype with option types is supplied" do
342
428
  def build_option_type_with_values(name, values)
343
- ot = create(:option_type, :name => name)
344
- values.each do |val|
345
- ot.option_values.create(:name => val.downcase, :presentation => val)
429
+ values.each_with_object(create :option_type, name: name) do |val, ot|
430
+ ot.option_values.create(name: val.downcase, presentation: val)
346
431
  end
347
- ot
348
432
  end
349
433
 
350
434
  let(:prototype) do
351
435
  size = build_option_type_with_values("size", %w(Small Medium Large))
352
- create(:prototype, :name => "Size", :option_types => [ size ])
436
+ create(:prototype, name: "Size", option_types: [ size ])
353
437
  end
354
438
 
355
439
  let(:option_values_hash) do
@@ -381,6 +465,7 @@ describe Spree::Product, :type => :model do
381
465
  product.option_values_hash = option_values_hash
382
466
  product.prototype_id = nil
383
467
  product.save
468
+ product.reload
384
469
  expect(product.option_type_ids.length).to eq(1)
385
470
  expect(product.option_type_ids).to eq(prototype.option_type_ids)
386
471
  expect(product.variants.length).to eq(3)
@@ -403,12 +488,12 @@ describe Spree::Product, :type => :model do
403
488
  context "#images" do
404
489
  let(:product) { create(:product) }
405
490
  let(:image) { File.open(File.expand_path('../../../fixtures/thinking-cat.jpg', __FILE__)) }
406
- let(:params) { {:viewable_id => product.master.id, :viewable_type => 'Spree::Variant', :attachment => image, :alt => "position 2", :position => 2} }
491
+ let(:params) { {viewable_id: product.master.id, viewable_type: 'Spree::Variant', attachment: image, alt: "position 2", position: 2} }
407
492
 
408
493
  before do
409
494
  Spree::Image.create(params)
410
- Spree::Image.create(params.merge({:alt => "position 1", :position => 1}))
411
- Spree::Image.create(params.merge({:viewable_type => 'ThirdParty::Extension', :alt => "position 1", :position => 2}))
495
+ Spree::Image.create(params.merge({alt: "position 1", position: 1}))
496
+ Spree::Image.create(params.merge({viewable_type: 'ThirdParty::Extension', alt: "position 1", position: 2}))
412
497
  end
413
498
 
414
499
  it "only looks for variant images" do
@@ -438,17 +523,17 @@ describe Spree::Product, :type => :model do
438
523
 
439
524
  it 'should be infinite if track_inventory_levels is false' do
440
525
  Spree::Config[:track_inventory_levels] = false
441
- expect(build(:product, :variants_including_master => [build(:master_variant)]).total_on_hand).to eql(Float::INFINITY)
526
+ expect(build(:product, variants_including_master: [build(:master_variant)]).total_on_hand).to eql(Float::INFINITY)
442
527
  end
443
528
 
444
529
  it 'should be infinite if variant is on demand' do
445
530
  Spree::Config[:track_inventory_levels] = true
446
- expect(build(:product, :variants_including_master => [build(:on_demand_master_variant)]).total_on_hand).to eql(Float::INFINITY)
531
+ expect(build(:product, variants_including_master: [build(:on_demand_master_variant)]).total_on_hand).to eql(Float::INFINITY)
447
532
  end
448
533
 
449
534
  it 'should return sum of stock items count_on_hand' do
450
535
  product.stock_items.first.set_count_on_hand 5
451
- product.variants_including_master(true) # force load association
536
+ product.variants_including_master.reload # force load association
452
537
  expect(product.total_on_hand).to eql(5)
453
538
  end
454
539
 
@@ -471,4 +556,74 @@ describe Spree::Product, :type => :model do
471
556
  product = Spree::Product.new
472
557
  expect(product.master.is_master).to be true
473
558
  end
559
+
560
+ context "#discontinue!" do
561
+ let(:product) { create(:product, sku: 'a-sku') }
562
+
563
+ it "sets the discontinued" do
564
+ product.discontinue!
565
+ product.reload
566
+ expect(product.discontinued?).to be(true)
567
+ end
568
+
569
+ it "changes updated_at" do
570
+ Timecop.scale(1000) do
571
+ expect { product.discontinue! }.to change { product.updated_at }
572
+ end
573
+ end
574
+ end
575
+
576
+ context "#discontinued?" do
577
+ let(:product_live) { build(:product, sku: "a-sku") }
578
+ it "should be false" do
579
+ expect(product_live.discontinued?).to be(false)
580
+ end
581
+
582
+ let(:product_discontinued) { build(:product, sku: "a-sku", discontinue_on: Time.now - 1.day) }
583
+ it "should be true" do
584
+ expect(product_discontinued.discontinued?).to be(true)
585
+ end
586
+ end
587
+
588
+ context "acts_as_taggable" do
589
+ let(:product) { create(:product) }
590
+
591
+ it "should add tags" do
592
+ product.tag_list.add("awesome")
593
+ expect(product.tag_list).to include("awesome")
594
+ end
595
+
596
+ it "should remove tags" do
597
+ product.tag_list.remove("awesome")
598
+ expect(product.tag_list).to_not include("awesome")
599
+ end
600
+ end
601
+
602
+ context "#brand" do
603
+ let(:taxonomy) { create(:taxonomy, name: I18n.t('spree.taxonomy_brands_name')) }
604
+ let(:product) { create(:product, taxons: [taxonomy.taxons.first]) }
605
+
606
+ it 'should fetch Brand Taxon' do
607
+ expect(product.brand).to eql(taxonomy.taxons.first)
608
+ end
609
+ end
610
+
611
+ context "#category" do
612
+ let(:taxonomy) { create(:taxonomy, name: I18n.t('spree.taxonomy_categories_name')) }
613
+ let(:product) { create(:product, taxons: [taxonomy.taxons.first]) }
614
+
615
+ it 'should fetch Category Taxon' do
616
+ expect(product.category).to eql(taxonomy.taxons.first)
617
+ end
618
+ end
619
+
620
+ describe '#ensure_no_line_items' do
621
+ let(:product) { create(:product) }
622
+ let!(:line_item) { create(:line_item, variant: product.master) }
623
+
624
+ it 'should add error on product destroy' do
625
+ expect(product.destroy).to eq false
626
+ expect(product.errors[:base]).to include Spree.t(:cannot_destroy_if_attached_to_line_items)
627
+ end
628
+ end
474
629
  end
@@ -8,6 +8,69 @@ describe Spree::Promotion::Actions::CreateAdjustment, type: :model do
8
8
 
9
9
  it_behaves_like 'an adjustment source'
10
10
 
11
+ describe '#compute_amount' do
12
+ subject { described_class.new }
13
+
14
+ let(:shipping_discount) { 10 }
15
+ let(:order) do
16
+ double(:order, item_total: 30, ship_total: 10, shipping_discount: shipping_discount)
17
+ end
18
+
19
+ context 'when shipping_discount is applied' do
20
+ context 'and total is less than discount' do
21
+ it 'returns discount amount eq to total' do
22
+ allow(subject).to receive(:compute).with(order).and_return(100)
23
+
24
+ expect(subject.compute_amount(order)).to eq -30
25
+ end
26
+ end
27
+
28
+ context 'and total is equal to discount' do
29
+ it 'returns discount amount' do
30
+ allow(subject).to receive(:compute).with(order).and_return(30)
31
+
32
+ expect(subject.compute_amount(order)).to eq -30
33
+ end
34
+ end
35
+
36
+ context 'and total is greater than discount' do
37
+ it 'returns discount amount' do
38
+ allow(subject).to receive(:compute).with(order).and_return(10)
39
+
40
+ expect(subject.compute_amount(order)).to eq -10
41
+ end
42
+ end
43
+ end
44
+
45
+ context 'when shipping_discount is not applied' do
46
+ let(:shipping_discount) { 0 }
47
+
48
+ context 'and total is less than discount' do
49
+ it 'returns discount amount eq to total' do
50
+ allow(subject).to receive(:compute).with(order).and_return(100)
51
+
52
+ expect(subject.compute_amount(order)).to eq -40
53
+ end
54
+ end
55
+
56
+ context 'and total is equal to discount' do
57
+ it 'returns discount amount' do
58
+ allow(subject).to receive(:compute).with(order).and_return(40)
59
+
60
+ expect(subject.compute_amount(order)).to eq -40
61
+ end
62
+ end
63
+
64
+ context 'and total is greater than discount' do
65
+ it 'returns discount amount' do
66
+ allow(subject).to receive(:compute).with(order).and_return(10)
67
+
68
+ expect(subject.compute_amount(order)).to eq -10
69
+ end
70
+ end
71
+ end
72
+ end
73
+
11
74
  # From promotion spec:
12
75
  context "#perform" do
13
76
  before 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
@@ -21,7 +21,7 @@ module Spree
21
21
  # Regression test for #3966
22
22
  context "when calculator computes 0" do
23
23
  before do
24
- allow(action).to receive_messages :compute_amount => 0
24
+ allow(action).to receive_messages compute_amount: 0
25
25
  end
26
26
 
27
27
  it "does not create an adjustment when calculator returns 0" do
@@ -33,7 +33,7 @@ module Spree
33
33
  context "when calculator returns a non-zero value" do
34
34
  before do
35
35
  promotion.promotion_actions = [action]
36
- allow(action).to receive_messages :compute_amount => 10
36
+ allow(action).to receive_messages compute_amount: 10
37
37
  end
38
38
 
39
39
  it "creates adjustment with item as adjustable" do
@@ -53,7 +53,7 @@ module Spree
53
53
  end
54
54
 
55
55
  context "with products rules" do
56
- let!(:second_line_item) { create(:line_item, :order => order) }
56
+ let!(:second_line_item) { create(:line_item, order: order) }
57
57
  let(:rule) { double Spree::Promotion::Rules::Product }
58
58
 
59
59
  before do
@@ -120,7 +120,7 @@ module Spree
120
120
  end
121
121
 
122
122
  it "nullifies adjustments for completed orders" do
123
- order = Order.create(completed_at: Time.now)
123
+ order = Order.create(completed_at: Time.current)
124
124
  adjustment = action.adjustments.create!(label: "Check",
125
125
  amount: 0,
126
126
  order: order,
@@ -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) { create(:promotion) }
6
6
  let(:action) { Spree::Promotion::Actions::FreeShipping.create }
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Promotion::Rules::Country, type: :model do
4
+ let(:rule) { Spree::Promotion::Rules::Country.new }
5
+ let(:order) { create(:order) }
6
+ let(:country) { create(:country) }
7
+ let(:other_country) { create(:country) }
8
+
9
+ before { allow(Spree::Country).to receive(:default) { other_country.id } }
10
+
11
+ context 'preferred country is set' do
12
+ before { rule.preferred_country_id = country.id }
13
+
14
+ it 'should be eligible for correct country' do
15
+ allow(order).to receive_message_chain(:ship_address, :country_id) { country.id }
16
+ expect(rule).to be_eligible(order)
17
+ end
18
+
19
+ it 'should not be eligible for incorrect country' do
20
+ allow(order).to receive_message_chain(:ship_address, :country_id) { other_country.id }
21
+ expect(rule).not_to be_eligible(order)
22
+ end
23
+ end
24
+
25
+ context 'preferred country is not set' do
26
+ it 'should be eligible for default country' do
27
+ allow(order).to receive_message_chain(:ship_address, :country_id) { other_country.id }
28
+ expect(rule).to be_eligible(order)
29
+ end
30
+
31
+ it 'should not be eligible for incorrect country' do
32
+ allow(order).to receive_message_chain(:ship_address, :country_id) { country.id }
33
+ expect(rule).not_to be_eligible(order)
34
+ end
35
+ end
36
+ end
@@ -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)
@@ -54,15 +54,15 @@ describe Spree::Promotion::Rules::FirstOrder, :type => :model do
54
54
  end
55
55
 
56
56
  context "for a guest user" do
57
- let(:email) { 'user@spreecommerce.com' }
58
- before { allow(order).to receive_messages :email => 'user@spreecommerce.com' }
57
+ let(:email) { 'user@spreecommerce.org' }
58
+ before { allow(order).to receive_messages email: 'user@spreecommerce.org' }
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,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::Promotion::Rules::ItemTotal, :type => :model do
3
+ describe Spree::Promotion::Rules::ItemTotal, type: :model do
4
4
  let(:rule) { Spree::Promotion::Rules::ItemTotal.new }
5
5
  let(:order) { double(:order) }
6
6
 
@@ -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