solidus_core 1.1.4 → 1.2.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 (296) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/logo/solidus_logo.png +0 -0
  3. data/app/helpers/spree/base_helper.rb +2 -3
  4. data/app/models/concerns/spree/adjustment_source.rb +1 -1
  5. data/app/models/concerns/spree/default_price.rb +3 -1
  6. data/app/models/concerns/spree/named_type.rb +1 -1
  7. data/app/models/concerns/spree/user_methods.rb +10 -0
  8. data/app/models/spree/adjustment.rb +1 -1
  9. data/app/models/spree/adjustment_reason.rb +2 -4
  10. data/app/models/spree/app_configuration.rb +36 -0
  11. data/app/models/spree/base.rb +10 -1
  12. data/app/models/spree/calculator/tiered_percent.rb +2 -1
  13. data/app/models/spree/classification.rb +1 -1
  14. data/app/models/spree/country.rb +3 -3
  15. data/app/models/spree/credit_card.rb +2 -2
  16. data/app/models/spree/customer_return.rb +3 -4
  17. data/app/models/spree/inventory_unit.rb +13 -24
  18. data/app/models/spree/item_adjustments.rb +5 -5
  19. data/app/models/spree/line_item.rb +6 -15
  20. data/app/models/spree/log_entry.rb +1 -1
  21. data/app/models/spree/option_type.rb +4 -2
  22. data/app/models/spree/option_type_prototype.rb +6 -0
  23. data/app/models/spree/option_value.rb +1 -1
  24. data/app/models/spree/order.rb +18 -63
  25. data/app/models/spree/order/checkout.rb +4 -2
  26. data/app/models/spree/order_cancellations.rb +52 -1
  27. data/app/models/spree/order_contents.rb +1 -1
  28. data/app/models/spree/order_merger.rb +143 -0
  29. data/app/models/spree/order_shipping.rb +3 -3
  30. data/app/models/spree/order_update_attributes.rb +42 -0
  31. data/app/models/spree/order_updater.rb +1 -1
  32. data/app/models/spree/payment.rb +16 -10
  33. data/app/models/spree/payment_create.rb +68 -0
  34. data/app/models/spree/payment_method.rb +0 -1
  35. data/app/models/spree/preference.rb +1 -1
  36. data/app/models/spree/price.rb +1 -8
  37. data/app/models/spree/product.rb +9 -44
  38. data/app/models/spree/product/scopes.rb +9 -7
  39. data/app/models/spree/promotion/rules/nth_order.rb +1 -1
  40. data/app/models/spree/promotion/rules/taxon.rb +2 -1
  41. data/app/models/spree/promotion_chooser.rb +1 -0
  42. data/app/models/spree/promotion_code.rb +1 -1
  43. data/app/models/spree/promotion_rule_taxon.rb +6 -0
  44. data/app/models/spree/property.rb +2 -1
  45. data/app/models/spree/property_prototype.rb +6 -0
  46. data/app/models/spree/prototype.rb +6 -2
  47. data/app/models/spree/reimbursement.rb +10 -0
  48. data/app/models/spree/return_item/eligibility_validator/time_since_purchase.rb +1 -1
  49. data/app/models/spree/return_reason.rb +1 -7
  50. data/app/models/spree/role_user.rb +3 -5
  51. data/app/models/spree/shipment.rb +6 -11
  52. data/app/models/spree/shipping_method.rb +1 -7
  53. data/app/models/spree/shipping_rate.rb +3 -14
  54. data/app/models/spree/stock/coordinator.rb +48 -4
  55. data/app/models/spree/stock/estimator.rb +3 -6
  56. data/app/models/spree/stock/packer.rb +18 -2
  57. data/app/models/spree/stock/shipping_rate_selector.rb +16 -0
  58. data/app/models/spree/stock/shipping_rate_sorter.rb +16 -0
  59. data/app/models/spree/stock_item.rb +19 -15
  60. data/app/models/spree/stock_location.rb +2 -12
  61. data/app/models/spree/stock_transfer.rb +3 -3
  62. data/app/models/spree/store_credit.rb +2 -2
  63. data/app/models/spree/tax_category.rb +3 -2
  64. data/app/models/spree/tax_rate.rb +7 -14
  65. data/app/models/spree/taxon.rb +4 -1
  66. data/app/models/spree/taxonomy.rb +1 -1
  67. data/app/models/spree/transfer_item.rb +2 -2
  68. data/app/models/spree/unit_cancel.rb +2 -0
  69. data/app/models/spree/variant.rb +9 -14
  70. data/app/models/spree/zone.rb +6 -0
  71. data/app/models/spree/zone_member.rb +1 -4
  72. data/app/views/spree/order_mailer/cancel_email.text.erb +0 -0
  73. data/config/locales/en.yml +7 -5
  74. data/db/default/spree/countries.rb +1 -1
  75. data/db/default/spree/zones.rb +5 -11
  76. data/db/migrate/20130213191427_create_default_stock.rb +1 -1
  77. data/db/migrate/20130306181701_add_address_fields_to_stock_location.rb +1 -1
  78. data/db/migrate/20140309033438_create_store_from_preferences.rb +5 -2
  79. data/db/migrate/20141009204607_add_store_id_to_orders.rb +6 -2
  80. data/db/migrate/20141215235502_remove_extra_products_slug_index.rb +5 -0
  81. data/db/migrate/20141217215630_update_product_slug_index.rb +6 -0
  82. data/db/migrate/20150225205344_move_promotion_code_to_promotion_code_value.rb +2 -2
  83. data/db/migrate/20150609093816_increase_scale_on_pre_tax_amounts.rb +10 -0
  84. data/db/migrate/20151117063249_convert_habtm_to_hmt_for_properties_prototypes.rb +17 -0
  85. data/db/migrate/20151124062500_convert_habtm_to_hmt_for_option_type_prototypes.rb +17 -0
  86. data/db/migrate/20151126063028_convert_habtm_to_hmt_for_taxons_promotion_rules.rb +15 -0
  87. data/db/migrate/20151219020209_add_stock_item_unique_index.rb +9 -0
  88. data/lib/generators/spree/dummy/dummy_generator.rb +1 -1
  89. data/lib/generators/spree/dummy/templates/rails/database.yml +1 -1
  90. data/lib/generators/spree/install/templates/config/initializers/spree.rb +25 -1
  91. data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/backend/all.js +3 -0
  92. data/lib/generators/spree/install/templates/vendor/assets/javascripts/spree/frontend/all.js +3 -0
  93. data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/backend/all.css +3 -0
  94. data/lib/generators/spree/install/templates/vendor/assets/stylesheets/spree/frontend/all.css +3 -0
  95. data/lib/spree/core/controller_helpers/common.rb +1 -1
  96. data/lib/spree/core/controller_helpers/order.rb +1 -1
  97. data/lib/spree/core/controller_helpers/payment_parameters.rb +104 -5
  98. data/lib/spree/core/engine.rb +3 -2
  99. data/lib/spree/core/stock_configuration.rb +11 -0
  100. data/lib/spree/core/unreturned_item_charger.rb +4 -4
  101. data/lib/spree/core/version.rb +9 -1
  102. data/lib/spree/permission_sets/restricted_stock_transfer_management.rb +15 -24
  103. data/lib/spree/permitted_attributes.rb +3 -1
  104. data/lib/spree/testing_support/capybara_ext.rb +14 -40
  105. data/lib/spree/testing_support/factories.rb +0 -15
  106. data/lib/spree/testing_support/factories/address_factory.rb +3 -0
  107. data/lib/spree/testing_support/factories/adjustment_factory.rb +9 -1
  108. data/lib/spree/testing_support/factories/carton_factory.rb +4 -1
  109. data/lib/spree/testing_support/factories/customer_return_factory.rb +4 -0
  110. data/lib/spree/testing_support/factories/inventory_unit_factory.rb +5 -0
  111. data/lib/spree/testing_support/factories/line_item_factory.rb +3 -0
  112. data/lib/spree/testing_support/factories/option_type_factory.rb +6 -0
  113. data/lib/spree/testing_support/factories/{options_factory.rb → option_value_factory.rb} +0 -5
  114. data/lib/spree/testing_support/factories/order_factory.rb +13 -3
  115. data/lib/spree/testing_support/factories/order_promotion_factory.rb +3 -0
  116. data/lib/spree/testing_support/factories/payment_factory.rb +13 -5
  117. data/lib/spree/testing_support/factories/price_factory.rb +2 -0
  118. data/lib/spree/testing_support/factories/product_factory.rb +7 -1
  119. data/lib/spree/testing_support/factories/product_option_type_factory.rb +3 -0
  120. data/lib/spree/testing_support/factories/product_property_factory.rb +3 -0
  121. data/lib/spree/testing_support/factories/promotion_code_factory.rb +3 -0
  122. data/lib/spree/testing_support/factories/promotion_factory.rb +3 -0
  123. data/lib/spree/testing_support/factories/prototype_factory.rb +2 -0
  124. data/lib/spree/testing_support/factories/refund_factory.rb +10 -5
  125. data/lib/spree/testing_support/factories/refund_reason_factory.rb +5 -0
  126. data/lib/spree/testing_support/factories/reimbursement_factory.rb +2 -0
  127. data/lib/spree/testing_support/factories/return_authorization_factory.rb +4 -4
  128. data/lib/spree/testing_support/factories/return_item_factory.rb +4 -0
  129. data/lib/spree/testing_support/factories/return_reason_factory.rb +5 -0
  130. data/lib/spree/testing_support/factories/shipment_factory.rb +6 -1
  131. data/lib/spree/testing_support/factories/shipping_method_factory.rb +22 -10
  132. data/lib/spree/testing_support/factories/shipping_rate_factory.rb +9 -0
  133. data/lib/spree/testing_support/factories/state_factory.rb +2 -0
  134. data/lib/spree/testing_support/factories/stock_item_factory.rb +4 -1
  135. data/lib/spree/testing_support/factories/stock_location_factory.rb +8 -0
  136. data/lib/spree/testing_support/factories/stock_movement_factory.rb +2 -0
  137. data/lib/spree/testing_support/factories/{stock_factory.rb → stock_package_factory.rb} +5 -10
  138. data/lib/spree/testing_support/factories/stock_packer_factory.rb +13 -0
  139. data/lib/spree/testing_support/factories/stock_transfer_factory.rb +2 -2
  140. data/lib/spree/testing_support/factories/store_credit_event_factory.rb +4 -1
  141. data/lib/spree/testing_support/factories/store_credit_factory.rb +10 -6
  142. data/lib/spree/testing_support/factories/tax_category_factory.rb +2 -0
  143. data/lib/spree/testing_support/factories/tax_rate_factory.rb +4 -0
  144. data/lib/spree/testing_support/factories/taxon_factory.rb +2 -0
  145. data/lib/spree/testing_support/factories/user_factory.rb +6 -2
  146. data/lib/spree/testing_support/factories/variant_factory.rb +5 -0
  147. data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +3 -0
  148. data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +4 -0
  149. data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +3 -0
  150. data/lib/spree/testing_support/factories/zone_factory.rb +6 -0
  151. data/lib/spree/testing_support/sequences.rb +9 -0
  152. data/lib/tasks/exchanges.rake +4 -3
  153. data/lib/tasks/migrations/copy_shipped_shipments_to_cartons.rake +2 -2
  154. data/solidus_core.gemspec +4 -5
  155. data/spec/helpers/base_helper_spec.rb +6 -6
  156. data/spec/helpers/order_helper_spec.rb +1 -1
  157. data/spec/helpers/products_helper_spec.rb +2 -2
  158. data/spec/helpers/taxons_helper_spec.rb +1 -1
  159. data/spec/lib/spree/core/controller_helpers/payment_parameters_spec.rb +107 -7
  160. data/spec/lib/spree/core/importer/order_spec.rb +1 -1
  161. data/spec/lib/spree/core/stock_configuration_spec.rb +16 -0
  162. data/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb +24 -0
  163. data/spec/lib/spree/core/testing_support/factories/adjustment_factory_spec.rb +18 -0
  164. data/spec/lib/spree/core/testing_support/factories/adjustment_reason_factory_spec.rb +12 -0
  165. data/spec/lib/spree/core/testing_support/factories/calculator_factory_spec.rb +42 -0
  166. data/spec/lib/spree/core/testing_support/factories/carton_factory_spec.rb +12 -0
  167. data/spec/lib/spree/core/testing_support/factories/country_factory_spec.rb +12 -0
  168. data/spec/lib/spree/core/testing_support/factories/credit_card_factory_spec.rb +12 -0
  169. data/spec/lib/spree/core/testing_support/factories/customer_return_factory_spec.rb +28 -0
  170. data/spec/lib/spree/core/testing_support/factories/image_factory_spec.rb +12 -0
  171. data/spec/lib/spree/core/testing_support/factories/inventory_unit_factory_spec.rb +12 -0
  172. data/spec/lib/spree/core/testing_support/factories/line_item_factory_spec.rb +12 -0
  173. data/spec/lib/spree/core/testing_support/factories/option_type_factory_spec.rb +12 -0
  174. data/spec/lib/spree/core/testing_support/factories/option_value_factory_spec.rb +12 -0
  175. data/spec/lib/spree/core/testing_support/factories/order_factory_spec.rb +49 -0
  176. data/spec/lib/spree/core/testing_support/factories/order_promotion_factory_spec.rb +12 -0
  177. data/spec/lib/spree/core/testing_support/factories/payment_factory_spec.rb +24 -0
  178. data/spec/lib/spree/core/testing_support/factories/payment_method_factory_spec.rb +30 -0
  179. data/spec/lib/spree/core/testing_support/factories/price_factory_spec.rb +12 -0
  180. data/spec/lib/spree/core/testing_support/factories/product_factory_spec.rb +30 -0
  181. data/spec/lib/spree/core/testing_support/factories/product_option_type_factory_spec.rb +12 -0
  182. data/spec/lib/spree/core/testing_support/factories/product_property_factory_spec.rb +12 -0
  183. data/spec/lib/spree/core/testing_support/factories/promotion_category_factory_spec.rb +12 -0
  184. data/spec/lib/spree/core/testing_support/factories/promotion_code_factory_spec.rb +12 -0
  185. data/spec/lib/spree/core/testing_support/factories/promotion_factory_spec.rb +30 -0
  186. data/spec/lib/spree/core/testing_support/factories/property_factory_spec.rb +12 -0
  187. data/spec/lib/spree/core/testing_support/factories/prototype_factory_spec.rb +12 -0
  188. data/spec/lib/spree/core/testing_support/factories/refund_factory_spec.rb +12 -0
  189. data/spec/lib/spree/core/testing_support/factories/refund_reason_factory_spec.rb +12 -0
  190. data/spec/lib/spree/core/testing_support/factories/reimbursement_factory_spec.rb +12 -0
  191. data/spec/lib/spree/core/testing_support/factories/reimbursement_type_factory_spec.rb +12 -0
  192. data/spec/lib/spree/core/testing_support/factories/return_authorization_factory_spec.rb +12 -0
  193. data/spec/lib/spree/core/testing_support/factories/return_item_factory_spec.rb +18 -0
  194. data/spec/lib/spree/core/testing_support/factories/return_reason_factory_spec.rb +12 -0
  195. data/spec/lib/spree/core/testing_support/factories/role_factory_spec.rb +18 -0
  196. data/spec/lib/spree/core/testing_support/factories/shipment_factory_spec.rb +12 -0
  197. data/spec/lib/spree/core/testing_support/factories/shipping_category_factory_spec.rb +12 -0
  198. data/spec/lib/spree/core/testing_support/factories/shipping_method_factory_spec.rb +28 -0
  199. data/spec/lib/spree/core/testing_support/factories/shipping_rate_factory_spec.rb +12 -0
  200. data/spec/lib/spree/core/testing_support/factories/state_factory_spec.rb +12 -0
  201. data/spec/lib/spree/core/testing_support/factories/stock_item_factory_spec.rb +12 -0
  202. data/spec/lib/spree/core/testing_support/factories/stock_location_factory_spec.rb +24 -0
  203. data/spec/lib/spree/core/testing_support/factories/stock_movement_factory_spec.rb +12 -0
  204. data/spec/lib/spree/core/testing_support/factories/stock_package_factory_spec.rb +26 -0
  205. data/spec/lib/spree/core/testing_support/factories/stock_packer_factory_spec.rb +16 -0
  206. data/spec/lib/spree/core/testing_support/factories/stock_transfer_factory_spec.rb +12 -0
  207. data/spec/lib/spree/core/testing_support/factories/store_credit_category_factory_spec.rb +12 -0
  208. data/spec/lib/spree/core/testing_support/factories/store_credit_event_factory_spec.rb +42 -0
  209. data/spec/lib/spree/core/testing_support/factories/store_credit_factory_spec.rb +12 -0
  210. data/spec/lib/spree/core/testing_support/factories/store_credit_type_factory_spec.rb +18 -0
  211. data/spec/lib/spree/core/testing_support/factories/store_credit_update_reason_factory_spec.rb +12 -0
  212. data/spec/lib/spree/core/testing_support/factories/store_factory_spec.rb +12 -0
  213. data/spec/lib/spree/core/testing_support/factories/tax_category_factory_spec.rb +12 -0
  214. data/spec/lib/spree/core/testing_support/factories/tax_rate_factory_spec.rb +12 -0
  215. data/spec/lib/spree/core/testing_support/factories/taxon_factory_spec.rb +12 -0
  216. data/spec/lib/spree/core/testing_support/factories/taxonomy_factory_spec.rb +12 -0
  217. data/spec/lib/spree/core/testing_support/factories/tracker_factory_spec.rb +12 -0
  218. data/spec/lib/spree/core/testing_support/factories/user_factory_spec.rb +22 -0
  219. data/spec/lib/spree/core/testing_support/factories/variant_factory_spec.rb +36 -0
  220. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_condition_factory_spec.rb +12 -0
  221. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_factory_spec.rb +12 -0
  222. data/spec/lib/spree/core/testing_support/factories/variant_property_rule_value_factory_spec.rb +12 -0
  223. data/spec/lib/spree/core/testing_support/factories/zone_factory_spec.rb +18 -0
  224. data/spec/lib/spree/core/unreturned_item_charger_spec.rb +1 -1
  225. data/spec/lib/spree/core/version_spec.rb +17 -0
  226. data/spec/lib/spree/money_spec.rb +1 -1
  227. data/spec/mailers/carton_mailer_spec.rb +1 -1
  228. data/spec/mailers/order_mailer_spec.rb +1 -1
  229. data/spec/mailers/reimbursement_mailer_spec.rb +1 -3
  230. data/spec/mailers/test_mailer_spec.rb +1 -3
  231. data/spec/models/spree/address_spec.rb +4 -4
  232. data/spec/models/spree/adjustment_reason_spec.rb +1 -3
  233. data/spec/models/spree/app_configuration_spec.rb +4 -0
  234. data/spec/models/spree/calculator/price_sack_spec.rb +3 -3
  235. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +3 -3
  236. data/spec/models/spree/calculator/tiered_percent_spec.rb +86 -10
  237. data/spec/models/spree/carton_spec.rb +3 -1
  238. data/spec/models/spree/classification_spec.rb +3 -3
  239. data/spec/models/spree/credit_card_spec.rb +16 -16
  240. data/spec/models/spree/customer_return_spec.rb +1 -1
  241. data/spec/models/spree/gateway/bogus_simple.rb +1 -1
  242. data/spec/models/spree/inventory_unit_spec.rb +3 -3
  243. data/spec/models/spree/item_adjustments_spec.rb +1 -1
  244. data/spec/models/spree/line_item_spec.rb +2 -2
  245. data/spec/models/spree/option_type_spec.rb +2 -2
  246. data/spec/models/spree/option_value_spec.rb +2 -2
  247. data/spec/models/spree/order/callbacks_spec.rb +1 -1
  248. data/spec/models/spree/order/checkout_spec.rb +16 -11
  249. data/spec/models/spree/order/payment_spec.rb +24 -22
  250. data/spec/models/spree/order/state_machine_spec.rb +1 -1
  251. data/spec/models/spree/order/validations_spec.rb +1 -1
  252. data/spec/models/spree/order_cancellations_spec.rb +63 -0
  253. data/spec/models/spree/order_contents_spec.rb +1 -1
  254. data/spec/models/spree/order_merger_spec.rb +133 -0
  255. data/spec/models/spree/order_spec.rb +39 -159
  256. data/spec/models/spree/order_update_attributes_spec.rb +82 -0
  257. data/spec/models/spree/order_updater_spec.rb +6 -4
  258. data/spec/models/spree/payment_create_spec.rb +131 -0
  259. data/spec/models/spree/payment_spec.rb +130 -48
  260. data/spec/models/spree/permission_sets/restricted_stock_transfer_management_spec.rb +91 -33
  261. data/spec/models/spree/product_filter_spec.rb +3 -3
  262. data/spec/models/spree/product_spec.rb +80 -26
  263. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +1 -1
  264. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +2 -2
  265. data/spec/models/spree/promotion/rules/nth_order_spec.rb +1 -1
  266. data/spec/models/spree/promotion/rules/user_spec.rb +2 -2
  267. data/spec/models/spree/promotion_handler/coupon_spec.rb +2 -2
  268. data/spec/models/spree/promotion_spec.rb +18 -18
  269. data/spec/models/spree/reimbursement_spec.rb +22 -0
  270. data/spec/models/spree/return_item_spec.rb +2 -2
  271. data/spec/models/spree/shipment_spec.rb +28 -12
  272. data/spec/models/spree/shipping_method_spec.rb +2 -2
  273. data/spec/models/spree/shipping_rate_spec.rb +3 -3
  274. data/spec/models/spree/stock/coordinator_spec.rb +5 -0
  275. data/spec/models/spree/stock/estimator_spec.rb +35 -1
  276. data/spec/models/spree/stock/package_spec.rb +1 -1
  277. data/spec/models/spree/stock/packer_spec.rb +2 -3
  278. data/spec/models/spree/stock/shipping_rate_selector_spec.rb +16 -0
  279. data/spec/models/spree/stock/shipping_rate_sorter_spec.rb +16 -0
  280. data/spec/models/spree/stock_item_spec.rb +5 -7
  281. data/spec/models/spree/stock_location_spec.rb +5 -9
  282. data/spec/models/spree/stock_transfer_spec.rb +33 -13
  283. data/spec/models/spree/store_credit_event_spec.rb +1 -1
  284. data/spec/models/spree/store_credit_spec.rb +1 -1
  285. data/spec/models/spree/tax_rate_spec.rb +381 -120
  286. data/spec/models/spree/taxon_spec.rb +3 -3
  287. data/spec/models/spree/transfer_item_spec.rb +4 -4
  288. data/spec/models/spree/unit_cancel_spec.rb +1 -1
  289. data/spec/models/spree/variant_spec.rb +3 -3
  290. data/spec/models/spree/zone_spec.rb +35 -1
  291. data/spec/support/concerns/working_factories.rb +9 -0
  292. data/vendor/assets/javascripts/jquery-migrate-1.0.0.js +498 -0
  293. data/vendor/assets/javascripts/jquery.payment.js +231 -80
  294. metadata +103 -27
  295. data/app/models/spree/order/currency_updater.rb +0 -40
  296. data/spec/models/spree/order/currency_updater_spec.rb +0 -32
