spree_core 3.0.9 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
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,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::Store, :type => :model do
3
+ describe Spree::Store, type: :model do
4
4
 
5
5
  describe ".by_url" do
6
6
  let!(:store) { create(:store, url: "website1.com\nwww.subdomain.com") }
@@ -30,20 +30,48 @@ describe Spree::Store, :type => :model do
30
30
  end
31
31
  end
32
32
 
33
- describe ".default" do
34
- let!(:store) { create(:store) }
35
- let!(:store_2) { create(:store, default: true) }
33
+ describe '.default' do
34
+ context 'when a default store is already present' do
35
+ let!(:store) { create(:store) }
36
+ let!(:store_2) { create(:store, default: true) }
36
37
 
37
- it "should ensure there is a default if one doesn't exist yet" do
38
- expect(store_2.default).to be true
39
- end
38
+ it 'should return the already existing default store' do
39
+ expect(Spree::Store.default).to eq(store_2)
40
+ end
41
+
42
+ it "should ensure there is a default if one doesn't exist yet" do
43
+ expect(store_2.default).to be true
44
+ end
45
+
46
+ it 'should ensure there is only one default' do
47
+ [store, store_2].each(&:reload)
40
48
 
41
- it "should ensure there is only one default" do
42
- [store, store_2].each(&:reload)
49
+ expect(Spree::Store.where(default: true).count).to eq(1)
50
+ expect(store_2.default).to be true
51
+ expect(store.default).not_to be true
52
+ end
53
+
54
+ context 'when store is not saved' do
55
+ before do
56
+ store.default = true
57
+ store.code = nil
58
+ store.save
59
+ end
60
+
61
+ it 'ensure old default location still default' do
62
+ [store, store_2].each(&:reload)
63
+ expect(store.default).to be false
64
+ expect(store_2.default).to be true
65
+ end
66
+ end
67
+ end
43
68
 
44
- expect(Spree::Store.where(default: true).count).to eq(1)
45
- expect(store_2.default).to be true
46
- expect(store.default).not_to be true
69
+ context 'when a default store is not present' do
70
+ it 'should build a new default store' do
71
+ expect(Spree::Store.default.class).to eq(Spree::Store)
72
+ expect(Spree::Store.default.persisted?).to eq(false)
73
+ expect(Spree::Store.default.default).to be(true)
74
+ end
47
75
  end
48
76
  end
49
77
 
@@ -1,6 +1,11 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::TaxCategory, :type => :model do
3
+ describe Spree::TaxCategory, type: :model do
4
+ describe 'Validations' do
5
+ it { is_expected.to validate_presence_of(:name) }
6
+ it { is_expected.to validate_uniqueness_of(:name).scoped_to(:deleted_at).case_insensitive.allow_blank }
7
+ end
8
+
4
9
  context 'default tax category' do
5
10
  let(:tax_category) { create(:tax_category) }
6
11
  let(:new_tax_category) { create(:tax_category) }
@@ -10,7 +15,7 @@ describe Spree::TaxCategory, :type => :model do
10
15
  end
11
16
 
12
17
  it "should undefault the previous default tax category" do
13
- new_tax_category.update_attributes({:is_default => true})
18
+ new_tax_category.update_attributes({is_default: true})
14
19
  expect(new_tax_category.is_default).to be true
15
20
 
16
21
  tax_category.reload
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Spree::TaxRate, :type => :model do
3
+ describe Spree::TaxRate, type: :model do
4
4
  context "match" do
5
5
  let(:order) { create(:order) }
6
6
  let(:country) { create(:country) }
@@ -8,67 +8,67 @@ describe Spree::TaxRate, :type => :model do
8
8
  let(:calculator) { Spree::Calculator::FlatRate.new }
9
9
 
10
10
  it "should return an empty array when tax_zone is nil" do
11
- allow(order).to receive_messages :tax_zone => nil
11
+ allow(order).to receive_messages tax_zone: nil
12
12
  expect(Spree::TaxRate.match(order.tax_zone)).to eq([])
13
13
  end
14
14
 
15
15
  context "when no rate zones match the tax zone" do
