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
@@ -6,13 +6,44 @@ class FakeCalculator < Spree::Calculator
6
6
  end
7
7
  end
8
8
 
9
- describe Spree::Order, :type => :model do
10
- let(:user) { stub_model(Spree::LegacyUser, :email => "spree@example.com") }
11
- let(:order) { stub_model(Spree::Order, :user => user) }
9
+ describe Spree::Order, type: :model do
10
+ let(:user) { stub_model(Spree::LegacyUser, email: "spree@example.com") }
11
+ let(:order) { stub_model(Spree::Order, user: user) }
12
12
 
13
13
  before do
14
14
  create(:store)
15
- allow(Spree::LegacyUser).to receive_messages(:current => mock_model(Spree::LegacyUser, :id => 123))
15
+ allow(Spree::LegacyUser).to receive_messages(current: mock_model(Spree::LegacyUser, id: 123))
16
+ end
17
+
18
+ describe '.scopes' do
19
+ let!(:user) { FactoryGirl.create(:user) }
20
+ let!(:completed_order) { FactoryGirl.create(:order, user: user, completed_at: Time.current) }
21
+ let!(:incompleted_order) { FactoryGirl.create(:order, user: user, completed_at: nil) }
22
+
23
+ describe '.complete' do
24
+ it { expect(Spree::Order.complete).to include completed_order }
25
+ it { expect(Spree::Order.complete).not_to include incompleted_order }
26
+ end
27
+
28
+ describe '.incomplete' do
29
+ it { expect(Spree::Order.incomplete).to include incompleted_order }
30
+ it { expect(Spree::Order.incomplete).not_to include completed_order }
31
+ end
32
+ end
33
+
34
+ describe '#update_with_updater!' do
35
+ let(:updater) { Spree::OrderUpdater.new(order) }
36
+
37
+ before do
38
+ allow(order).to receive(:updater).and_return(updater)
39
+ allow(updater).to receive(:update).and_return(true)
40
+ end
41
+
42
+ after { order.update_with_updater! }
43
+
44
+ it 'expects to update order with order updater' do
45
+ expect(updater).to receive(:update).and_return(true)
46
+ end
16
47
  end
17
48
 
18
49
  context "#cancel" do
@@ -151,15 +182,12 @@ describe Spree::Order, :type => :model do
151
182
  end
152
183
 
153
184
  it "should not send duplicate confirmation emails" do
154
- allow(order).to receive_messages(:confirmation_delivered? => true)
185
+ allow(order).to receive_messages(confirmation_delivered?: true)
155
186
  expect(Spree::OrderMailer).not_to receive(:confirm_email)
156
187
  order.finalize!
157
188
  end
158
189
 
159
190
  it "should freeze all adjustments" do
160
- # Stub this method as it's called due to a callback
161
- # and it's irrelevant to this test
162
- allow(order).to receive :has_available_shipment
163
191
  allow(Spree::OrderMailer).to receive_message_chain :confirm_email, :deliver_later
164
192
  adjustments = [double]
165
193
  expect(order).to receive(:all_adjustments).and_return(adjustments)
@@ -171,7 +199,7 @@ describe Spree::Order, :type => :model do
171
199
 
172
200
  context "order is considered risky" do
173
201
  before do
174
- allow(order).to receive_messages :is_risky? => true
202
+ allow(order).to receive_messages is_risky?: true
175
203
  end
176
204
 
177
205
  it "should change state to risky" do
@@ -181,7 +209,7 @@ describe Spree::Order, :type => :model do
181
209
 
182
210
  context "and order is approved" do
183
211
  before do
184
- allow(order).to receive_messages :approved? => true
212
+ allow(order).to receive_messages approved?: true
185
213
  end
186
214
 
187
215
  it "should leave order in complete state" do
@@ -193,9 +221,9 @@ describe Spree::Order, :type => :model do
193
221
  end
194
222
 
195
223
  context "insufficient_stock_lines" do