@@ -0,0 +1,82 @@
1
+ require 'spec_helper'
2
+
3
+ module Spree
4
+ RSpec.describe OrderUpdateAttributes do
5
+ let(:order) { create(:order) }
6
+ let(:request_env) { nil }
7
+ let(:update) { described_class.new(order, attributes, request_env: request_env) }
8
+
9
+ context 'empty attributes' do
10
+ let(:attributes){ {} }
11
+ it 'succeeds' do
12
+ expect(update.apply).to be_truthy
13
+ end
14
+ end
15
+
16
+ context 'with coupon code' do
17
+ let(:attributes){ {coupon_code: 'abc123'} }
18
+ it "sets coupon code" do
19
+ expect(update.apply).to be_truthy
20
+ expect(order.coupon_code).to eq('abc123')
21
+ end
22
+ end
23
+
24
+ context 'with payment attributes' do
25
+ let(:attributes) do
26
+ {
27
+ payments_attributes: [
28
+ {source_attributes: attributes_for(:credit_card)}
29
+ ]
30
+ }
31
+ end
32
+
33
+ context 'with params and a request_env' do
34
+ let(:request_env){ {'USER_AGENT' => 'Firefox'} }
35
+ it 'sets the request_env on the payment' do
36
+ expect(update.apply).to be_truthy
37
+ expect(order.payments.length).to eq 1
38
+ expect(order.payments[0].request_env).to eq({'USER_AGENT' => 'Firefox'})
39
+ end
40
+ end
41
+ end
42
+
43
+ context 'when changing shipping method' do
44
+ let!(:order) { create(:order_with_line_items, shipping_method: shipping_method1) }
45
+ let(:shipment){ order.shipments.first }
46
+ let!(:zone) { create(:zone) }
47
+ let!(:shipping_method1){ create(:shipping_method, cost: 10, zones: [zone]) }
48
+ let!(:shipping_method2){ create(:shipping_method, cost: 20, zones: [zone]) }
49
+
50
+ let(:attributes) do
51
+ {
52
+ shipments_attributes: {
53
+ 0 => {selected_shipping_rate_id: shipping_method2, id: shipment.id }
54
+ }
55
+ }
56
+ end
57
+
58
+ it "updates shipment costs" do
59
+ zone.zone_members.create!(zoneable: order.ship_address.country)
60
+ order.create_proposed_shipments
61
+ order.set_shipments_cost
62
+
63
+ shipping_rate2 = shipment.shipping_rates.find_by(shipping_method_id: shipping_method2.id)
64
+
65
+ expect(order.shipment_total).to eq(10)
66
+
67
+ # We need an order which doesn't have shipping_rates loaded
68
+ order.reload
69
+
70
+ described_class.new(
71
+ order,
72
+ shipments_attributes: {
73
+ 0 => {selected_shipping_rate_id: shipping_rate2.id, id: shipment.id }
74
+ }
75
+ ).apply
76
+
77
+ expect(order.shipment_total).to eq(20)
78
+ expect(order.shipments.first.cost).to eq(20)
79
+ end
80
+ end
81
+ end
82
+ end
@@ -12,10 +12,12 @@ module Spree
12
12
  end