16
16
  before do
17
- Spree::TaxRate.create(:amount => 1, :zone => create(:zone))
17
+ Spree::TaxRate.create(amount: 1, zone: create(:zone))
18
18
  end
19
19
 
20
20
  context "when there is no default tax zone" do
21
21
  before do
22
- @zone = create(:zone, :name => "Country Zone", :default_tax => false, :zone_members => [])
23
- @zone.zone_members.create(:zoneable => country)
22
+ @zone = create(:zone, name: "Country Zone", default_tax: false, zone_members: [])
23
+ @zone.zone_members.create(zoneable: country)
24
24
  end
25
25
 
26
26
  it "should return an empty array" do
27
- allow(order).to receive_messages :tax_zone => @zone
27
+ allow(order).to receive_messages tax_zone: @zone
28
28
  expect(Spree::TaxRate.match(order.tax_zone)).to eq([])
29
29
  end
30
30
 
31
31
  it "should return the rate that matches the rate zone" do
32
32
  rate = Spree::TaxRate.create(
33
- :amount => 1,
34
- :zone => @zone,
35
- :tax_category => tax_category,
36
- :calculator => calculator
33
+ amount: 1,
34
+ zone: @zone,
35
+ tax_category: tax_category,
36
+ calculator: calculator
37
37
  )
38
38
 
39
- allow(order).to receive_messages :tax_zone => @zone
39
+ allow(order).to receive_messages tax_zone: @zone
40
40
  expect(Spree::TaxRate.match(order.tax_zone)).to eq([rate])
41
41
  end
42
42
 
43
43
  it "should return all rates that match the rate zone" do
44
44
  rate1 = Spree::TaxRate.create(
45
- :amount => 1,
46
- :zone => @zone,
47
- :tax_category => tax_category,
48
- :calculator => calculator
45
+ amount: 1,
46
+ zone: @zone,
47
+ tax_category: tax_category,
48
+ calculator: calculator
49
49
  )
50
50
 
51
51
  rate2 = Spree::TaxRate.create(
52
- :amount => 2,
53
- :zone => @zone,
54
- :tax_category => tax_category,
55
- :calculator => Spree::Calculator::FlatRate.new
52
+ amount: 2,
53
+ zone: @zone,
54
+ tax_category: tax_category,
55
+ calculator: Spree::Calculator::FlatRate.new
56
56
  )
57
57
 
58
- allow(order).to receive_messages :tax_zone => @zone
58
+ allow(order).to receive_messages tax_zone: @zone
59
59
  expect(Spree::TaxRate.match(order.tax_zone)).to match_array([rate1, rate2])
60
60
  end
61
61
 
62
62
  context "when the tax_zone is contained within a rate zone" do
63
63
  before do
64
- sub_zone = create(:zone, :name => "State Zone", :zone_members => [])
65
- sub_zone.zone_members.create(:zoneable => create(:state, :country => country))
66
- allow(order).to receive_messages :tax_zone => sub_zone
64
+ sub_zone = create(:zone, name: "State Zone", zone_members: [])
65
+ sub_zone.zone_members.create(zoneable: create(:state, country: country))
66
+ allow(order).to receive_messages tax_zone: sub_zone
67
67
  @rate = Spree::TaxRate.create(
68
- :amount => 1,
69
- :zone => @zone,
70
- :tax_category => tax_category,
71
- :calculator => calculator
68
+ amount: 1,
69
+ zone: @zone,
70
+ tax_category: tax_category,
71
+ calculator: calculator
72
72
  )
73
73
  end
74
74
 
@@ -80,29 +80,26 @@ describe Spree::TaxRate, :type => :model do
80
80
 
81
81
  context "when there is a default tax zone" do
82
82
  before do
83
- @zone = create(:zone, :name => "Country Zone", :default_tax => true, :zone_members => [])
84
- @zone.zone_members.create(:zoneable => country)
83
+ @zone = create(:zone, name: "Country Zone", default_tax: true, zone_members: [])
84
+ @zone.zone_members.create(zoneable: country)
85
85
  end
86
86
 
87
87
  let(:included_in_price) { false }
