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
@@ -35,7 +35,7 @@ namespace :exchanges do
35
35
  variant_inventory_units.each { |i| i.update_attributes!(line_item_id: line_item.id, order_id: order.id) }
36
36
  end
37
37
 
38
- order.reload.update!
38
+ order.reload.update_with_updater!
39
39
  while order.state != order.checkout_steps[-2] && order.next; end
40
40
 
41
41
  unless order.payments.present?
@@ -54,7 +54,7 @@ namespace :exchanges do
54
54
  order.update_attributes!(state: "confirm")
55
55
 
56
56
  order.reload.next!
57
- order.update!
57
+ order.update_with_updater!
58
58
  order.finalize!
59
59
 
60
60
  failed_orders << order unless order.completed? && order.valid?
@@ -0,0 +1,22 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <!-- shameless -->
4
+ <head>
5
+ <title>Jason Ronallo</title>
6
+ </head>
7
+
8
+ <body>
9
+ <span itemscope itemtype="http://schema.org/Person"
10
+ itemid="http://ronallo.com#me">
11
+ <a itemprop="url" href="http://twitter.com/ronallo">
12
+ <span itemprop="name">Jason Ronallo</span>
13
+ </a> is the
14
+ <span itemprop="jobTitle">Associate Head of Digital Library Initiatives</span> at
15
+ <span itemprop="affiliation" itemscope itemtype="http://schema.org/Library" itemid="http://lib.ncsu.edu">
16
+ <span itemprop="name">
17
+ <a itemprop="url" href="http://www.lib.ncsu.edu">NCSU Libraries</a>
18
+ </span>
19
+ </span>
20
+ </span>
21
+ </body>
22
+ </html>
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>itemref example from Microdata spec</title>
5
+ </head>
6
+ <body>
7
+ <div itemscope id="amanda" itemref="a b"></div>
8
+ <p id="a">Name: <span itemprop="name">Amanda</span></p>
9
+ <div id="b" itemprop="band" itemscope itemref="c"></div>
10
+ <div id="c">
11
+ <p>Band: <span itemprop="name">Jazz Band</span></p>
12
+ <p>Size: <span itemprop="size">12</span> players</p>
13
+ </div>
14
+ </body>
15
+ </html>
@@ -0,0 +1,20 @@
1
+ <!doctype html>
2
+ <html>
3
+ <head>
4
+ <title>Jason Ronallo</title>
5
+ </head>
6
+ <body>
7
+ <span itemtype="http://schema.org/Person"
8
+ itemid="http://ronallo.com#me">
9
+ <a itemprop="url" href="http://twitter.com/ronallo">
10
+ <span itemprop="name">Jason Ronallo</span>
11
+ </a> is the
12
+ <span itemprop="jobTitle">Associate Head of Digital Library Initiatives</span> at
13
+ <span itemprop="affiliation" itemtype="http://schema.org/Library" itemid="http://lib.ncsu.edu">
14
+ <span itemprop="name">
15
+ <a itemprop="url" href="http://www.lib.ncsu.edu">NCSU Libraries</a>
16
+ </span>
17
+ </span>
18
+ </span>
19
+ </body>
20
+ </html>
@@ -25,8 +25,8 @@ describe Spree::BaseHelper, type: :helper do
25
25
  context "with a checkout zone defined" do
26
26
  context "checkout zone is of type country" do
27
27
  before do
28
- @country_zone = create(:zone, :name => "CountryZone")
29
- @country_zone.members.create(:zoneable => country)
28
+ @country_zone = create(:zone, name: "CountryZone")
29
+ @country_zone.members.create(zoneable: country)
30
30
  Spree::Config[:checkout_zone] = @country_zone.name
31
31
  end
32
32
 
@@ -37,9 +37,9 @@ describe Spree::BaseHelper, type: :helper do
37
37
 
38
38
  context "checkout zone is of type state" do
39
39
  before do
40
- state_zone = create(:zone, :name => "StateZone")
41
- state = create(:state, :country => country)
42
- state_zone.members.create(:zoneable => state)
40
+ state_zone = create(:zone, name: "StateZone")
41
+ state = create(:state, country: country)
42
+ state_zone.members.create(zoneable: state)
43
43
  Spree::Config[:checkout_zone] = state_zone.name
44
44
  end
45
45
 