196
- let(:line_item) { mock_model Spree::LineItem, :insufficient_stock? => true }
224
+ let(:line_item) { mock_model Spree::LineItem, insufficient_stock?: true }
197
225
 
198
- before { allow(order).to receive_messages(:line_items => [line_item]) }
226
+ before { allow(order).to receive_messages(line_items: [line_item]) }
199
227
 
200
228
  it "should return line_item that has insufficient stock on hand" do
201
229
  expect(order.insufficient_stock_lines.size).to eq(1)
@@ -203,15 +231,14 @@ describe Spree::Order, :type => :model do
203
231
  end
204
232
  end
205
233
 
206
- describe '#ensure_line_item_variants_are_not_deleted' do
207
- subject { order.ensure_line_item_variants_are_not_deleted }
234
+ describe "#ensure_line_item_variants_are_not_discontinued" do
235
+ subject { order.ensure_line_item_variants_are_not_discontinued }
208
236
 
209
237
  let(:order) { create :order_with_line_items }
210
238
 
211
239
  context 'when variant is destroyed' do
212
240
  before do
213
- allow(order).to receive(:restart_checkout_flow)
214
- order.line_items.first.variant.destroy
241
+ order.line_items.first.variant.discontinue!
215
242
  end
216
243
 
217
244
  it 'should restart checkout flow' do
@@ -221,7 +248,7 @@ describe Spree::Order, :type => :model do
221
248
 
222
249
  it 'should have error message' do
223
250
  subject
224
- expect(order.errors[:base]).to include(Spree.t(:deleted_variants_present))
251
+ expect(order.errors[:base]).to include(Spree.t(:discontinued_variants_present))
225
252
  end
226
253
 
227
254
  it 'should be false' do
@@ -244,14 +271,14 @@ describe Spree::Order, :type => :model do
244
271
  describe '#ensure_line_items_are_in_stock' do
245
272
  subject { order.ensure_line_items_are_in_stock }
246
273
 
247
- let(:line_item) { mock_model Spree::LineItem, :insufficient_stock? => true }
274
+ let(:line_item) { create(:line_item, order: order) }
248
275
 
249
276
  before do
250
- allow(order).to receive(:restart_checkout_flow)
251
- allow(order).to receive_messages(:line_items => [line_item])
277
+ allow(order).to receive(:insufficient_stock_lines).and_return([true])
252
278
  end
253
279
 
254
280
  it 'should restart checkout flow' do
281
+ allow(order).to receive(:restart_checkout_flow)
255
282
  expect(order).to receive(:restart_checkout_flow).once
256
283
  subject
257
284
  end
@@ -262,28 +289,43 @@ describe Spree::Order, :type => :model do
262
289
  end
263
290
 
264
291
  it 'should be false' do
292
+ allow(order).to receive(:restart_checkout_flow)
265
293
  expect(subject).to be_falsey
266
294
  end
267
295
  end
268
296
 
269
297
  context "empty!" do
270
- let(:order) { stub_model(Spree::Order, item_count: 2) }
298
+ let(:order) { Spree::Order.create(email: 'test@example.com') }
299
+ let(:promotion) { create :promotion, code: '10off' }
271
300
 
272
301
  before do
273
- allow(order).to receive_messages(line_items: [1, 2])
274
- allow(order).to receive_messages(adjustments: [])
275
- allow(order).to receive_message_chain(:line_items, sum: 0)
302
+ promotion.orders << order
276
303
  end
277
304
 
278
- it "clears out line items, adjustments and update totals" do
279
- expect(order.line_items).to receive(:destroy_all)
280
- expect(order.adjustments).to receive(:destroy_all)
281
- expect(order.shipments).to receive(:destroy_all)
282
- expect(order.updater).to receive(:update_totals)
283
- expect(order.updater).to receive(:persist_totals)
305
+ context 'completed order' do
306
+ before do
307
+ order.update_columns(state: 'complete', completed_at: Time.current)
308
+ end
309
+
310
+ it "raises an exception" do
311
+ expect { order.empty! }.to raise_error(RuntimeError, Spree.t(:cannot_empty_completed_order))
312
+ end
313
+ end
314
+
315
+ context 'incomplete order' do
316
+ before do
317
+ order.empty!
318
+ end
284
319
 
