spree_core 3.1.14 → 3.2.0.rc1

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 (529) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/{spree.js.coffee.erb → spree.js.coffee} +2 -2
  3. data/app/helpers/spree/base_helper.rb +1 -1
  4. data/app/helpers/spree/products_helper.rb +0 -6
  5. data/app/mailers/spree/reimbursement_mailer.rb +6 -6
  6. data/app/models/concerns/spree/acts_as_taggable.rb +11 -0
  7. data/app/models/concerns/spree/adjustment_source.rb +1 -1
  8. data/app/models/concerns/spree/ransackable_attributes.rb +0 -5
  9. data/app/models/spree/address.rb +67 -38
  10. data/app/models/spree/app_configuration.rb +9 -6
  11. data/app/models/spree/base.rb +1 -1
  12. data/app/models/spree/calculator.rb +1 -1
  13. data/app/models/spree/country.rb +5 -4
  14. data/app/models/spree/credit_card.rb +3 -3
  15. data/app/models/spree/gateway/bogus.rb +11 -11
  16. data/app/models/spree/gateway/bogus_simple.rb +4 -4
  17. data/app/models/spree/gateway.rb +1 -1
  18. data/app/models/spree/image.rb +2 -2
  19. data/app/models/spree/inventory_unit.rb +6 -10
  20. data/app/models/spree/line_item.rb +17 -6
  21. data/app/models/spree/order/checkout.rb +2 -2
  22. data/app/models/spree/order.rb +12 -25
  23. data/app/models/spree/order_contents.rb +7 -6
  24. data/app/models/spree/order_inventory.rb +12 -1
  25. data/app/models/spree/order_updater.rb +1 -2
  26. data/app/models/spree/payment/processing.rb +3 -3
  27. data/app/models/spree/payment_method.rb +7 -1
  28. data/app/models/spree/preferences/store.rb +3 -3
  29. data/app/models/spree/product/scopes.rb +16 -20
  30. data/app/models/spree/product.rb +11 -3
  31. data/app/models/spree/promotion/actions/create_line_items.rb +21 -3
  32. data/app/models/spree/promotion/rules/country.rb +23 -0
  33. data/app/models/spree/promotion/rules/option_value.rb +13 -10
  34. data/app/models/spree/promotion/rules/taxon.rb +1 -1
  35. data/app/models/spree/promotion.rb +35 -1
  36. data/app/models/spree/promotion_handler/cart.rb +3 -17
  37. data/app/models/spree/promotion_handler/coupon.rb +22 -22
  38. data/app/models/spree/promotion_handler/page.rb +2 -2
  39. data/app/models/spree/refund.rb +1 -1
  40. data/app/models/spree/refund_reason.rb +1 -1
  41. data/app/models/spree/reimbursement_type.rb +5 -1
  42. data/app/models/spree/return_item.rb +1 -1
  43. data/app/models/spree/shipment.rb +4 -6
  44. data/app/models/spree/shipment_handler.rb +1 -1
  45. data/app/models/spree/stock/adjuster.rb +9 -2
  46. data/app/models/spree/stock/coordinator.rb +11 -4
  47. data/app/models/spree/stock/inventory_unit_builder.rb +1 -1
  48. data/app/models/spree/stock/package.rb +11 -3
  49. data/app/models/spree/stock/packer.rb +15 -5
  50. data/app/models/spree/stock/prioritizer.rb +25 -15
  51. data/app/models/spree/stock/splitter/shipping_category.rb +6 -1
  52. data/app/models/spree/stock_item.rb +2 -1
  53. data/app/models/spree/stock_movement.rb +11 -6
  54. data/app/models/spree/store.rb +1 -0
  55. data/app/models/spree/store_credit.rb +1 -1
  56. data/app/models/spree/tag.rb +4 -0
  57. data/app/models/spree/tax_rate.rb +6 -0
  58. data/app/models/spree/taxon.rb +3 -3
  59. data/app/models/spree/variant.rb +6 -3
  60. data/app/models/spree/zone.rb +2 -2
  61. data/app/views/spree/shared/_paths.html.erb +8 -0
  62. data/config/initializers/acts_as_taggable_on.rb +9 -0
  63. data/config/initializers/friendly_id.rb +0 -81
  64. data/config/locales/en.yml +11 -0
  65. data/db/default/spree/countries.rb +5 -1
  66. data/db/default/spree/roles.rb +2 -2
  67. data/db/default/spree/states.rb +1 -1
  68. data/db/migrate/20120831092320_spree_one_two.rb +101 -101
  69. data/db/migrate/20120831092359_spree_promo_one_two.rb +14 -14
  70. data/db/migrate/20120905145253_add_tax_rate_label.rb +1 -1
  71. data/db/migrate/20120905151823_add_toggle_tax_rate_display.rb +2 -2
  72. data/db/migrate/20120929093553_remove_unused_preference_columns.rb +4 -4
  73. data/db/migrate/20121009142519_add_lock_version_to_variant.rb +2 -2
  74. data/db/migrate/20121010142909_add_states_required_to_countries.rb +2 -2
  75. data/db/migrate/20121012071449_add_on_demand_to_product_and_variant.rb +3 -3
  76. data/db/migrate/20121017010007_remove_not_null_constraint_from_products_on_hand.rb +5 -5
  77. data/db/migrate/20121031162139_split_prices_from_variants.rb +10 -10
  78. data/db/migrate/20121107003422_remove_not_null_from_spree_prices_amount.rb +3 -3
  79. data/db/migrate/20121107184631_add_currency_to_line_items.rb +1 -1
  80. data/db/migrate/20121107194006_add_currency_to_orders.rb +1 -1
  81. data/db/migrate/20121109173623_add_cost_currency_to_variants.rb +2 -2
  82. data/db/migrate/20121111231553_remove_display_on_from_payment_methods.rb +1 -1
  83. data/db/migrate/20121124203911_add_position_to_taxonomies.rb +2 -2
  84. data/db/migrate/20121126040517_add_last_ip_to_spree_orders.rb +1 -1
  85. data/db/migrate/20121213162028_add_state_to_spree_adjustments.rb +1 -1
  86. data/db/migrate/20130114053446_add_display_on_to_spree_payment_methods.rb +1 -1
  87. data/db/migrate/20130120201805_add_position_to_product_properties.spree.rb +2 -2
  88. data/db/migrate/20130203232234_add_identifier_to_spree_payments.rb +1 -1
  89. data/db/migrate/20130207155350_add_order_id_index_to_payments.rb +1 -1
  90. data/db/migrate/20130208032954_add_primary_to_spree_products_taxons.rb +1 -1
  91. data/db/migrate/20130211190146_create_spree_stock_items.rb +2 -2
  92. data/db/migrate/20130211191120_create_spree_stock_locations.rb +1 -1
  93. data/db/migrate/20130213191427_create_default_stock.rb +1 -2
  94. data/db/migrate/20130222032153_add_order_id_index_to_shipments.rb +1 -1
  95. data/db/migrate/20130226032817_change_meta_description_on_spree_products_to_text.rb +2 -2
  96. data/db/migrate/20130226191231_add_stock_location_id_to_spree_shipments.rb +1 -1
  97. data/db/migrate/20130227143905_add_pending_to_inventory_unit.rb +3 -3
  98. data/db/migrate/20130228164411_remove_on_demand_from_product_and_variant.rb +1 -1
  99. data/db/migrate/20130228210442_create_shipping_method_zone.rb +3 -3
  100. data/db/migrate/20130301162745_remove_shipping_category_id_from_shipping_method.rb +1 -1
  101. data/db/migrate/20130301162924_create_shipping_method_categories.rb +3 -3
  102. data/db/migrate/20130301205200_add_tracking_url_to_spree_shipping_methods.rb +1 -1
  103. data/db/migrate/20130304162240_create_spree_shipping_rates.rb +5 -5
  104. data/db/migrate/20130304192936_remove_category_match_attributes_from_shipping_method.rb +1 -1
  105. data/db/migrate/20130305143310_create_stock_movements.rb +1 -1
  106. data/db/migrate/20130306181701_add_address_fields_to_stock_location.rb +3 -3
  107. data/db/migrate/20130306191917_add_active_field_to_stock_locations.rb +2 -2
  108. data/db/migrate/20130306195650_add_backorderable_to_stock_item.rb +2 -2
  109. data/db/migrate/20130307161754_add_default_quantity_to_stock_movement.rb +2 -2
  110. data/db/migrate/20130318151756_add_source_and_destination_to_stock_movements.rb +1 -1
  111. data/db/migrate/20130319062004_change_orders_total_precision.rb +5 -5
  112. data/db/migrate/20130319063911_change_spree_payments_amount_precision.rb +2 -2
  113. data/db/migrate/20130319064308_change_spree_return_authorization_amount_precision.rb +2 -2
  114. data/db/migrate/20130319082943_change_adjustments_amount_precision.rb +2 -2
  115. data/db/migrate/20130319183250_add_originator_to_stock_movement.rb +1 -1
  116. data/db/migrate/20130319190507_drop_source_and_destination_from_stock_movement.rb +3 -3
  117. data/db/migrate/20130325163316_migrate_inventory_unit_sold_to_on_hand.rb +3 -3
  118. data/db/migrate/20130326175857_add_stock_location_to_rma.rb +1 -1
  119. data/db/migrate/20130328130308_update_shipment_state_for_canceled_orders.rb +1 -1
  120. data/db/migrate/20130328195253_add_seo_metas_to_taxons.rb +1 -1
  121. data/db/migrate/20130329134939_remove_stock_item_and_variant_lock.rb +1 -1
  122. data/db/migrate/20130413230529_add_name_to_spree_credit_cards.rb +1 -1
  123. data/db/migrate/20130414000512_update_name_fields_on_spree_credit_cards.rb +2 -2
  124. data/db/migrate/20130417120034_add_index_to_source_columns_on_adjustments.rb +1 -1
  125. data/db/migrate/20130417120035_update_adjustment_states.rb +3 -3
  126. data/db/migrate/20130417123427_add_shipping_rates_to_shipments.rb +4 -4
  127. data/db/migrate/20130418125341_create_spree_stock_transfers.rb +1 -1
  128. data/db/migrate/20130423110707_drop_products_count_on_hand.rb +1 -1
  129. data/db/migrate/20130423223847_set_default_shipping_rate_cost.rb +1 -1
  130. data/db/migrate/20130509115210_add_number_to_stock_transfer.rb +1 -1
  131. data/db/migrate/20130514151929_add_sku_index_to_spree_variants.rb +1 -1
  132. data/db/migrate/20130515180736_add_backorderable_default_to_spree_stock_location.rb +1 -1
  133. data/db/migrate/20130516151222_add_propage_all_variants_to_spree_stock_location.rb +1 -1
  134. data/db/migrate/20130611054351_rename_shipping_methods_zones_to_spree_shipping_methods_zones.rb +1 -1
  135. data/db/migrate/20130611185927_add_user_id_index_to_spree_orders.rb +1 -1
  136. data/db/migrate/20130618041418_add_updated_at_to_spree_countries.rb +1 -1
  137. data/db/migrate/20130619012236_add_updated_at_to_spree_states.rb +1 -1
  138. data/db/migrate/20130626232741_add_cvv_result_code_and_cvv_result_message_to_spree_payments.rb +1 -1
  139. data/db/migrate/20130628021056_add_unique_index_to_permalink_on_spree_products.rb +2 -2
  140. data/db/migrate/20130628022817_add_unique_index_to_orders_shipments_and_stock_transfers.rb +4 -4
  141. data/db/migrate/20130708052307_add_deleted_at_to_spree_tax_rates.rb +1 -1
  142. data/db/migrate/20130711200933_remove_lock_version_from_inventory_units.rb +1 -1
  143. data/db/migrate/20130718042445_add_cost_price_to_line_item.rb +2 -2
  144. data/db/migrate/20130718233855_set_backorderable_to_default_to_false.rb +3 -3
  145. data/db/migrate/20130725031716_add_created_by_id_to_spree_orders.rb +1 -1
  146. data/db/migrate/20130729214043_index_completed_at_on_spree_orders.rb +1 -1
  147. data/db/migrate/20130802014537_add_tax_category_id_to_spree_line_items.rb +1 -1
  148. data/db/migrate/20130802022321_migrate_tax_categories_to_line_items.rb +1 -1
  149. data/db/migrate/20130806022521_drop_spree_mail_methods.rb +1 -1
  150. data/db/migrate/20130806145853_set_default_stock_location_on_shipments.rb +1 -1
  151. data/db/migrate/20130807024301_upgrade_adjustments.rb +4 -4
  152. data/db/migrate/20130807024302_rename_adjustment_fields.rb +1 -1
  153. data/db/migrate/20130809164245_add_admin_name_column_to_spree_shipping_methods.rb +1 -1
  154. data/db/migrate/20130809164330_add_admin_name_column_to_spree_stock_locations.rb +1 -1
  155. data/db/migrate/20130813004002_add_shipment_total_to_spree_orders.rb +2 -2
  156. data/db/migrate/20130813140619_expand_order_number_size.rb +3 -3
  157. data/db/migrate/20130813232134_rename_activators_to_promotions.rb +1 -1
  158. data/db/migrate/20130815000406_add_adjustment_total_to_line_items.rb +2 -2
  159. data/db/migrate/20130815024413_add_adjustment_total_to_shipments.rb +2 -2
  160. data/db/migrate/20130826062534_add_depth_to_spree_taxons.rb +1 -1
  161. data/db/migrate/20130828234942_add_tax_total_to_line_items_shipments_and_orders.rb +2 -2
  162. data/db/migrate/20130830001033_add_shipping_category_to_shipping_methods_and_products.rb +2 -2
  163. data/db/migrate/20130830001159_migrate_old_shipping_calculators.rb +1 -1
  164. data/db/migrate/20130903183026_add_code_to_spree_promotion_rules.rb +1 -1
  165. data/db/migrate/20130909115621_change_states_required_for_countries.rb +1 -1
  166. data/db/migrate/20130915032339_add_deleted_at_to_spree_stock_items.rb +1 -1
  167. data/db/migrate/20130917024658_remove_promotions_event_name_field.rb +1 -1
  168. data/db/migrate/20130924040529_add_promo_total_to_line_items_and_shipments_and_orders.rb +1 -1
  169. data/db/migrate/20131001013410_remove_unused_credit_card_fields.rb +2 -2
  170. data/db/migrate/20131026154747_add_track_inventory_to_variant.rb +2 -2
  171. data/db/migrate/20131107132123_add_tax_category_to_variants.rb +1 -1
  172. data/db/migrate/20131113035136_add_channel_to_spree_orders.rb +1 -1
  173. data/db/migrate/20131118043959_add_included_to_adjustments.rb +2 -2
  174. data/db/migrate/20131118050234_rename_tax_total_fields.rb +1 -1
  175. data/db/migrate/20131118183431_add_line_item_id_to_spree_inventory_units.rb +1 -1
  176. data/db/migrate/20131120234456_add_updated_at_to_variants.rb +1 -1
  177. data/db/migrate/20131127001002_add_position_to_classifications.rb +1 -1
  178. data/db/migrate/20131211112807_create_spree_orders_promotions.rb +2 -2
  179. data/db/migrate/20131211192741_unique_shipping_method_categories.rb +1 -1
  180. data/db/migrate/20131218054603_add_item_count_to_spree_orders.rb +2 -2
  181. data/db/migrate/20140106065820_remove_value_type_from_spree_preferences.rb +1 -1
  182. data/db/migrate/20140106224208_rename_permalink_to_slug_for_products.rb +1 -1
  183. data/db/migrate/20140120160805_add_index_to_variant_id_and_currency_on_prices.rb +1 -1
  184. data/db/migrate/20140124023232_rename_activator_id_in_rules_and_actions_to_promotion_id.rb +1 -1
  185. data/db/migrate/20140129024326_add_deleted_at_to_spree_prices.rb +1 -1
  186. data/db/migrate/20140203161722_add_approver_id_and_approved_at_to_orders.rb +1 -1
  187. data/db/migrate/20140204115338_add_confirmation_delivered_to_spree_orders.rb +1 -1
  188. data/db/migrate/20140204192230_add_auto_capture_to_payment_methods.rb +1 -1
  189. data/db/migrate/20140205120320_create_spree_payment_capture_events.rb +1 -1
  190. data/db/migrate/20140205144710_add_uncaptured_amount_to_payments.rb +1 -1
  191. data/db/migrate/20140205181631_default_variant_weight_to_zero.rb +1 -1
  192. data/db/migrate/20140207085910_add_tax_category_id_to_shipping_methods.rb +1 -1
  193. data/db/migrate/20140207093021_add_tax_rate_id_to_shipping_rates.rb +1 -1
  194. data/db/migrate/20140211040159_add_pre_tax_amount_to_line_items_and_shipments.rb +1 -1
  195. data/db/migrate/20140213184916_add_more_indexes.rb +1 -1
  196. data/db/migrate/20140219060952_add_considered_risky_to_orders.rb +2 -2
  197. data/db/migrate/20140227112348_add_preference_store_to_everything.rb +1 -1
  198. data/db/migrate/20140307235515_add_user_id_to_spree_credit_cards.rb +1 -1
  199. data/db/migrate/20140309023735_migrate_old_preferences.rb +1 -1
  200. data/db/migrate/20140309024355_create_spree_stores.rb +2 -2
  201. data/db/migrate/20140309033438_create_store_from_preferences.rb +2 -2
  202. data/db/migrate/20140315053743_add_timestamps_to_spree_assets.rb +1 -1
  203. data/db/migrate/20140318191500_create_spree_taxons_promotion_rules.rb +1 -1
  204. data/db/migrate/20140331100557_add_additional_store_fields.rb +1 -1
  205. data/db/migrate/20140410141842_add_many_missing_indexes.rb +1 -1
  206. data/db/migrate/20140410150358_correct_some_polymorphic_index_and_add_more_missing.rb +1 -1
  207. data/db/migrate/20140415041315_add_user_id_created_by_id_index_to_order.rb +1 -1
  208. data/db/migrate/20140508151342_change_spree_price_amount_precision.rb +5 -5
  209. data/db/migrate/20140518174634_add_token_to_spree_orders.rb +1 -1
  210. data/db/migrate/20140530024945_move_order_token_from_tokenized_permission.rb +2 -2
  211. data/db/migrate/20140601011216_set_shipment_total_for_users_upgrading.rb +1 -1
  212. data/db/migrate/20140604135309_drop_credit_card_first_name_and_last_name.rb +1 -1
  213. data/db/migrate/20140609201656_add_deleted_at_to_spree_promotion_actions.rb +1 -1
  214. data/db/migrate/20140616202624_remove_uncaptured_amount_from_spree_payments.rb +1 -1
  215. data/db/migrate/20140625214618_create_spree_refunds.rb +1 -1
  216. data/db/migrate/20140702140656_create_spree_return_authorization_inventory_unit.rb +1 -1
  217. data/db/migrate/20140707125621_rename_return_authorization_inventory_unit_to_return_items.rb +1 -1
  218. data/db/migrate/20140709160534_backfill_line_item_pre_tax_amount.rb +1 -1
  219. data/db/migrate/20140710041921_recreate_spree_return_authorizations.rb +2 -2
  220. data/db/migrate/20140710181204_add_amount_fields_to_return_items.rb +1 -1
  221. data/db/migrate/20140710190048_drop_return_authorization_amount.rb +1 -1
  222. data/db/migrate/20140713140455_create_spree_return_authorization_reasons.rb +1 -1
  223. data/db/migrate/20140713140527_create_spree_refund_reasons.rb +1 -1
  224. data/db/migrate/20140713142214_rename_return_authorization_reason.rb +1 -1
  225. data/db/migrate/20140715182625_create_spree_promotion_categories.rb +1 -1
  226. data/db/migrate/20140716204111_drop_received_at_on_return_items.rb +1 -1
  227. data/db/migrate/20140716212330_add_reception_and_acceptance_status_to_return_items.rb +1 -1
  228. data/db/migrate/20140717155155_create_default_refund_reason.rb +1 -1
  229. data/db/migrate/20140717185932_add_default_to_spree_stock_locations.rb +1 -1
  230. data/db/migrate/20140718133010_create_spree_customer_returns.rb +1 -1
  231. data/db/migrate/20140718133349_add_customer_return_id_to_return_item.rb +1 -1
  232. data/db/migrate/20140718195325_create_friendly_id_slugs.rb +5 -5
  233. data/db/migrate/20140723004419_rename_spree_refund_return_authorization_id.rb +1 -1
  234. data/db/migrate/20140723152808_increase_return_item_pre_tax_amount_precision.rb +1 -1
  235. data/db/migrate/20140723214541_copy_product_slugs_to_slug_history.rb +2 -2
  236. data/db/migrate/20140725131539_create_spree_reimbursements.rb +1 -1
  237. data/db/migrate/20140728225422_add_promotionable_to_spree_products.rb +1 -1
  238. data/db/migrate/20140729133613_add_exchange_inventory_unit_foreign_keys.rb +1 -1
  239. data/db/migrate/20140730155938_add_acceptance_status_errors_to_return_item.rb +1 -1
  240. data/db/migrate/20140731150017_create_spree_reimbursement_types.rb +1 -1
  241. data/db/migrate/20140804185157_add_default_to_shipment_cost.rb +1 -1
  242. data/db/migrate/20140805171035_add_default_to_spree_credit_cards.rb +1 -1
  243. data/db/migrate/20140805171219_make_existing_credit_cards_default.rb +1 -1
  244. data/db/migrate/20140806144901_add_type_to_reimbursement_type.rb +1 -1
  245. data/db/migrate/20140808184039_create_spree_reimbursement_credits.rb +1 -1
  246. data/db/migrate/20140827170513_add_meta_title_to_spree_products.rb +1 -1
  247. data/db/migrate/20140911173301_add_kind_to_zone.rb +1 -1
  248. data/db/migrate/20140924164824_add_code_to_spree_tax_categories.rb +1 -1
  249. data/db/migrate/20140927193717_default_pre_tax_amount_should_be_zero.rb +1 -1
  250. data/db/migrate/20141002191113_add_code_to_spree_shipping_methods.rb +1 -1
  251. data/db/migrate/20141007230328_add_cancel_audit_fields_to_spree_orders.rb +1 -1
  252. data/db/migrate/20141009204607_add_store_id_to_orders.rb +1 -1
  253. data/db/migrate/20141012083513_create_spree_taxons_prototypes.rb +1 -1
  254. data/db/migrate/20141021194502_add_state_lock_version_to_order.rb +1 -1
  255. data/db/migrate/20141023005240_add_counter_cache_from_spree_variants_to_spree_stock_items.rb +2 -7
  256. data/db/migrate/20141101231208_fix_adjustment_order_presence.rb +1 -1
  257. data/db/migrate/20141105213646_update_classifications_positions.rb +1 -1
  258. data/db/migrate/20141120135441_add_guest_token_index_to_spree_orders.rb +1 -1
  259. data/db/migrate/20141215232040_remove_token_permissions_table.rb +1 -1
  260. data/db/migrate/20141215235502_remove_extra_products_slug_index.rb +1 -1
  261. data/db/migrate/20141217215630_update_product_slug_index.rb +1 -1
  262. data/db/migrate/20141218025915_rename_identifier_to_number_for_payment.rb +1 -1
  263. data/db/migrate/20150118210639_create_spree_store_credits.rb +1 -1
  264. data/db/migrate/20150118211500_create_spree_store_credit_categories.rb +1 -1
  265. data/db/migrate/20150118212051_create_spree_store_credit_events.rb +1 -1
  266. data/db/migrate/20150118212101_create_spree_store_credit_types.rb +1 -1
  267. data/db/migrate/20150121022521_remove_environment_from_payment_method.rb +1 -1
  268. data/db/migrate/20150122145607_add_resellable_to_return_items.rb +1 -1
  269. data/db/migrate/20150122202432_add_code_to_spree_promotion_categories.rb +1 -1
  270. data/db/migrate/20150128032538_remove_environment_from_tracker.rb +1 -1
  271. data/db/migrate/20150128060325_remove_spree_configurations.rb +1 -1
  272. data/db/migrate/20150216173445_add_index_to_spree_stock_items_variant_id.rb +1 -1
  273. data/db/migrate/20150309161154_ensure_payments_have_numbers.rb +1 -1
  274. data/db/migrate/20150314013438_add_missing_indexes_on_spree_tables.rb +1 -1
  275. data/db/migrate/20150317174308_remove_duplicated_indexes_from_multi_columns.rb +1 -1
  276. data/db/migrate/20150324104002_remove_user_index_from_spree_state_changes.rb +1 -1
  277. data/db/migrate/20150515211137_fix_adjustment_order_id.rb +1 -1
  278. data/db/migrate/20150522071831_add_position_to_spree_payment_methods.rb +1 -1
  279. data/db/migrate/20150522181728_add_deleted_at_to_friendly_id_slugs.rb +1 -1
  280. data/db/migrate/20150609093816_increase_scale_on_pre_tax_amounts.rb +1 -1
  281. data/db/migrate/20150626181949_add_taxable_adjustment_total_to_line_item.rb +1 -1
  282. data/db/migrate/20150627090949_migrate_payment_methods_display.rb +1 -1
  283. data/db/migrate/20150707204155_enable_acts_as_paranoid_on_calculators.rb +1 -1
  284. data/db/migrate/20150714154102_spree_payment_method_store_credits.rb +1 -1
  285. data/db/migrate/20150726141425_rename_has_and_belongs_to_associations_to_model_names.rb +1 -1
  286. data/db/migrate/20150727191614_spree_store_credit_types.rb +1 -1
  287. data/db/migrate/20150819154308_add_discontinued_to_products_and_variants.rb +1 -1
  288. data/db/migrate/20151220072838_remove_shipping_method_id_from_spree_orders.rb +1 -1
  289. data/db/migrate/20160207191757_add_id_column_to_earlier_habtm_tables.rb +1 -1
  290. data/db/migrate/20160219165458_add_indexes.rb +1 -1
  291. data/db/migrate/20160509064646_remove_counter_cache_from_spree_variants_to_spree_stock_items.rb +10 -0
  292. data/db/migrate/20160511071954_acts_as_taggable_on_spree_migration.rb +40 -0
  293. data/db/migrate/20160511072249_change_collation_for_spree_tag_names.rb +9 -0
  294. data/db/migrate/20160511072335_add_missing_indexes_to_spree_taggings.rb +14 -0
  295. data/db/migrate/20160608090604_add_zipcode_required_to_spree_countries.rb +7 -0
  296. data/db/migrate/20161014145148_add_created_at_to_variant.rb +8 -0
  297. data/db/migrate/20161014152814_add_null_false_to_spree_variants_timestamps.rb +6 -0
  298. data/lib/generators/spree/custom_user/custom_user_generator.rb +1 -1
  299. data/lib/generators/spree/custom_user/templates/authentication_helpers.rb.tt +3 -3
  300. data/lib/generators/spree/custom_user/templates/migration.rb.tt +2 -2
  301. data/lib/generators/spree/dummy/dummy_generator.rb +11 -11
  302. data/lib/generators/spree/dummy/templates/rails/application.rb +1 -1
  303. data/lib/generators/spree/dummy/templates/rails/database.yml +9 -6
  304. data/lib/generators/spree/dummy/templates/rails/test.rb +2 -2
  305. data/lib/generators/spree/install/install_generator.rb +37 -13
  306. data/lib/spree/core/controller_helpers/common.rb +3 -3
  307. data/lib/spree/core/controller_helpers/order.rb +2 -5
  308. data/lib/spree/core/controller_helpers/respond_with.rb +1 -1
  309. data/lib/spree/core/delegate_belongs_to.rb +2 -2
  310. data/lib/spree/core/engine.rb +5 -4
  311. data/lib/spree/core/importer/product.rb +2 -2
  312. data/lib/spree/core/product_duplicator.rb +1 -1
  313. data/lib/spree/core/product_filters.rb +1 -1
  314. data/lib/spree/core/search/base.rb +1 -1
  315. data/lib/spree/core/version.rb +1 -1
  316. data/lib/spree/i18n/initializer.rb +1 -1
  317. data/lib/spree/money.rb +1 -15
  318. data/lib/spree/permitted_attributes.rb +1 -1
  319. data/lib/spree/testing_support/caching.rb +3 -3
  320. data/lib/spree/testing_support/common_rake.rb +0 -2
  321. data/lib/spree/testing_support/controller_requests.rb +4 -4
  322. data/lib/spree/testing_support/factories/line_item_factory.rb +0 -1
  323. data/lib/spree/testing_support/factories/order_factory.rb +1 -0
  324. data/lib/spree/testing_support/factories/tag_factory.rb +5 -0
  325. data/lib/spree/testing_support/kernel.rb +18 -0
  326. data/lib/spree/testing_support/order_walkthrough.rb +4 -4
  327. data/lib/tasks/core.rake +2 -2
  328. data/spec/helpers/base_helper_spec.rb +200 -0
  329. data/spec/helpers/products_helper_spec.rb +289 -0
  330. data/spec/lib/calculated_adjustments_spec.rb +7 -0
  331. data/spec/lib/i18n_spec.rb +123 -0
  332. data/spec/lib/search/base_spec.rb +86 -0
  333. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +103 -0
  334. data/spec/lib/spree/core/controller_helpers/order_spec.rb +110 -0
  335. data/spec/lib/spree/core/controller_helpers/search_spec.rb +17 -0
  336. data/spec/lib/spree/core/controller_helpers/store_spec.rb +72 -0
  337. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +39 -0
  338. data/spec/lib/spree/core/delegate_belongs_to_spec.rb +22 -0
  339. data/spec/lib/spree/core/importer/order_spec.rb +605 -0
  340. data/spec/lib/spree/core/number_generator_spec.rb +175 -0
  341. data/spec/lib/spree/core/token_generator_spec.rb +24 -0
  342. data/spec/lib/spree/core/validators/email_spec.rb +53 -0
  343. data/spec/lib/spree/core_spec.rb +23 -0
  344. data/spec/lib/spree/localized_number_spec.rb +48 -0
  345. data/spec/lib/spree/migrations_spec.rb +36 -0
  346. data/spec/lib/spree/money_spec.rb +122 -0
  347. data/spec/lib/tasks/exchanges_spec.rb +136 -0
  348. data/spec/mailers/order_mailer_spec.rb +122 -0
  349. data/spec/mailers/reimbursement_mailer_spec.rb +47 -0
  350. data/spec/mailers/shipment_mailer_spec.rb +81 -0
  351. data/spec/mailers/test_mailer_spec.rb +38 -0
  352. data/spec/models/option_type_prototype_spec.rb +9 -0
  353. data/spec/models/spree/ability_spec.rb +251 -0
  354. data/spec/models/spree/address_spec.rb +402 -0
  355. data/spec/models/spree/adjustable/adjuster/base_spec.rb +10 -0
  356. data/spec/models/spree/adjustable/adjuster/promotion_spec.rb +211 -0
  357. data/spec/models/spree/adjustable/adjuster/tax_spec.rb +86 -0
  358. data/spec/models/spree/adjustable/adjustments_updater_spec.rb +26 -0
  359. data/spec/models/spree/adjustment_spec.rb +189 -0
  360. data/spec/models/spree/app_configuration_spec.rb +26 -0
  361. data/spec/models/spree/asset_spec.rb +28 -0
  362. data/spec/models/spree/calculator/default_tax_spec.rb +152 -0
  363. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +25 -0
  364. data/spec/models/spree/calculator/flat_rate_spec.rb +47 -0
  365. data/spec/models/spree/calculator/flexi_rate_spec.rb +41 -0
  366. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +15 -0
  367. data/spec/models/spree/calculator/price_sack_spec.rb +30 -0
  368. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +47 -0
  369. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +23 -0
  370. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +13 -0
  371. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +52 -0
  372. data/spec/models/spree/calculator/shipping/per_item_spec.rb +20 -0
  373. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +29 -0
  374. data/spec/models/spree/calculator/shipping.rb +8 -0
  375. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +40 -0
  376. data/spec/models/spree/calculator/tiered_percent_spec.rb +51 -0
  377. data/spec/models/spree/calculator_spec.rb +69 -0
  378. data/spec/models/spree/classification_spec.rb +93 -0
  379. data/spec/models/spree/concerns/display_money_spec.rb +43 -0
  380. data/spec/models/spree/concerns/user_methods_spec.rb +82 -0
  381. data/spec/models/spree/concerns/vat_price_calculation_spec.rb +66 -0
  382. data/spec/models/spree/country_spec.rb +55 -0
  383. data/spec/models/spree/credit_card_spec.rb +328 -0
  384. data/spec/models/spree/customer_return_spec.rb +240 -0
  385. data/spec/models/spree/exchange_spec.rb +75 -0
  386. data/spec/models/spree/gateway/bogus_simple.rb +20 -0
  387. data/spec/models/spree/gateway/bogus_spec.rb +13 -0
  388. data/spec/models/spree/gateway_spec.rb +61 -0
  389. data/spec/models/spree/image_spec.rb +8 -0
  390. data/spec/models/spree/inventory_unit_spec.rb +256 -0
  391. data/spec/models/spree/line_item_spec.rb +346 -0
  392. data/spec/models/spree/option_type_spec.rb +14 -0
  393. data/spec/models/spree/option_value_spec.rb +18 -0
  394. data/spec/models/spree/order/address_spec.rb +50 -0
  395. data/spec/models/spree/order/adjustments_spec.rb +29 -0
  396. data/spec/models/spree/order/callbacks_spec.rb +42 -0
  397. data/spec/models/spree/order/checkout_spec.rb +770 -0
  398. data/spec/models/spree/order/currency_updater_spec.rb +32 -0
  399. data/spec/models/spree/order/finalizing_spec.rb +114 -0
  400. data/spec/models/spree/order/helpers_spec.rb +5 -0
  401. data/spec/models/spree/order/payment_spec.rb +214 -0
  402. data/spec/models/spree/order/risk_assessment_spec.rb +84 -0
  403. data/spec/models/spree/order/shipments_spec.rb +43 -0
  404. data/spec/models/spree/order/state_machine_spec.rb +212 -0
  405. data/spec/models/spree/order/store_credit_spec.rb +426 -0
  406. data/spec/models/spree/order/tax_spec.rb +84 -0
  407. data/spec/models/spree/order/totals_spec.rb +24 -0
  408. data/spec/models/spree/order/updating_spec.rb +18 -0
  409. data/spec/models/spree/order/validations_spec.rb +15 -0
  410. data/spec/models/spree/order_contents_spec.rb +297 -0
  411. data/spec/models/spree/order_inventory_spec.rb +239 -0
  412. data/spec/models/spree/order_merger_spec.rb +135 -0
  413. data/spec/models/spree/order_spec.rb +1046 -0
  414. data/spec/models/spree/order_updater_spec.rb +294 -0
  415. data/spec/models/spree/payment/gateway_options_spec.rb +127 -0
  416. data/spec/models/spree/payment/store_credit_spec.rb +60 -0
  417. data/spec/models/spree/payment_method/store_credit_spec.rb +291 -0
  418. data/spec/models/spree/payment_method_spec.rb +103 -0
  419. data/spec/models/spree/payment_spec.rb +919 -0
  420. data/spec/models/spree/preference_spec.rb +80 -0
  421. data/spec/models/spree/preferences/configuration_spec.rb +30 -0
  422. data/spec/models/spree/preferences/preferable_spec.rb +344 -0
  423. data/spec/models/spree/preferences/scoped_store_spec.rb +58 -0
  424. data/spec/models/spree/preferences/store_spec.rb +46 -0
  425. data/spec/models/spree/price_spec.rb +128 -0
  426. data/spec/models/spree/product/scopes_spec.rb +183 -0
  427. data/spec/models/spree/product_duplicator_spec.rb +103 -0
  428. data/spec/models/spree/product_filter_spec.rb +26 -0
  429. data/spec/models/spree/product_option_type_spec.rb +9 -0
  430. data/spec/models/spree/product_promotion_rule_spec.rb +9 -0
  431. data/spec/models/spree/product_property_spec.rb +22 -0
  432. data/spec/models/spree/product_spec.rb +619 -0
  433. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +50 -0
  434. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +148 -0
  435. data/spec/models/spree/promotion/actions/create_line_items_spec.rb +86 -0
  436. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +36 -0
  437. data/spec/models/spree/promotion/rules/country_spec.rb +36 -0
  438. data/spec/models/spree/promotion/rules/first_order_spec.rb +75 -0
  439. data/spec/models/spree/promotion/rules/item_total_spec.rb +282 -0
  440. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +42 -0
  441. data/spec/models/spree/promotion/rules/option_value_spec.rb +90 -0
  442. data/spec/models/spree/promotion/rules/product_spec.rb +143 -0
  443. data/spec/models/spree/promotion/rules/taxon_spec.rb +102 -0
  444. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +27 -0
  445. data/spec/models/spree/promotion/rules/user_spec.rb +45 -0
  446. data/spec/models/spree/promotion_action_spec.rb +10 -0
  447. data/spec/models/spree/promotion_category_spec.rb +17 -0
  448. data/spec/models/spree/promotion_handler/cart_spec.rb +102 -0
  449. data/spec/models/spree/promotion_handler/coupon_spec.rb +323 -0
  450. data/spec/models/spree/promotion_handler/free_shipping_spec.rb +48 -0
  451. data/spec/models/spree/promotion_handler/page_spec.rb +44 -0
  452. data/spec/models/spree/promotion_rule_spec.rb +29 -0
  453. data/spec/models/spree/promotion_rule_taxon_spec.rb +9 -0
  454. data/spec/models/spree/promotion_rule_user_spec.rb +9 -0
  455. data/spec/models/spree/promotion_spec.rb +679 -0
  456. data/spec/models/spree/property_prototype_spec.rb +9 -0
  457. data/spec/models/spree/property_spec.rb +5 -0
  458. data/spec/models/spree/prototype_spec.rb +5 -0
  459. data/spec/models/spree/prototype_taxon_spec.rb +9 -0
  460. data/spec/models/spree/refund_reason_spec.rb +20 -0
  461. data/spec/models/spree/refund_spec.rb +195 -0
  462. data/spec/models/spree/reimbursement/credit_spec.rb +36 -0
  463. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +140 -0
  464. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +83 -0
  465. data/spec/models/spree/reimbursement_performer_spec.rb +30 -0
  466. data/spec/models/spree/reimbursement_spec.rb +188 -0
  467. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +63 -0
  468. data/spec/models/spree/reimbursement_type/credit_spec.rb +53 -0
  469. data/spec/models/spree/reimbursement_type/exchange_spec.rb +46 -0
  470. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +55 -0
  471. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +101 -0
  472. data/spec/models/spree/return_authorization_reason_spec.rb +7 -0
  473. data/spec/models/spree/return_authorization_spec.rb +230 -0
  474. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +77 -0
  475. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +58 -0
  476. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +61 -0
  477. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +32 -0
  478. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +29 -0
  479. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +35 -0
  480. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +65 -0
  481. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +43 -0
  482. data/spec/models/spree/return_item_spec.rb +731 -0
  483. data/spec/models/spree/returns_calculator_spec.rb +14 -0
  484. data/spec/models/spree/role_spec.rb +7 -0
  485. data/spec/models/spree/shipment_spec.rb +742 -0
  486. data/spec/models/spree/shipping_calculator_spec.rb +45 -0
  487. data/spec/models/spree/shipping_category_spec.rb +19 -0
  488. data/spec/models/spree/shipping_method_spec.rb +95 -0
  489. data/spec/models/spree/shipping_rate_spec.rb +140 -0
  490. data/spec/models/spree/state_spec.rb +29 -0
  491. data/spec/models/spree/stock/availability_validator_spec.rb +36 -0
  492. data/spec/models/spree/stock/content_item_spec.rb +31 -0
  493. data/spec/models/spree/stock/coordinator_spec.rb +61 -0
  494. data/spec/models/spree/stock/differentiator_spec.rb +39 -0
  495. data/spec/models/spree/stock/estimator_spec.rb +202 -0
  496. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +38 -0
  497. data/spec/models/spree/stock/package_spec.rb +182 -0
  498. data/spec/models/spree/stock/packer_spec.rb +70 -0
  499. data/spec/models/spree/stock/prioritizer_spec.rb +125 -0
  500. data/spec/models/spree/stock/quantifier_spec.rb +126 -0
  501. data/spec/models/spree/stock/splitter/backordered_spec.rb +29 -0
  502. data/spec/models/spree/stock/splitter/base_spec.rb +21 -0
  503. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +47 -0
  504. data/spec/models/spree/stock/splitter/weight_spec.rb +32 -0
  505. data/spec/models/spree/stock_item_spec.rb +432 -0
  506. data/spec/models/spree/stock_location_spec.rb +243 -0
  507. data/spec/models/spree/stock_movement_spec.rb +120 -0
  508. data/spec/models/spree/stock_transfer_spec.rb +50 -0
  509. data/spec/models/spree/store_credit_event_spec.rb +101 -0
  510. data/spec/models/spree/store_credit_spec.rb +786 -0
  511. data/spec/models/spree/store_spec.rb +78 -0
  512. data/spec/models/spree/tax_category_spec.rb +32 -0
  513. data/spec/models/spree/tax_rate_spec.rb +561 -0
  514. data/spec/models/spree/taxon_spec.rb +85 -0
  515. data/spec/models/spree/taxonomy_spec.rb +18 -0
  516. data/spec/models/spree/tracker_spec.rb +21 -0
  517. data/spec/models/spree/user_spec.rb +203 -0
  518. data/spec/models/spree/variant_spec.rb +809 -0
  519. data/spec/models/spree/zone_member_spec.rb +38 -0
  520. data/spec/models/spree/zone_spec.rb +472 -0
  521. data/spec/spec_helper.rb +79 -0
  522. data/spec/support/big_decimal.rb +5 -0
  523. data/spec/support/concerns/adjustment_source.rb +23 -0
  524. data/spec/support/concerns/default_price.rb +37 -0
  525. data/spec/support/rake.rb +13 -0
  526. data/spec/support/test_gateway.rb +2 -0
  527. data/spree_core.gemspec +12 -12
  528. metadata +249 -43
  529. data/config/initializers/premailer_rails.rb +0 -3