@@ -52,10 +52,10 @@ describe Spree::BaseHelper, type: :helper do
52
52
 
53
53
  # Regression test for #1436
54
54
  context "defining custom image helpers" do
55
- let(:product) { mock_model(Spree::Product, :images => [], :variant_images => []) }
55
+ let(:product) { mock_model(Spree::Product, images: [], variant_images: []) }
56
56
  before do
57
57
  Spree::Image.class_eval do
58
- attachment_definitions[:attachment][:styles].merge!({:very_strange => '1x1'})
58
+ attachment_definitions[:attachment][:styles].merge!({very_strange: '1x1'})
59
59
  end
60
60
  end
61
61
 
@@ -103,8 +103,8 @@ describe Spree::BaseHelper, type: :helper do
103
103
  # Because the controller_name method returns "test"
104
104
  # controller_name is used by this method to infer what it is supposed
105
105
  # to be generating meta_data_tags for
106
- text = Faker::Lorem.paragraphs(2).join(" ")
107
- @test = Spree::Product.new(:description => text)
106
+ text = FFaker::Lorem.paragraphs(2).join(" ")
107
+ @test = Spree::Product.new(description: text)
108
108
  tags = Nokogiri::HTML.parse(meta_data_tags)
109
109
  content = tags.css("meta[name=description]").first["content"]
110
110
  assert content.length <= 160, "content length is not truncated to 160 characters"
@@ -113,10 +113,10 @@ describe Spree::BaseHelper, type: :helper do
113
113
 
114
114
  # Regression test for #5384
115
115
  context "custom image helpers conflict with inproper statements" do
116
- let(:product) { mock_model(Spree::Product, :images => [], :variant_images => []) }
116
+ let(:product) { mock_model(Spree::Product, images: [], variant_images: []) }
117
117
  before do
118
118
  Spree::Image.class_eval do
119
- attachment_definitions[:attachment][:styles].merge!({:foobar => '1x1'})
119
+ attachment_definitions[:attachment][:styles].merge!({foobar: '1x1'})
120
120
  end
121
121
  end
122
122
 
@@ -134,4 +134,67 @@ describe Spree::BaseHelper, type: :helper do
134
134
  expect(pretty_time(DateTime.new(2012, 5, 6, 13, 33))).to eq "May 06, 2012 1:33 PM"
135
135
  end
136
136
  end
137
+
138
+ describe "#display_price" do
139
+ let!(:product) { create(:product) }
140
+ let(:current_currency) { "USD" }
141
+ let(:current_price_options) { { tax_zone: current_tax_zone } }
142
+
143
+ context "when there is no current order" do
144
+ let (:current_tax_zone) { nil }
145
+
146
+ it "returns the price including default vat" do
147
+ expect(display_price(product)).to eq("$19.99")
148
+ end
149
+
150
+ context "with a default VAT" do
151
+ let(:current_tax_zone) { create(:zone_with_country, default_tax: true) }
152
+ let!(:tax_rate) do
153
+ create :tax_rate,
154
+ included_in_price: true,
155
+ zone: current_tax_zone,
156
+ tax_category: product.tax_category,
157
+ amount: 0.2
158
+ end
159
+
160
+ it "returns the price adding the VAT" do
161
+ expect(display_price(product)).to eq("$19.99")
162
+ end
163
+ end
164
+ end
165
+
166
+ context "with an order that has a tax zone" do
167
+ let(:current_tax_zone) { create(:zone_with_country) }
168
+ let(:current_order) { Spree::Order.new }
169
+ let(:default_zone) { create(:zone_with_country, default_tax: true) }
170
+
171
+ let!(:default_vat) do
172
+ create :tax_rate,
173
+ included_in_price: true,
174
+ zone: default_zone,
175
+ tax_category: product.tax_category,
176
+ amount: 0.2
177
+ end
178
+
179
+ context "that matches no VAT" do
180
+ it "returns the price excluding VAT" do
181
+ expect(display_price(product)).to eq("$16.66")
182
+ end
183
+ end
184
+
185
+ context "that matches a VAT" do
186
+ let!(:other_vat) do
187
+ create :tax_rate,
188
+ included_in_price: true,
189
+ zone: current_tax_zone,
190
+ tax_category: product.tax_category,
191
+ amount: 0.4
192
+ end
193
+
194
+ it "returns the price adding the VAT" do
195
+ expect(display_price(product)).to eq("$23.32")
196
+ end
197
+ end
198
+ end
199
+ end
137
200
  end