285
- order.empty!
286
- expect(order.item_total).to eq 0
320
+ it "clears out line items, adjustments and update totals" do
321
+ expect(order.line_items.count).to be_zero
322
+ expect(order.adjustments.count).to be_zero
323
+ expect(order.shipments.count).to be_zero
324
+ expect(order.order_promotions.count).to be_zero
325
+ expect(order.promo_total).to be_zero
326
+ expect(order.item_total).to be_zero
327
+ expect(order.empty!).to eq(order)
328
+ end
287
329
  end
288
330
  end
289
331
 
@@ -392,7 +434,7 @@ describe Spree::Order, :type => :model do
392
434
  it "calls hook during update" do
393
435
  order = create(:order)
394
436
  expect(order).to receive(:add_awesome_sauce)
395
- order.update!
437
+ order.update_with_updater!
396
438
  end
397
439
 
398
440
  it "calls hook during finalize" do
@@ -447,7 +489,7 @@ describe Spree::Order, :type => :model do
447
489
  order.payment_state = 'paid'
448
490
  expect(order.state_changes).to be_empty
449
491
  order.state_changed('payment')
450
- state_change = order.state_changes.find_by(:name => 'payment')
492
+ state_change = order.state_changes.find_by(name: 'payment')
451
493
  expect(state_change.previous_state).to eq('balance_due')
452
494
  expect(state_change.next_state).to eq('paid')
453
495
  end
@@ -464,37 +506,46 @@ describe Spree::Order, :type => :model do
464
506
  context "#available_payment_methods" do
465
507
  it "includes frontend payment methods" do
466
508
  payment_method = Spree::PaymentMethod.create!({
467
- :name => "Fake",
468
- :active => true,
469
- :display_on => "front_end",
509
+ name: "Fake",
510
+ active: true,
511
+ display_on: "front_end",
470
512
  })
471
513
  expect(order.available_payment_methods).to include(payment_method)
472
514
  end
473
515
 
474
516
  it "includes 'both' payment methods" do
475
517
  payment_method = Spree::PaymentMethod.create!({
476
- :name => "Fake",
477
- :active => true,
478
- :display_on => "both",
518
+ name: "Fake",
519
+ active: true,
520
+ display_on: "both",
479
521
  })
480
522
  expect(order.available_payment_methods).to include(payment_method)
481
523
  end
482
524
 
483
525
  it "does not include a payment method twice if display_on is blank" do
484
526
  payment_method = Spree::PaymentMethod.create!({
485
- :name => "Fake",
486
- :active => true,
487
- :display_on => "both",
527
+ name: "Fake",
528
+ active: true,
529
+ display_on: "both",
488
530
  })
489
531
  expect(order.available_payment_methods.count).to eq(1)
490
532
  expect(order.available_payment_methods).to include(payment_method)
491
533
  end
534
+
535
+ let(:ok_method) { double :payment_method, available_for_order?: true }
536
+ let(:no_method) { double :payment_method, available_for_order?: false }
537
+ let(:methods) { [ok_method, no_method] }
538
+
539
+ it "does not include a payment method that is not suitable for this order" do
540
+ allow(Spree::PaymentMethod).to receive(:available_on_front_end).and_return(methods)
541
+ expect(order.available_payment_methods).to match_array [ok_method]
542
+ end
492
543
  end
493
544
 
494
545
  context "#apply_free_shipping_promotions" do
495
546
  it "calls out to the FreeShipping promotion handler" do
496
547
  shipment = double('Shipment')
