solidus_core 1.2.3 → 1.3.0.beta1

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 (573) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/Rakefile +1 -1
  4. data/app/assets/javascripts/spree.js.coffee.erb +1 -1
  5. data/app/helpers/spree/base_helper.rb +21 -43
  6. data/app/helpers/spree/orders_helper.rb +0 -1
  7. data/app/helpers/spree/products_helper.rb +10 -12
  8. data/app/helpers/spree/taxons_helper.rb +4 -4
  9. data/app/mailers/spree/base_mailer.rb +1 -3
  10. data/app/mailers/spree/carton_mailer.rb +2 -2
  11. data/app/mailers/spree/order_mailer.rb +2 -2
  12. data/app/models/concerns/spree/adjustment_source.rb +12 -16
  13. data/app/models/concerns/spree/calculated_adjustments.rb +17 -14
  14. data/app/models/concerns/spree/default_price.rb +10 -26
  15. data/app/models/concerns/spree/display_money.rb +1 -1
  16. data/app/models/concerns/spree/ordered_property_value_list.rb +10 -12
  17. data/app/models/concerns/spree/ransackable_attributes.rb +6 -5
  18. data/app/models/concerns/spree/user_address_book.rb +87 -81
  19. data/app/models/concerns/spree/user_methods.rb +2 -2
  20. data/app/models/concerns/spree/user_payment_source.rb +12 -8
  21. data/app/models/spree/ability.rb +2 -2
  22. data/app/models/spree/address.rb +37 -38
  23. data/app/models/spree/adjustment.rb +2 -6
  24. data/app/models/spree/app_configuration.rb +60 -5
  25. data/app/models/spree/base.rb +1 -1
  26. data/app/models/spree/calculator/default_tax.rb +28 -24
  27. data/app/models/spree/calculator/flat_percent_item_total.rb +1 -1
  28. data/app/models/spree/calculator/flat_rate.rb +2 -2
  29. data/app/models/spree/calculator/flexi_rate.rb +4 -4
  30. data/app/models/spree/calculator/percent_per_item.rb +8 -9
  31. data/app/models/spree/calculator/price_sack.rb +3 -3
  32. data/app/models/spree/calculator/returns/default_refund_amount.rb +11 -12
  33. data/app/models/spree/calculator/shipping/flat_percent_item_total.rb +1 -1
  34. data/app/models/spree/calculator/shipping/flat_rate.rb +2 -2
  35. data/app/models/spree/calculator/shipping/flexi_rate.rb +3 -3
  36. data/app/models/spree/calculator/shipping/per_item.rb +1 -1
  37. data/app/models/spree/calculator/shipping/price_sack.rb +3 -3
  38. data/app/models/spree/calculator/tiered_flat_rate.rb +2 -1
  39. data/app/models/spree/calculator/tiered_percent.rb +2 -1
  40. data/app/models/spree/calculator.rb +3 -3
  41. data/app/models/spree/carton.rb +2 -2
  42. data/app/models/spree/country.rb +7 -4
  43. data/app/models/spree/credit_card.rb +26 -22
  44. data/app/models/spree/customer_return.rb +8 -7
  45. data/app/models/spree/exchange.rb +1 -9
  46. data/app/models/spree/gateway/bogus.rb +31 -31
  47. data/app/models/spree/gateway/bogus_simple.rb +6 -8
  48. data/app/models/spree/gateway.rb +9 -15
  49. data/app/models/spree/image.rb +3 -3
  50. data/app/models/spree/inventory_unit.rb +23 -23
  51. data/app/models/spree/item_adjustments.rb +3 -2
  52. data/app/models/spree/legacy_user.rb +1 -5
  53. data/app/models/spree/line_item.rb +95 -84
  54. data/app/models/spree/option_type.rb +1 -1
  55. data/app/models/spree/option_value.rb +3 -1
  56. data/app/models/spree/order/checkout.rb +45 -44
  57. data/app/models/spree/order/payments.rb +42 -45
  58. data/app/models/spree/order.rb +70 -75
  59. data/app/models/spree/order_cancellations.rb +4 -4
  60. data/app/models/spree/order_capturing.rb +3 -2
  61. data/app/models/spree/order_contents.rb +61 -59
  62. data/app/models/spree/order_inventory.rb +59 -54
  63. data/app/models/spree/order_mutex.rb +0 -1
  64. data/app/models/spree/order_shipping.rb +8 -9
  65. data/app/models/spree/order_stock_location.rb +3 -3
  66. data/app/models/spree/order_update_attributes.rb +0 -2
  67. data/app/models/spree/order_updater.rb +11 -24
  68. data/app/models/spree/payment/processing.rb +26 -37
  69. data/app/models/spree/payment.rb +68 -71
  70. data/app/models/spree/payment_method/check.rb +2 -2
  71. data/app/models/spree/payment_method/store_credit.rb +6 -7
  72. data/app/models/spree/payment_method.rb +11 -8
  73. data/app/models/spree/preferences/configuration.rb +2 -2
  74. data/app/models/spree/preferences/preferable.rb +1 -1
  75. data/app/models/spree/preferences/preferable_class_methods.rb +1 -1
  76. data/app/models/spree/preferences/scoped_store.rb +6 -5
  77. data/app/models/spree/preferences/static_model_preferences.rb +1 -1
  78. data/app/models/spree/preferences/statically_configurable.rb +2 -2
  79. data/app/models/spree/preferences/store.rb +2 -6
  80. data/app/models/spree/price.rb +17 -19
  81. data/app/models/spree/product/scopes.rb +18 -17
  82. data/app/models/spree/product.rb +28 -11
  83. data/app/models/spree/product_property.rb +2 -0
  84. data/app/models/spree/product_scope/scopes.rb +22 -22
  85. data/app/models/spree/promotion/actions/create_adjustment.rb +3 -4
  86. data/app/models/spree/promotion/actions/create_item_adjustments.rb +8 -8
  87. data/app/models/spree/promotion/actions/create_quantity_adjustments.rb +3 -3
  88. data/app/models/spree/promotion/actions/free_shipping.rb +4 -4
  89. data/app/models/spree/promotion/rules/first_order.rb +7 -6
  90. data/app/models/spree/promotion/rules/first_repeat_purchase_since.rb +2 -3
  91. data/app/models/spree/promotion/rules/item_total.rb +5 -2
  92. data/app/models/spree/promotion/rules/nth_order.rb +3 -4
  93. data/app/models/spree/promotion/rules/one_use_per_user.rb +1 -2
  94. data/app/models/spree/promotion/rules/option_value.rb +1 -2
  95. data/app/models/spree/promotion/rules/product.rb +4 -4
  96. data/app/models/spree/promotion/rules/taxon.rb +5 -5
  97. data/app/models/spree/promotion/rules/user.rb +1 -1
  98. data/app/models/spree/promotion/rules/user_logged_in.rb +1 -1
  99. data/app/models/spree/promotion.rb +8 -8
  100. data/app/models/spree/promotion_action.rb +1 -1
  101. data/app/models/spree/promotion_builder.rb +2 -2
  102. data/app/models/spree/promotion_chooser.rb +1 -0
  103. data/app/models/spree/promotion_code/code_builder.rb +3 -3
  104. data/app/models/spree/promotion_handler/cart.rb +17 -16
  105. data/app/models/spree/promotion_handler/coupon.rb +10 -14
  106. data/app/models/spree/promotion_handler/page.rb +4 -4
  107. data/app/models/spree/promotion_rule.rb +4 -3
  108. data/app/models/spree/prototype.rb +0 -1
  109. data/app/models/spree/refund.rb +3 -3
  110. data/app/models/spree/reimbursement/reimbursement_type_engine.rb +1 -3
  111. data/app/models/spree/reimbursement.rb +3 -5
  112. data/app/models/spree/reimbursement_performer.rb +0 -5
  113. data/app/models/spree/reimbursement_tax_calculator.rb +2 -7
  114. data/app/models/spree/reimbursement_type/credit.rb +1 -1
  115. data/app/models/spree/reimbursement_type/original_payment.rb +1 -1
  116. data/app/models/spree/reimbursement_type/reimbursement_helpers.rb +3 -3
  117. data/app/models/spree/reimbursement_type/store_credit.rb +1 -1
  118. data/app/models/spree/reimbursement_type.rb +1 -1
  119. data/app/models/spree/return_authorization.rb +38 -37
  120. data/app/models/spree/return_item/eligibility_validator/default.rb +4 -4
  121. data/app/models/spree/return_item/eligibility_validator/no_reimbursements.rb +0 -1
  122. data/app/models/spree/return_item/eligibility_validator/rma_required.rb +0 -1
  123. data/app/models/spree/return_item.rb +24 -23
  124. data/app/models/spree/returns_calculator.rb +1 -2
  125. data/app/models/spree/shipment.rb +80 -74
  126. data/app/models/spree/shipping_calculator.rb +4 -5
  127. data/app/models/spree/shipping_manifest.rb +3 -4
  128. data/app/models/spree/shipping_method.rb +54 -23
  129. data/app/models/spree/shipping_method_stock_location.rb +4 -0
  130. data/app/models/spree/shipping_rate.rb +24 -29
  131. data/app/models/spree/shipping_rate_tax.rb +41 -0
  132. data/app/models/spree/state.rb +1 -1
  133. data/app/models/spree/state_change.rb +1 -1
  134. data/app/models/spree/stock/availability_validator.rb +2 -2
  135. data/app/models/spree/stock/coordinator.rb +12 -13
  136. data/app/models/spree/stock/differentiator.rb +1 -0
  137. data/app/models/spree/stock/estimator.rb +18 -25
  138. data/app/models/spree/stock/inventory_unit_builder.rb +1 -1
  139. data/app/models/spree/stock/package.rb +19 -9
  140. data/app/models/spree/stock/packer.rb +2 -3
  141. data/app/models/spree/stock/prioritizer.rb +3 -2
  142. data/app/models/spree/stock/quantifier.rb +2 -3
  143. data/app/models/spree/stock/shipping_rate_selector.rb +0 -1
  144. data/app/models/spree/stock/shipping_rate_sorter.rb +0 -1
  145. data/app/models/spree/stock/splitter/backordered.rb +0 -2
  146. data/app/models/spree/stock/splitter/base.rb +3 -2
  147. data/app/models/spree/stock/splitter/shipping_category.rb +2 -1
  148. data/app/models/spree/stock/splitter/weight.rb +2 -2
  149. data/app/models/spree/stock_item.rb +36 -37
  150. data/app/models/spree/stock_location.rb +17 -13
  151. data/app/models/spree/stock_movement.rb +1 -3
  152. data/app/models/spree/stock_transfer.rb +8 -8
  153. data/app/models/spree/store.rb +6 -0
  154. data/app/models/spree/store_credit.rb +24 -24
  155. data/app/models/spree/store_credit_category.rb +1 -2
  156. data/app/models/spree/tax/item_adjuster.rb +37 -0
  157. data/app/models/spree/tax/order_adjuster.rb +38 -0
  158. data/app/models/spree/tax/shipping_rate_taxer.rb +31 -0
  159. data/app/models/spree/tax/tax_helpers.rb +49 -0
  160. data/app/models/spree/tax/tax_location.rb +33 -0
  161. data/app/models/spree/tax_category.rb +1 -1
  162. data/app/models/spree/tax_rate.rb +46 -111
  163. data/app/models/spree/taxon.rb +36 -12
  164. data/app/models/spree/taxonomy.rb +10 -10
  165. data/app/models/spree/validations/db_maximum_length_validator.rb +0 -1
  166. data/app/models/spree/variant/pricer.rb +19 -0
  167. data/app/models/spree/variant/pricing_options.rb +31 -0
  168. data/app/models/spree/variant/scopes.rb +9 -9
  169. data/app/models/spree/variant.rb +95 -89
  170. data/app/models/spree/variant_property_rule.rb +1 -1
  171. data/app/models/spree/variant_property_rule_value.rb +2 -0
  172. data/app/models/spree/zone.rb +60 -24
  173. data/config/initializers/friendly_id.rb +1 -1
  174. data/config/locales/en.yml +337 -51
  175. data/config/routes.rb +1 -1
  176. data/db/default/spree/countries.rb +9 -15
  177. data/db/default/spree/roles.rb +1 -2
  178. data/db/default/spree/states.rb +7 -11
  179. data/db/default/spree/store_credit.rb +2 -2
  180. data/db/default/spree/stores.rb +2 -1
  181. data/db/migrate/20120831092320_spree_one_two.rb +100 -101
  182. data/db/migrate/20120831092359_spree_promo_one_two.rb +12 -12
  183. data/db/migrate/20120905151823_add_toggle_tax_rate_display.rb +1 -1
  184. data/db/migrate/20121009142519_add_lock_version_to_variant.rb +1 -1
  185. data/db/migrate/20121010142909_add_states_required_to_countries.rb +1 -1
  186. data/db/migrate/20121012071449_add_on_demand_to_product_and_variant.rb +2 -2
  187. data/db/migrate/20121017010007_remove_not_null_constraint_from_products_on_hand.rb +4 -4
  188. data/db/migrate/20121031162139_split_prices_from_variants.rb +8 -8
  189. data/db/migrate/20121107003422_remove_not_null_from_spree_prices_amount.rb +2 -2
  190. data/db/migrate/20121109173623_add_cost_currency_to_variants.rb +1 -1
  191. data/db/migrate/20121124203911_add_position_to_taxonomies.rb +1 -1
  192. data/db/migrate/20130120201805_add_position_to_product_properties.spree.rb +1 -2
  193. data/db/migrate/20130211190146_create_spree_stock_items.rb +1 -1
  194. data/db/migrate/20130213191427_create_default_stock.rb +12 -21
  195. data/db/migrate/20130226032817_change_meta_description_on_spree_products_to_text.rb +1 -1
  196. data/db/migrate/20130227143905_add_pending_to_inventory_unit.rb +2 -2
  197. data/db/migrate/20130228210442_create_shipping_method_zone.rb +1 -1
  198. data/db/migrate/20130301162924_create_shipping_method_categories.rb +2 -2
  199. data/db/migrate/20130304162240_create_spree_shipping_rates.rb +4 -4
  200. data/db/migrate/20130306181701_add_address_fields_to_stock_location.rb +2 -3
  201. data/db/migrate/20130306191917_add_active_field_to_stock_locations.rb +1 -1
  202. data/db/migrate/20130306195650_add_backorderable_to_stock_item.rb +1 -1
  203. data/db/migrate/20130307161754_add_default_quantity_to_stock_movement.rb +1 -1
  204. data/db/migrate/20130319062004_change_orders_total_precision.rb +4 -4
  205. data/db/migrate/20130319063911_change_spree_payments_amount_precision.rb +1 -3
  206. data/db/migrate/20130319064308_change_spree_return_authorization_amount_precision.rb +2 -4
  207. data/db/migrate/20130319082943_change_adjustments_amount_precision.rb +1 -3
  208. data/db/migrate/20130319190507_drop_source_and_destination_from_stock_movement.rb +2 -2
  209. data/db/migrate/20130325163316_migrate_inventory_unit_sold_to_on_hand.rb +2 -2
  210. data/db/migrate/20130417120035_update_adjustment_states.rb +2 -2
  211. data/db/migrate/20130417123427_add_shipping_rates_to_shipments.rb +3 -3
  212. data/db/migrate/20130628021056_add_unique_index_to_permalink_on_spree_products.rb +1 -1
  213. data/db/migrate/20130628022817_add_unique_index_to_orders_shipments_and_stock_transfers.rb +3 -3
  214. data/db/migrate/20130718042445_add_cost_price_to_line_item.rb +1 -1
  215. data/db/migrate/20130718233855_set_backorderable_to_default_to_false.rb +2 -2
  216. data/db/migrate/20130807024301_upgrade_adjustments.rb +3 -3
  217. data/db/migrate/20130813004002_add_shipment_total_to_spree_orders.rb +1 -1
  218. data/db/migrate/20130813140619_expand_order_number_size.rb +2 -2
  219. data/db/migrate/20130815000406_add_adjustment_total_to_line_items.rb +1 -1
  220. data/db/migrate/20130815024413_add_adjustment_total_to_shipments.rb +1 -1
  221. data/db/migrate/20130826062534_add_depth_to_spree_taxons.rb +1 -1
  222. data/db/migrate/20130830001033_add_shipping_category_to_shipping_methods_and_products.rb +1 -1
  223. data/db/migrate/20130830001159_migrate_old_shipping_calculators.rb +1 -1
  224. data/db/migrate/20131001013410_remove_unused_credit_card_fields.rb +1 -0
  225. data/db/migrate/20131026154747_add_track_inventory_to_variant.rb +1 -1
  226. data/db/migrate/20131118043959_add_included_to_adjustments.rb +1 -1
  227. data/db/migrate/20131118183431_add_line_item_id_to_spree_inventory_units.rb +0 -1
  228. data/db/migrate/20131211112807_create_spree_orders_promotions.rb +1 -1
  229. data/db/migrate/20131218054603_add_item_count_to_spree_orders.rb +1 -1
  230. data/db/migrate/20140106065820_remove_value_type_from_spree_preferences.rb +1 -0
  231. data/db/migrate/20140219060952_add_considered_risky_to_orders.rb +1 -1
  232. data/db/migrate/20140309023735_migrate_old_preferences.rb +4 -3
  233. data/db/migrate/20140309033438_create_store_from_preferences.rb +2 -2
  234. data/db/migrate/20140410141842_add_many_missing_indexes.rb +13 -15
  235. data/db/migrate/20140410150358_correct_some_polymorphic_index_and_add_more_missing.rb +38 -40
  236. data/db/migrate/20140508151342_change_spree_price_amount_precision.rb +4 -4
  237. data/db/migrate/20140530024945_move_order_token_from_tokenized_permission.rb +1 -1
  238. data/db/migrate/20140710041921_recreate_spree_return_authorizations.rb +0 -1
  239. data/db/migrate/20140718195325_create_friendly_id_slugs.rb +4 -4
  240. data/db/migrate/20140723214541_copy_product_slugs_to_slug_history.rb +4 -6
  241. data/db/migrate/20140805171219_make_existing_credit_cards_default.rb +1 -0
  242. data/db/migrate/20141217215630_update_product_slug_index.rb +2 -4
  243. data/db/migrate/20150112194216_add_position_to_stock_location.rb +2 -2
  244. data/db/migrate/20150225205344_move_promotion_code_to_promotion_code_value.rb +0 -1
  245. data/db/migrate/20150313201503_copy_shipped_shipments_to_cartons.rb +0 -1
  246. data/db/migrate/20150506181611_create_spree_store_credit_payment_method.rb +3 -3
  247. data/db/migrate/20150515211137_fix_adjustment_order_id.rb +0 -1
  248. data/db/migrate/20150612205731_remove_spree_configurations.rb +2 -2
  249. data/db/migrate/20150619160613_create_adjustment_reason.rb +1 -1
  250. data/db/migrate/20150723224133_remove_unnecessary_indexes.rb +10 -2
  251. data/db/migrate/20150731201146_add_spree_user_addresses.rb +0 -1
  252. data/db/migrate/20150811211025_add_finalized_to_spree_adjustments.rb +1 -1
  253. data/db/migrate/20151001121454_create_spree_shipping_method_stock_locations.rb +13 -0
  254. data/db/migrate/20151002023248_add_foreign_key_to_shipping_method_stock_location.rb +6 -0
  255. data/db/migrate/20151026093607_change_return_item_pre_tax_amount_to_amount.rb +29 -0
  256. data/db/migrate/20160111091912_add_column_available_to_all_on_spree_shipping_method.rb +5 -0
  257. data/db/migrate/20160116133604_add_position_to_spree_payment_methods.rb +5 -0
  258. data/db/migrate/20160122182105_add_carrier_and_service_level_to_spree_shipping_methods.rb +6 -0
  259. data/db/migrate/20160224201413_create_spree_shipping_rate_taxes.rb +11 -0
  260. data/db/migrate/20160229133259_add_cart_tax_country_iso_to_spree_store.rb +5 -0
  261. data/db/migrate/20160301103333_remove_pre_tax_amount_on_line_item_and_shipment.rb +6 -0
  262. data/db/migrate/20160308000300_disallow_adjustment_finalized_nulls.rb +19 -0
  263. data/db/migrate/20160318145302_add_timestamps_to_prices.rb +5 -0
  264. data/db/migrate/20160330204846_add_missing_timestamp_columns.rb +20 -0
  265. data/lib/generators/spree/custom_user/custom_user_generator.rb +3 -8
  266. data/lib/generators/spree/dummy/dummy_generator.rb +17 -19
  267. data/lib/generators/spree/install/install_generator.rb +15 -15
  268. data/lib/generators/spree/install/templates/config/initializers/spree.rb +1 -0
  269. data/lib/spree/core/controller_helpers/auth.rb +2 -4
  270. data/lib/spree/core/controller_helpers/common.rb +42 -43
  271. data/lib/spree/core/controller_helpers/order.rb +5 -9
  272. data/lib/spree/core/controller_helpers/payment_parameters.rb +4 -5
  273. data/lib/spree/core/controller_helpers/pricing.rb +27 -0
  274. data/lib/spree/core/controller_helpers/respond_with.rb +4 -4
  275. data/lib/spree/core/controller_helpers/search.rb +2 -2
  276. data/lib/spree/core/controller_helpers/store.rb +3 -3
  277. data/lib/spree/core/controller_helpers/strong_parameters.rb +4 -4
  278. data/lib/spree/core/current_store.rb +1 -1
  279. data/lib/spree/core/delegate_belongs_to.rb +19 -21
  280. data/lib/spree/core/engine.rb +12 -8
  281. data/lib/spree/core/environment/calculators.rb +0 -1
  282. data/lib/spree/core/environment_extension.rb +4 -4
  283. data/lib/spree/core/importer/order.rb +17 -22
  284. data/lib/spree/core/importer/product.rb +10 -9
  285. data/lib/spree/core/permalinks.rb +16 -16
  286. data/lib/spree/core/product_duplicator.rb +2 -3
  287. data/lib/spree/core/product_filters.rb +15 -16
  288. data/lib/spree/core/role_configuration.rb +2 -2
  289. data/lib/spree/core/search/base.rb +71 -57
  290. data/lib/spree/core/search/variant.rb +2 -4
  291. data/lib/spree/core/unreturned_item_charger.rb +1 -2
  292. data/lib/spree/core/validators/email.rb +2 -2
  293. data/lib/spree/core/version.rb +1 -1
  294. data/lib/spree/core.rb +2 -4
  295. data/lib/spree/i18n.rb +1 -1
  296. data/lib/spree/localized_number.rb +3 -1
  297. data/lib/spree/migrations.rb +27 -26
  298. data/lib/spree/money.rb +19 -4
  299. data/lib/spree/permission_sets/base.rb +1 -1
  300. data/lib/spree/permitted_attributes.rb +7 -7
  301. data/lib/spree/responder.rb +4 -5
  302. data/lib/spree/testing_support/authorization_helpers.rb +1 -1
  303. data/lib/spree/testing_support/caching.rb +8 -8
  304. data/lib/spree/testing_support/capybara_ext.rb +11 -13
  305. data/lib/spree/testing_support/common_rake.rb +4 -4
  306. data/lib/spree/testing_support/controller_requests.rb +1 -1
  307. data/lib/spree/testing_support/extension_rake.rb +1 -2
  308. data/lib/spree/testing_support/factories/address_factory.rb +14 -3
  309. data/lib/spree/testing_support/factories/adjustment_reason_factory.rb +1 -1
  310. data/lib/spree/testing_support/factories/carton_factory.rb +2 -2
  311. data/lib/spree/testing_support/factories/credit_card_factory.rb +4 -0
  312. data/lib/spree/testing_support/factories/customer_return_factory.rb +4 -6
  313. data/lib/spree/testing_support/factories/line_item_factory.rb +1 -1
  314. data/lib/spree/testing_support/factories/order_factory.rb +10 -11
  315. data/lib/spree/testing_support/factories/payment_factory.rb +5 -0
  316. data/lib/spree/testing_support/factories/promotion_category_factory.rb +0 -1
  317. data/lib/spree/testing_support/factories/promotion_factory.rb +0 -1
  318. data/lib/spree/testing_support/factories/refund_factory.rb +1 -1
  319. data/lib/spree/testing_support/factories/reimbursement_factory.rb +1 -1
  320. data/lib/spree/testing_support/factories/return_item_factory.rb +1 -1
  321. data/lib/spree/testing_support/factories/shipping_method_factory.rb +5 -2
  322. data/lib/spree/testing_support/factories/state_factory.rb +17 -7
  323. data/lib/spree/testing_support/factories/stock_location_factory.rb +4 -4
  324. data/lib/spree/testing_support/factories/stock_transfer_factory.rb +1 -1
  325. data/lib/spree/testing_support/factories/store_credit_category_factory.rb +0 -1
  326. data/lib/spree/testing_support/factories/store_credit_type_factory.rb +0 -2
  327. data/lib/spree/testing_support/factories/tax_category_factory.rb +2 -2
  328. data/lib/spree/testing_support/factories/user_factory.rb +1 -1
  329. data/lib/spree/testing_support/factories/variant_factory.rb +1 -2
  330. data/lib/spree/testing_support/factories/zone_factory.rb +2 -1
  331. data/lib/spree/testing_support/i18n.rb +4 -5
  332. data/lib/spree/testing_support/order_walkthrough.rb +8 -9
  333. data/lib/spree/testing_support/preferences.rb +1 -1
  334. data/lib/spree/testing_support/sequences.rb +5 -4
  335. data/lib/tasks/core.rake +15 -19
  336. data/lib/tasks/email.rake +3 -3
  337. data/lib/tasks/exchanges.rake +12 -14
  338. data/lib/tasks/migrations/assure_store_on_orders.rake +38 -0
  339. data/lib/tasks/migrations/copy_order_bill_address_to_credit_card.rake +2 -2
  340. data/lib/tasks/migrations/copy_shipped_shipments_to_cartons.rake +1 -11
  341. data/lib/tasks/migrations/migrate_shipping_rate_taxes.rake +17 -0
  342. data/lib/tasks/migrations/migrate_user_addresses.rake +1 -1
  343. data/lib/tasks/order_capturing.rake +1 -1
  344. data/lib/tasks/upgrade.rake +11 -0
  345. data/script/rails +0 -1
  346. data/solidus_core.gemspec +6 -8
  347. data/spec/helpers/base_helper_spec.rb +15 -18
  348. data/spec/helpers/order_helper_spec.rb +2 -2
  349. data/spec/helpers/products_helper_spec.rb +43 -51
  350. data/spec/helpers/taxons_helper_spec.rb +1 -1
  351. data/spec/lib/i18n_spec.rb +11 -11
  352. data/spec/lib/search/base_spec.rb +12 -14
  353. data/spec/lib/search/variant_spec.rb +1 -0
  354. data/spec/lib/spree/core/controller_helpers/order_spec.rb +1 -7
  355. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +26 -28
  356. data/spec/lib/spree/core/controller_helpers/pricing_spec.rb +63 -0
  357. data/spec/lib/spree/core/controller_helpers/search_spec.rb +4 -2
  358. data/spec/lib/spree/core/delegate_belongs_to_spec.rb +1 -1
  359. data/spec/lib/spree/core/importer/order_spec.rb +95 -90
  360. data/spec/lib/spree/core/role_configuration_spec.rb +16 -16
  361. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +35 -0
  362. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +10 -1
  363. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +0 -1
  364. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +6 -1
  365. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +37 -1
  366. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +2 -2
  367. data/spec/lib/spree/core/testing_support/factories/stock_packer_factory_spec.rb +1 -1
  368. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +1 -2
  369. data/spec/lib/spree/core/testing_support/preferences_spec.rb +26 -0
  370. data/spec/lib/spree/core/unreturned_item_charger_spec.rb +7 -9
  371. data/spec/lib/spree/core/validators/email_spec.rb +8 -6
  372. data/spec/lib/spree/localized_number_spec.rb +1 -3
  373. data/spec/lib/spree/migrations_spec.rb +2 -2
  374. data/spec/lib/spree/money_spec.rb +75 -6
  375. data/spec/lib/tasks/exchanges_spec.rb +2 -12
  376. data/spec/lib/tasks/migrations/copy_shipped_shipments_to_cartons_spec.rb +0 -1
  377. data/spec/lib/tasks/order_capturing_spec.rb +1 -1
  378. data/spec/mailers/carton_mailer_spec.rb +3 -3
  379. data/spec/mailers/order_mailer_spec.rb +9 -11
  380. data/spec/mailers/reimbursement_mailer_spec.rb +2 -2
  381. data/spec/mailers/test_mailer_spec.rb +1 -1
  382. data/spec/models/spree/ability_spec.rb +4 -7
  383. data/spec/models/spree/address_spec.rb +32 -35
  384. data/spec/models/spree/adjustment_reason_spec.rb +0 -2
  385. data/spec/models/spree/adjustment_spec.rb +2 -2
  386. data/spec/models/spree/app_configuration_spec.rb +33 -3
  387. data/spec/models/spree/asset_spec.rb +1 -2
  388. data/spec/models/spree/calculator/default_tax_spec.rb +141 -52
  389. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +1 -1
  390. data/spec/models/spree/calculator/flexi_rate_spec.rb +6 -6
  391. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +1 -1
  392. data/spec/models/spree/calculator/price_sack_spec.rb +2 -2
  393. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +9 -11
  394. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +4 -4
  395. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +2 -2
  396. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +6 -7
  397. data/spec/models/spree/calculator/shipping/per_item_spec.rb +2 -2
  398. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +2 -2
  399. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +1 -2
  400. data/spec/models/spree/calculator/tiered_percent_spec.rb +1 -1
  401. data/spec/models/spree/calculator_spec.rb +3 -8
  402. data/spec/models/spree/carton_spec.rb +1 -1
  403. data/spec/models/spree/classification_spec.rb +1 -1
  404. data/spec/models/spree/concerns/display_money_spec.rb +0 -1
  405. data/spec/models/spree/concerns/ordered_property_value_list_spec.rb +26 -1
  406. data/spec/models/spree/concerns/user_address_book_spec.rb +19 -12
  407. data/spec/models/spree/concerns/user_methods_spec.rb +1 -1
  408. data/spec/models/spree/country_spec.rb +52 -0
  409. data/spec/models/spree/credit_card_spec.rb +17 -12
  410. data/spec/models/spree/customer_return_spec.rb +27 -23
  411. data/spec/models/spree/exchange_spec.rb +2 -7
  412. data/spec/models/spree/gateway/bogus_simple.rb +2 -4
  413. data/spec/models/spree/gateway/bogus_spec.rb +4 -2
  414. data/spec/models/spree/gateway_spec.rb +8 -3
  415. data/spec/models/spree/inventory_unit_spec.rb +13 -14
  416. data/spec/models/spree/item_adjustments_spec.rb +36 -40
  417. data/spec/models/spree/line_item_spec.rb +92 -48
  418. data/spec/models/spree/option_type_spec.rb +1 -1
  419. data/spec/models/spree/option_value_spec.rb +1 -1
  420. data/spec/models/spree/order/address_spec.rb +1 -1
  421. data/spec/models/spree/order/callbacks_spec.rb +3 -3
  422. data/spec/models/spree/order/checkout_spec.rb +55 -48
  423. data/spec/models/spree/order/finalizing_spec.rb +8 -9
  424. data/spec/models/spree/order/payment_spec.rb +20 -20
  425. data/spec/models/spree/order/risk_assessment_spec.rb +1 -1
  426. data/spec/models/spree/order/state_machine_spec.rb +40 -131
  427. data/spec/models/spree/order/tax_spec.rb +11 -12
  428. data/spec/models/spree/order/totals_spec.rb +3 -3
  429. data/spec/models/spree/order/updating_spec.rb +2 -2
  430. data/spec/models/spree/order/validations_spec.rb +2 -2
  431. data/spec/models/spree/order_cancellations_spec.rb +1 -1
  432. data/spec/models/spree/order_capturing_spec.rb +1 -1
  433. data/spec/models/spree/order_contents_spec.rb +10 -11
  434. data/spec/models/spree/order_inventory_spec.rb +11 -11
  435. data/spec/models/spree/order_merger_spec.rb +1 -0
  436. data/spec/models/spree/order_shipping_spec.rb +8 -10
  437. data/spec/models/spree/order_spec.rb +137 -124
  438. data/spec/models/spree/order_stock_location_spec.rb +2 -2
  439. data/spec/models/spree/order_update_attributes_spec.rb +6 -10
  440. data/spec/models/spree/order_updater_spec.rb +4 -8
  441. data/spec/models/spree/payment_create_spec.rb +11 -12
  442. data/spec/models/spree/payment_method/store_credit_spec.rb +10 -6
  443. data/spec/models/spree/payment_method_spec.rb +4 -5
  444. data/spec/models/spree/payment_spec.rb +61 -69
  445. data/spec/models/spree/permission_sets/base_spec.rb +1 -1
  446. data/spec/models/spree/permission_sets/configuration_display.rb +0 -1
  447. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -1
  448. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -1
  449. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -1
  450. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -1
  451. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -1
  452. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -1
  453. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -1
  454. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -1
  455. data/spec/models/spree/permission_sets/report_display_spec.rb +0 -1
  456. data/spec/models/spree/permission_sets/restricted_stock_display_spec.rb +0 -1
  457. data/spec/models/spree/permission_sets/restricted_stock_management_spec.rb +0 -1
  458. data/spec/models/spree/permission_sets/restricted_stock_transfer_display_spec.rb +0 -1
  459. data/spec/models/spree/permission_sets/restricted_stock_transfer_management_spec.rb +6 -6
  460. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -1
  461. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -1
  462. data/spec/models/spree/permission_sets/stock_transfer_display_spec.rb +0 -1
  463. data/spec/models/spree/permission_sets/stock_transfer_management_spec.rb +0 -2
  464. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -1
  465. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -1
  466. data/spec/models/spree/preference_spec.rb +1 -4
  467. data/spec/models/spree/preferences/configuration_spec.rb +2 -7
  468. data/spec/models/spree/preferences/preferable_spec.rb +13 -24
  469. data/spec/models/spree/preferences/scoped_store_spec.rb +1 -1
  470. data/spec/models/spree/preferences/static_model_preferences_spec.rb +5 -6
  471. data/spec/models/spree/preferences/statically_configurable_spec.rb +2 -6
  472. data/spec/models/spree/preferences/store_spec.rb +2 -3
  473. data/spec/models/spree/price_spec.rb +6 -6
  474. data/spec/models/spree/product/scopes_spec.rb +20 -20
  475. data/spec/models/spree/product_duplicator_spec.rb +16 -29
  476. data/spec/models/spree/product_filter_spec.rb +2 -2
  477. data/spec/models/spree/product_spec.rb +53 -20
  478. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +10 -12
  479. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +4 -4
  480. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +9 -9
  481. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +1 -1
  482. data/spec/models/spree/promotion/rules/first_order_spec.rb +10 -10
  483. data/spec/models/spree/promotion/rules/item_total_spec.rb +63 -19
  484. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +1 -1
  485. data/spec/models/spree/promotion/rules/product_spec.rb +8 -8
  486. data/spec/models/spree/promotion/rules/taxon_spec.rb +4 -4
  487. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +3 -4
  488. data/spec/models/spree/promotion/rules/user_spec.rb +7 -7
  489. data/spec/models/spree/promotion_builder_spec.rb +10 -8
  490. data/spec/models/spree/promotion_category_spec.rb +1 -1
  491. data/spec/models/spree/promotion_code/code_builder_spec.rb +1 -3
  492. data/spec/models/spree/promotion_code_spec.rb +8 -7
  493. data/spec/models/spree/promotion_handler/cart_spec.rb +1 -1
  494. data/spec/models/spree/promotion_handler/coupon_spec.rb +28 -28
  495. data/spec/models/spree/promotion_handler/page_spec.rb +6 -7
  496. data/spec/models/spree/promotion_rule_spec.rb +1 -2
  497. data/spec/models/spree/promotion_spec.rb +25 -21
  498. data/spec/models/spree/refund_spec.rb +8 -11
  499. data/spec/models/spree/reimbursement/credit_spec.rb +2 -2
  500. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +6 -4
  501. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +1 -1
  502. data/spec/models/spree/reimbursement_performer_spec.rb +2 -2
  503. data/spec/models/spree/reimbursement_spec.rb +9 -11
  504. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +4 -5
  505. data/spec/models/spree/reimbursement_type/credit_spec.rb +2 -2
  506. data/spec/models/spree/reimbursement_type/exchange_spec.rb +2 -3
  507. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +4 -4
  508. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +1 -1
  509. data/spec/models/spree/return_authorization_spec.rb +18 -21
  510. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +7 -7
  511. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -1
  512. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -1
  513. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +1 -1
  514. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +1 -1
  515. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +1 -2
  516. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +3 -5
  517. data/spec/models/spree/return_item_spec.rb +29 -31
  518. data/spec/models/spree/returns_calculator_spec.rb +1 -1
  519. data/spec/models/spree/shipment_spec.rb +59 -43
  520. data/spec/models/spree/shipping_calculator_spec.rb +3 -3
  521. data/spec/models/spree/shipping_manifest_spec.rb +8 -7
  522. data/spec/models/spree/shipping_method_spec.rb +149 -24
  523. data/spec/models/spree/shipping_rate_spec.rb +116 -76
  524. data/spec/models/spree/shipping_rate_tax_spec.rb +83 -0
  525. data/spec/models/spree/state_spec.rb +2 -2
  526. data/spec/models/spree/stock/availability_validator_spec.rb +4 -4
  527. data/spec/models/spree/stock/coordinator_spec.rb +33 -49
  528. data/spec/models/spree/stock/differentiator_spec.rb +1 -1
  529. data/spec/models/spree/stock/estimator_spec.rb +83 -54
  530. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +1 -3
  531. data/spec/models/spree/stock/package_spec.rb +27 -10
  532. data/spec/models/spree/stock/packer_spec.rb +4 -4
  533. data/spec/models/spree/stock/prioritizer_spec.rb +1 -1
  534. data/spec/models/spree/stock/quantifier_spec.rb +2 -6
  535. data/spec/models/spree/stock/splitter/backordered_spec.rb +1 -1
  536. data/spec/models/spree/stock/splitter/base_spec.rb +1 -2
  537. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +1 -3
  538. data/spec/models/spree/stock/splitter/weight_spec.rb +3 -3
  539. data/spec/models/spree/stock_item_spec.rb +16 -16
  540. data/spec/models/spree/stock_location_spec.rb +6 -8
  541. data/spec/models/spree/stock_movement_spec.rb +1 -1
  542. data/spec/models/spree/stock_transfer_spec.rb +1 -3
  543. data/spec/models/spree/store_credit_category_spec.rb +1 -1
  544. data/spec/models/spree/store_credit_event_spec.rb +3 -5
  545. data/spec/models/spree/store_credit_spec.rb +24 -23
  546. data/spec/models/spree/store_spec.rb +21 -2
  547. data/spec/models/spree/tax/item_adjuster_spec.rb +74 -0
  548. data/spec/models/spree/tax/order_adjuster_spec.rb +49 -0
  549. data/spec/models/spree/tax/shipping_rate_taxer_spec.rb +50 -0
  550. data/spec/models/spree/tax/tax_location_spec.rb +68 -0
  551. data/spec/models/spree/tax/taxation_integration_spec.rb +787 -0
  552. data/spec/models/spree/tax_category_spec.rb +2 -2
  553. data/spec/models/spree/tax_rate_spec.rb +185 -536
  554. data/spec/models/spree/taxon_spec.rb +69 -5
  555. data/spec/models/spree/taxonomy_spec.rb +2 -3
  556. data/spec/models/spree/tracker_spec.rb +1 -1
  557. data/spec/models/spree/transfer_item_spec.rb +1 -1
  558. data/spec/models/spree/unit_cancel_spec.rb +9 -14
  559. data/spec/models/spree/user_spec.rb +19 -24
  560. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +1 -1
  561. data/spec/models/spree/variant/pricer_spec.rb +48 -0
  562. data/spec/models/spree/variant/pricing_options_spec.rb +106 -0
  563. data/spec/models/spree/variant/scopes_spec.rb +31 -8
  564. data/spec/models/spree/variant_property_rule_spec.rb +1 -1
  565. data/spec/models/spree/variant_spec.rb +166 -52
  566. data/spec/models/spree/zone_spec.rb +135 -10
  567. data/spec/support/big_decimal.rb +1 -1
  568. data/spec/support/concerns/working_factories.rb +2 -2
  569. data/spec/support/dummy_ability.rb +0 -1
  570. metadata +55 -44
  571. data/lib/generators/spree/dummy/templates/initializers/devise.rb +0 -3
  572. data/lib/spree/migration_helpers.rb +0 -19
  573. data/vendor/assets/stylesheets/skeleton.css +0 -242