13
13
  end
14
14
 
15
- it "updates payment totals" do
16
- create(:payment_with_refund, order: order)
17
- Spree::OrderUpdater.new(order).update_payment_total
18
- expect(order.payment_total).to eq(40.75)
15
+ context 'with refund' do
16
+ it "updates payment totals" do
17
+ create(:payment_with_refund, order: order, amount: 33.25, refund_amount: 3)
18
+ Spree::OrderUpdater.new(order).update_payment_total
19
+ expect(order.payment_total).to eq(30.25)
20
+ end
19
21
  end
20
22
 
21
23
  it "update item total" do
@@ -0,0 +1,131 @@
1
+ require 'spec_helper'
2
+
3
+ module Spree
4
+ RSpec.describe PaymentCreate do
5
+ let(:user) { nil }
6
+ let(:order) { create :order, user: user }
7
+ let(:request_env) { {} }
8
+ let(:payment_create) { described_class.new(order, attributes, request_env: request_env) }
9
+ let(:payment_method) { create(:payment_method) }
10
+ let(:new_payment) { payment_create.build }
11
+
12
+ context 'empty attributes' do
13
+ let(:attributes){ {} }
14
+ it "builds a new empty payment" do
15
+ expect(new_payment).to be_a Spree::Payment
16
+ expect(new_payment.order).to eq order
17
+ expect(new_payment.source).to be_nil
18
+ end
19
+
20
+ it "builds the payment in order.payments" do
21
+ expect(order.payments).to eq [new_payment]
22
+ end
23
+ end
24
+
25
+ context 'with a new source' do
26
+ let(:attributes) do
27
+ {
28
+ :amount => 100,
29
+ :payment_method => payment_method,
30
+ :source_attributes => {
31
+ :expiry =>"01 / 99",
32
+ :number => '1234567890123',
33
+ :verification_value => '123',
34
+ :name => 'Foo Bar'
35
+ }
36
+ }
37
+ end
38
+
39
+ it "should build the payment's source" do
40
+ expect(new_payment).to be_valid
41
+ expect(new_payment.source).not_to be_nil
42
+ expect(new_payment.source.user_id).to eq order.user_id
43
+ expect(new_payment.source.payment_method_id).to eq payment_method.id
44
+ end
45
+
46
+ context "when payment source not valid" do
47
+ let(:attributes) do
48
+ {
49
+ amount: 100,
50
+ payment_method: payment_method,
51
+ source_attributes: {expiry: "1 / 12"}
52
+ }
53
+
54
+ end
55
+ it "errors when payment source not valid" do
56
+ expect(new_payment).not_to be_valid
57
+ expect(new_payment).not_to be_persisted
58
+ expect(new_payment.source).not_to be_persisted
59
+ expect(new_payment.source).not_to be_valid
60
+ expect(new_payment.source.error_on(:number)).to be_present
61
+ expect(new_payment.source.error_on(:verification_value).size).to be_present
62
+ end
63
+ end
64
+ end
65
+
66
+ context 'with an existing credit card' do
67
+ let(:user) { create(:user) }
68
+ let!(:credit_card) { create(:credit_card, user: order.user) }
69
+
70
+ let(:attributes) do
71
+ {
72
+ source_attributes: {
73
+ existing_card_id: credit_card.id,
74
+ verification_value: '321',
75
+ }
76
+ }
77
+ end
78
+
79
+ it 'sets the existing card as the source for the new payment' do
80
+ expect(new_payment.source).to eq(credit_card)
81
+ end
82
+
83
+ it 'sets the payment payment_method to that of the credit card' do
84
+ expect(new_payment.payment_method_id).to eq(credit_card.payment_method_id)
85
+ end
86
+
87
+ it 'sets the verification_value on the credit card' do
88
+ expect(new_payment.source.verification_value).to eq('321')
89
+ end
90
+
91
+ context 'with request_env' do
92
+ let(:request_env){ {'USER_AGENT' => 'Firefox'} }
93
+ it 'sets the request_env on the payment' do
94
+ expect(new_payment.request_env).to eq({'USER_AGENT' => 'Firefox'})
95
+ end
96
+ end
97
+
98
+ context 'the credit card belongs to a different user' do
99
+ let(:other_user) { create(:user) }
100
+ before { credit_card.update!(user: other_user) }
101
+ it 'errors' do
102
+ expect { new_payment }.to raise_error(ActiveRecord::RecordNotFound)
103
+ end
104
+ end
105
+
106
+ context 'the credit card has no user' do
107
+ before { credit_card.update!(user_id: nil) }
108
+ it 'errors' do
109
+ expect { new_payment }.to raise_error(ActiveRecord::RecordNotFound)
110
+ end
111
+ end
112
+
113
+ context 'the order has no user' do
114
+ before { order.update_attributes!(user_id: nil) }
115
+ it 'errors' do
116
+ expect { new_payment }.to raise_error(ActiveRecord::RecordNotFound)
117
+ end
118
+ end
119
+
120
+ context 'the order and the credit card have no user' do
121
+ before do
122
+ order.update_attributes!(user_id: nil)
123
+ credit_card.update!(user_id: nil)
124
+ end
125
+ it 'errors' do
126
+ expect { new_payment }.to raise_error(ActiveRecord::RecordNotFound)
127
+ end
128
+ end
129
+ end
130
+ end
131
+ end
@@ -214,7 +214,7 @@ describe Spree::Payment, :type => :model do
214
214
  expect(payment.state).to eq('invalid')