88
88
  let!(:rate) do
89
- Spree::TaxRate.create(:amount => 1,
90
- :zone => @zone,
91
- :tax_category => tax_category,
92
- :calculator => calculator,
93
- :included_in_price => included_in_price)
89
+ Spree::TaxRate.create(amount: 1,
90
+ zone: @zone,
91
+ tax_category: tax_category,
92
+ calculator: calculator,
93
+ included_in_price: included_in_price)
94
94
  end
95
95
 
96
96
  subject { Spree::TaxRate.match(order.tax_zone) }
97
97
 
98
98
  context "when the order has the same tax zone" do
99
99
  before do
100
- allow(order).to receive_messages :tax_zone => @zone
101
- allow(order).to receive_messages :tax_address => tax_address
100
+ allow(order).to receive_messages tax_zone: @zone
102
101
  end
103
102
 
104
- let(:tax_address) { stub_model(Spree::Address) }
105
-
106
103
  context "when the tax is not a VAT" do
107
104
  it { is_expected.to eq([rate]) }
108
105
  end
@@ -115,42 +112,22 @@ describe Spree::TaxRate, :type => :model do
115
112
 
116
113
  context "when the order has a different tax zone" do
117
114
  before do
118
- allow(order).to receive_messages :tax_zone => create(:zone, :name => "Other Zone")
119
- allow(order).to receive_messages :tax_address => tax_address
115
+ allow(order).to receive_messages tax_zone: create(:zone, name: "Other Zone")
120
116
  end
121
117
 
122
- context "when the order has a tax_address" do
123
- let(:tax_address) { stub_model(Spree::Address) }
124
-
125
- context "when the tax is a VAT" do
126
- let(:included_in_price) { true }
127
- # The rate should match in this instance because:
128
- # 1) It's the default rate (and as such, a negative adjustment should apply)
129
- it { is_expected.to eq([rate]) }
130
- end
131
-
132
- context "when the tax is not VAT" do
133
- it "returns no tax rate" do
134
- expect(subject).to be_empty
135
- end
118
+ context "when the tax is a VAT" do
119
+ let(:included_in_price) { true }
120
+ # The rate should NOT match in this instance because:
121
+ # The order has a different tax zone, and the price is
122
+ # henceforth a net price and will not change.
123
+ it 'return no tax rate' do
124
+ expect(subject).to be_empty
136
125
  end
137
126
  end
138
127
 
139
- context "when the order does not have a tax_address" do
140
- let(:tax_address) { nil}
141
-
142
- context "when the tax is a VAT" do
143
- let(:included_in_price) { true }
144
- # The rate should match in this instance because:
145
- # 1) The order has no tax address by this stage
146
- # 2) With no tax address, it has no tax zone
147
- # 3) Therefore, we assume the default tax zone
148
- # 4) This default zone has a default tax rate.
149
- it { is_expected.to eq([rate]) }
150
- end
151
-
152
- context "when the tax is not a VAT" do
153
- it { is_expected.to be_empty }
128
+ context "when the tax is not VAT" do
129
+ it "returns no tax rate" do
130
+ expect(subject).to be_empty
154
131
  end
155
132
  end
156
133
  end
@@ -158,27 +135,27 @@ describe Spree::TaxRate, :type => :model do
158
135
  end
159
136
  end
160
137
 
161
- context ".adjust" do
138
+ describe ".adjust" do
162
139
  let(:order) { stub_model(Spree::Order) }
163
140
  let(:tax_category_1) { stub_model(Spree::TaxCategory) }
164
141
  let(:tax_category_2) { stub_model(Spree::TaxCategory) }
165
- let(:rate_1) { stub_model(Spree::TaxRate, :tax_category => tax_category_1) }
166
- let(:rate_2) { stub_model(Spree::TaxRate, :tax_category => tax_category_2) }
142
+ let(:rate_1) { stub_model(Spree::TaxRate, tax_category: tax_category_1) }
143
+ let(:rate_2) { stub_model(Spree::TaxRate, tax_category: tax_category_2) }
167
144
 
168
145
  context "with line items" do
169
146
  let(:line_item) do