@@ -1,9 +1,9 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'spec_helper'
3
+ require "spec_helper"
4
4
 
5
5
  module Spree
6
- describe ProductsHelper, :type => :helper do
6
+ describe ProductsHelper, type: :helper do
7
7
  include ProductsHelper
8
8
 
9
9
  let(:product) { create(:product) }
@@ -18,7 +18,7 @@ module Spree
18
18
  let(:variant_price) { 10 }
19
19
 
20
20
  before do
21
- @variant = create(:variant, :product => product)
21
+ @variant = create(:variant, product: product)
22
22
  product.price = 15
23
23
  @variant.price = 10
24
24
  allow(product).to receive(:amount_in) { product_price }
@@ -75,8 +75,8 @@ module Spree
75
75
  context "#variant_price_full" do
76
76
  before do
77
77
  Spree::Config[:show_variant_full_price] = true
78
- @variant1 = create(:variant, :product => product)
79
- @variant2 = create(:variant, :product => product)
78
+ @variant1 = create(:variant, product: product)
79
+ @variant2 = create(:variant, product: product)
80
80
  end
81
81
 
82
82
  context "when currency is default" do
@@ -158,6 +158,10 @@ THIS IS THE BEST PRODUCT EVER!
158
158
  expect(description).to eq(initialDescription)
159
159
  end
160
160
 
161
+ context "renders a product description default description incase description is blank" do
162
+ before { product.description = '' }
163
+ it { expect(product_description(product)).to eq(Spree.t(:product_has_no_description)) }
164
+ end
161
165
  end
162
166
 
163
167
  shared_examples_for "line item descriptions" do
@@ -179,13 +183,6 @@ THIS IS THE BEST PRODUCT EVER!
179
183
  end
180
184
  end
181
185
 
182
- context "#line_item_description" do
183
- let(:variant) { create(:variant, :product => product, description: description) }
184
- subject { line_item_description_text(variant.product.description) }
185
-
186
- it_should_behave_like "line item descriptions"
187
- end
188
-
189
186
  context '#line_item_description_text' do
190
187
  subject { line_item_description_text description }
191
188
 
@@ -193,10 +190,14 @@ THIS IS THE BEST PRODUCT EVER!
193
190
  end
194
191
 
195
192
  context '#cache_key_for_products' do
193
+ let(:zone) { Spree::Zone.new }
194
+ let(:price_options) { { tax_zone: zone } }
195
+
196
196
  subject { helper.cache_key_for_products }
197
197
  before(:each) do
198
198
  @products = double('products collection')
199
- allow(helper).to receive(:params) { {:page => 10} }
199
+ allow(helper).to receive(:params) { {page: 10} }
200
+ allow(helper).to receive(:current_price_options) { price_options }
200
201
  end
201
202
 
202
203
  context 'when there is a maximum updated date' do
@@ -206,7 +207,7 @@ THIS IS THE BEST PRODUCT EVER!
206
207
  allow(@products).to receive(:maximum).with(:updated_at) { updated_at }
207
208
  end
208
209
 
209
- it { is_expected.to eq('en/USD/spree/products/all-10-20111213-5') }
210
+ it { is_expected.to eq("en/USD/spree/zones/new/spree/products/all-10-20111213-5") }
210
211
  end
211
212
 
212
213
  context 'when there is no considered maximum updated date' do
@@ -217,7 +218,71 @@ THIS IS THE BEST PRODUCT EVER!
217
218
  allow(Date).to receive(:today) { today }
218
219
  end
219
220
 