215
215
  end
216
216
 
217
- # Regression test for #4598
217
+ # Regression test for https://github.com/spree/spree/issues/4598
218
218
  it "should allow payments with a gateway_customer_profile_id" do
219
219
  allow(payment.source).to receive_messages :gateway_customer_profile_id => "customer_1"
220
220
  expect(payment.payment_method).to receive(:supports?).with(payment.source).and_return(false)
@@ -222,7 +222,7 @@ describe Spree::Payment, :type => :model do
222
222
  payment.process!
223
223
  end
224
224
 
225
- # Another regression test for #4598
225
+ # Another regression test for https://github.com/spree/spree/issues/4598
226
226
  it "should allow payments with a gateway_payment_profile_id" do
227
227
  allow(payment.source).to receive_messages :gateway_payment_profile_id => "customer_1"
228
228
  expect(payment.payment_method).to receive(:supports?).with(payment.source).and_return(false)
@@ -471,7 +471,7 @@ describe Spree::Payment, :type => :model do
471
471
  end
472
472
  end
473
473
 
474
- # Regression test for #2119
474
+ # Regression test for https://github.com/spree/spree/issues/2119
475
475
  context "when payment is completed" do
476
476
  before do
477
477
  payment.state = 'completed'
@@ -558,7 +558,7 @@ describe Spree::Payment, :type => :model do
558
558
  end