170
147
  stub_model(Spree::LineItem,
171
- :price => 10.0,
172
- :quantity => 1,
173
- :tax_category => tax_category_1,
174
- :variant => stub_model(Spree::Variant)
148
+ price: 10.0,
149
+ quantity: 1,
150
+ tax_category: tax_category_1,
151
+ variant: stub_model(Spree::Variant)
175
152
  )
176
153
  end
177
154
 
178
155
  let(:line_items) { [line_item] }
179
156
 
180
157
  before do
181
- allow(Spree::TaxRate).to receive_messages :match => [rate_1, rate_2]
158
+ allow(Spree::TaxRate).to receive_messages match: [rate_1, rate_2]
182
159
  end
183
160
 
184
161
  it "should apply adjustments for two tax rates to the order" do
@@ -188,11 +165,30 @@ describe Spree::TaxRate, :type => :model do
188
165
  end
189
166
  end
190
167
 
168
+ context "without tax rates" do
169
+ let(:line_item) do
170
+ stub_model(Spree::LineItem,
171
+ :price => 10.0,
172
+ :quantity => 2,
173
+ :tax_category => nil,
174
+ :variant => stub_model(Spree::Variant)
175
+ )
176
+ end
177
+
178
+ let(:line_items) { [line_item] }
179
+
180
+ it "should update pre_tax_total to match line item cost if no taxes" do
181
+ line_item.tax_category = nil
182
+ Spree::TaxRate.adjust(order, line_items)
183
+ expect(line_item.pre_tax_amount).to eq line_item.price * line_item.quantity
184
+ end
185
+ end
186
+
191
187
  context "with shipments" do
192
- let(:shipments) { [stub_model(Spree::Shipment, :cost => 10.0, :tax_category => tax_category_1)] }
188
+ let(:shipments) { [stub_model(Spree::Shipment, cost: 10.0, tax_category: tax_category_1)] }
193
189
 
194
190
  before do
195
- allow(Spree::TaxRate).to receive_messages :match => [rate_1, rate_2]
191
+ allow(Spree::TaxRate).to receive_messages match: [rate_1, rate_2]
196
192
  end
197
193
 
198
194
  it "should apply adjustments for two tax rates to the order" do
@@ -201,30 +197,208 @@ describe Spree::TaxRate, :type => :model do
201
197
  Spree::TaxRate.adjust(order, shipments)
202
198
  end
203
199
  end