497
- allow(order).to receive_messages :shipments => [shipment]
548
+ allow(order).to receive_messages shipments: [shipment]
498
549
  expect(Spree::PromotionHandler::FreeShipping).to receive(:new).and_return(handler = double)
499
550
  expect(handler).to receive(:activate)
500
551
 
@@ -509,17 +560,17 @@ describe Spree::Order, :type => :model do
509
560
 
510
561
  context "#products" do
511
562
  before :each do
512
- @variant1 = mock_model(Spree::Variant, :product => "product1")
513
- @variant2 = mock_model(Spree::Variant, :product => "product2")
514
- @line_items = [mock_model(Spree::LineItem, :product => "product1", :variant => @variant1, :variant_id => @variant1.id, :quantity => 1),
515
- mock_model(Spree::LineItem, :product => "product2", :variant => @variant2, :variant_id => @variant2.id, :quantity => 2)]
516
- allow(order).to receive_messages(:line_items => @line_items)
563
+ @variant1 = mock_model(Spree::Variant, product: "product1")
564
+ @variant2 = mock_model(Spree::Variant, product: "product2")
565
+ @line_items = [mock_model(Spree::LineItem, product: "product1", variant: @variant1, variant_id: @variant1.id, quantity: 1),
566
+ mock_model(Spree::LineItem, product: "product2", variant: @variant2, variant_id: @variant2.id, quantity: 2)]
567
+ allow(order).to receive_messages(line_items: @line_items)
517
568
  end
518
569
 
519
570
  it "gets the quantity of a given variant" do
520
571
  expect(order.quantity_of(@variant1)).to eq(1)
521
572
 
522
- @variant3 = mock_model(Spree::Variant, :product => "product3")
573
+ @variant3 = mock_model(Spree::Variant, product: "product3")
523
574
  expect(order.quantity_of(@variant3)).to eq(0)
524
575
  end
525
576
 
@@ -550,35 +601,6 @@ describe Spree::Order, :type => :model do
550
601
  end
551
602
  end
552
603
 
553
- context "#generate_order_number" do
554
- context "when no configure" do
555
- let(:default_length) { 9 + 'R'.length }
556
- subject(:order_number) { order.generate_number }
557
- its(:class) { should eq String }
558
- its(:length) { should eq default_length }
559
- it { should match /^R/ }
560
- end
561
-
562
- context "when length option is 5" do
563
- let(:option_length) { 5 + 'R'.length }
564
- it "should be option length for order number" do
565
- expect(order.generate_number(length: 5).length).to eq option_length
566
- end
567
- end
568
-
569
- context "when letters option is true" do
570
- it "generates order number include letter" do
571
- expect(order.generate_number(length: 100, letters: true)).to match /[A-Z]/
572
- end
573
- end
574
-
575
- context "when prefix option is 'P'" do
576
- it "generates order number and it prefix is 'P'" do
577
- expect(order.generate_number(prefix: 'P')).to match /^P/
578
- end
579
- end
580
- end
581
-
582
604
  describe "#associate_user!" do
583
605
  let(:user) { FactoryGirl.create(:user_with_addreses) }
584
606
  let(:email) { user.email }
@@ -716,27 +738,27 @@ describe Spree::Order, :type => :model do
716
738
  let(:order) { Spree::Order.create }
717
739
 
718
740
  it "should be true for order in the 'complete' state" do
719
- allow(order).to receive_messages(:complete? => true)
741
+ allow(order).to receive_messages(complete?: true)
720
742
  expect(order.can_ship?).to be true
721
743
  end
722
744
 
723
745
  it "should be true for order in the 'resumed' state" do
724
- allow(order).to receive_messages(:resumed? => true)
746
+ allow(order).to receive_messages(resumed?: true)
725
747
  expect(order.can_ship?).to be true
726
748
  end
727
749
 
728
750
  it "should be true for an order in the 'awaiting return' state" do
729
- allow(order).to receive_messages(:awaiting_return? => true)
751
+ allow(order).to receive_messages(awaiting_return?: true)
730
752
  expect(order.can_ship?).to be true