@@ -3,39 +3,44 @@ require 'spec_helper'
3
3
  module Spree
4
4
  module Core
5
5
  describe Importer::Order do
6
-
6
+ let!(:store) { create(:store) }
7
7
  let!(:country) { create(:country) }
8
- let!(:state) { country.states.first || create(:state, :country => country) }
8
+ let!(:state) { country.states.first || create(:state, country: country) }
9
9
  let!(:stock_location) { create(:stock_location, admin_name: 'Admin Name') }
10
10
 
11
- let(:user) { stub_model(LegacyUser, :email => 'fox@mudler.com') }
11
+ let(:user) { stub_model(LegacyUser, email: 'fox@mudler.com') }
12
12
  let(:shipping_method) { create(:shipping_method) }
13
13
  let(:payment_method) { create(:check_payment_method) }
14
14
 
15
- let(:product) { product = Spree::Product.create(:name => 'Test',
16
- :sku => 'TEST-1',
17
- :price => 33.22)
18
- product.shipping_category = create(:shipping_category)
19
- product.save
20
- product }
21
-
22
- let(:variant) { variant = product.master
23
- variant.stock_items.each { |si| si.update_attribute(:count_on_hand, 10) }
24
- variant }
15
+ let(:product) {
16
+ product = Spree::Product.create(name: 'Test',
17
+ sku: 'TEST-1',
18
+ price: 33.22)
19
+ product.shipping_category = create(:shipping_category)
20
+ product.save
21
+ product
22
+ }
23
+
24
+ let(:variant) {
25
+ variant = product.master
26
+ variant.stock_items.each { |si| si.set_count_on_hand(10) }
27
+ variant
28
+ }
25
29
 