200
+
201
+ context "for MOSS taxation in Europe" do
202
+ let(:germany) { create :country, name: "Germany" }
203
+ let(:india) { create :country, name: "India" }
204
+ let(:france) { create :country, name: "France" }
205
+ let(:france_zone) { create :zone_with_country, name: "France Zone" }
206
+ let(:germany_zone) { create :zone_with_country, name: "Germany Zone", default_tax: true }
207
+ let(:india_zone) { create :zone_with_country, name: "India" }
208
+ let(:moss_category) { Spree::TaxCategory.create(name: "Digital Goods") }
209
+ let(:normal_category) { Spree::TaxCategory.create(name: "Analogue Goods") }
210
+ let(:eu_zone) { create(:zone, name: "EU") }
211
+
212
+ let!(:german_vat) do
213
+ Spree::TaxRate.create(
214
+ name: "German VAT",
215
+ amount: 0.19,
216
+ calculator: Spree::Calculator::DefaultTax.create,
217
+ tax_category: moss_category,
218
+ zone: germany_zone,
219
+ included_in_price: true
220
+ )
221
+ end
222
+ let!(:french_vat) do
223
+ Spree::TaxRate.create(
224
+ name: "French VAT",
225
+ amount: 0.25,
226
+ calculator: Spree::Calculator::DefaultTax.create,
227
+ tax_category: moss_category,
228
+ zone: france_zone,
229
+ included_in_price: true
230
+ )
231
+ end
232
+ let!(:eu_vat) do
233
+ Spree::TaxRate.create(
234
+ name: "EU_VAT",
235
+ amount: 0.19,
236
+ calculator: Spree::Calculator::DefaultTax.create,
237
+ tax_category: normal_category,
238
+ zone: eu_zone,
239
+ included_in_price: true
240
+ )
241
+ end
242
+
243
+ let(:download) { create(:product, tax_category: moss_category, price: 100) }
244
+ let(:tshirt) { create(:product, tax_category: normal_category, price: 100) }
245
+ let(:order) { Spree::Order.create }
246
+
247
+ before do
248
+ germany_zone.zone_members.create(zoneable: germany)
249
+ france_zone.zone_members.create(zoneable: france)
250
+ india_zone.zone_members.create(zoneable: india)
251
+ eu_zone.zone_members.create(zoneable: germany)
252
+ eu_zone.zone_members.create(zoneable: france)
253
+ end
254
+
255
+ context "a download" do
256
+ before do
257
+ order.contents.add(download.master, 1)
258
+ end
259
+
260
+ it "without an adress costs 100 euros including tax" do
261
+ Spree::TaxRate.adjust(order, order.line_items)
262
+ order.update_with_updater!
263
+ expect(order.display_total).to eq(Spree::Money.new(100))
264
+ expect(order.included_tax_total).to eq(15.97)
265
+ end
266
+
267
+ it "to germany costs 100 euros including tax" do
268
+ allow(order).to receive(:tax_zone).and_return(germany_zone)
269
+ Spree::TaxRate.adjust(order, order.line_items)
270
+ order.update_with_updater!
271
+ expect(order.display_total).to eq(Spree::Money.new(100))
272
+ expect(order.included_tax_total).to eq(15.97)
273
+ end
274
+
275
+ it "to france costs more including tax" do
276
+ allow(order).to receive(:tax_zone).and_return(france_zone)
277
+ order.update_line_item_prices!
278
+ Spree::TaxRate.adjust(order, order.line_items)
279
+ order.update_with_updater!
280
+ expect(order.display_total).to eq(Spree::Money.new(105.04))
281
+ expect(order.included_tax_total).to eq(21.01)
282
+ expect(order.additional_tax_total).to eq(0)
283
+ end
284
+
285
+ it "to somewhere else costs the net amount" do
286
+ allow(order).to receive(:tax_zone).and_return(india_zone)
287
+ order.update_line_item_prices!
288
+ Spree::TaxRate.adjust(order, order.line_items)
289
+ order.update_with_updater!
290
+ expect(order.included_tax_total).to eq(0)
291
+ expect(order.included_tax_total).to eq(0)
292
+ expect(order.display_total).to eq(Spree::Money.new(84.03))
293
+ end
294
+ end
295
+
296
+ context "a t-shirt" do
297
+ before do
298
+ order.contents.add(tshirt.master, 1)
299
+ end
300
+
301
+ it "to germany costs 100 euros including tax" do
302
+ allow(order).to receive(:tax_zone).and_return(germany_zone)
303
+ Spree::TaxRate.adjust(order, order.line_items)
304
+ order.update_with_updater!
305
+ expect(order.display_total).to eq(Spree::Money.new(100))
306
+ expect(order.included_tax_total).to eq(15.97)
307
+ end
308
+
309
+ it "to france costs 100 euros including tax" do
310
+ allow(order).to receive(:tax_zone).and_return(france_zone)
311
+ order.update_line_item_prices!
312
+ Spree::TaxRate.adjust(order, order.line_items)
313
+ order.update_with_updater!
314
+ expect(order.display_total).to eq(Spree::Money.new(100.00))
315
+ expect(order.included_tax_total).to eq(15.97)
316
+ expect(order.additional_tax_total).to eq(0)
317
+ end
318
+
319
+ it "to somewhere else costs the net amount" do
320
+ allow(order).to receive(:tax_zone).and_return(india_zone)
321
+ order.update_line_item_prices!
322
+ Spree::TaxRate.adjust(order, order.line_items)
323
+ order.update_with_updater!
324
+ expect(order.included_tax_total).to eq(0)
325
+ expect(order.display_total).to eq(Spree::Money.new(84.03))
326
+ end
327
+ end
328
+ end
204
329
  end
205
330
 
