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,11 +1,11 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::Payment, :type => :model do
3
+ describe Spree::Payment, type: :model do
4
4
  let(:order) { Spree::Order.create }
5
5
  let(:refund_reason) { create(:refund_reason) }
6
6
 
7
7
  let(:gateway) do
8
- gateway = Spree::Gateway::Bogus.create(active: true, name: 'Bogus')
8
+ gateway = Spree::Gateway::Bogus.new(active: true)
9
9
  allow(gateway).to receive_messages source_required: true
10
10
  gateway
11
11
  end
@@ -43,6 +43,41 @@ describe Spree::Payment, :type => :model do
43
43
  allow(payment.log_entries).to receive(:create!)
44
44
  end
45
45
 
46
+ describe 'delegate' do
47
+ it { is_expected.to delegate_method(:currency).to(:order) }
48
+ end
49
+
50
+ describe 'Constants' do
51
+ it { expect(Spree::Payment::INVALID_STATES).to eq(%w(failed invalid)) }
52
+ end
53
+
54
+ describe 'scopes' do
55
+ describe '.valid' do
56
+ let!(:invalid_payment) do
57
+ create(:payment, avs_response: 'Y', cvv_response_code: 'M', cvv_response_message: '', state: 'invalid')
58
+ end
59
+
60
+ let!(:failed_payment) do
61
+ create(:payment, avs_response: 'Y', cvv_response_code: 'M', cvv_response_message: '', state: 'failed')
62
+ end
63
+
64
+ let!(:checkout_payment) do
65
+ create(:payment, avs_response: 'A', cvv_response_code: 'M', cvv_response_message: '', state: 'checkout')
66
+ end
67
+
68
+ let!(:completed_payment) do
69
+ create(:payment, avs_response: 'Y', cvv_response_code: 'N', cvv_response_message: '', state: 'completed')
70
+ end
71
+
72
+ subject { Spree::Payment.valid }
73
+
74
+ it { is_expected.to_not include(invalid_payment) }
75
+ it { is_expected.to_not include(failed_payment) }
76
+ it { is_expected.to include(checkout_payment) }
77
+ it { is_expected.to include(completed_payment) }
78
+ end
79
+ end
80
+
46
81
  context '.risky' do
47
82
 
48
83
  let!(:payment_1) { create(:payment, avs_response: 'Y', cvv_response_code: 'M', cvv_response_message: 'Match') }
@@ -147,7 +182,7 @@ describe Spree::Payment, :type => :model do
147
182
 
148
183
  # Regression test for #4598
149
184
  it "should allow payments with a gateway_customer_profile_id" do
150
- allow(payment.source).to receive_messages :gateway_customer_profile_id => "customer_1"
185
+ allow(payment.source).to receive_messages gateway_customer_profile_id: "customer_1"
151
186
  expect(payment.payment_method).to receive(:supports?).with(payment.source).and_return(false)
152
187
  expect(payment).to receive(:started_processing!)
153
188
  payment.process!
@@ -155,7 +190,7 @@ describe Spree::Payment, :type => :model do
155
190
 
156
191
  # Another regression test for #4598
157
192
  it "should allow payments with a gateway_payment_profile_id" do
158
- allow(payment.source).to receive_messages :gateway_payment_profile_id => "customer_1"
193
+ allow(payment.source).to receive_messages gateway_payment_profile_id: "customer_1"
159
194
  expect(payment.payment_method).to receive(:supports?).with(payment.source).and_return(false)
160
195
  expect(payment).to receive(:started_processing!)
161
196
  payment.process!
@@ -171,10 +206,10 @@ describe Spree::Payment, :type => :model do
171
206
  end
172
207
 
173
208
  it "should call authorize on the gateway with the currency code" do
174
- allow(payment).to receive_messages :currency => 'GBP'
209
+ allow(payment).to receive_messages currency: 'GBP'
175
210
  expect(payment.payment_method).to receive(:authorize).with(amount_in_cents,
176
211
  card,
177
- hash_including({:currency => "GBP"})).and_return(success_response)
212
+ hash_including({currency: "GBP"})).and_return(success_response)
178
213
  payment.authorize!
179
214
  end
