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,86 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Adjustable::Adjuster::Tax, type: :model do
4
+ let(:order) { create :order_with_line_items, line_items_count: 1 }
5
+ let(:line_item) { order.line_items.first }
6
+
7
+ let(:subject) { Spree::Adjustable::AdjustmentsUpdater.new(line_item) }
8
+ let(:order_subject) { Spree::Adjustable::AdjustmentsUpdater.new(order) }
9
+
10
+ context "taxes with promotions" do
11
+ let!(:tax_rate) do
12
+ create(:tax_rate, amount: 0.05)
13
+ end
14
+
15
+ let!(:promotion) do
16
+ Spree::Promotion.create(name: "$10 off")
17
+ end
18
+
19
+ let!(:promotion_action) do
20
+ calculator = Spree::Calculator::FlatRate.new(preferred_amount: 10)
21
+ Spree::Promotion::Actions::CreateItemAdjustments.create(calculator: calculator,
22
+ promotion: promotion)
23
+ end
24
+
25
+ before do
26
+ line_item.price = 20
27
+ line_item.tax_category = tax_rate.tax_category
28
+ line_item.save
29
+ create(:adjustment, order: order, source: promotion_action, adjustable: line_item)
30
+ end
31
+
32
+ context "tax included in price" do
33
+ before do
34
+ create(:adjustment,
35
+ source: tax_rate,
36
+ adjustable: line_item,
37
+ order: order,
38
+ included: true)
39
+ end
40
+
41
+ it "tax has no bearing on final price" do
42
+ subject.update
43
+ line_item.reload
44
+ expect(line_item.included_tax_total).to eq(0.5)
45
+ expect(line_item.additional_tax_total).to eq(0)
46
+ expect(line_item.promo_total).to eq(-10)
47
+ expect(line_item.adjustment_total).to eq(-10)
48
+ end
49
+
50
+ it "tax linked to order" do
51
+ order_subject.update
52
+ order.reload
53
+ expect(order.included_tax_total).to eq(0.5)
54
+ expect(order.additional_tax_total).to eq(00)
55
+ end
56
+ end
57
+
58
+ context "tax excluded from price" do
59
+ before do
60
+ create(:adjustment,
61
+ source: tax_rate,
62
+ adjustable: line_item,
63
+ order: order,
64
+ included: false)
65
+ end
66
+
67
+ it "tax applies to line item" do
68
+ subject.update
69
+ line_item.reload
70
+ # Taxable amount is: $20 (base) - $10 (promotion) = $10
71
+ # Tax rate is 5% (of $10).
72
+ expect(line_item.included_tax_total).to eq(0)
73
+ expect(line_item.additional_tax_total).to eq(0.5)
74
+ expect(line_item.promo_total).to eq(-10)
75
+ expect(line_item.adjustment_total).to eq(-9.5)
76
+ end
77
+
78
+ it "tax linked to order" do
79
+ order_subject.update
80
+ order.reload
81
+ expect(order.included_tax_total).to eq(0)
82
+ expect(order.additional_tax_total).to eq(0.5)
83
+ end
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ module Spree
4
+ module Adjustable
5
+ describe AdjustmentsUpdater do
6
+ let(:order) { create :order_with_line_items, line_items_count: 1 }
7
+ let(:line_item) { order.line_items.first }
8
+
9
+ let(:subject) { AdjustmentsUpdater.new(line_item) }
10
+ let(:order_subject) { AdjustmentsUpdater.new(order) }
11
+
12
+ describe '#update' do
13
+ it "updates all linked adjusters" do
14
+ tax_rate = create(:tax_rate, amount: 0.05)
15
+ create(:adjustment, order: order, source: tax_rate, adjustable: line_item)
16
+ line_item.price = 10
17
+ line_item.tax_category = tax_rate.tax_category
18
+
19
+ subject.update
20
+ expect(line_item.adjustment_total).to eq(0.5)
21
+ expect(line_item.additional_tax_total).to eq(0.5)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,189 @@
1
+ # encoding: utf-8
2
+ #
3
+
4
+ require 'spec_helper'
5
+
6
+ describe Spree::Adjustment, type: :model do
7
+
8
+ let(:order) { Spree::Order.new }
9
+
10
+ before do
11
+ allow(order).to receive(:update_with_updater!)
12
+ end
13
+
14
+ let(:adjustment) { Spree::Adjustment.create!(label: 'Adjustment', adjustable: order, order: order, amount: 5) }
15
+
16
+ describe 'scopes' do
17
+ describe '.for_complete_order' do
18
+ let(:complete_order) { Spree::Order.create! completed_at: Time.current }
19
+ let(:incomplete_order) { Spree::Order.create! completed_at: nil }
20
+ let(:adjustment_for_complete_order) { Spree::Adjustment.create!(label: 'Adjustment', adjustable: complete_order, order: complete_order, amount: 5) }
21
+ let(:adjustment_for_incomplete_order) { Spree::Adjustment.create!(label: 'Adjustment', adjustable: incomplete_order, order: incomplete_order, amount: 5) }
22
+
23
+ subject { Spree::Adjustment.for_complete_order }
24
+
25
+ it { is_expected.to include(adjustment_for_complete_order) }
26
+ it { is_expected.to_not include(adjustment_for_incomplete_order) }
27
+ end
28
+
29
+ describe '.for_incomplete_order' do
30
+ let(:complete_order) { Spree::Order.create! completed_at: Time.current }
31
+ let(:incomplete_order) { Spree::Order.create! completed_at: nil }
32
+ let(:adjustment_for_complete_order) { Spree::Adjustment.create!(label: 'Adjustment', adjustable: complete_order, order: complete_order, amount: 5) }
33
+ let(:adjustment_for_incomplete_order) { Spree::Adjustment.create!(label: 'Adjustment', adjustable: incomplete_order, order: incomplete_order, amount: 5) }
34
+
35
+ subject { Spree::Adjustment.for_incomplete_order }
36
+
37
+ it { is_expected.to_not include(adjustment_for_complete_order) }
38
+ it { is_expected.to include(adjustment_for_incomplete_order) }
39
+ end
40
+ end
41
+
42
+ context '#create & #destroy' do
43
+ let(:adjustment) { Spree::Adjustment.new(label: "Adjustment", amount: 5, order: order, adjustable: create(:line_item)) }
44
+
45
+ it 'calls #update_adjustable_adjustment_total' do
46
+ expect(adjustment).to receive(:update_adjustable_adjustment_total).twice
47
+ adjustment.save
48
+ adjustment.destroy
49
+ end
50
+ end
51
+
52
+ context '#save' do
53
+ let(:order) { Spree::Order.create! }
54
+ let!(:adjustment) { Spree::Adjustment.create(label: "Adjustment", amount: 5, order: order, adjustable: order) }
55
+
56
+ it 'touches the adjustable' do
57
+ expect(adjustment.adjustable).to receive(:touch)
58
+ adjustment.amount = 3
59
+ adjustment.save
60
+ end
61
+ end
62
+
63
+ describe 'non_tax scope' do
64
+ subject do
65
+ Spree::Adjustment.non_tax.to_a
66
+ end
67
+
68
+ let!(:tax_adjustment) { create(:adjustment, order: order, source: create(:tax_rate)) }
69
+ let!(:non_tax_adjustment_with_source) { create(:adjustment, order: order, source_type: 'Spree::Order', source_id: nil) }
70
+ let!(:non_tax_adjustment_without_source) { create(:adjustment, order: order, source: nil) }
71
+
72
+ it 'select non-tax adjustments' do
73
+ expect(subject).to_not include tax_adjustment
74
+ expect(subject).to include non_tax_adjustment_with_source
75
+ expect(subject).to include non_tax_adjustment_without_source
76
+ end
77
+ end
78
+
79
+ describe 'competing_promos scope' do
80
+ before do
81
+ allow_any_instance_of(Spree::Adjustment).to receive(:update_adjustable_adjustment_total).and_return(true)
82
+ end
83
+
84
+ subject do
85
+ Spree::Adjustment.competing_promos.to_a
86
+ end
87
+
88
+ let!(:promotion_adjustment) { create(:adjustment, order: order, source_type: 'Spree::PromotionAction', source_id: nil) }
89
+ let!(:custom_adjustment_with_source) { create(:adjustment, order: order, source_type: 'Custom', source_id: nil) }
90
+ let!(:non_promotion_adjustment_with_source) { create(:adjustment, order: order, source_type: 'Spree::Order', source_id: nil) }
91
+ let!(:non_promotion_adjustment_without_source) { create(:adjustment, order: order, source: nil) }
92
+
93
+ context 'no custom source_types have been added to competing_promos' do
94
+ before { Spree::Adjustment.competing_promos_source_types = ['Spree::PromotionAction'] }
95
+
96
+ it 'selects promotion adjustments by default' do
97
+ expect(subject).to include promotion_adjustment
98
+ expect(subject).to_not include custom_adjustment_with_source
99
+ expect(subject).to_not include non_promotion_adjustment_with_source
100
+ expect(subject).to_not include non_promotion_adjustment_without_source
101
+ end
102
+ end
103
+
104
+ context 'a custom source_type has been added to competing_promos' do
105
+ before { Spree::Adjustment.competing_promos_source_types = ['Spree::PromotionAction', 'Custom'] }
106
+
107
+ it 'selects adjustments with registered source_types' do
108
+ expect(subject).to include promotion_adjustment
109
+ expect(subject).to include custom_adjustment_with_source
110
+ expect(subject).to_not include non_promotion_adjustment_with_source
111
+ expect(subject).to_not include non_promotion_adjustment_without_source
112
+ end
113
+ end
114
+ end
115
+
116
+
117
+ context "adjustment state" do
118
+ let(:adjustment) { create(:adjustment, order: order, state: 'open') }
119
+
120
+ context "#closed?" do
121
+ it "is true when adjustment state is closed" do
122
+ adjustment.state = "closed"
123
+ expect(adjustment).to be_closed
124
+ end
125
+
126
+ it "is false when adjustment state is open" do
127
+ adjustment.state = "open"
128
+ expect(adjustment).to_not be_closed
129
+ end
130
+ end
131
+ end
132
+
133
+ context '#currency' do
134
+ it 'returns the globally configured currency' do
135
+ expect(adjustment.currency).to eq 'USD'
136
+ end
137
+ end
138
+
139
+ context "#display_amount" do
140
+ before { adjustment.amount = 10.55 }
141
+
142
+ it "shows the amount" do
143
+ expect(adjustment.display_amount.to_s).to eq "$10.55"
144
+ end
145
+
146
+ context "with currency set to JPY" do
147
+ context "when adjustable is set to an order" do
148
+ before do
149
+ expect(order).to receive(:currency).and_return('JPY')
150
+ adjustment.adjustable = order
151
+ end
152
+
153
+ it "displays in JPY" do
154
+ expect(adjustment.display_amount.to_s).to eq "¥11"
155
+ end
156
+ end
157
+
158
+ context "when adjustable is nil" do
159
+ it "displays in the default currency" do
160
+ expect(adjustment.display_amount.to_s).to eq "$10.55"
161
+ end
162
+ end
163
+ end
164
+ end
165
+
166
+ context '#update!' do
167
+ context "when adjustment is closed" do
168
+ before { expect(adjustment).to receive(:closed?).and_return(true) }
169
+
170
+ it "does not update the adjustment" do
171
+ expect(adjustment).to_not receive(:update_column)
172
+ adjustment.update!
173
+ end
174
+ end
175
+
176
+ context "when adjustment is open" do
177
+ before { expect(adjustment).to receive(:closed?).and_return(false) }
178
+
179
+ it "updates the amount" do
180
+ expect(adjustment).to receive(:adjustable).and_return(double("Adjustable")).at_least(1).times
181
+ expect(adjustment).to receive(:source).and_return(double("Source")).at_least(1).times
182
+ expect(adjustment.source).to receive("compute_amount").with(adjustment.adjustable).and_return(5)
183
+ expect(adjustment).to receive(:update_columns).with(amount: 5, updated_at: kind_of(Time))
184
+ adjustment.update!
185
+ end
186
+ end
187
+ end
188
+
189
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::AppConfiguration, type: :model do
4
+ let (:prefs) { Rails.application.config.spree.preferences }
5
+
6
+ it "should be available from the environment" do
7
+ prefs.layout = "my/layout"
8
+ expect(prefs.layout).to eq "my/layout"
9
+ end
10
+
11
+ it "should be available as Spree::Config for legacy access" do
12
+ Spree::Config.layout = "my/layout"
13
+ expect(Spree::Config.layout).to eq "my/layout"
14
+ end
15
+
16
+ it "uses base searcher class by default" do
17
+ prefs.searcher_class = nil
18
+ expect(prefs.searcher_class).to eq Spree::Core::Search::Base
19
+ end
20
+
21
+ describe 'admin_path' do
22
+ it { expect(Spree::Config).to have_preference(:admin_path) }
23
+ it { expect(Spree::Config.preferred_admin_path_type).to eq(:string) }
24
+ it { expect(Spree::Config.preferred_admin_path_default).to eq('/admin') }
25
+ end
26
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Asset, type: :model do
4
+ describe "#viewable" do
5
+ it "touches association" do
6
+ Timecop.scale(3600) do
7
+
8
+ product = create(:custom_product)
9
+ asset = Spree::Asset.create! { |a| a.viewable = product.master }
10
+
11
+ expect do
12
+ asset.touch
13
+ end.to change { product.reload.updated_at }
14
+ end
15
+ end
16
+ end
17
+
18
+ describe "#acts_as_list scope" do
19
+ it "should start from first position for different viewables" do
20
+ asset1 = Spree::Asset.create(viewable_type: 'Spree::Image', viewable_id: 1)
21
+ asset2 = Spree::Asset.create(viewable_type: 'Spree::LineItem', viewable_id: 1)
22
+
23
+ expect(asset1.position).to eq 1
24
+ expect(asset2.position).to eq 1
25
+ end
26
+ end
27
+
28
+ end
@@ -0,0 +1,152 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Calculator::DefaultTax, type: :model do
4
+ let!(:country) { create(:country) }
5
+ let!(:zone) { create(:zone, name: "Country Zone", default_tax: true, zone_members: []) }
6
+ let!(:tax_category) { create(:tax_category, tax_rates: []) }
7
+ let!(:rate) { create(:tax_rate, tax_category: tax_category, amount: 0.05, included_in_price: included_in_price) }
8
+ let(:included_in_price) { false }
9
+ let!(:calculator) { Spree::Calculator::DefaultTax.new(calculable: rate) }
10
+ let!(:order) { create(:order) }
11
+ let!(:line_item) { create(:line_item, price: 10, quantity: 3, tax_category: tax_category) }
12
+ let!(:shipment) { create(:shipment, cost: 15) }
13
+
14
+ context "#compute" do
15
+ context "when given an order" do
16
+ let!(:line_item_1) { line_item }
17
+ let!(:line_item_2) { create(:line_item, price: 10, quantity: 3, tax_category: tax_category) }
18
+
19
+ before do
20
+ allow(order).to receive_messages line_items: [line_item_1, line_item_2]
21
+ end
22
+
23
+ context "when no line items match the tax category" do
24
+ before do
25
+ line_item_1.tax_category = nil
26
+ line_item_2.tax_category = nil
27
+ end
28
+
29
+ it "should be 0" do
30
+ expect(calculator.compute(order)).to eq(0)
31
+ end
32
+ end
33
+
34
+ context "when one item matches the tax category" do
35
+ before do
36
+ line_item_1.tax_category = tax_category
37
+ line_item_2.tax_category = nil
38
+ end
39
+
40
+ it "should be equal to the item total * rate" do
41
+ expect(calculator.compute(order)).to eq(1.5)
42
+ end
43
+
44
+ context "correctly rounds to within two decimal places" do
45
+ before do
46
+ line_item_1.price = 10.333
47
+ line_item_1.quantity = 1
48
+ end
49
+
50
+ specify do
51
+ # Amount is 0.51665, which will be rounded to...
52
+ expect(calculator.compute(order)).to eq(0.52)
53
+ end
54
+ end
55
+ end
56
+
57
+ context "when more than one item matches the tax category" do
58
+ it "should be equal to the sum of the item totals * rate" do
59
+ expect(calculator.compute(order)).to eq(3)
60
+ end
61
+ end
62
+
63
+ context "when tax is included in price" do
64
+ let(:included_in_price) { true }
65
+
66
+ it "will return the deducted amount from the totals" do
67
+ # total price including 5% tax = $60
68
+ # ex pre-tax = $57.14
69
+ # 57.14 + %5 = 59.997 (or "close enough" to $60)
70
+ # 60 - 57.14 = $2.86
71
+ expect(calculator.compute(order).to_f).to eql 2.86
72
+ end
73
+ end
74
+ end
75
+
76
+ context "when tax is included in price" do
77
+ let(:included_in_price) { true }
78
+ context "when the variant matches the tax category" do
79
+ context "when line item is discounted" do
80
+ before do
81
+ line_item.taxable_adjustment_total = -1
82
+ Spree::TaxRate.store_pre_tax_amount(line_item, [rate])
83
+ end
84
+
85
+ it "should be equal to the item's discounted total * rate" do
86
+ expect(calculator.compute(line_item)).to eql 1.38
87
+ end
88
+ end
89
+ it "should be equal to the item's full price * rate" do
90
+ Spree::TaxRate.store_pre_tax_amount(line_item, [rate])
91
+ expect(calculator.compute(line_item)).to eql 1.43
92
+ end
93
+ end
94
+ end
95
+
96
+ context "when tax is not included in price" do
97
+ context "when the line item is discounted" do
98
+ before { line_item.taxable_adjustment_total = -1 }
99
+
100
+ it "should be equal to the item's pre-tax total * rate" do
101
+ expect(calculator.compute(line_item)).to eq(1.45)
102
+ end
103
+ end
104
+
105
+ context "when the variant matches the tax category" do
106
+ it "should be equal to the item pre-tax total * rate" do
107
+ expect(calculator.compute(line_item)).to eq(1.50)
108
+ end
109
+ end
110
+ end
111
+
112
+ context "when given a shipment" do
113
+ it "should be 5% of 15" do
114
+ expect(calculator.compute(shipment)).to eq(0.75)
115
+ end
116
+
117
+ it "takes discounts into consideration" do
118
+ shipment.promo_total = -1
119
+ # 5% of 14
120
+ expect(calculator.compute(shipment)).to eq(0.7)
121
+ end
122
+ end
123
+ end
124
+
125
+ context "when given a line_item" do
126
+ let(:rate) { create(:tax_rate, amount: 0.07, included_in_price: true) }
127
+ let(:line_item) { create(:line_item, quantity: 50, price: 8.50) }
128
+
129
+ subject do
130
+ Spree::Calculator::DefaultTax.new(calculable: rate).
131
+ compute_line_item(line_item)
132
+ end
133
+
134
+ describe "#compute_line_item" do
135
+ it "computes the line item right" do
136
+ Spree::TaxRate.store_pre_tax_amount(line_item, [rate])
137
+ expect(subject).to eq(27.80)
138
+ end
139
+
140
+ context "with a 40$ promo" do
141
+ before do
142
+ allow(line_item).to receive(:taxable_adjustment_total).and_return(BigDecimal.new("-40"))
143
+ Spree::TaxRate.store_pre_tax_amount(line_item, [rate])
144
+ end
145
+
146
+ it "computes the line item right" do
147
+ expect(subject).to eq(25.19)
148
+ end
149
+ end
150
+ end
151
+ end
152
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Calculator::FlatPercentItemTotal, type: :model do
4
+ let(:calculator) { Spree::Calculator::FlatPercentItemTotal.new }
5
+ let(:line_item) { mock_model Spree::LineItem }
6
+
7
+ before { allow(calculator).to receive_messages preferred_flat_percent: 10 }
8
+
9
+ context "compute" do
10
+ it "should round result correctly" do
11
+ allow(line_item).to receive_messages amount: 31.08
12
+ expect(calculator.compute(line_item)).to eq 3.11
13
+
14
+ allow(line_item).to receive_messages amount: 31.00
15
+ expect(calculator.compute(line_item)).to eq 3.10
16
+ end
17
+
18
+ it 'returns object.amount if computed amount is greater' do
19
+ allow(calculator).to receive_messages preferred_flat_percent: 110
20
+ allow(line_item).to receive_messages amount: 30.00
21
+
22
+ expect(calculator.compute(line_item)).to eq 30.0
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Calculator::FlatRate, type: :model do
4
+ let(:calculator) { Spree::Calculator::FlatRate.new }
5
+
6
+ let(:order) do
7
+ mock_model(
8
+ Spree::Order, quantity: 10, currency: "USD"
9
+ )
10
+ end
11
+
12
+ context "compute" do
13
+ it "should compute the amount as the rate when currency matches the order's currency" do
14
+ calculator.preferred_amount = 25.0
15
+ calculator.preferred_currency = "GBP"
16
+ allow(order).to receive_messages currency: "GBP"
17
+ expect(calculator.compute(order).round(2)).to eq(25.0)
18
+ end
19
+
20
+ it "should compute the amount as 0 when currency does not match the order's currency" do
21
+ calculator.preferred_amount = 100.0
22
+ calculator.preferred_currency = "GBP"
23
+ allow(order).to receive_messages currency: "USD"
24
+ expect(calculator.compute(order).round(2)).to eq(0.0)
25
+ end
26
+
27
+ it "should compute the amount as 0 when currency is blank" do
28
+ calculator.preferred_amount = 100.0
29
+ calculator.preferred_currency = ""
30
+ allow(order).to receive_messages currency: "GBP"
31
+ expect(calculator.compute(order).round(2)).to eq(0.0)
32
+ end
33
+
34
+ it "should compute the amount as the rate when the currencies use different casing" do
35
+ calculator.preferred_amount = 100.0
36
+ calculator.preferred_currency = "gBp"
37
+ allow(order).to receive_messages currency: "GBP"
38
+ expect(calculator.compute(order).round(2)).to eq(100.0)
39
+ end
40
+
41
+ it "should compute the amount as 0 when there is no object" do
42
+ calculator.preferred_amount = 100.0
43
+ calculator.preferred_currency = "GBP"
44
+ expect(calculator.compute.round(2)).to eq(0.0)
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Calculator::FlexiRate, type: :model do
4
+ let(:calculator) { Spree::Calculator::FlexiRate.new }
5
+
6
+ let(:order) do
7
+ mock_model(
8
+ Spree::Order, quantity: 10
9
+ )
10
+ end
11
+
12
+ context "compute" do
13
+ it "should compute amount correctly when all fees are 0" do
14
+ expect(calculator.compute(order).round(2)).to eq(0.0)
15
+ end
16
+
17
+ it "should compute amount correctly when first_item has a value" do
18
+ allow(calculator).to receive_messages preferred_first_item: 1.0
19
+ expect(calculator.compute(order).round(2)).to eq(1.0)
20
+ end
21
+
22
+ it "should compute amount correctly when additional_items has a value" do
23
+ allow(calculator).to receive_messages preferred_additional_item: 1.0
24
+ expect(calculator.compute(order).round(2)).to eq(9.0)
25
+ end
26
+
27
+ it "should compute amount correctly when additional_items and first_item have values" do
28
+ allow(calculator).to receive_messages preferred_first_item: 5.0, preferred_additional_item: 1.0
29
+ expect(calculator.compute(order).round(2)).to eq(14.0)
30
+ end
31
+
32
+ it "should compute amount correctly when additional_items and first_item have values AND max items has value" do
33
+ allow(calculator).to receive_messages preferred_first_item: 5.0, preferred_additional_item: 1.0, preferred_max_items: 3
34
+ expect(calculator.compute(order).round(2)).to eq(7.0)
35
+ end
36
+
37
+ it "should allow creation of new object with all the attributes" do
38
+ Spree::Calculator::FlexiRate.new(preferred_first_item: 1, preferred_additional_item: 1, preferred_max_items: 1)
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ module Spree
4
+ class Calculator
5
+ describe PercentOnLineItem, type: :model do
6
+ let(:line_item) { double("LineItem", amount: 100) }
7
+
8
+ before { subject.preferred_percent = 15 }
9
+
10
+ it "computes based on item price and quantity" do
11
+ expect(subject.compute(line_item)).to eq 15
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe Spree::Calculator::PriceSack, type: :model do
4
+ let(:calculator) do
5
+ calculator = Spree::Calculator::PriceSack.new
6
+ calculator.preferred_minimal_amount = 5
7
+ calculator.preferred_normal_amount = 10
8
+ calculator.preferred_discount_amount = 1
9
+ calculator
10
+ end
11
+
12
+ let(:order) { stub_model(Spree::Order) }
13
+ let(:shipment) { stub_model(Spree::Shipment, amount: 10) }
14
+
15
+ # Regression test for #714 and #739
16
+ it "computes with an order object" do
17
+ calculator.compute(order)
18
+ end
19
+
20
+ # Regression test for #1156
21
+ it "computes with a shipment object" do
22
+ calculator.compute(shipment)
23
+ end
24
+
25
+ # Regression test for #2055
26
+ it "computes the correct amount" do
27
+ expect(calculator.compute(2)).to eq(calculator.preferred_normal_amount)
28
+ expect(calculator.compute(6)).to eq(calculator.preferred_discount_amount)
29
+ end
30
+ end