559
559
  end
560
560
 
561
- # Regression test for #2119
561
+ # Regression test for https://github.com/spree/spree/issues/2119
562
562
  context "if payment is already voided" do
563
563
  before do
564
564
  payment.state = 'void'
@@ -601,13 +601,13 @@ describe Spree::Payment, :type => :model do
601
601
  end
602
602
 
603
603
  specify do
604
- expect { payment.process! }.not_to raise_error
604
+ payment.process!
605
605
  end
606
606
  end
607
607
  end
608
608
 
609
609
  describe "#credit_allowed" do
610
- # Regression test for #4403 & #4407
610
+ # Regression test for https://github.com/spree/spree/issues/4403 and https://github.com/spree/spree/issues/4407
611
611
  it "is the difference between offsets total and payment amount" do
612
612
  payment.amount = 100
613
613
  allow(payment).to receive(:offsets_total).and_return(0)
@@ -661,13 +661,12 @@ describe Spree::Payment, :type => :model do
661
661
  end
662
662
 
663
663
  context "completed orders" do
664
- let(:payment_method) { create(:check_payment_method) }
665
664
  before { allow(order).to receive_messages completed?: true }
666
665
 
667
666
  it "updates payment_state and shipments" do
668
667
  expect(order.updater).to receive(:update_payment_state)