180
215
 
@@ -334,7 +369,7 @@ describe Spree::Payment, :type => :model do
334
369
 
335
370
  context "if unsuccessful" do
336
371
  it "should not make payment complete" do
337
- allow(gateway).to receive_messages :capture => failed_response
372
+ allow(gateway).to receive_messages capture: failed_response
338
373
  expect(payment).to receive(:failure)
339
374
  expect(payment).not_to receive(:complete)
340
375
  expect { payment.capture! }.to raise_error(Spree::Core::GatewayError)
@@ -365,7 +400,7 @@ describe Spree::Payment, :type => :model do
365
400
 
366
401
  context "when profiles are supported" do
367
402
  it "should call payment_gateway.void with the payment's response_code" do
368
- allow(gateway).to receive_messages :payment_profiles_supported? => true
403
+ allow(gateway).to receive_messages payment_profiles_supported?: true
369
404
  expect(gateway).to receive(:void).with('123', card, anything).and_return(success_response)
370
405
  payment.void_transaction!
371
406
  end
@@ -373,14 +408,14 @@ describe Spree::Payment, :type => :model do
373
408
 
374
409
  context "when profiles are not supported" do
375
410
  it "should call payment_gateway.void with the payment's response_code" do
376
- allow(gateway).to receive_messages :payment_profiles_supported? => false
411
+ allow(gateway).to receive_messages payment_profiles_supported?: false
377
412
  expect(gateway).to receive(:void).with('123', anything).and_return(success_response)
378
413
  payment.void_transaction!
379
414
  end
380
415
  end
381
416
 
382
417
  it "should log the response" do
383
- expect(payment.log_entries).to receive(:create!).with(:details => anything)
418
+ expect(payment.log_entries).to receive(:create!).with(details: anything)
384
419
  payment.void_transaction!
385
420
  end
386
421
 
@@ -395,7 +430,7 @@ describe Spree::Payment, :type => :model do
395
430
 
396
431
  context "if unsuccessful" do
397
432
  it "should not void the payment" do
398
- allow(gateway).to receive_messages :void => failed_response
433
+ allow(gateway).to receive_messages void: failed_response
399
434
  expect(payment).not_to receive(:void)
400
435
  expect { payment.void_transaction! }.to raise_error(Spree::Core::GatewayError)
401
436
  end
@@ -440,7 +475,7 @@ describe Spree::Payment, :type => :model do
440
475
  context "raises no error if source is not specified" do
441
476
  before do
442
477
  payment.source = nil
443
- allow(payment.payment_method).to receive_messages(:source_required? => false)
478
+ allow(payment.payment_method).to receive_messages(source_required?: false)
444
479
  end
445
480
 
446
481
  specify do
@@ -483,7 +518,7 @@ describe Spree::Payment, :type => :model do
483
518
  context "not completed payments" do
484
519
  it "doesn't update order payment total" do
485
520
  expect {
486
- Spree::Payment.create(:amount => 100, :order => order)
521
+ Spree::Payment.create(amount: 100, order: order)
487
522
  }.not_to change { order.payment_total }
488
523
  end
489
524
 
@@ -519,8 +554,8 @@ describe Spree::Payment, :type => :model do
519
554
 
520
555
  context "when profiles are supported" do
521
556
  before do
522
- allow(gateway).to receive_messages :payment_profiles_supported? => true
523
- allow(payment.source).to receive_messages :has_payment_profile? => false
557
+ allow(gateway).to receive_messages payment_profiles_supported?: true
558
+ allow(payment.source).to receive_messages has_payment_profile?: false
524
559
  end
525
560
 
526
561
  context "when there is an error connecting to the gateway" do
@@ -530,10 +565,10 @@ describe Spree::Payment, :type => :model do
530
565
  expect(gateway).to receive(:create_profile).and_raise(connection_error)
531
566
  expect do
532
567
  Spree::Payment.create(
533
- :amount => 100,
534
- :order => order,
535
- :source => card,
536
- :payment_method => gateway
568
+ amount: 100,
569
+ order: order,
570
+ source: card,
571
+ payment_method: gateway
537
572
  )
538
573
  end.to raise_error(Spree::Core::GatewayError)