731
753
  end
732
754
 
733
755
  it "should be true for an order in the 'returned' state" do
734
- allow(order).to receive_messages(:returned? => true)
756
+ allow(order).to receive_messages(returned?: true)
735
757
  expect(order.can_ship?).to be true
736
758
  end
737
759
 
738
760
  it "should be false if the order is neither in the 'complete' nor 'resumed' state" do
739
- allow(order).to receive_messages(:resumed? => false, :complete? => false)
761
+ allow(order).to receive_messages(resumed?: false, complete?: false)
740
762
  expect(order.can_ship?).to be false
741
763
  end
742
764
  end
@@ -746,27 +768,27 @@ describe Spree::Order, :type => :model do
746
768
  order.completed_at = nil
747
769
  expect(order.completed?).to be false
748
770
 
749
- order.completed_at = Time.now
771
+ order.completed_at = Time.current
750
772
  expect(order.completed?).to be true
751
773
  end
752
774
  end
753
775
 
754
776
  context "#allow_checkout?" do
755
777
  it "should be true if there are line_items in the order" do
756
- allow(order).to receive_message_chain(:line_items, :count => 1)
778
+ allow(order).to receive_message_chain(:line_items, count: 1)
757
779
  expect(order.checkout_allowed?).to be true
758
780
  end
759
781
  it "should be false if there are no line_items in the order" do
760
- allow(order).to receive_message_chain(:line_items, :count => 0)
782
+ allow(order).to receive_message_chain(:line_items, count: 0)
761
783
  expect(order.checkout_allowed?).to be false
762
784
  end
763
785
  end
764
786
 
765
787
  context "#amount" do
766
788
  before do
767
- @order = create(:order, :user => user)
768
- @order.line_items = [create(:line_item, :price => 1.0, :quantity => 2),
769
- create(:line_item, :price => 1.0, :quantity => 1)]
789
+ @order = create(:order, user: user)
790
+ @order.line_items = [create(:line_item, price: 1.0, quantity: 2),
791
+ create(:line_item, price: 1.0, quantity: 1)]
770
792
  end
771
793
  it "should return the correct lum sum of items" do
772
794
  expect(@order.amount).to eq(3.0)
@@ -775,8 +797,8 @@ describe Spree::Order, :type => :model do
775
797
 
776
798
  context "#backordered?" do
777
799
  it 'is backordered if one of the shipments is backordered' do
778
- allow(order).to receive_messages(:shipments => [mock_model(Spree::Shipment, :backordered? => false),
779
- mock_model(Spree::Shipment, :backordered? => true)])
800
+ allow(order).to receive_messages(shipments: [mock_model(Spree::Shipment, backordered?: false),
801
+ mock_model(Spree::Shipment, backordered?: true)])
780
802
  expect(order).to be_backordered
781
803
  end
782
804
  end
@@ -785,21 +807,21 @@ describe Spree::Order, :type => :model do
785
807
  it "should be false for completed order in the canceled state" do
786
808
  order.state = 'canceled'
787
809
  order.shipment_state = 'ready'
788
- order.completed_at = Time.now
810
+ order.completed_at = Time.current
789
811
  expect(order.can_cancel?).to be false
790
812
  end
791
813
 
792
814
  it "should be true for completed order with no shipment" do
793
815
  order.state = 'complete'
794
816
  order.shipment_state = nil
795
- order.completed_at = Time.now
817
+ order.completed_at = Time.current
796
818
  expect(order.can_cancel?).to be true
797
819
  end
798
820
  end
799
821
 
800
822
  context "#tax_total" do
801
823
  it "adds included tax and additional tax" do
802
- allow(order).to receive_messages(:additional_tax_total => 10, :included_tax_total => 20)
824
+ allow(order).to receive_messages(additional_tax_total: 10, included_tax_total: 20)
803
825
 
804
826
  expect(order.tax_total).to eq 30