669
668
  expect(order.updater).to receive(:update_shipment_state)
670
- Spree::Payment.create!(amount: 100, order: order, payment_method: payment_method)
669
+ Spree::Payment.create(:amount => 100, :order => order)
671
670
  end
672
671
  end
673
672
 
@@ -693,6 +692,10 @@ describe Spree::Payment, :type => :model do
693
692
 
694
693
  context "with multiple payment attempts" do
695
694
  let(:attributes) { attributes_for(:credit_card) }
695
+ around do |example|
696
+ ActiveSupport::Deprecation.silence{ example.run }
697
+ end
698
+
696
699
  it "should not try to create profiles on old failed payment attempts" do
697
700
  allow_any_instance_of(Spree::Payment).to receive(:payment_method) { gateway }
698
701
 
@@ -749,49 +752,128 @@ describe Spree::Payment, :type => :model do
749
752
  end
750
753
  end
751
754
 
752
- describe "#build_source" do
753
- let(:params) do
754
- {
755
- :amount => 100,
756
- :payment_method => gateway,
757
- :source_attributes => {
758
- :expiry =>"01 / 99",
759
- :number => '1234567890123',
760
- :verification_value => '123',
761
- :name => 'Spree Commerce'
762
- }
763
- }
755
+ describe "#apply_source_attributes" do
756
+ # This method is deprecated
757
+ around do |example|
758
+ ActiveSupport::Deprecation.silence do
759
+ example.run
760
+ end
764
761
  end