539
574
  end
@@ -564,25 +599,25 @@ describe Spree::Payment, :type => :model do
564
599
  it "should create a payment profile" do
565
600
  expect(payment.payment_method).to receive :create_profile
566
601
  payment = Spree::Payment.create(
567
- :amount => 100,
568
- :order => order,
569
- :source => card,
570
- :payment_method => gateway
602
+ amount: 100,
603
+ order: order,
604
+ source: card,
605
+ payment_method: gateway
571
606
  )
572
607
  end
573
608
  end
574
609
  end
575
610
 
576
611
  context "when profiles are not supported" do
577
- before { allow(gateway).to receive_messages :payment_profiles_supported? => false }
612
+ before { allow(gateway).to receive_messages payment_profiles_supported?: false }
578
613
 
579
614
  it "should not create a payment profile" do
580
615
  expect(gateway).not_to receive :create_profile
581
616
  payment = Spree::Payment.create(
582
- :amount => 100,
583
- :order => order,
584
- :source => card,
585
- :payment_method => gateway
617
+ amount: 100,
618
+ order: order,
619
+ source: card,
620
+ payment_method: gateway
586
621
  )
587
622
  end
588
623
  end
@@ -591,13 +626,13 @@ describe Spree::Payment, :type => :model do
591
626
  describe "#build_source" do
592
627
  let(:params) do