26
30
  let(:sku) { variant.sku }
27
31
  let(:variant_id) { variant.id }
28
32
 
29
- let(:line_items) {{ "0" => { :variant_id => variant.id, :quantity => 5 }}}
30
- let(:ship_address) {{
31
- :address1 => '123 Testable Way',
32
- :firstname => 'Fox',
33
- :lastname => 'Mulder',
34
- :city => 'Washington',
35
- :country_id => country.id,
36
- :state_id => state.id,
37
- :zipcode => '66666',
38
- :phone => '666-666-6666'
33
+ let(:line_items) { { "0" => { variant_id: variant.id, quantity: 5 } } }
34
+ let(:ship_address) {
35
+ {
36
+ address1: '123 Testable Way',
37
+ firstname: 'Fox',
38
+ lastname: 'Mulder',
39
+ city: 'Washington',
40
+ country_id: country.id,
41
+ state_id: state.id,
42
+ zipcode: '66666',
43
+ phone: '666-666-6666'
39
44
  }}
40
45
 
41
46
  it 'can import an order number' do
@@ -48,22 +53,22 @@ module Spree
48
53
  params = { email: 'test@test.com',
49
54
  completed_at: Time.current,
50
55
  line_items_attributes: line_items }
51
- order = Importer::Order.import(user,params)
56
+ order = Importer::Order.import(user, params)
52
57
  expect(order).to be_completed
53
58
  expect(order.state).to eq 'complete'
54
59
  end
55
60
 
56
61
  it "assigns order[email] over user email to order" do
57
62
  params = { email: 'wooowww@test.com' }
58
- order = Importer::Order.import(user,params)
63
+ order = Importer::Order.import(user, params)
59
64
  expect(order.email).to eq params[:email]
60
65
  end
61
66
 
62
67
  context "assigning a user to an order" do
63
- let(:other_user) { stub_model(LegacyUser, :email => 'dana@scully.com') }
68
+ let(:other_user) { stub_model(LegacyUser, email: 'dana@scully.com') }
64
69
 
65
70
  context "as an admin" do
66
- before { allow(user).to receive_messages :has_spree_role? => true }
71
+ before { allow(user).to receive_messages has_spree_role?: true }
67
72
 
68
73
  context "a user's id is not provided" do
69
74
  context "nil user id is provided" do
@@ -85,7 +90,7 @@ module Spree
85
90
 
86
91
  context "a user's id is not provided" do
87
92
  it "doesn't unassociate the admin from the order" do
88
- params = { }
93
+ params = {}
89
94
  order = Importer::Order.import(user, params)
90
95
  expect(order.user_id).to eq(user.id)
91
96
  end
@@ -93,7 +98,7 @@ module Spree
93
98
  end
94
99
 
95
100
  context "as a user" do
96
- before { allow(user).to receive_messages :has_spree_role? => false }
101
+ before { allow(user).to receive_messages has_spree_role?: false }
97
102
  it "does not assign the order to the other user" do
98
103
  params = { user_id: other_user.id }
99
104
  order = Importer::Order.import(user, params)
@@ -103,10 +108,10 @@ module Spree
103
108
  end
104
109
 
105
110
  it 'can build an order from API with just line items' do
106
- params = { :line_items_attributes => line_items }
111
+ params = { line_items_attributes: line_items }
107
112
 
108
- expect(Importer::Order).to receive(:ensure_variant_id_from_params).and_return({variant_id: variant.id, quantity: 5})
109
- order = Importer::Order.import(user,params)
113
+ expect(Importer::Order).to receive(:ensure_variant_id_from_params).and_return({ variant_id: variant.id, quantity: 5 })
114
+ order = Importer::Order.import(user, params)
110
115
  expect(order.user).to eq(nil)
111
116
  line_item = order.line_items.first
112
117
  expect(line_item.quantity).to eq(5)
@@ -115,18 +120,18 @@ module Spree
115
120
 
116
121
  it 'handles line_item updating exceptions' do
117
122
  line_items['0'][:currency] = 'GBP'
118
- params = { :line_items_attributes => line_items }
123
+ params = { line_items_attributes: line_items }
119
124
 
120
125
  expect {
121
- order = Importer::Order.import(user, params)
126
+ Importer::Order.import(user, params)
122
127
  }.to raise_error /Validation failed/
123
128
  end
124
129
 
125
130
  it 'can build an order from API with variant sku' do
126
- params = { :line_items_attributes => {
127
- "0" => { :sku => sku, :quantity => 5 } }}
131
+ params = { line_items_attributes: {
132
+ "0" => { sku: sku, quantity: 5 } } }
128
133
 
129
- order = Importer::Order.import(user,params)
134
+ order = Importer::Order.import(user, params)
130
135
 
131
136
  line_item = order.line_items.first
132
137
  expect(line_item.variant_id).to eq(variant_id)
@@ -134,41 +139,41 @@ module Spree
134
139
  end
135
140
 
136
141
  it 'can build an order from API shipping address' do
137
- params = { :ship_address_attributes => ship_address,
138
- :line_items_attributes => line_items }
142
+ params = { ship_address_attributes: ship_address,
143
+ line_items_attributes: line_items }
139
144
 
140
- order = Importer::Order.import(user,params)
145
+ order = Importer::Order.import(user, params)
141
146
  expect(order.ship_address.address1).to eq '123 Testable Way'
142
147
  end
143
148
 
144
149
  it 'can build an order from API with country attributes' do
145
150
  ship_address.delete(:country_id)
146
151
  ship_address[:country] = { 'iso' => 'US' }
147
- params = { :ship_address_attributes => ship_address,
148
- :line_items_attributes => line_items }
152
+ params = { ship_address_attributes: ship_address,
153
+ line_items_attributes: line_items }
149
154
 
150
- order = Importer::Order.import(user,params)
155
+ order = Importer::Order.import(user, params)
151
156
  expect(order.ship_address.country.iso).to eq 'US'
152
157
  end
153
158
 
154
159
  it 'can build an order from API with state attributes' do
155
160
  ship_address.delete(:state_id)
156
161
  ship_address[:state] = { 'name' => state.name }
157
- params = { :ship_address_attributes => ship_address,
158
- :line_items_attributes => line_items }
162
+ params = { ship_address_attributes: ship_address,
163
+ line_items_attributes: line_items }
159
164
 
160
- order = Importer::Order.import(user,params)
165
+ order = Importer::Order.import(user, params)
161
166
  expect(order.ship_address.state.name).to eq 'Alabama'
162
167
  end
163
168
 
164
169
  context "with a different currency" do
165
- before { variant.price_in("GBP").update_attribute(:price, 18.99) }
170
+ before { variant.prices.create(currency: "GBP", amount: 18.99) }
166
171
 
167
172
  it "sets the order currency" do
168
173
  params = {
169
174
  currency: "GBP"
170
175
  }
171
- order = Importer::Order.import(user,params)
176
+ order = Importer::Order.import(user, params)
172
177
  expect(order.currency).to eq "GBP"
173
178
  end
174
179
 
@@ -187,8 +192,10 @@ module Spree
187
192
 
188
193
  context "state passed is not associated with country" do
189
194
  let(:params) do
190
- params = { :ship_address_attributes => ship_address,
191
- :line_items_attributes => line_items }
195
+ {
196
+ ship_address_attributes: ship_address,
197
+ line_items_attributes: line_items
198
+ }
192
199
  end
193
200
 
194
201
  let(:other_state) { create(:state, name: "Uhuhuh", country: create(:country)) }
@@ -199,7 +206,7 @@ module Spree
199
206
  end
200
207
 
201
208
  it 'sets states name instead of state id' do
202
- order = Importer::Order.import(user,params)
209
+ order = Importer::Order.import(user, params)
203
210
  expect(order.ship_address.state_name).to eq other_state.name
204
211
  end
205
212
  end
@@ -207,10 +214,10 @@ module Spree
207
214
  it 'sets state name if state record not found' do
208
215
  ship_address.delete(:state_id)
209
216
  ship_address[:state] = { 'name' => 'XXX' }
210
- params = { :ship_address_attributes => ship_address,
211
- :line_items_attributes => line_items }
217
+ params = { ship_address_attributes: ship_address,
218
+ line_items_attributes: line_items }
212
219
 
213
- order = Importer::Order.import(user,params)
220
+ order = Importer::Order.import(user, params)
214
221
  expect(order.ship_address.state_name).to eq 'XXX'
215
222
  end
216
223
 
@@ -234,14 +241,14 @@ module Spree
234
241
 
235
242
  it 'ensures_country_id for country fields' do
236
243
  [:name, :iso, :iso_name, :iso3].each do |field|
237
- address = { :country => { field => country.send(field) }}
244
+ address = { country: { field => country.send(field) } }
238
245
  Importer::Order.ensure_country_id_from_params(address)
239
246
  expect(address[:country_id]).to eq country.id
240
247
  end
241
248
  end
242
249
 
243
250
  it "raises with proper message when cant find country" do
244
- address = { :country => { "name" => "NoNoCountry" } }
251
+ address = { country: { "name" => "NoNoCountry" } }
245
252
  expect {
246
253
  Importer::Order.ensure_country_id_from_params(address)
247
254
  }.to raise_error ActiveRecord::RecordNotFound
@@ -249,7 +256,7 @@ module Spree
249
256
 
250
257
  it 'ensures_state_id for state fields' do
251
258
  [:name, :abbr].each do |field|
252
- address = { country_id: country.id, :state => { field => state.send(field) }}
259
+ address = { country_id: country.id, state: { field => state.send(field) } }
253
260
  Importer::Order.ensure_state_id_from_params(address)
254
261
  expect(address[:state_id]).to eq state.id
255
262
  end
@@ -257,19 +264,19 @@ module Spree
257
264
 
258
265
  context "shipments" do
259
266
  let(:params) do
260
- { :shipments_attributes => [
261
- { :tracking => '123456789',
262
- :cost => '14.99',
263
- :shipping_method => shipping_method.name,
264
- :stock_location => stock_location.name,
265
- :inventory_units => [{ :sku => sku }]
267
+ { shipments_attributes: [
268
+ { tracking: '123456789',
269
+ cost: '14.99',
270
+ shipping_method: shipping_method.name,
271
+ stock_location: stock_location.name,
272
+ inventory_units: [{ sku: sku }]
266
273
  }
267
274
  ] }
268
275
  end
269
276
 
270
277
  it 'ensures variant exists and is not deleted' do
271
278
  expect(Importer::Order).to receive(:ensure_variant_id_from_params).and_call_original
272
- order = Importer::Order.import(user,params)
279
+ Importer::Order.import(user, params)
273
280
  end
274
281
 
275
282
  it 'builds them properly' do
@@ -296,21 +303,21 @@ module Spree
296
303
  it "raises if cant find stock location" do
297
304
  params[:shipments_attributes][0][:stock_location] = "doesnt exist"
298
305
  expect {
299
- order = Importer::Order.import(user,params)
306
+ Importer::Order.import(user, params)
300
307
  }.to raise_error ActiveRecord::RecordNotFound
301
308
  end
302
309
 
303
310
  context 'when completed_at and shipped_at present' do
304
311
  let(:params) do
305
312
  {
306
- :completed_at => 2.days.ago,
307
- :shipments_attributes => [
308
- { :tracking => '123456789',
309
- :cost => '4.99',
310
- :shipped_at => 1.day.ago,
311
- :shipping_method => shipping_method.name,
312
- :stock_location => stock_location.name,
313
- :inventory_units => [{ :sku => sku }]
313
+ completed_at: 2.days.ago,
314
+ shipments_attributes: [
315
+ { tracking: '123456789',
316
+ cost: '4.99',
317
+ shipped_at: 1.day.ago,
318
+ shipping_method: shipping_method.name,
319
+ stock_location: stock_location.name,
320
+ inventory_units: [{ sku: sku }]
314
321
  }
315
322
  ]
316
323
  }
@@ -336,14 +343,14 @@ module Spree
336
343
  end
337
344
 
338
345
  it 'adds adjustments' do
339
- params = { :adjustments_attributes => [
346
+ params = { adjustments_attributes: [
340
347
  { label: 'Shipping Discount', amount: -4.99 },
341
348
  { label: 'Promotion Discount', amount: -3.00 }] }
342
349
 
343
- order = Importer::Order.import(user,params)
350
+ order = Importer::Order.import(user, params)
344
351
  expect(order.adjustments.all?(&:finalized?)).to be true
345
352
  expect(order.adjustments.first.label).to eq 'Shipping Discount'
346
- expect(order.adjustments.first.amount).to eq -4.99
353
+ expect(order.adjustments.first.amount).to eq(-4.99)
347
354
  end
348
355
 
349
356
  it "calculates final order total correctly" do
@@ -359,30 +366,29 @@ module Spree
359
366
  }
360
367
  }
361
368
 
362
- order = Importer::Order.import(user,params)
369
+ order = Importer::Order.import(user, params)
363
370
  expect(order.item_total).to eq(166.1)
364
371
  expect(order.total).to eq(163.1) # = item_total (166.1) - adjustment_total (3.00)
365
-
366
372
  end
367
373
 
368
374
  it 'builds a payment using state' do
369
- params = { :payments_attributes => [{ amount: '4.99',
375
+ params = { payments_attributes: [{ amount: '4.99',
370
376
  payment_method: payment_method.name,
371
377
  state: 'completed' }] }
372
- order = Importer::Order.import(user,params)
378
+ order = Importer::Order.import(user, params)
373
379
  expect(order.payments.first.amount).to eq 4.99
374
380
  end
375
381
 
376
382
  it 'builds a payment using status as fallback' do
377
- params = { :payments_attributes => [{ amount: '4.99',
383
+ params = { payments_attributes: [{ amount: '4.99',
378
384
  payment_method: payment_method.name,
379
385
  status: 'completed' }] }
380
- order = Importer::Order.import(user,params)
386
+ order = Importer::Order.import(user, params)
381
387
  expect(order.payments.first.amount).to eq 4.99
382
388
  end
383
389
 
384
390
  it 'build a source payment using years and month' do
385
- params = { :payments_attributes => [{
391
+ params = { payments_attributes: [{
386
392
  amount: '4.99',
387
393
  payment_method: payment_method.name,
388
394
  status: 'completed',
@@ -393,14 +399,14 @@ module Spree
393
399
  year: '2022',
394
400
  month: "5"
395
401
  }
396
- }]}
402
+ }] }
397
403
 
398
404
  order = Importer::Order.import(user, params)
399
405
  expect(order.payments.first.source.last_digits).to eq '7424'
400
406
  end
401
407
 
402
408
  it 'handles source building exceptions when do not have years and month' do
403
- params = { :payments_attributes => [{
409
+ params = { payments_attributes: [{
404
410
  amount: '4.99',
405
411
  payment_method: payment_method.name,
406
412
  status: 'completed',
@@ -409,23 +415,22 @@ module Spree
409
415
  last_digits: "7424",
410
416
  cc_type: "visa"
411
417
  }
412
- }]}
418
+ }] }
413
419
 
414
420
  expect {
415
- order = Importer::Order.import(user, params)
421
+ Importer::Order.import(user, params)
416
422
  }.to raise_error /Validation failed: Credit card Month is not a number, Credit card Year is not a number/
417
423
  end
418
424
 
419
425
  context "raises error" do
420
426
  it "clears out order from db" do
421
- params = { :payments_attributes => [{ payment_method: "XXX" }] }
427
+ params = { payments_attributes: [{ payment_method: "XXX" }] }
422
428
  count = Order.count
423
429
 
424
- expect { order = Importer::Order.import(user,params) }.to raise_error ActiveRecord::RecordNotFound
430
+ expect { Importer::Order.import(user, params) }.to raise_error ActiveRecord::RecordNotFound
425
431
  expect(Order.count).to eq count
426
432
  end
427
433
  end
428
-
429
434
  end
430
435
  end
431
436
  end
@@ -29,18 +29,18 @@ describe Spree::RoleConfiguration do
29
29
 
30
30
  describe "#assign_permissions" do
31
31
  let(:name) { "thing" }
32
- subject { instance.assign_permissions name, [DummyPermissionSet]}
32
+ subject { instance.assign_permissions name, [DummyPermissionSet] }
33
33
 
34
34
  context "when a role for the name exists" do
35
35
  before do
36
- instance.roles.merge!({ name => described_class::Role.new(name, Set.new(existing_roles)) })
36
+ instance.roles[name] = described_class::Role.new(name, Set.new(existing_roles))
37
37
  end
38
38
 
39
39
  context "when adding duplicate permission sets" do
40
40
  let(:existing_roles) { [DummyPermissionSet] }
41
41
 
42
42
  it "does not add another role" do
43
- expect{subject}.to_not change{instance.roles.count}
43
+ expect{ subject }.to_not change{ instance.roles.count }
44
44
  end
45
45
 
46
46
  it "does not add duplicate permission sets" do
@@ -54,7 +54,7 @@ describe Spree::RoleConfiguration do
54
54
  let(:existing_roles) { [OtherDummyPermissionSet] }
55
55
 
56
56
  it "does not add another role" do
57
- expect{subject}.to_not change{instance.roles.count}
57
+ expect{ subject }.to_not change{ instance.roles.count }
58
58
  end
59
59
 
60
60
  it "appends the permission set to the existing role" do
@@ -67,7 +67,7 @@ describe Spree::RoleConfiguration do
67
67
 
68
68
  context "when a role for the name does not yet exist" do
69
69
  it "creates a new role" do
70
- expect{subject}.to change{instance.roles.count}.from(0).to(1)
70
+ expect{ subject }.to change{ instance.roles.count }.from(0).to(1)
71
71
  end
72
72
 
73
73
  it "sets the roles name accordingly" do
@@ -97,27 +97,27 @@ describe Spree::RoleConfiguration do
97
97
 
98
98
  context "when the configuration has roles" do
99
99
  before do
100
- instance.roles.merge!({ role_name => described_class::Role.new(role_name, [DummyPermissionSet])})
100
+ instance.roles[role_name] = described_class::Role.new(role_name, [DummyPermissionSet])
101
101
  end
102
102
 
103
103
  context "default_role" do
104
104
  let(:role_name) { 'default' }
105
105
 
106
106
  context "when the user has no roles" do
107
- let(:user_roles) {[]}
107
+ let(:user_roles) { [] }
108
108
 
109
109
  it "activates the applicable permissions on the ability" do
110
- expect{subject}.to change{ability.can? :manage, :things}.
110
+ expect{ subject }.to change{ ability.can? :manage, :things }.
111
111
  from(false).
112
112
  to(true)
113
113
  end
114
114
  end
115
115
 
116
116
  context "when the user has a different role" do
117
- let(:user_roles) {[]}
117
+ let(:user_roles) { [] }
118
118
 
119
119
  it "activates the applicable permissions on the ability" do
120
- expect{subject}.to change{ability.can? :manage, :things}.
120
+ expect{ subject }.to change{ ability.can? :manage, :things }.
121
121
  from(false).
122
122
  to(true)
123
123
  end
@@ -125,31 +125,31 @@ describe Spree::RoleConfiguration do
125
125
  end
126
126
 
127
127
  context "when the configuration has applicable roles" do
128
- let(:user_roles) {[role_name, "someotherrandomrole"]}
128
+ let(:user_roles) { [role_name, "someotherrandomrole"] }
129
129
 
130
130
  it "activates the applicable permissions on the ability" do
131
- expect{subject}.to change{ability.can? :manage, :things}.
131
+ expect{ subject }.to change{ ability.can? :manage, :things }.
132
132
  from(false).
133
133
  to(true)
134
134
  end
135
135
  end
136
136
 
137
137
  context "when the configuration does not have applicable roles" do
138
- let(:user_roles) {["somerandomrole"]}
138
+ let(:user_roles) { ["somerandomrole"] }
139
139
 
140
140
  it "doesn't activate non matching roles" do
141
141
  subject
142
- expect(ability.can? :manage, :things).to be false
142
+ expect(ability.can?(:manage, :things)).to be false
143
143
  end
144
144
  end
145
145
  end
146
146
 
147
147
  context "when the configuration does not have roles" do
148
- let(:user_roles) {["somerandomrole"]}
148
+ let(:user_roles) { ["somerandomrole"] }
149
149
 
150
150
  it "doesnt activate any new permissions" do
151
151
  subject
152
- expect(ability.can? :manage, :things).to be false
152
+ expect(ability.can?(:manage, :things)).to be false
153
153
  end
154
154
  end
155
155
  end
@@ -21,4 +21,39 @@ RSpec.describe 'address factory' do
21
21
 
22
22
  it_behaves_like 'a working factory'
23
23
  end
24
+
25
+ describe 'when passing in a country iso code' do
26
+ subject { build(:address, country_iso_code: "RO") }
27
+
28
+ it 'creates a valid address with actually valid data' do
29
+ expect(subject).to be_valid
30
+ end
31
+ end
32
+
33
+ describe 'when passing in a state and country' do
34
+ subject { build(:address, country_iso_code: country_iso_code, state_code: state_code) }
35
+
36
+ context 'when the country has a state with proper code' do
37
+ let(:country_iso_code) { "US" }
38
+ let(:state_code) { "NY" }
39
+
40
+ it 'works' do
41
+ expect(subject).to be_valid
42
+ expect(subject.state.abbr).to eq("NY")
43
+ expect(subject.country.iso).to eq("US")
44
+ end
45
+ end
46
+ end
47
+
48
+ describe 'creating multiple addresses' do
49
+ let!(:address1) { create(:address) }
50
+ let!(:address2) { create(:address) }
51
+
52
+ it 'shares the same country and state objects' do
53
+ expect(address1.country).to eq(address2.country)
54
+ expect(address1.state).to eq(address2.state)
55
+ expect(Spree::Country.count).to eq(1)
56
+ expect(Spree::State.count).to eq(1)
57
+ end
58
+ end
24
59
  end
@@ -8,6 +8,15 @@ RSpec.describe 'customer return factory' do
8
8
  let(:factory) { :customer_return }
9
9
 
10
10
  it_behaves_like 'a working factory'
11
+
12
+ # Regression test for https://github.com/solidusio/solidus/pull/697
13
+ it "creates only one of dependent records" do
14
+ create(:customer_return, line_items_count: 2)
15
+ aggregate_failures "items created" do
16
+ expect(Spree::Order.count).to eq(1)
17
+ expect(Spree::ReturnAuthorization.count).to eq(1)
18
+ end
19
+ end
11
20
  end
12
21
 
13
22
  describe 'customer return with accepted items' do
@@ -20,7 +29,7 @@ RSpec.describe 'customer return factory' do
20
29
  let(:factory) { :customer_return_without_return_items }
21
30
 
22
31
  it "builds successfully" do
23
- expect(build factory).to be_a(factory_class)
32
+ expect(build(factory)).to be_a(factory_class)
24
33
  end
25
34
 
26
35
  # No create test, because this factory is (intentionally) invalid
@@ -10,7 +10,6 @@ RSpec.describe 'order factory' do
10
10
  it_behaves_like 'a working factory'
11
11
  end
12
12
 
13
-
14
13
  describe 'order with totals' do
15
14
  let(:factory) { :order_with_totals }
16
15
 
@@ -8,13 +8,18 @@ RSpec.describe 'shipping method factory' do
8
8
  let(:factory) { :shipping_method }
9
9
 
10
10
  it_behaves_like 'a working factory'
11
+
12
+ it "should set calculable correctly" do
13
+ shipping_method = create(factory)
14
+ expect(shipping_method.calculator.calculable).to eq(shipping_method)
15
+ end
11
16
  end
12
17
 
13
18
  describe 'base shipping method' do
14
19
  let(:factory) { :base_shipping_method }
15
20
 
16
21
  it 'builds successfully' do
17
- expect(build factory).to be_a(factory_class)
22
+ expect(build(factory)).to be_a(factory_class)
18
23
  end
19
24
 
20
25
  # No test for create, as that is not intended somehow
@@ -4,9 +4,45 @@ require 'spree/testing_support/factories/state_factory'
4
4
  RSpec.describe 'state factory' do
5
5
  let(:factory_class) { Spree::State }
6
6
 
7
- describe 'plain shipping rate' do
7
+ describe 'plain state' do
8
8
  let(:factory) { :state }
9
9
 
10
10
  it_behaves_like 'a working factory'
11
+
12
+ it 'is Alabama' do
13
+ expect(build(factory).abbr).to eq('AL')
14
+ expect(build(factory).name).to eq('Alabama')
15
+ end
16
+ end
17
+
18
+ describe 'when given a country iso code' do
19
+ let(:state) { build(:state, country_iso: "DE") }
20
+ it 'creates the first state for that country it finds in carmen' do
21
+ expect(state.abbr).to eq("BW")
22
+ expect(state.name).to eq("Baden-Württemberg")
23
+ end
24
+
25
+ context 'of an existing country' do
26
+ let!(:country){ create(:country, iso: "DE") }
27
+ it 'uses the existing country in the database' do
28
+ expect(state.country).to eq(country)
29
+ expect(Spree::Country.count).to eq(1)
30
+ end
31
+ end
32
+ end
33
+
34
+ describe 'when given a country record' do
35
+ let(:country) { build(:country, iso: "DE") }
36
+ let(:state) { build(:state, country: country) }
37
+ it 'creates the first state for that country it finds in carmen' do
38
+ expect(state.abbr).to eq("BW")
39
+ expect(state.name).to eq("Baden-Württemberg")
40
+ end
41
+ end
42
+
43
+ describe 'when given an invalid country iso code' do
44
+ it 'raises a helpful message' do
45
+ expect{ build(:state, country_iso: "ZZ") }.to raise_error(RuntimeError, 'Unknown country iso code: "ZZ"')
46
+ end
11
47
  end
12
48
  end