805
827
  end
@@ -872,6 +894,58 @@ describe Spree::Order, :type => :model do
872
894
  end
873
895
 
874
896
  describe "#create_proposed_shipments" do
897
+ context 'has unassociated inventory units' do
898
+ let!(:inventory_unit) { create(:inventory_unit, order: subject) }
899
+
900
+ before(:each) do
901
+ inventory_unit.update_column(:shipment_id, nil)
902
+ end
903
+
904
+ context 'when shipped' do
905
+ before(:each) do
906
+ inventory_unit.update_column(:state, 'shipped')
907
+ end
908
+
909
+ it 'does not delete inventory_unit' do
910
+ subject.create_proposed_shipments
911
+ expect(inventory_unit.reload).to eq inventory_unit
912
+ end
913
+ end
914
+
915
+ context 'when returned' do
916
+ before(:each) do
917
+ inventory_unit.update_column(:state, 'returned')
918
+ end
919
+
920
+ it 'does not delete inventory_unit' do
921
+ subject.create_proposed_shipments
922
+ expect(inventory_unit.reload).to eq inventory_unit
923
+ end
924
+ end
925
+
926
+ context 'when on_hand' do
927
+ before(:each) do
928
+ inventory_unit.update_column(:state, 'on_hand')
929
+ end
930
+
931
+ it 'deletes inventory_unit' do
932
+ subject.create_proposed_shipments
933
+ expect { inventory_unit.reload }.to raise_error(ActiveRecord::RecordNotFound)
934
+ end
935
+ end
936
+
937
+ context 'when backordered' do
938
+ before(:each) do
939
+ inventory_unit.update_column(:state, 'backordered')
940
+ end
941
+
942
+ it 'deletes inventory_unit' do
943
+ subject.create_proposed_shipments
944
+ expect { inventory_unit.reload }.to raise_error(ActiveRecord::RecordNotFound)
945
+ end
946
+ end
947
+ end
948
+
875
949
  it "assigns the coordinator returned shipments to its shipments" do
876
950
  shipment = build(:shipment)
877
951
  allow_any_instance_of(Spree::Stock::Coordinator).to receive(:shipments).and_return([shipment])
@@ -947,8 +1021,26 @@ describe Spree::Order, :type => :model do
947
1021
  end
948
1022
 
949
1023
  it { expect(order.fully_discounted?).to eq false }
950
-
951
1024
  end
952
1025
  end
953
1026
 
1027
+ describe 'order transit to returned state from resumed state' do
1028
+ let!(:resumed_order) { create(:order_with_line_items, line_items_count: 3, state: :resumed) }
1029
+
1030
+ context 'when all inventory_units returned' do
1031
+ before do
1032
+ resumed_order.inventory_units.update_all(state: 'returned')
1033
+ resumed_order.return
1034
+ end
1035
+ it { expect(resumed_order).to be_returned }
1036
+ end
1037
+
1038
+ context 'when some inventory_units returned' do
1039
+ before do
1040
+ resumed_order.inventory_units.first.update_attribute(:state, 'returned')
1041
+ resumed_order.return
1042
+ end
1043
+ it { expect(resumed_order).to be_resumed }
1044
+ end
1045
+ end
954
1046
  end
@@ -210,45 +210,56 @@ module Spree
210
210
  context "completed order" do
211
211
  before { allow(order).to receive_messages completed?: true }
212
212
 
213
- it "updates payment state" do
214
- expect(updater).to receive(:update_payment_state)
215
- updater.update
216
- end
217
-
218
- it "updates shipment state" do
219
- expect(updater).to receive(:update_shipment_state)
220
- updater.update
221
- end
213
+ describe "#update" do
214
+ it "updates payment state" do
215
+ expect(updater).to receive(:update_payment_state)
216
+ updater.update
217
+ end
222
218
 