593
628
  {
594
- :amount => 100,
595
- :payment_method => gateway,
596
- :source_attributes => {
597
- :expiry =>"01 / 99",
598
- :number => '1234567890123',
599
- :verification_value => '123',
600
- :name => 'Spree Commerce'
629
+ amount: 100,
630
+ payment_method: gateway,
631
+ source_attributes: {
632
+ expiry:"01 / 99",
633
+ number: '1234567890123',
634
+ verification_value: '123',
635
+ name: 'Spree Commerce'
601
636
  }
602
637
  }
603
638
  end
@@ -617,8 +652,8 @@ describe Spree::Payment, :type => :model do
617
652
  end
618
653
 
619
654
  it "errors when payment source not valid" do
620
- params = { :amount => 100, :payment_method => gateway,
621
- :source_attributes => {:expiry => "1 / 12" }}
655
+ params = { amount: 100, payment_method: gateway,
656
+ source_attributes: {expiry: "1 / 12" }}
622
657
 
623
658
  payment = Spree::Payment.new(params)
624
659
  expect(payment).not_to be_valid
@@ -649,7 +684,7 @@ describe Spree::Payment, :type => :model do
649
684
 
650
685
  # Regression test for #2216
651
686
  describe "#gateway_options" do
652
- before { allow(order).to receive_messages(:last_ip_address => "192.168.1.1") }
687
+ before { allow(order).to receive_messages(last_ip_address: "192.168.1.1") }
653
688
 
654
689
  it "contains an IP" do
655
690
  expect(payment.gateway_options[:ip]).to eq(order.last_ip_address)
@@ -659,53 +694,11 @@ describe Spree::Payment, :type => :model do
659
694
  # Sets the payment's order to a different Ruby object entirely
660
695
  payment.order = Spree::Order.find(payment.order_id)
661
696
  email = 'foo@example.com'
662
- order.update_attributes(:email => email)
697
+ order.update_attributes(email: email)
663
698
  expect(payment.gateway_options[:email]).to eq(email)
664
699
  end
665
700
  end
666
701
 
667
- describe "#set_unique_number" do
668
- # Regression test for #1998
669
- it "sets a unique number on create" do
670
- payment.generate_number
671
- payment.save
672
-
673
- expect(payment.number).to_not be_blank
674
- expect(payment.number.length).to eq 8
675
- expect(payment.number).to be_a(String)
676
- end
677
-
678
- # Regression test for #3733
679
- it "does not regenerate the number on re-save" do
680
- payment.run_callbacks(:create)
681
- payment.save
682
- old_number = payment.number
683
- payment.save
684
- expect(payment.number).to eq old_number
685
- end
686
-
687
- context "other payment exists" do
688
- let(:other_payment) {
689
- payment = Spree::Payment.new
690
- payment.source = card
691
- payment.order = order
692
- payment.payment_method = gateway
693
- payment
694
- }
695
-
696
- it "doesn't set duplicate number" do
697
- other_payment.run_callbacks(:create)
698
- other_payment.save!
699
-
700
- payment.run_callbacks(:create)
701
- payment.save!
702
-
703
- expect(payment.number).to_not be_blank
704
- expect(payment.number).to_not eq other_payment.number
705
- end
706
- end
707
- end
708
-
709
702
  describe "#amount=" do
710
703
  before do
711
704
  subject.amount = amount
@@ -781,7 +774,7 @@ describe Spree::Payment, :type => :model do
781
774
 
782
775
  context "when the locale uses a coma as a decimal separator" do
783
776
  before(:each) do
784
- I18n.backend.store_translations(:fr, { :number => { :currency => { :format => { :delimiter => ' ', :separator => ',' } } } })
777
+ I18n.backend.store_translations(:fr, { number: { currency: { format: { delimiter: ' ', separator: ',' } } } })
785
778
  I18n.locale = :fr
786
779
  subject.amount = amount
787
780
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::Preference, :type => :model do
3
+ describe Spree::Preference, type: :model do
4
4
 
5
5
  it "should require a key" do
6
6
  @preference = Spree::Preference.new
@@ -1,10 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::Preferences::Configuration, :type => :model do
3
+ describe Spree::Preferences::Configuration, type: :model do
4
4
 
5
5
  before :all do
6
6
  class AppConfig < Spree::Preferences::Configuration
7
- preference :color, :string, :default => :blue
7
+ preference :color, :string, default: :blue
8
8
  end
9
9
  @config = AppConfig.new
10
10
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::Preferences::Preferable, :type => :model do
3
+ describe Spree::Preferences::Preferable, type: :model do
4
4
 
5
5
  before :all do
6
6
  class A
@@ -15,7 +15,7 @@ describe Spree::Preferences::Preferable, :type => :model do
15
15
  @preferences ||= default_preferences
16
16
  end
17
17
 
18
- preference :color, :string, :default => 'green'
18
+ preference :color, :string, default: 'green'
19
19
  end
20
20
 
21
21
  class B < A
@@ -25,9 +25,9 @@ describe Spree::Preferences::Preferable, :type => :model do
25
25
 
26
26
  before :each do
27
27
  @a = A.new
28
- allow(@a).to receive_messages(:persisted? => true)
28
+ allow(@a).to receive_messages(persisted?: true)
29
29
  @b = B.new
30
- allow(@b).to receive_messages(:persisted? => true)
30
+ allow(@b).to receive_messages(persisted?: true)
31
31
 
32
32
  # ensure we're persisting as that is the default
33
33
  #
@@ -150,7 +150,7 @@ describe Spree::Preferences::Preferable, :type => :model do
150
150
 
151
151
  context "converts boolean preferences to boolean values" do
152
152
  before do
153
- A.preference :is_boolean, :boolean, :default => true
153
+ A.preference :is_boolean, :boolean, default: true
154
154
  end
155
155
 
156
156
  it "with strings" do
@@ -216,12 +216,6 @@ describe Spree::Preferences::Preferable, :type => :model do
216
216
  expect(@a.preferences[:is_hash]).to eql({1 => 2, 3 => 4})
217
217
  end
218
218
 
219
- it "with ancestor of a hash" do
220
- ancestor_of_hash = ActionController::Parameters.new({ key: :value })
221
- @a.set_preference(:is_hash, ancestor_of_hash)
222
- expect(@a.preferences[:is_hash]).to eql({"key" => :value})
223
- end
224
-
225
219
  it "with string" do
226
220
  @a.set_preference(:is_hash, "{\"0\"=>{\"answer\"=>\"1\", \"value\"=>\"No\"}}")
227
221
  expect(@a.preferences[:is_hash]).to be_is_a(Hash)
@@ -255,8 +249,8 @@ describe Spree::Preferences::Preferable, :type => :model do
255
249
 
256
250
  context "converts any preferences to any values" do
257
251
  before do
258
- A.preference :product_ids, :any, :default => []
259
- A.preference :product_attributes, :any, :default => {}
252
+ A.preference :product_ids, :any, default: []
253
+ A.preference :product_attributes, :any, default: {}
260
254
  end
261
255
 
262
256
  it "with array" do
@@ -267,8 +261,8 @@ describe Spree::Preferences::Preferable, :type => :model do
267
261
 
268
262
  it "with hash" do
269
263
  expect(@a.preferences[:product_attributes]).to eq({})
270
- @a.set_preference(:product_attributes, {:id => 1, :name => 2})
271
- expect(@a.preferences[:product_attributes]).to eq({:id => 1, :name => 2})
264
+ @a.set_preference(:product_attributes, {id: 1, name: 2})
265
+ expect(@a.preferences[:product_attributes]).to eq({id: 1, name: 2})
272
266
  end
273
267
  end
274
268
 
@@ -276,7 +270,7 @@ describe Spree::Preferences::Preferable, :type => :model do
276
270
 
277
271
  describe "persisted preferables" do
278
272
  before(:all) do
279
- class CreatePrefTest < ActiveRecord::Migration
273
+ class CreatePrefTest < ActiveRecord::Migration[4.2]
280
274
  def self.up
281
275
  create_table :pref_tests do |t|
282
276
  t.string :col
@@ -294,8 +288,8 @@ describe Spree::Preferences::Preferable, :type => :model do
294
288
  CreatePrefTest.migrate(:up)
295
289
 
296
290
  class PrefTest < Spree::Base
297
- preference :pref_test_pref, :string, :default => 'abc'
298
- preference :pref_test_any, :any, :default => []
291
+ preference :pref_test_pref, :string, default: 'abc'
292
+ preference :pref_test_any, :any, default: []
299
293
  end
300
294
  end
301
295
 
@@ -305,6 +299,8 @@ describe Spree::Preferences::Preferable, :type => :model do
305
299
  end
306
300
 
307
301
  before(:each) do
302
+ # load PrefTest table
303
+ PrefTest.first
308
304
  @pt = PrefTest.create
309
305
  end
310
306
 
@@ -338,7 +334,7 @@ describe Spree::Preferences::Preferable, :type => :model do
338
334
  @pt.preferred_pref_test_pref = 'lmn'
339
335
  @pt.save!
340
336
  @pt.destroy
341
- @pt1 = PrefTest.new(:col => 'aaaa')
337
+ @pt1 = PrefTest.new(col: 'aaaa')
342
338
  @pt1.id = @pt.id
343
339
  @pt1.save!
344
340
  expect(@pt1.get_preference(:pref_test_pref)).to eq('abc')
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::Preferences::ScopedStore, :type => :model do
3
+ describe Spree::Preferences::ScopedStore, type: :model do
4
4
  let(:scoped_store){ described_class.new(prefix, suffix) }
5
5
  subject{ scoped_store }
6
6
  let(:prefix){ nil }
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::Preferences::Store, :type => :model do
3
+ describe Spree::Preferences::Store, type: :model do
4
4
  before :each do
5
5
  @store = Spree::Preferences::StoreInstance.new
6
6
  end
@@ -17,7 +17,7 @@ describe Spree::Preferences::Store, :type => :model do
17
17
  end
18
18
 
19
19
  it "will return db value when cache is emtpy and cache the db value" do
20
- preference = Spree::Preference.where(:key => 'test').first_or_initialize
20
+ preference = Spree::Preference.where(key: 'test').first_or_initialize
21
21
  preference.value = '123'
22
22
  preference.save
23
23
 
@@ -34,7 +34,7 @@ describe Spree::Preferences::Store, :type => :model do
34
34
 
35
35
  it "should return but not cache fallback value when persistence is disabled" do
36
36
  Rails.cache.clear
37
- allow(@store).to receive_messages(:should_persist? => false)
37
+ allow(@store).to receive_messages(should_persist?: false)
38
38
  expect(@store.get(:test){ true }).to be true
39
39
  expect(Rails.cache.exist?(:test)).to be false
40
40
  end
@@ -1,6 +1,34 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::Price, :type => :model do
3
+ describe Spree::Price, type: :model do
4
+ describe '#amount=' do
5
+ let(:price) { Spree::Price.new }
6
+ let(:amount) { '3,0A0' }
7
+
8
+ before do
9
+ price.amount = amount
10
+ end
11
+
12
+ it 'is expected to equal to localized number' do
13
+ expect(price.amount).to eq(Spree::LocalizedNumber.parse(amount))
14
+ end
15
+ end
16
+
17
+ describe '#price' do
18
+ let(:price) { Spree::Price.new }
19
+ let(:amount) { 3000.00 }
20
+
21
+ context 'when amount is changed' do
22
+ before do
23
+ price.amount = amount
24
+ end
25
+
26
+ it 'is expected to equal to price' do
27
+ expect(price.amount).to eq(price.price)
28
+ end
29
+ end
30
+ end
31
+
4
32
  describe 'validations' do
5
33
  let(:variant) { stub_model Spree::Variant }
6
34
  subject { Spree::Price.new variant: variant, amount: amount }
@@ -39,4 +67,62 @@ describe Spree::Price, :type => :model do
39
67
  it { is_expected.to be_valid }
40
68
  end
41
69
  end
70
+
71
+ describe '#price_including_vat_for(zone)' do
72
+ let(:variant) { stub_model Spree::Variant }
73
+ let(:default_zone) { Spree::Zone.new }
74
+ let(:zone) { Spree::Zone.new }
75
+ let(:amount) { 10 }
76
+ let(:tax_category) { Spree::TaxCategory.new }
77
+ let(:price) { Spree::Price.new variant: variant, amount: amount }
78
+ let(:price_options) { { tax_zone: zone } }
79
+
80
+ subject(:price_with_vat) { price.price_including_vat_for(price_options) }
81
+
82
+ context 'when called with a non-default zone' do
83
+ before do
84
+ allow(variant).to receive(:tax_category).and_return(tax_category)
85
+ expect(price).to receive(:default_zone).at_least(:once).and_return(default_zone)
86
+ allow(price).to receive(:apply_foreign_vat?).and_return(true)
87
+ allow(price).to receive(:included_tax_amount).with(tax_zone: default_zone, tax_category: tax_category) { 0.19 }
88
+ allow(price).to receive(:included_tax_amount).with(tax_zone: zone, tax_category: tax_category) { 0.25 }
89
+ end
90
+
91
+ it "returns the correct price including another VAT to two digits" do
92
+ expect(price_with_vat).to eq(10.50)
93
+ end
94
+ end
95
+
96
+ context 'when called from the default zone' do
97
+ before do
98
+ allow(variant).to receive(:tax_category).and_return(tax_category)
99
+ expect(price).to receive(:default_zone).at_least(:once).and_return(zone)
100
+ end
101
+
102
+ it "returns the correct price" do
103
+ expect(price).to receive(:price).and_call_original
104
+ expect(price_with_vat).to eq(10.00)
105
+ end
106
+ end
107
+
108
+ context 'when no default zone is set' do
109
+ before do
110
+ allow(variant).to receive(:tax_category).and_return(tax_category)
111
+ expect(price).to receive(:default_zone).at_least(:once).and_return(nil)
112
+ end
113
+
114
+ it "returns the correct price" do
115
+ expect(price).to receive(:price).and_call_original
116
+ expect(price.price_including_vat_for(tax_zone: zone)).to eq(10.00)
117
+ end
118
+ end
119
+ end
120
+
121
+ describe '#display_price_including_vat_for(zone)' do
122
+ subject { Spree::Price.new amount: 10 }
123
+ it 'calls #price_including_vat_for' do
124
+ expect(subject).to receive(:price_including_vat_for)
125
+ subject.display_price_including_vat_for(nil)
126
+ end
127
+ end
42
128
  end
@@ -1,15 +1,50 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "Product scopes", :type => :model do
3
+ describe "Product scopes", type: :model do
4
4
  let!(:product) { create(:product) }
5
5
 
6
+ describe '#available' do
7
+ context 'when discontinued' do
8
+ let!(:discontinued_product) { create(:product, discontinue_on: Time.current - 1.day) }
9
+
10
+ it { expect(Spree::Product.available).not_to include(discontinued_product) }
11
+ end
12
+
13
+ context 'when not discontinued' do
14
+ let!(:product_2) { create(:product, discontinue_on: Time.current + 1.day) }
15
+
16
+ it { expect(Spree::Product.available).to include(product_2) }
17
+ end
18
+
19
+ context 'when available' do
20
+ let!(:product_2) { create(:product, available_on: Time.current - 1.day) }
21
+
22
+ it { expect(Spree::Product.available).to include(product_2) }
23
+ end
24
+
25
+ context 'when not available' do
26
+ let!(:unavailable_product) { create(:product, available_on: Time.current + 1.day) }
27
+
28
+ it { expect(Spree::Product.available).not_to include(unavailable_product) }
29
+ end
30
+
31
+ context 'when multiple prices present' do
32
+ let!(:price_1) { create(:price, currency: 'EUR', variant: product.master) }
33
+ let!(:price_2) { create(:price, currency: 'EUR', variant: product.master) }
34
+
35
+ it 'should not duplicate product' do
36
+ expect(Spree::Product.available).to eq([product])
37
+ end
38
+ end
39
+ end
40
+
6
41
  context "A product assigned to parent and child taxons" do
7
42
  before do
8
43
  @taxonomy = create(:taxonomy)
9
44
  @root_taxon = @taxonomy.root
10
45
 
11
- @parent_taxon = create(:taxon, :name => 'Parent', :taxonomy_id => @taxonomy.id, :parent => @root_taxon)
12
- @child_taxon = create(:taxon, :name =>'Child 1', :taxonomy_id => @taxonomy.id, :parent => @parent_taxon)
46
+ @parent_taxon = create(:taxon, name: 'Parent', taxonomy_id: @taxonomy.id, parent: @root_taxon)
47
+ @child_taxon = create(:taxon, name:'Child 1', taxonomy_id: @taxonomy.id, parent: @parent_taxon)
13
48
  @parent_taxon.reload # Need to reload for descendents to show up
14
49
 
15
50
  product.taxons << @parent_taxon
@@ -38,7 +73,7 @@ describe "Product scopes", :type => :model do
38
73
 
39
74
  it 'after ordering changed' do
40
75
  [@child_taxon, other_taxon].each do |taxon|
41
- Spree::Classification.find_by(:taxon => taxon, :product => product).insert_at(2)
76
+ Spree::Classification.find_by(taxon: taxon, product: product).insert_at(2)
42
77
  expect(Spree::Product.in_taxon(taxon)).to eq([product_2, product])
43
78
  end
44
79
  end
@@ -2,13 +2,13 @@ require 'spec_helper'
2
2
 
3
3
  module Spree
4
4
 
5
- describe Spree::ProductDuplicator, :type => :model do
5
+ describe Spree::ProductDuplicator, type: :model do
6
6
 
7
7
  let(:product) { create(:product, properties: [create(:property, name: "MyProperty")])}
8
8
  let!(:duplicator) { Spree::ProductDuplicator.new(product)}
9
9
 
10
10
  let(:image) { File.open(File.expand_path('../../../fixtures/thinking-cat.jpg', __FILE__)) }
11
- let(:params) { {:viewable_id => product.master.id, :viewable_type => 'Spree::Variant', :attachment => image, :alt => "position 1", :position => 1} }
11
+ let(:params) { {viewable_id: product.master.id, viewable_type: 'Spree::Variant', attachment: image, alt: "position 1", position: 1} }
12
12
 
13
13
  before do
14
14
  Spree::Image.create(params)
@@ -1,12 +1,12 @@
1
1
  require 'spec_helper'
2
2
  require 'spree/core/product_filters'
3
3
 
4
- describe 'product filters', :type => :model do
4
+ describe 'product filters', type: :model do
5
5
  # Regression test for #1709
6
6
  context 'finds products filtered by brand' do
7
7
  let(:product) { create(:product) }
8
8
  before do
9
- property = Spree::Property.create!(:name => "brand", :presentation => "brand")
9
+ property = Spree::Property.create!(name: "brand", presentation: "brand")
10
10
  product.set_property("brand", "Nike")
11
11
  end
12
12