220
- it { is_expected.to eq('en/USD/spree/products/all-10-20131211-1234567') }
221
+ it { is_expected.to eq("en/USD/spree/zones/new/spree/products/all-10-20131211-1234567") }
222
+ end
223
+ end
224
+
225
+ context "#cache_key_for_product" do
226
+ let(:product) { Spree::Product.new }
227
+ let(:price_options) { { tax_zone: zone } }
228
+
229
+ subject(:cache_key) { helper.cache_key_for_product(product) }
230
+
231
+ before do
232
+ allow(helper).to receive(:current_price_options) { price_options }
233
+ end
234
+
235
+ context "when there is a current tax zone" do
236
+ let(:zone) { Spree::Zone.new }
237
+
238
+ it "includes the current_tax_zone" do
239
+ is_expected.to eq("en/USD/spree/zones/new/spree/products/new/")
240
+ end
241
+ end
242
+
243
+ context "when there is no current tax zone" do
244
+ let(:zone) { nil }
245
+
246
+ it { is_expected.to eq("en/USD/spree/products/new/") }
247
+ end
248
+
249
+ context "when current_price_options includes nil values" do
250
+ let(:price_options) do
251
+ {
252
+ a: nil,
253
+ b: Spree::Zone.new
254
+ }
255
+ end
256
+
257
+ it "does not include nil values" do
258
+ expect(cache_key).to eq("en/USD/spree/zones/new/spree/products/new/")
259
+ end
260
+ end
261
+
262
+ context "when current_price_options includes values that do not implement cache_key" do
263
+ let(:price_options) do
264
+ {
265
+ a: true,
266
+ b: Spree::Zone.new
267
+ }
268
+ end
269
+
270
+ it "includes string representations of these values" do
271
+ expect(cache_key).to eq("en/USD/true/spree/zones/new/spree/products/new/")
272
+ end
273
+ end
274
+
275
+ context "when keys in the options hash are inserted in non-alphabetical order" do
276
+ let(:price_options) do
277
+ {
278
+ b: Spree::Zone.new,
279
+ a: true
280
+ }
281
+ end
282
+
283
+ it "the values are nevertheless returned in alphabetical order of their keys" do
284
+ expect(cache_key).to eq("en/USD/true/spree/zones/new/spree/products/new/")
285
+ end
221
286
  end
222
287
  end
223
288
  end
@@ -6,15 +6,15 @@ describe "i18n" do
6
6
  before do
7
7
  I18n.backend.store_translations(:en,
8
8
  {
9
- :spree => {
10
- :foo => "bar",
11
- :bar => {
12
- :foo => "bar within bar scope",
13
- :invalid => nil,
14
- :legacy_translation => "back in the day..."
9
+ spree: {
10
+ foo: "bar",
11
+ bar: {
12
+ foo: "bar within bar scope",
13
+ invalid: nil,
14
+ legacy_translation: "back in the day..."
15
15
  },
16
- :invalid => nil,
17
- :legacy_translation => "back in the day..."
16
+ invalid: nil,
17
+ legacy_translation: "back in the day..."
18
18
  }
19
19
  })
20
20
  end
@@ -34,19 +34,19 @@ describe "i18n" do
34
34
  it "raise error without any context when using a path" do
35
35
  expect {
36
36
  Spree.normal_t('.legacy_translation')
37
- }.to raise_error
37
+ }.to raise_error(StandardError)
38
38
 
39
39
  expect {
40
40
  Spree.translate('.legacy_translation')
41
- }.to raise_error
41
+ }.to raise_error(StandardError)
42
42
  end
43
43
 
44
44
  it "prepends a string scope" do
45
- expect(Spree.normal_t(:foo, :scope => "bar")).to eql("bar within bar scope")
45
+ expect(Spree.normal_t(:foo, scope: "bar")).to eql("bar within bar scope")
46
46
  end
47
47
 
48
48
  it "prepends to an array scope" do
49
- expect(Spree.normal_t(:foo, :scope => ["bar"])).to eql("bar within bar scope")
49
+ expect(Spree.normal_t(:foo, scope: ["bar"])).to eql("bar within bar scope")
50
50
  end
51
51
 
52
52
  it "returns two translations" do
@@ -74,7 +74,7 @@ describe "i18n" do
74
74
  end
75
75
 
76
76
  it "logs missing translations" do
77
- Spree.t(:missing, :scope => [:else, :where])
77
+ Spree.t(:missing, scope: [:else, :where])
78
78
  Spree.check_missing_translations
79
79
  assert_missing_translation("else")
80
80
  assert_missing_translation("else.where")
@@ -12,7 +12,7 @@ describe Spree::Core::Search::Base do
12
12
  end
13
13
 
14
14
  it "returns all products by default" do
15
- params = { :per_page => "" }
15
+ params = { per_page: "" }
16
16
  searcher = Spree::Core::Search::Base.new(params)
17
17
  expect(searcher.retrieve_products.count).to eq(2)
18
18
  end
@@ -22,8 +22,8 @@ describe Spree::Core::Search::Base do
22
22
  subject { described_class.new(params).retrieve_products }