765
762
 
766
- it "should build the payment's source" do
767
- payment = Spree::Payment.new(params)
768
- expect(payment).to be_valid
769
- expect(payment.source).not_to be_nil
770
- end
763
+ context 'with a new source' do
764
+ let(:params) do
765
+ {
766
+ :amount => 100,
767
+ :payment_method => gateway,
768
+ :source_attributes => {
769
+ :expiry =>"01 / 99",
770
+ :number => '1234567890123',
771
+ :verification_value => '123',
772
+ :name => 'Spree Commerce'
773
+ }
774
+ }
775
+ end
776
+
777
+ it "should build the payment's source" do
778
+ payment = Spree::Payment.new(params)
779
+ expect(payment).to be_valid
780
+ expect(payment.source).not_to be_nil
781
+ end
771
782
 
772
- it "assigns user and gateway to payment source" do
773
- order = create(:order)
774
- source = order.payments.new(params).source
783
+ it "assigns user and gateway to payment source" do
784
+ order = create(:order)
785
+ source = order.payments.new(params).source
775
786
 
776
- expect(source.user_id).to eq order.user_id
777
- expect(source.payment_method_id).to eq gateway.id
778
- end
787
+ expect(source.user_id).to eq order.user_id
788
+ expect(source.payment_method_id).to eq gateway.id
789
+ end
779
790
 
780
- it "errors when payment source not valid" do
781
- params = { :amount => 100, :payment_method => gateway,
782
- :source_attributes => {:expiry => "1 / 12" }}
791
+ it "errors when payment source not valid" do
792
+ params = { :amount => 100, :payment_method => gateway,
793
+ :source_attributes => {:expiry => "1 / 12" }}
783
794
 