206
- context "#adjust" do
331
+ describe ".included_tax_amount_for" do
332
+ let!(:order) { create :order_with_line_items }
333
+ let!(:included_tax_rate) do
334
+ create :tax_rate,
335
+ included_in_price: true,
336
+ tax_category: order.line_items.first.tax_category,
337
+ zone: order.tax_zone,
338
+ amount: 0.4
339
+ end
340
+
341
+ let!(:other_included_tax_rate) do
342
+ create :tax_rate,
343
+ included_in_price: true,
344
+ tax_category: order.line_items.first.tax_category,
345
+ zone: order.tax_zone,
346
+ amount: 0.05
347
+ end
348
+
349
+ let!(:additional_tax_rate) do
350
+ create :tax_rate,
351
+ included_in_price: false,
352
+ tax_category: order.line_items.first.tax_category,
353
+ zone: order.tax_zone,
354
+ amount: 0.2
355
+ end
356
+
357
+ let!(:included_tax_rate_from_somewhere_else) do
358
+ create :tax_rate,
359
+ included_in_price: true,
360
+ tax_category: order.line_items.first.tax_category,
361
+ zone: create(:zone_with_country),
362
+ amount: 0.1
363
+ end
364
+ let(:price_options) do
365
+ {
366
+ tax_zone: order.tax_zone,
367
+ tax_category: line_item.tax_category
368
+ }
369
+ end
370
+
371
+
372
+ let(:line_item) { order.line_items.first }
373
+ subject(:included_tax_amount) { Spree::TaxRate.included_tax_amount_for(price_options) }
374
+
375
+ it 'will only get me tax amounts from tax_rates that match' do
376
+ expect(subject).to eq(included_tax_rate.amount + other_included_tax_rate.amount)
377
+ end
378
+ end
379
+
380
+ describe "#adjust" do
207
381
  before do
208
382
  @country = create(:country)
209
- @zone = create(:zone, :name => "Country Zone", :default_tax => true, :zone_members => [])
210
- @zone.zone_members.create(:zoneable => @country)
211
- @category = Spree::TaxCategory.create :name => "Taxable Foo"
212
- @category2 = Spree::TaxCategory.create(:name => "Non Taxable")
383
+ @zone = create(:zone, name: "Country Zone", default_tax: true, zone_members: [])
384
+ @zone.zone_members.create(zoneable: @country)
385
+ @category = Spree::TaxCategory.create name: "Taxable Foo"
386
+ @category2 = Spree::TaxCategory.create(name: "Non Taxable")
213
387
  @rate1 = Spree::TaxRate.create(
214
- :amount => 0.10,
215
- :calculator => Spree::Calculator::DefaultTax.create,
216
- :tax_category => @category,
217
- :zone => @zone
388
+ amount: 0.10,
389
+ calculator: Spree::Calculator::DefaultTax.create,
390
+ tax_category: @category,
391
+ zone: @zone
218
392
  )
219
393
  @rate2 = Spree::TaxRate.create(
220
- :amount => 0.05,
221
- :calculator => Spree::Calculator::DefaultTax.create,
222
- :tax_category => @category,
223
- :zone => @zone
394
+ amount: 0.05,
395
+ calculator: Spree::Calculator::DefaultTax.create,
396
+ tax_category: @category,
397
+ zone: @zone
224
398
  )
225
399
  @order = Spree::Order.create!
226
- @taxable = create(:product, :tax_category => @category)
227
- @nontaxable = create(:product, :tax_category => @category2)
400
+ @taxable = create(:product, tax_category: @category)
401
+ @nontaxable = create(:product, tax_category: @category2)
228
402
  end
229
403
 
230
404
  context "not taxable line item " do
@@ -254,7 +428,7 @@ describe Spree::TaxRate, :type => :model do
254
428
  context "when zone is contained by default tax zone" do
255
429
  it "should create two adjustments, one for each tax rate" do
256
430
  Spree::TaxRate.adjust(@order, @order.line_items)
257
- expect(line_item.adjustments.count).to eq(1)
431
+ expect(line_item.adjustments.count).to eq(2)
258
432
  end
259
433
 