23
23
 
24
24
  before do
25
- @product1.master.images.create(attachment_file_name: "Test", position: 2)
26
- @product1.master.images.create(attachment_file_name: "Test1", position: 1)
25
+ @product1.master.images << create(:image, position: 2)
26
+ @product1.master.images << create(:image, position: 1)
27
27
  @product1.reload
28
28
  end
29
29
 
@@ -34,38 +34,38 @@ describe Spree::Core::Search::Base do
34
34
  end
35
35
 
36
36
  it "switches to next page according to the page parameter" do
37
- @product3 = create(:product, :name => "RoR Pants", :price => 14.00)
37
+ @product3 = create(:product, name: "RoR Pants", price: 14.00)
38
38
 
39
- params = { :per_page => "2" }
40
- searcher = Spree::Core::Search::Base.new(params)
39
+ params = { per_page: "2" }
40
+ searcher = Spree::Core::Search::Base.new(ActionController::Parameters.new(params))
41
41
  expect(searcher.retrieve_products.count).to eq(2)
42
42
 
43
- params.merge! :page => "2"
44
- searcher = Spree::Core::Search::Base.new(params)
43
+ params.merge! page: "2"
44
+ searcher = Spree::Core::Search::Base.new(ActionController::Parameters.new(params))
45
45
  expect(searcher.retrieve_products.count).to eq(1)
46
46
  end
47
47
 
48
48
  it "maps search params to named scopes" do
49
- params = { :per_page => "",
50
- :search => { "price_range_any" => ["Under $10.00"] }}
51
- searcher = Spree::Core::Search::Base.new(params)
49
+ params = { per_page: "",
50
+ search: { "price_range_any" => ["Under $10.00"] }}
51
+ searcher = Spree::Core::Search::Base.new(ActionController::Parameters.new(params))
52
52
  expect(searcher.send(:get_base_scope).to_sql).to match /<= 10/
53
53
  expect(searcher.retrieve_products.count).to eq(1)
54
54
  end
55
55
 
56
56
  it "maps multiple price_range_any filters" do
57
- params = { :per_page => "",
58
- :search => { "price_range_any" => ["Under $10.00", "$10.00 - $15.00"] }}
59
- searcher = Spree::Core::Search::Base.new(params)
57
+ params = { per_page: "",
58
+ search: { "price_range_any" => ["Under $10.00", "$10.00 - $15.00"] }}
59
+ searcher = Spree::Core::Search::Base.new(ActionController::Parameters.new(params))
60
60
  expect(searcher.send(:get_base_scope).to_sql).to match /<= 10/
61
61
  expect(searcher.send(:get_base_scope).to_sql).to match /between 10 and 15/i
62
62
  expect(searcher.retrieve_products.count).to eq(2)
63
63
  end
64
64
 
65
65
  it "uses ransack if scope not found" do
66
- params = { :per_page => "",
67
- :search => { "name_not_cont" => "Shirt" }}
68
- searcher = Spree::Core::Search::Base.new(params)
66
+ params = { per_page: "",
67
+ search: { "name_not_cont" => "Shirt" }}
68
+ searcher = Spree::Core::Search::Base.new(ActionController::Parameters.new(params))
69
69
  expect(searcher.retrieve_products.count).to eq(1)
70
70
  end
71
71
 
@@ -77,7 +77,7 @@ describe Spree::Core::Search::Base do
77
77
  end
78
78
 
79
79
  it "finds products in alternate currencies" do
80
- price = create(:price, :currency => 'EUR', :variant => @product1.master)
80
+ price = create(:price, currency: 'EUR', variant: @product1.master)
81
81
  searcher = Spree::Core::Search::Base.new({})
82
82
  searcher.current_currency = 'EUR'
83
83
  expect(searcher.retrieve_products).to eq([@product1])
@@ -1,12 +1,14 @@
1
1
  require 'spec_helper'
2
+ require 'spree/testing_support/url_helpers'
2
3
 
3
4
  class FakesController < ApplicationController
4
5
  include Spree::Core::ControllerHelpers::Auth
5
- def index; render text: 'index'; end
6
+ def index; render plain: 'index'; end
6
7
  end
7
8
 
8
9
  describe Spree::Core::ControllerHelpers::Auth, type: :controller do
9
10
  controller(FakesController) {}