784
- payment = Spree::Payment.new(params)
785
- expect(payment).not_to be_valid
786
- expect(payment.source).not_to be_nil
787
- expect(payment.source.error_on(:number).size).to eq(1)
788
- expect(payment.source.error_on(:verification_value).size).to eq(1)
795
+ payment = Spree::Payment.new(params)
796
+ expect(payment).not_to be_valid
797
+ expect(payment.source).not_to be_nil
798
+ expect(payment.source.error_on(:number).size).to eq(1)
799
+ expect(payment.source.error_on(:verification_value).size).to eq(1)
800
+ end
801
+
802
+ it "does not build a new source when duplicating the model with source_attributes set" do
803
+ payment = create(:payment)
804
+ payment.source_attributes = params[:source_attributes]
805
+ expect { payment.dup }.to_not change { payment.source }
806
+ end
789
807
  end
790
808
 
791
- it "does not build a new source when duplicating the model with source_attributes set" do
792
- payment = create(:payment)
793
- payment.source_attributes = params[:source_attributes]
794
- expect { payment.dup }.to_not change { payment.source }
809
+ context 'with an existing credit card' do
810
+ let(:order) { create(:order, user: user) }
811
+ let(:user) { create(:user) }
812
+ let!(:credit_card) { create(:credit_card, user_id: order.user_id) }
813
+
814
+ let(:params) do
815
+ {
816
+ source_attributes: {
817
+ existing_card_id: credit_card.id,
818
+ verification_value: '321',
819
+ },
820
+ }
821
+ end
822
+
823
+ it 'sets the existing card as the source for the new payment' do
824
+ expect {
825
+ order.payments.create!(params)
826
+ }.to change { Spree::Payment.count }.by(1)
827
+
828
+ expect(order.payments.last.source).to eq(credit_card)
829
+ end
830
+
831
+ it 'sets the payment payment_method to that of the credit card' do
832
+ order.payments.create!(params)
833
+ expect(order.payments.last.payment_method_id).to eq(credit_card.payment_method_id)
834
+ end
835
+
836
+ it 'sets the verification_value on the credit card' do
837
+ payment = order.payments.create!(params)
838
+ expect(payment.source.verification_value).to eq('321')
839
+ end
840
+
841
+ it 'sets the request_env on the payment' do
842
+ payment = order.payments.create!(params.merge(request_env: {'USER_AGENT' => 'Firefox'}))
843
+ expect(payment.request_env).to eq({'USER_AGENT' => 'Firefox'})
844
+ end
845
+
846
+ context 'the credit card belongs to a different user' do
847
+ let(:other_user) { create(:user) }
848
+ before { credit_card.update!(user_id: other_user.id) }
849
+ it 'errors' do
850
+ expect { order.payments.create!(params) }.to raise_error(ActiveRecord::RecordNotFound)
851
+ end
852
+ end
853
+
854
+ context 'the credit card has no user' do
855
+ before { credit_card.update!(user_id: nil) }
856
+ it 'errors' do
857
+ expect { order.payments.create!(params) }.to raise_error(ActiveRecord::RecordNotFound)
858
+ end
859
+ end
860
+
861
+ context 'the order has no user' do
862
+ before { order.update_attributes!(user_id: nil) }
863
+ it 'errors' do
864
+ expect { order.payments.create!(params) }.to raise_error(ActiveRecord::RecordNotFound)
865
+ end
866
+ end
867
+
868
+ context 'the order and the credit card have no user' do
869
+ before do
870
+ order.update_attributes!(user_id: nil)
871
+ credit_card.update!(user_id: nil)
872
+ end
873
+ it 'errors' do
874
+ expect { order.payments.create!(params) }.to raise_error(ActiveRecord::RecordNotFound)
875
+ end
876
+ end
795
877
  end
796
878
  end
797
879
 
@@ -808,7 +890,7 @@ describe Spree::Payment, :type => :model do
808
890
  end
809
891
  end
810
892
 
811
- # Regression test for #2216
893
+ # Regression test for https://github.com/spree/spree/issues/2216
812
894
  describe "#gateway_options" do
813
895
  before { allow(order).to receive_messages(:last_ip_address => "192.168.1.1") }
814
896
 
@@ -826,7 +908,7 @@ describe Spree::Payment, :type => :model do
826
908
  end
827
909
 
828
910
  describe "#set_unique_identifier" do
829
- # Regression test for #1998
911
+ # Regression test for https://github.com/spree/spree/issues/1998
830
912
  it "sets a unique identifier on create" do
831
913
  payment.run_callbacks(:create)
832
914
  expect(payment.number).not_to be_blank
@@ -834,7 +916,7 @@ describe Spree::Payment, :type => :model do
834
916
  expect(payment.number).to be_a(String)
835
917
  end
836
918
 
837
- # Regression test for #3733
919
+ # Regression test for https://github.com/spree/spree/issues/3733
838
920
  it "does not regenerate the identifier on re-save" do
839
921
  payment.save!
840
922
  old_number = payment.number
@@ -1040,8 +1122,8 @@ describe Spree::Payment, :type => :model do
1040
1122
  end
1041
1123
  end
1042
1124
 
1043
- # Regression test for #4072 (kinda)
1044
- # The need for this was discovered in the research for #4072
1125
+ # Regression test for https://github.com/spree/spree/issues/4072 (kinda)
1126
+ # The need for this was discovered in the research for https://github.com/spree/spree/issues/4072
1045
1127
  context "state changes" do
1046
1128
  it "are logged to the database" do
1047
1129
  expect(payment.state_changes).to be_empty