@@ -0,0 +1,289 @@
1
+ # encoding: utf-8
2
+
3
+ require "spec_helper"
4
+
5
+ module Spree
6
+ describe ProductsHelper, type: :helper do
7
+ include ProductsHelper
8
+
9
+ let(:product) { create(:product) }
10
+ let(:currency) { 'USD' }
11
+
12
+ before do
13
+ allow(helper).to receive(:current_currency) { currency }
14
+ end
15
+
16
+ context "#variant_price_diff" do
17
+ let(:product_price) { 10 }
18
+ let(:variant_price) { 10 }
19
+
20
+ before do
21
+ @variant = create(:variant, product: product)
22
+ product.price = 15
23
+ @variant.price = 10
24
+ allow(product).to receive(:amount_in) { product_price }
25
+ allow(@variant).to receive(:amount_in) { variant_price }
26
+ end
27
+
28
+ subject { helper.variant_price(@variant) }
29
+
30
+ context "when variant is same as master" do
31
+ it { is_expected.to be_nil }
32
+ end
33
+
34
+ context "when the master has no price" do
35
+ let(:product_price) { nil }
36
+
37
+ it { is_expected.to be_nil }
38
+ end
39
+
40
+ context "when currency is default" do
41
+ context "when variant is more than master" do
42
+ let(:variant_price) { 15 }
43
+
44
+ it { is_expected.to eq("(Add: $5.00)") }
45
+ # Regression test for #2737
46
+ it { is_expected.to be_html_safe }
47
+ end
48
+
49
+ context "when variant is less than master" do
50
+ let(:product_price) { 15 }
51
+
52
+ it { is_expected.to eq("(Subtract: $5.00)") }
53
+ end
54
+ end
55
+
56
+ context "when currency is JPY" do
57
+ let(:variant_price) { 100 }
58
+ let(:product_price) { 100 }
59
+ let(:currency) { 'JPY' }
60
+
61
+ context "when variant is more than master" do
62
+ let(:variant_price) { 150 }
63
+
64
+ it { is_expected.to eq("(Add: ¥50)") }
65
+ end
66
+
67
+ context "when variant is less than master" do
68
+ let(:product_price) { 150 }
69
+
70
+ it { is_expected.to eq("(Subtract: ¥50)") }
71
+ end
72
+ end
73
+ end
74
+
75
+ context "#variant_price_full" do
76
+ before do
77
+ Spree::Config[:show_variant_full_price] = true
78
+ @variant1 = create(:variant, product: product)
79
+ @variant2 = create(:variant, product: product)
80
+ end
81
+
82
+ context "when currency is default" do
83
+ it "should return the variant price if the price is different than master" do
84
+ product.price = 10
85
+ @variant1.price = 15
86
+ @variant2.price = 20
87
+ expect(helper.variant_price(@variant1)).to eq("$15.00")
88
+ expect(helper.variant_price(@variant2)).to eq("$20.00")
89
+ end
90
+ end
91
+
92
+ context "when currency is JPY" do
93
+ let(:currency) { 'JPY' }
94
+
95
+ before do
96
+ product.variants.active.each do |variant|
97
+ variant.prices.each do |price|
98
+ price.currency = currency
99
+ price.save!
100
+ end
101
+ end
102
+ end
103
+
104
+ it "should return the variant price if the price is different than master" do
105
+ product.price = 100
106
+ @variant1.price = 150
107
+ expect(helper.variant_price(@variant1)).to eq("¥150")
108
+ end
109
+ end
110
+
111
+ it "should be nil when all variant prices are equal" do
112
+ product.price = 10
113
+ @variant1.default_price.update_column(:amount, 10)
114
+ @variant2.default_price.update_column(:amount, 10)
115
+ expect(helper.variant_price(@variant1)).to be_nil
116
+ expect(helper.variant_price(@variant2)).to be_nil
117
+ end
118
+ end
119
+
120
+
121
+ context "#product_description" do
122
+ # Regression test for #1607
123
+ it "renders a product description without excessive paragraph breaks" do
124
+ product.description = %Q{
125
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus a ligula leo. Proin eu arcu at ipsum dapibus ullamcorper. Pellentesque egestas orci nec magna condimentum luctus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Ut ac ante et mauris bibendum ultricies non sed massa. Fusce facilisis dui eget lacus scelerisque eget aliquam urna ultricies. Duis et rhoncus quam. Praesent tellus nisi, ultrices sed iaculis quis, euismod interdum ipsum.</p>
126
+ <ul>
127
+ <li>Lorem ipsum dolor sit amet</li>
128
+ <li>Lorem ipsum dolor sit amet</li>
129
+ </ul>
130
+ }
131
+ description = product_description(product)
132
+ expect(description.strip).to eq(product.description.strip)
133
+ end
134
+
135
+ it "renders a product description with automatic paragraph breaks" do
136
+ product.description = %Q{
137
+ THIS IS THE BEST PRODUCT EVER!
138
+
139
+ "IT CHANGED MY LIFE" - Sue, MD}
140
+
141
+ description = product_description(product)
142
+ expect(description.strip).to eq(%Q{<p>\nTHIS IS THE BEST PRODUCT EVER!</p>"IT CHANGED MY LIFE" - Sue, MD})
143
+ end
144
+
145
+ it "renders a product description without any formatting based on configuration" do
146
+ initialDescription = %Q{
147
+ <p>hello world</p>
148
+
149
+ <p>tihs is completely awesome and it works</p>
150
+
151
+ <p>why so many spaces in the code. and why some more formatting afterwards?</p>
152
+ }
153
+
154
+ product.description = initialDescription
155
+
156
+ Spree::Config[:show_raw_product_description] = true
157
+ description = product_description(product)
158
+ expect(description).to eq(initialDescription)
159
+ end
160
+
161
+ context "renders a product description default description incase description is blank" do
162
+ before { product.description = '' }
163
+ it { expect(product_description(product)).to eq(Spree.t(:product_has_no_description)) }
164
+ end
165
+ end
166
+
167
+ shared_examples_for "line item descriptions" do
168
+ context 'variant has a blank description' do
169
+ let(:description) { nil }
170
+ it { is_expected.to eq(Spree.t(:product_has_no_description)) }
171
+ end
172
+ context 'variant has a description' do
173
+ let(:description) { 'test_desc' }
174
+ it { is_expected.to eq(description) }
175
+ end
176
+ context 'description has nonbreaking spaces' do
177
+ let(:description) { 'test&nbsp;desc' }
178
+ it { is_expected.to eq('test desc') }
179
+ end
180
+ context 'description has line endings' do
181
+ let(:description) { "test\n\r\ndesc" }
182
+ it { is_expected.to eq('test desc') }
183
+ end
184
+ end
185
+
186
+ context '#line_item_description_text' do
187
+ subject { line_item_description_text description }
188
+
189
+ it_should_behave_like "line item descriptions"
190
+ end
191
+
192
+ context '#cache_key_for_products' do
193
+ let(:zone) { Spree::Zone.new }
194
+ let(:price_options) { { tax_zone: zone } }
195
+
196
+ subject { helper.cache_key_for_products }
197
+ before(:each) do
198
+ @products = double('products collection')
199
+ allow(helper).to receive(:params) { {page: 10} }
200
+ allow(helper).to receive(:current_price_options) { price_options }
201
+ end
202
+
203
+ context 'when there is a maximum updated date' do
204
+ let(:updated_at) { Date.new(2011, 12, 13) }
205
+ before :each do
206
+ allow(@products).to receive(:count) { 5 }
207
+ allow(@products).to receive(:maximum).with(:updated_at) { updated_at }
208
+ end
209
+
210
+ it { is_expected.to eq("en/USD/spree/zones/new/spree/products/all-10-20111213-5") }
211
+ end
212
+
213
+ context 'when there is no considered maximum updated date' do
214
+ let(:today) { Date.new(2013, 12, 11) }
215
+ before :each do
216
+ allow(@products).to receive(:count) { 1234567 }
217
+ allow(@products).to receive(:maximum).with(:updated_at) { nil }
218
+ allow(Date).to receive(:today) { today }
219
+ end
220
+
221
+ it { is_expected.to eq("en/USD/spree/zones/new/spree/products/all-10-20131211-1234567") }
222
+ end
223
+ end
224
+
225
+ context "#cache_key_for_product" do
226
+ let(:product) { Spree::Product.new }
227
+ let(:price_options) { { tax_zone: zone } }
228
+
229
+ subject(:cache_key) { helper.cache_key_for_product(product) }
230
+
231
+ before do
232
+ allow(helper).to receive(:current_price_options) { price_options }
233
+ end
234
+
235
+ context "when there is a current tax zone" do
236
+ let(:zone) { Spree::Zone.new }
237
+
238
+ it "includes the current_tax_zone" do
239
+ is_expected.to eq("en/USD/spree/zones/new/spree/products/new/")
240
+ end
241
+ end
242
+
243
+ context "when there is no current tax zone" do
244
+ let(:zone) { nil }
245
+
246
+ it { is_expected.to eq("en/USD/spree/products/new/") }
247
+ end
248
+
249
+ context "when current_price_options includes nil values" do
250
+ let(:price_options) do
251
+ {
252
+ a: nil,
253
+ b: Spree::Zone.new
254
+ }
255
+ end
256
+
257
+ it "does not include nil values" do
258
+ expect(cache_key).to eq("en/USD/spree/zones/new/spree/products/new/")
259
+ end
260
+ end
261
+
262
+ context "when current_price_options includes values that do not implement cache_key" do
263
+ let(:price_options) do
264
+ {
265
+ a: true,
266
+ b: Spree::Zone.new
267
+ }
268
+ end
269
+
270
+ it "includes string representations of these values" do
271
+ expect(cache_key).to eq("en/USD/true/spree/zones/new/spree/products/new/")
272
+ end
273
+ end
274
+
275
+ context "when keys in the options hash are inserted in non-alphabetical order" do
276
+ let(:price_options) do
277
+ {
278
+ b: Spree::Zone.new,
279
+ a: true
280
+ }
281
+ end
282
+
283
+ it "the values are nevertheless returned in alphabetical order of their keys" do
284
+ expect(cache_key).to eq("en/USD/true/spree/zones/new/spree/products/new/")
285
+ end
286
+ end
287
+ end
288
+ end
289
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::CalculatedAdjustments do
4
+ it "should add has_one :calculator relationship" do
5
+ assert Spree::ShippingMethod.reflect_on_all_associations(:has_one).map(&:name).include?(:calculator)
6
+ end
7
+ end
@@ -0,0 +1,123 @@
1
+ require 'rspec/expectations'
2
+ require 'spree/i18n'
3
+ require 'spree/testing_support/i18n'
4
+
5
+ describe "i18n" do
6
+ before do
7
+ I18n.backend.store_translations(:en,
8
+ {
9
+ spree: {
10
+ foo: "bar",
11
+ bar: {
12
+ foo: "bar within bar scope",
13
+ invalid: nil,
14
+ legacy_translation: "back in the day..."
15
+ },
16
+ invalid: nil,
17
+ legacy_translation: "back in the day..."
18
+ }
19
+ })
20
+ end
21
+
22
+ it "translates within the spree scope" do
23
+ expect(Spree.normal_t(:foo)).to eql("bar")
24
+ expect(Spree.translate(:foo)).to eql("bar")
25
+ end
26
+
27
+ it "translates within the spree scope using a path" do
28
+ allow(Spree).to receive(:virtual_path).and_return('bar')
29
+
30
+ expect(Spree.normal_t('.legacy_translation')).to eql("back in the day...")
31
+ expect(Spree.translate('.legacy_translation')).to eql("back in the day...")
32
+ end
33
+
34
+ it "raise error without any context when using a path" do
35
+ expect {
36
+ Spree.normal_t('.legacy_translation')
37
+ }.to raise_error(StandardError)
38
+
39
+ expect {
40
+ Spree.translate('.legacy_translation')
41
+ }.to raise_error(StandardError)
42
+ end
43
+
44
+ it "prepends a string scope" do
45
+ expect(Spree.normal_t(:foo, scope: "bar")).to eql("bar within bar scope")
46
+ end
47
+
48
+ it "prepends to an array scope" do
49
+ expect(Spree.normal_t(:foo, scope: ["bar"])).to eql("bar within bar scope")
50
+ end
51
+
52
+ it "returns two translations" do
53
+ expect(Spree.normal_t([:foo, 'bar.foo'])).to eql(["bar", "bar within bar scope"])
54
+ end
55
+
56
+ it "returns reasonable string for missing translations" do
57
+ expect(Spree.t(:missing_entry)).to include("<span")
58
+ end
59
+
60
+ context "missed + unused translations" do
61
+ def key_with_locale(key)
62
+ "#{key} (#{I18n.locale})"
63
+ end
64
+
65
+ before do
66
+ Spree.used_translations = []
67
+ end
68
+
69
+ context "missed translations" do
70
+ def assert_missing_translation(key)
71
+ key = key_with_locale(key)
72
+ message = Spree.missing_translation_messages.detect { |m| m == key }
73
+ expect(message).not_to(be_nil, "expected '#{key}' to be missing, but it wasn't.")
74
+ end
75
+
76
+ it "logs missing translations" do
77
+ Spree.t(:missing, scope: [:else, :where])
78
+ Spree.check_missing_translations
79
+ assert_missing_translation("else")
80
+ assert_missing_translation("else.where")
81
+ assert_missing_translation("else.where.missing")
82
+ end
83
+
84
+ it "does not log present translations" do
85
+ Spree.t(:foo)
86
+ Spree.check_missing_translations
87
+ expect(Spree.missing_translation_messages).to be_empty
88
+ end
89
+
90
+ it "does not break when asked for multiple translations" do
91
+ Spree.t [:foo, 'bar.foo']
92
+ Spree.check_missing_translations
93
+ expect(Spree.missing_translation_messages).to be_empty
94
+ end
95
+ end
96
+
97
+ context "unused translations" do
98
+ def assert_unused_translation(key)
99
+ key = key_with_locale(key)
100
+ message = Spree.unused_translation_messages.detect { |m| m == key }
101
+ expect(message).not_to(be_nil, "expected '#{key}' to be unused, but it was used.")
102
+ end
103
+
104
+ def assert_used_translation(key)
105
+ key = key_with_locale(key)
106
+ message = Spree.unused_translation_messages.detect { |m| m == key }
107
+ expect(message).to(be_nil, "expected '#{key}' to be used, but it wasn't.")
108
+ end
109
+
110
+ it "logs translations that aren't used" do
111
+ Spree.check_unused_translations
112
+ assert_unused_translation("bar.legacy_translation")
113
+ assert_unused_translation("legacy_translation")
114
+ end
115
+
116
+ it "does not log used translations" do
117
+ Spree.t(:foo)
118
+ Spree.check_unused_translations
119
+ assert_used_translation("foo")
120
+ end
121
+ end
122
+ end
123
+ end
@@ -0,0 +1,86 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Core::Search::Base do
4
+
5
+ before do
6
+ include Spree::Core::ProductFilters
7
+ @taxon = create(:taxon, name: "Ruby on Rails")
8
+
9
+ @product1 = create(:product, name: "RoR Mug", price: 9.00)
10
+ @product1.taxons << @taxon
11
+ @product2 = create(:product, name: "RoR Shirt", price: 11.00)
12
+ end
13
+
14
+ it "returns all products by default" do
15
+ params = { per_page: "" }
16
+ searcher = Spree::Core::Search::Base.new(params)
17
+ expect(searcher.retrieve_products.count).to eq(2)
18
+ end
19
+
20
+ context "when include_images is included in the initalization params" do
21
+ let(:params) { { include_images: true, keyword: @product1.name, taxon: @taxon.id } }
22
+ subject { described_class.new(params).retrieve_products }
23
+
24
+ before do
25
+ @product1.master.images << create(:image, position: 2)
26
+ @product1.master.images << create(:image, position: 1)
27
+ @product1.reload
28
+ end
29
+
30
+ it "returns images in correct order" do
31
+ expect(subject.first).to eq @product1
32
+ expect(subject.first.images).to eq @product1.master.images
33
+ end
34
+ end
35
+
36
+ it "switches to next page according to the page parameter" do
37
+ @product3 = create(:product, name: "RoR Pants", price: 14.00)
38
+
39
+ params = { per_page: "2" }
40
+ searcher = Spree::Core::Search::Base.new(ActionController::Parameters.new(params))
41
+ expect(searcher.retrieve_products.count).to eq(2)
42
+
43
+ params.merge! page: "2"
44
+ searcher = Spree::Core::Search::Base.new(ActionController::Parameters.new(params))
45
+ expect(searcher.retrieve_products.count).to eq(1)
46
+ end
47
+
48
+ it "maps search params to named scopes" do
49
+ params = { per_page: "",
50
+ search: { "price_range_any" => ["Under $10.00"] }}
51
+ searcher = Spree::Core::Search::Base.new(ActionController::Parameters.new(params))
52
+ expect(searcher.send(:get_base_scope).to_sql).to match /<= 10/
53
+ expect(searcher.retrieve_products.count).to eq(1)
54
+ end
55
+
56
+ it "maps multiple price_range_any filters" do
57
+ params = { per_page: "",
58
+ search: { "price_range_any" => ["Under $10.00", "$10.00 - $15.00"] }}
59
+ searcher = Spree::Core::Search::Base.new(ActionController::Parameters.new(params))
60
+ expect(searcher.send(:get_base_scope).to_sql).to match /<= 10/
61
+ expect(searcher.send(:get_base_scope).to_sql).to match /between 10 and 15/i
62
+ expect(searcher.retrieve_products.count).to eq(2)
63
+ end
64
+
65
+ it "uses ransack if scope not found" do
66
+ params = { per_page: "",
67
+ search: { "name_not_cont" => "Shirt" }}
68
+ searcher = Spree::Core::Search::Base.new(ActionController::Parameters.new(params))
69
+ expect(searcher.retrieve_products.count).to eq(1)
70
+ end
71
+
72
+ it "accepts a current user" do
73
+ user = double
74
+ searcher = Spree::Core::Search::Base.new({})
75
+ searcher.current_user = user
76
+ expect(searcher.current_user).to eql(user)
77
+ end
78
+
79
+ it "finds products in alternate currencies" do
80
+ price = create(:price, currency: 'EUR', variant: @product1.master)
81
+ searcher = Spree::Core::Search::Base.new({})
82
+ searcher.current_currency = 'EUR'
83
+ expect(searcher.retrieve_products).to eq([@product1])
84
+ end
85
+
86
+ end
@@ -0,0 +1,103 @@
1
+ require 'spec_helper'
2
+ require 'spree/testing_support/url_helpers'
3
+
4
+ class FakesController < ApplicationController
5
+ include Spree::Core::ControllerHelpers::Auth
6
+ def index; render plain: 'index'; end
7
+ end
8
+
9
+ describe Spree::Core::ControllerHelpers::Auth, type: :controller do
10
+ controller(FakesController) {}
11
+ include Spree::TestingSupport::UrlHelpers
12
+
13
+ describe '#current_ability' do
14
+ it 'returns Spree::Ability instance' do
15
+ expect(controller.current_ability.class).to eq Spree::Ability
16
+ end
17
+ end
18
+
19
+ describe '#redirect_back_or_default' do
20
+ controller(FakesController) do
21
+ def index; redirect_back_or_default('/'); end
22
+ end
23
+ it 'redirects to session url' do
24
+ session[:spree_user_return_to] = '/redirect'
25
+ get :index
26
+ expect(response).to redirect_to('/redirect')
27
+ end
28
+ it 'redirects to HTTP_REFERER' do
29
+ request.env["HTTP_REFERER"] = '/dummy_redirect'
30
+ get :index
31
+ expect(response).to redirect_to('/dummy_redirect')
32
+ end
33
+ it 'redirects to default page' do
34
+ get :index
35
+ expect(response).to redirect_to('/')
36
+ end
37
+ end
38
+
39
+ describe '#set_guest_token' do
40
+ controller(FakesController) do
41
+ def index
42
+ set_guest_token
43
+ render plain: 'index'
44
+ end
45
+ end
46
+ it 'sends cookie header' do
47
+ get :index
48
+ expect(response.cookies['guest_token']).not_to be_nil
49
+ end
50
+ end
51
+
52
+ describe '#store_location' do
53
+ it 'sets session return url' do
54
+ allow(controller).to receive_messages(request: double(fullpath: '/redirect'))
55
+ controller.store_location
56
+ expect(session[:spree_user_return_to]).to eq '/redirect'
57
+ end
58
+ end
59
+
60
+ describe '#try_spree_current_user' do
61
+ it 'calls spree_current_user when define spree_current_user method' do
62
+ expect(controller).to receive(:spree_current_user)
63
+ controller.try_spree_current_user
64
+ end
65
+ it 'calls current_spree_user when define current_spree_user method' do
66
+ expect(controller).to receive(:current_spree_user)
67
+ controller.try_spree_current_user
68
+ end
69
+ it 'returns nil' do
70
+ expect(controller.try_spree_current_user).to eq nil
71
+ end
72
+ end
73
+
74
+ describe '#redirect_unauthorized_access' do
75
+ controller(FakesController) do
76
+ def index; redirect_unauthorized_access; end
77
+ end
78
+ context 'when logged in' do
79
+ before do
80
+ allow(controller).to receive_messages(try_spree_current_user: double('User', id: 1, last_incomplete_spree_order: nil))
81
+ end
82
+ it 'redirects forbidden path' do
83
+ get :index
84
+ expect(response).to redirect_to(spree.forbidden_path)
85
+ end
86
+ end
87
+ context 'when guest user' do
88
+ before do
89
+ allow(controller).to receive_messages(try_spree_current_user: nil)
90
+ end
91
+ it 'redirects login path' do
92
+ allow(controller).to receive_messages(spree_login_path: '/login')
93
+ get :index
94
+ expect(response).to redirect_to('/login')
95
+ end
96
+ it 'redirects root path' do
97
+ allow(controller).to receive_message_chain(:spree, :root_path).and_return('/root_path')
98
+ get :index
99
+ expect(response).to redirect_to('/root_path')
100
+ end
101
+ end
102
+ end
103
+ end