11
+ include Spree::TestingSupport::UrlHelpers
10
12
 
11
13
  describe '#current_ability' do
12
14
  it 'returns Spree::Ability instance' do
@@ -38,7 +40,7 @@ describe Spree::Core::ControllerHelpers::Auth, type: :controller do
38
40
  controller(FakesController) do
39
41
  def index
40
42
  set_guest_token
41
- render text: 'index'
43
+ render plain: 'index'
42
44
  end
43
45
  end
44
46
  it 'sends cookie header' do
@@ -77,9 +79,9 @@ describe Spree::Core::ControllerHelpers::Auth, type: :controller do
77
79
  before do
78
80
  allow(controller).to receive_messages(try_spree_current_user: double('User', id: 1, last_incomplete_spree_order: nil))
79
81
  end
80
- it 'redirects unauthorized path' do
82
+ it 'redirects forbidden path' do
81
83
  get :index
82
- expect(response).to redirect_to('/unauthorized')
84
+ expect(response).to redirect_to(spree.forbidden_path)
83
85
  end
84
86
  end
85
87
  context 'when guest user' do
@@ -45,6 +45,21 @@ describe Spree::Core::ControllerHelpers::Order, type: :controller do
45
45
  expect(Spree::Order.last.store_id).to eq store.id
46
46
  end
47
47
  end
48
+
49
+ context 'gets using the guest_token' do
50
+ let!(:order) { create :order, user: user }
51
+ let!(:guest_order) { create :order, user: nil, email: nil, guest_token: 'token' }
52
+
53
+ before do
54
+ expect(controller).to receive(:current_order_params).and_return(
55
+ currency: Spree::Config[:currency], guest_token: 'token', store_id: guest_order.store_id, user_id: user.id,
56
+ )
57
+ end
58
+
59
+ specify 'without the guest token being bound to any user yet' do
60
+ expect(controller.current_order).to eq guest_order
61
+ end
62
+ end
48
63
  end
49
64
 
50
65
  describe '#associate_user' do
@@ -1,6 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  class FakesController < ApplicationController
4
+ include Spree::Core::ControllerHelpers::Auth
5
+ include Spree::Core::ControllerHelpers::Order
4
6
  include Spree::Core::ControllerHelpers::Store
5
7
  end
6
8
 
@@ -13,4 +15,58 @@ describe Spree::Core::ControllerHelpers::Store, type: :controller do
13
15
  expect(controller.current_store).to eq store
14
16
  end
15
17
  end
18
+
19
+ describe "#current_price_options" do
20
+ subject(:current_price_options) { controller.current_price_options }
21
+
22
+ context "when there is a default tax zone" do
23
+ let(:default_zone) { Spree::Zone.new }
24
+
25
+ before do
26
+ allow(Spree::Zone).to receive(:default_tax).and_return(default_zone)
27
+ end
28
+
29
+ context "when there is no current order" do
30
+ it "returns the default tax zone" do
31
+ is_expected.to include(tax_zone: default_zone)
32
+ end
33
+ end
34
+
35
+ context "when there is a current order" do
36
+ let(:other_zone) { Spree::Zone.new }
37
+ let(:current_order) { Spree::Order.new }
38
+
39
+ before do
40
+ allow(current_order).to receive(:tax_zone).and_return(other_zone)
41
+ allow(controller).to receive(:current_order).and_return(current_order)
42
+ end
43
+
44
+ it { is_expected.to include(tax_zone: other_zone) }
45
+ end
46
+ end
47
+
48
+ context "when there is no default tax zone" do
49
+ before do
50
+ allow(Spree::Zone).to receive(:default_tax).and_return(nil)
51
+ end
52
+
53
+ context "when there is no current order" do
54
+ it "return nil when asked for the current tax zone" do
55
+ expect(current_price_options[:tax_zone]).to be_nil
56
+ end
57
+ end
58
+
59
+ context "when there is a current order" do
60
+ let(:other_zone) { Spree::Zone.new }
61
+ let(:current_order) { Spree::Order.new }
62
+
63
+ before do
64
+ allow(current_order).to receive(:tax_zone).and_return(other_zone)
65
+ allow(controller).to receive(:current_order).and_return(current_order)
66
+ end
67
+
68
+ it { is_expected.to include(tax_zone: other_zone) }
69
+ end
70
+ end
71
+ end
16
72
  end