260
434
  it "should not create a tax refund" do
@@ -265,11 +439,16 @@ describe Spree::TaxRate, :type => :model do
265
439
 
266
440
  context "when order's zone is neither the default zone, or included in the default zone, but matches the rate's zone" do
267
441
  before do
268
- # With no zone members, this zone will not contain anything
269
- # Previously:
270
- # Zone.stub_chain :default_tax, :contains? => false
271
- @zone.zone_members.delete_all
442
+ new_rate = Spree::TaxRate.create(
443
+ amount: 0.2,
444
+ included_in_price: true,
445
+ calculator: Spree::Calculator::DefaultTax.create,
446
+ tax_category: @category,
447
+ zone: create(:zone_with_country)
448
+ )
449
+ allow(@order).to receive(:tax_zone).and_return(new_rate.zone)
272
450
  end
451
+
273
452
  it "should create an adjustment" do
274
453
  Spree::TaxRate.adjust(@order, @order.line_items)
275
454
  expect(line_item.adjustments.charge.count).to eq(1)
@@ -283,10 +462,10 @@ describe Spree::TaxRate, :type => :model do
283
462
 
284
463
  context "when order's zone does not match default zone, is not included in the default zone, AND does not match the rate's zone" do
285
464
  before do
286
- @new_zone = create(:zone, :name => "New Zone", :default_tax => false)
287
- @new_country = create(:country, :name => "New Country")
288
- @new_zone.zone_members.create(:zoneable => @new_country)
289
- @order.ship_address = create(:address, :country => @new_country)
465
+ @new_zone = create(:zone, name: "New Zone", default_tax: false)
466
+ @new_country = create(:country, name: "New Country")
467
+ @new_zone.zone_members.create(zoneable: @new_country)
468
+ @order.ship_address = create(:address, country: @new_country)
290
469
  @order.save
291
470
  @order.reload
292
471
  end
@@ -296,15 +475,15 @@ describe Spree::TaxRate, :type => :model do
296
475
  expect(line_item.adjustments.charge.count).to eq(0)
297
476
  end
298
477
 
299
- it "should create a tax refund for each tax rate" do
478
+ it "should not create a tax refund for each tax rate" do
300
479
  Spree::TaxRate.adjust(@order, @order.line_items)
301
- expect(line_item.adjustments.credit.count).to eq(1)
480
+ expect(line_item.adjustments.credit.count).to eq(0)
302
481
  end
303
482
  end
304
483
 
305
484
  context "when price does not include tax" do
306
485
  before do
307
- allow(@order).to receive_messages :tax_zone => @zone
486
+ allow(@order).to receive_messages tax_zone: @zone
308
487
  [@rate1, @rate2].each do |rate|
309
488
  rate.included_in_price = false
310
489
  rate.zone = @zone
@@ -320,7 +499,7 @@ describe Spree::TaxRate, :type => :model do
320
499
  end
321
500
 
322
501
  it "should not delete adjustments for complete order when taxrate is deleted" do
323
- @order.update_column :completed_at, Time.now
502
+ @order.update_column :completed_at, Time.current
324
503
  @rate1.destroy!
325
504
  @rate2.destroy!
326
505
  expect(line_item.adjustments.count).to eq(2)
@@ -345,7 +524,7 @@ describe Spree::TaxRate, :type => :model do
345
524
  end
346
525
 
347
526
  describe 'when the tax zone is removed' do
348
- before { allow(@order).to receive_messages :tax_zone => nil }
527
+ before { allow(@order).to receive_messages tax_zone: nil }
349
528
 
350
529
  it 'does not apply any adjustments' do
351
530
  Spree::TaxRate.adjust(@order, @order.line_items)
@@ -373,7 +552,7 @@ describe Spree::TaxRate, :type => :model do
373
552
 
374
553
  it "price adjustments should be accurate" do
375
554
  included_tax = @order.line_item_adjustments.sum(:amount)
376
- expect(@price_before_taxes + included_tax).to eq(line_item.price)
555
+ expect(@price_before_taxes + included_tax).to eq(line_item.total)
377
556
  end
378
557
  end
379
558
  end