223
- it "updates each shipment" do
224
- shipment = stub_model(Spree::Shipment, order: order)
225
- shipments = [shipment]
226
- allow(order).to receive_messages shipments: shipments
227
- allow(shipments).to receive_messages states: []
228
- allow(shipments).to receive_messages ready: []
229
- allow(shipments).to receive_messages pending: []
230
- allow(shipments).to receive_messages shipped: []
219
+ it "updates shipment state" do
220
+ expect(updater).to receive(:update_shipment_state)
221
+ updater.update
222
+ end
231
223
 
232
- expect(shipment).to receive(:update!).with(order)
233
- updater.update_shipments
224
+ it "updates shipments total again after updating shipments" do
225
+ expect(updater).to receive(:update_shipment_total).ordered
226
+ expect(updater).to receive(:update_shipments).ordered
227
+ expect(updater).to receive(:update_shipment_total).ordered
228
+ updater.update
229
+ end
234
230
  end
235
231
 
236
- it "refreshes shipment rates" do
237
- shipment = stub_model(Spree::Shipment, order: order)
238
- shipments = [shipment]
239
- allow(order).to receive_messages shipments: shipments
232
+ describe "#update_shipments" do
233
+ it "updates each shipment" do
234
+ shipment = stub_model(Spree::Shipment, order: order)
235
+ shipments = [shipment]
236
+ allow(order).to receive_messages shipments: shipments
237
+ allow(shipments).to receive_messages states: []
238
+ allow(shipments).to receive_messages ready: []
239
+ allow(shipments).to receive_messages pending: []
240
+ allow(shipments).to receive_messages shipped: []
241
+
242
+ expect(shipment).to receive(:update!).with(order)
243
+ updater.update_shipments
244
+ end
240
245
 
241
- expect(shipment).to receive(:refresh_rates)
242
- updater.update_shipments
243
- end
246
+ it "refreshes shipment rates" do
247
+ shipment = stub_model(Spree::Shipment, order: order)
248
+ shipments = [shipment]
249
+ allow(order).to receive_messages shipments: shipments
244
250
 
245
- it "updates the shipment amount" do
246
- shipment = stub_model(Spree::Shipment, order: order)
247
- shipments = [shipment]
248
- allow(order).to receive_messages shipments: shipments
251
+ expect(shipment).to receive(:refresh_rates)
252
+ updater.update_shipments
253
+ end
254
+
255
+ it "updates the shipment amount" do
256
+ shipment = stub_model(Spree::Shipment, order: order)
257
+ shipments = [shipment]
258
+ allow(order).to receive_messages shipments: shipments
249
259
 
250
- expect(shipment).to receive(:update_amounts)
251
- updater.update_shipments
260
+ expect(shipment).to receive(:update_amounts)
261
+ updater.update_shipments
262
+ end
252
263
  end
253
264
  end
254
265
 
@@ -8,7 +8,15 @@ RSpec.describe Spree::Payment::GatewayOptions, type: :model do
8
8
  Spree::Payment,
9
9
  order: order,
10
10
  number: "P1566",
11
- currency: "EUR"
11
+ currency: "EUR",
12
+ payment_method: payment_method
13
+ )
14
+ end
15
+
16
+ let(:payment_method) do
17
+ double(
18
+ Spree::Gateway::Bogus,
19
+ exchange_multiplier: Spree::Gateway::FROM_DOLLAR_TO_CENT_RATE
12
20
  )
13
21
  end
14
22
 
@@ -31,6 +39,7 @@ RSpec.describe Spree::Payment::GatewayOptions, type: :model do
31
39
  let(:bill_address) do
32
40
  double Spree::Address, active_merchant_hash: { bill: :address }
33
41
  end
42
+
34
43
  let(:ship_address) do
35
44
  double Spree::Address, active_merchant_hash: { ship: :address }
36
45
  end
@@ -115,5 +124,4 @@ RSpec.describe Spree::Payment::GatewayOptions, type: :model do
115
124
  end
116
125
  it { should == expected }
117
126
  end
118
-
119
127
  end