solidus_core 1.0.7 → 1.1.0.beta1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of solidus_core might be problematic. Click here for more details.

Files changed (349) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/spree/base_controller.rb +1 -2
  3. data/app/helpers/spree/base_helper.rb +4 -5
  4. data/app/helpers/spree/products_helper.rb +0 -8
  5. data/app/mailers/spree/carton_mailer.rb +17 -5
  6. data/app/mailers/spree/order_mailer.rb +12 -4
  7. data/app/models/concerns/spree/adjustment_source.rb +7 -8
  8. data/app/models/concerns/spree/default_price.rb +8 -2
  9. data/app/models/concerns/spree/named_type.rb +1 -1
  10. data/app/models/concerns/spree/ordered_property_value_list.rb +28 -0
  11. data/app/models/concerns/spree/user_address_book.rb +125 -0
  12. data/app/models/concerns/spree/user_api_authentication.rb +6 -2
  13. data/app/models/concerns/spree/user_methods.rb +5 -6
  14. data/app/models/spree/ability.rb +1 -38
  15. data/app/models/spree/address.rb +79 -36
  16. data/app/models/spree/adjustment.rb +74 -25
  17. data/app/models/spree/adjustment_reason.rb +1 -1
  18. data/app/models/spree/app_configuration.rb +35 -0
  19. data/app/models/spree/carton.rb +3 -3
  20. data/app/models/spree/country.rb +7 -1
  21. data/app/models/spree/credit_card.rb +5 -1
  22. data/app/models/spree/gateway.rb +0 -8
  23. data/app/models/spree/inventory_unit.rb +1 -1
  24. data/app/models/spree/item_adjustments.rb +1 -1
  25. data/app/models/spree/line_item_action.rb +1 -1
  26. data/app/models/spree/option_type.rb +3 -2
  27. data/app/models/spree/option_value.rb +1 -1
  28. data/app/models/spree/option_values_variant.rb +1 -1
  29. data/app/models/spree/order.rb +28 -56
  30. data/app/models/spree/order/checkout.rb +18 -20
  31. data/app/models/spree/order_mutex.rb +1 -1
  32. data/app/models/spree/order_promotion.rb +1 -1
  33. data/app/models/spree/order_shipping.rb +6 -12
  34. data/app/models/spree/order_stock_location.rb +1 -1
  35. data/app/models/spree/payment.rb +3 -14
  36. data/app/models/spree/payment/processing.rb +7 -14
  37. data/app/models/spree/payment_method.rb +5 -5
  38. data/app/models/spree/permission_sets/default_customer.rb +31 -0
  39. data/app/models/spree/permission_sets/order_display.rb +4 -0
  40. data/app/models/spree/permission_sets/order_management.rb +3 -0
  41. data/app/models/spree/permission_sets/promotion_display.rb +2 -1
  42. data/app/models/spree/permission_sets/restricted_stock_display.rb +16 -0
  43. data/app/models/spree/permission_sets/restricted_stock_management.rb +16 -0
  44. data/app/models/spree/permission_sets/restricted_stock_transfer_display.rb +17 -0
  45. data/app/models/spree/permission_sets/restricted_stock_transfer_management.rb +51 -0
  46. data/app/models/spree/permission_sets/stock_display.rb +1 -1
  47. data/app/models/spree/permission_sets/stock_management.rb +1 -2
  48. data/app/models/spree/permission_sets/stock_transfer_display.rb +10 -0
  49. data/app/models/spree/permission_sets/stock_transfer_management.rb +11 -0
  50. data/app/models/spree/permission_sets/super_user.rb +9 -0
  51. data/app/models/spree/product.rb +66 -28
  52. data/app/models/spree/product/scopes.rb +7 -22
  53. data/app/models/spree/product_option_type.rb +1 -1
  54. data/app/models/spree/product_promotion_rule.rb +6 -0
  55. data/app/models/spree/product_property.rb +2 -20
  56. data/app/models/spree/promotion/rules/product.rb +2 -1
  57. data/app/models/spree/refund.rb +0 -10
  58. data/app/models/spree/reimbursement.rb +1 -1
  59. data/app/models/spree/return_item.rb +5 -3
  60. data/app/models/spree/return_item/exchange_variant_eligibility/same_option_value.rb +13 -4
  61. data/app/models/spree/return_item/exchange_variant_eligibility/same_product.rb +2 -2
  62. data/app/models/spree/return_reason.rb +1 -1
  63. data/app/models/spree/role.rb +1 -1
  64. data/app/models/spree/role_user.rb +1 -1
  65. data/app/models/spree/shipment.rb +13 -4
  66. data/app/models/spree/shipping_manifest.rb +9 -3
  67. data/app/models/spree/shipping_method.rb +2 -3
  68. data/app/models/spree/shipping_method_zone.rb +6 -0
  69. data/app/models/spree/state.rb +1 -1
  70. data/app/models/spree/stock_item.rb +15 -3
  71. data/app/models/spree/stock_movement.rb +1 -1
  72. data/app/models/spree/store.rb +3 -0
  73. data/app/models/spree/store_credit.rb +1 -1
  74. data/app/models/spree/store_credit_category.rb +1 -1
  75. data/app/models/spree/store_credit_event.rb +1 -1
  76. data/app/models/spree/store_credit_type.rb +1 -1
  77. data/app/models/spree/store_credit_update_reason.rb +1 -1
  78. data/app/models/spree/store_payment_method.rb +6 -0
  79. data/app/models/spree/tax_rate.rb +3 -10
  80. data/app/models/spree/taxonomy.rb +1 -1
  81. data/app/models/spree/transfer_item.rb +1 -1
  82. data/app/models/spree/unit_cancel.rb +2 -2
  83. data/app/models/spree/user_address.rb +21 -0
  84. data/app/models/spree/user_stock_location.rb +1 -1
  85. data/app/models/spree/variant.rb +28 -13
  86. data/app/models/spree/variant_property_rule.rb +42 -0
  87. data/app/models/spree/variant_property_rule_condition.rb +8 -0
  88. data/app/models/spree/variant_property_rule_value.rb +8 -0
  89. data/app/models/spree/zone.rb +4 -2
  90. data/app/views/spree/carton_mailer/shipped_email.text.erb +1 -1
  91. data/config/locales/en.yml +13 -0
  92. data/db/default/spree/store_credit.rb +0 -1
  93. data/db/default/spree/zones.rb +1 -1
  94. data/db/migrate/20130228210442_create_shipping_method_zone.rb +1 -1
  95. data/db/migrate/20150121022521_remove_environment_from_payment_method.rb +6 -0
  96. data/db/migrate/20150506181611_create_spree_store_credit_payment_method.rb +9 -5
  97. data/db/migrate/20150731201146_add_spree_user_addresses.rb +16 -0
  98. data/db/migrate/20150811210350_remove_mandatory_from_adjustments.rb +5 -0
  99. data/db/migrate/20150811211025_add_finalized_to_spree_adjustments.rb +11 -0
  100. data/db/migrate/20150820160821_add_store_payment_methods.rb +10 -0
  101. data/db/migrate/20150824213633_convert_habtm_to_hmt_for_shipping_methods_zones.rb +17 -0
  102. data/db/migrate/20150824214129_convert_habtm_to_hmt_for_products_promotion_rules.rb +17 -0
  103. data/db/migrate/20150825204216_drop_spree_gateways.rb +20 -0
  104. data/db/migrate/20150909123605_create_variant_properties_and_rules.rb +28 -0
  105. data/lib/generators/spree/dummy/dummy_generator.rb +1 -1
  106. data/lib/generators/spree/install/templates/config/initializers/spree.rb +4 -3
  107. data/lib/spree/core.rb +4 -0
  108. data/lib/spree/core/controller_helpers/payment_parameters.rb +67 -0
  109. data/lib/spree/core/delegate_belongs_to.rb +1 -0
  110. data/lib/spree/core/engine.rb +9 -1
  111. data/lib/spree/core/importer/order.rb +1 -1
  112. data/lib/spree/core/role_configuration.rb +1 -1
  113. data/lib/spree/core/search/variant.rb +20 -2
  114. data/lib/spree/core/unreturned_item_charger.rb +21 -16
  115. data/lib/spree/i18n.rb +6 -24
  116. data/lib/spree/mailer_previews/carton_preview.rb +10 -0
  117. data/lib/spree/mailer_previews/order_preview.rb +18 -0
  118. data/lib/spree/permitted_attributes.rb +4 -1
  119. data/lib/spree/testing_support/capybara_ext.rb +2 -1
  120. data/lib/spree/testing_support/factories/address_factory.rb +9 -1
  121. data/lib/spree/testing_support/factories/credit_card_factory.rb +1 -0
  122. data/lib/spree/testing_support/factories/image_factory.rb +5 -0
  123. data/lib/spree/testing_support/factories/payment_method_factory.rb +4 -8
  124. data/lib/spree/testing_support/factories/user_factory.rb +8 -2
  125. data/lib/spree/testing_support/factories/variant_property_rule_condition_factory.rb +6 -0
  126. data/lib/spree/testing_support/factories/variant_property_rule_factory.rb +16 -0
  127. data/lib/spree/testing_support/factories/variant_property_rule_value_factory.rb +6 -0
  128. data/lib/tasks/migrations/migrate_user_addresses.rake +29 -0
  129. data/vendor/assets/javascripts/jquery-migrate-1.0.0.js +498 -0
  130. metadata +40 -238
  131. data/CHANGELOG.md +0 -1
  132. data/Gemfile +0 -3
  133. data/Rakefile +0 -16
  134. data/app/models/concerns/spree/user_address.rb +0 -30
  135. data/app/models/spree/permission_sets/restricted_transfer_management.rb +0 -35
  136. data/app/views/spree/admin/orders/customer_details/_autocomplete.js.erb +0 -19
  137. data/lib/spree/i18n/base.rb +0 -17
  138. data/lib/spree/i18n/initializer.rb +0 -1
  139. data/lib/spree/testing_support/mail.rb +0 -20
  140. data/script/rails +0 -9
  141. data/solidus_core.gemspec +0 -48
  142. data/spec/fixtures/thinking-cat.jpg +0 -0
  143. data/spec/helpers/base_helper_spec.rb +0 -173
  144. data/spec/helpers/order_helper_spec.rb +0 -12
  145. data/spec/helpers/products_helper_spec.rb +0 -220
  146. data/spec/helpers/taxons_helper_spec.rb +0 -17
  147. data/spec/lib/calculated_adjustments_spec.rb +0 -7
  148. data/spec/lib/i18n_spec.rb +0 -123
  149. data/spec/lib/search/base_spec.rb +0 -86
  150. data/spec/lib/search/variant_spec.rb +0 -92
  151. data/spec/lib/spree/core/controller_helpers/auth_spec.rb +0 -66
  152. data/spec/lib/spree/core/controller_helpers/order_spec.rb +0 -92
  153. data/spec/lib/spree/core/controller_helpers/search_spec.rb +0 -17
  154. data/spec/lib/spree/core/controller_helpers/store_spec.rb +0 -16
  155. data/spec/lib/spree/core/controller_helpers/strong_parameters_spec.rb +0 -39
  156. data/spec/lib/spree/core/current_store_spec.rb +0 -36
  157. data/spec/lib/spree/core/delegate_belongs_to_spec.rb +0 -22
  158. data/spec/lib/spree/core/importer/order_spec.rb +0 -431
  159. data/spec/lib/spree/core/role_configuration_spec.rb +0 -138
  160. data/spec/lib/spree/core/validators/email_spec.rb +0 -48
  161. data/spec/lib/spree/localized_number_spec.rb +0 -38
  162. data/spec/lib/spree/migrations_spec.rb +0 -36
  163. data/spec/lib/spree/money_spec.rb +0 -127
  164. data/spec/lib/tasks/exchanges_spec.rb +0 -231
  165. data/spec/lib/tasks/migrations/copy_shipped_shipments_to_cartons_spec.rb +0 -115
  166. data/spec/lib/tasks/order_capturing_spec.rb +0 -56
  167. data/spec/mailers/carton_mailer_spec.rb +0 -43
  168. data/spec/mailers/order_mailer_spec.rb +0 -122
  169. data/spec/mailers/reimbursement_mailer_spec.rb +0 -40
  170. data/spec/mailers/test_mailer_spec.rb +0 -15
  171. data/spec/models/spree/ability_spec.rb +0 -276
  172. data/spec/models/spree/address_spec.rb +0 -250
  173. data/spec/models/spree/adjustment_reason_spec.rb +0 -13
  174. data/spec/models/spree/adjustment_spec.rb +0 -177
  175. data/spec/models/spree/app_configuration_spec.rb +0 -20
  176. data/spec/models/spree/asset_spec.rb +0 -24
  177. data/spec/models/spree/calculator/default_tax_spec.rb +0 -127
  178. data/spec/models/spree/calculator/flat_percent_item_total_spec.rb +0 -25
  179. data/spec/models/spree/calculator/flat_rate_spec.rb +0 -47
  180. data/spec/models/spree/calculator/flexi_rate_spec.rb +0 -41
  181. data/spec/models/spree/calculator/percent_on_line_item_spec.rb +0 -15
  182. data/spec/models/spree/calculator/price_sack_spec.rb +0 -30
  183. data/spec/models/spree/calculator/refunds/default_refund_amount_spec.rb +0 -51
  184. data/spec/models/spree/calculator/shipping/flat_percent_item_total_spec.rb +0 -23
  185. data/spec/models/spree/calculator/shipping/flat_rate_spec.rb +0 -13
  186. data/spec/models/spree/calculator/shipping/flexi_rate_spec.rb +0 -52
  187. data/spec/models/spree/calculator/shipping/per_item_spec.rb +0 -20
  188. data/spec/models/spree/calculator/shipping/price_sack_spec.rb +0 -30
  189. data/spec/models/spree/calculator/tiered_flat_rate_spec.rb +0 -36
  190. data/spec/models/spree/calculator/tiered_percent_spec.rb +0 -47
  191. data/spec/models/spree/calculator_spec.rb +0 -36
  192. data/spec/models/spree/carton_spec.rb +0 -133
  193. data/spec/models/spree/classification_spec.rb +0 -15
  194. data/spec/models/spree/concerns/display_money_spec.rb +0 -43
  195. data/spec/models/spree/concerns/user_methods_spec.rb +0 -41
  196. data/spec/models/spree/credit_card_spec.rb +0 -334
  197. data/spec/models/spree/customer_return_spec.rb +0 -276
  198. data/spec/models/spree/exchange_spec.rb +0 -79
  199. data/spec/models/spree/gateway/bogus_simple.rb +0 -20
  200. data/spec/models/spree/gateway/bogus_spec.rb +0 -13
  201. data/spec/models/spree/gateway_spec.rb +0 -82
  202. data/spec/models/spree/inventory_unit_spec.rb +0 -307
  203. data/spec/models/spree/item_adjustments_spec.rb +0 -256
  204. data/spec/models/spree/line_item_spec.rb +0 -191
  205. data/spec/models/spree/option_type_spec.rb +0 -14
  206. data/spec/models/spree/option_value_spec.rb +0 -22
  207. data/spec/models/spree/order/address_spec.rb +0 -50
  208. data/spec/models/spree/order/adjustments_spec.rb +0 -39
  209. data/spec/models/spree/order/callbacks_spec.rb +0 -42
  210. data/spec/models/spree/order/checkout_spec.rb +0 -902
  211. data/spec/models/spree/order/currency_updater_spec.rb +0 -32
  212. data/spec/models/spree/order/finalizing_spec.rb +0 -111
  213. data/spec/models/spree/order/payment_spec.rb +0 -210
  214. data/spec/models/spree/order/risk_assessment_spec.rb +0 -68
  215. data/spec/models/spree/order/state_machine_spec.rb +0 -221
  216. data/spec/models/spree/order/tax_spec.rb +0 -84
  217. data/spec/models/spree/order/totals_spec.rb +0 -24
  218. data/spec/models/spree/order/updating_spec.rb +0 -18
  219. data/spec/models/spree/order/validations_spec.rb +0 -15
  220. data/spec/models/spree/order_cancellations_spec.rb +0 -120
  221. data/spec/models/spree/order_capturing_spec.rb +0 -116
  222. data/spec/models/spree/order_contents_spec.rb +0 -265
  223. data/spec/models/spree/order_inventory_spec.rb +0 -228
  224. data/spec/models/spree/order_mutex_spec.rb +0 -85
  225. data/spec/models/spree/order_promotion_spec.rb +0 -31
  226. data/spec/models/spree/order_shipping_spec.rb +0 -247
  227. data/spec/models/spree/order_spec.rb +0 -1464
  228. data/spec/models/spree/order_stock_location_spec.rb +0 -18
  229. data/spec/models/spree/order_updater_spec.rb +0 -299
  230. data/spec/models/spree/payment_method/store_credit_spec.rb +0 -294
  231. data/spec/models/spree/payment_method_spec.rb +0 -96
  232. data/spec/models/spree/payment_spec.rb +0 -1045
  233. data/spec/models/spree/permission_sets/base_spec.rb +0 -12
  234. data/spec/models/spree/permission_sets/configuration_display.rb +0 -82
  235. data/spec/models/spree/permission_sets/configuration_management_spec.rb +0 -50
  236. data/spec/models/spree/permission_sets/dashboard_display_spec.rb +0 -22
  237. data/spec/models/spree/permission_sets/order_display_spec.rb +0 -49
  238. data/spec/models/spree/permission_sets/order_management_spec.rb +0 -36
  239. data/spec/models/spree/permission_sets/product_display_spec.rb +0 -60
  240. data/spec/models/spree/permission_sets/product_management_spec.rb +0 -40
  241. data/spec/models/spree/permission_sets/promotion_display_spec.rb +0 -34
  242. data/spec/models/spree/permission_sets/promotion_management_spec.rb +0 -26
  243. data/spec/models/spree/permission_sets/report_display_spec.rb +0 -24
  244. data/spec/models/spree/permission_sets/restricted_transfer_management_spec.rb +0 -132
  245. data/spec/models/spree/permission_sets/stock_display_spec.rb +0 -26
  246. data/spec/models/spree/permission_sets/stock_management_spec.rb +0 -24
  247. data/spec/models/spree/permission_sets/user_display_spec.rb +0 -36
  248. data/spec/models/spree/permission_sets/user_management_spec.rb +0 -28
  249. data/spec/models/spree/preference_spec.rb +0 -80
  250. data/spec/models/spree/preferences/configuration_spec.rb +0 -30
  251. data/spec/models/spree/preferences/preferable_spec.rb +0 -294
  252. data/spec/models/spree/preferences/scoped_store_spec.rb +0 -58
  253. data/spec/models/spree/preferences/static_model_preferences_spec.rb +0 -78
  254. data/spec/models/spree/preferences/statically_configurable_spec.rb +0 -60
  255. data/spec/models/spree/preferences/store_spec.rb +0 -39
  256. data/spec/models/spree/price_spec.rb +0 -42
  257. data/spec/models/spree/product/scopes_spec.rb +0 -148
  258. data/spec/models/spree/product_duplicator_spec.rb +0 -103
  259. data/spec/models/spree/product_filter_spec.rb +0 -26
  260. data/spec/models/spree/product_property_spec.rb +0 -20
  261. data/spec/models/spree/product_spec.rb +0 -437
  262. data/spec/models/spree/promotion/actions/create_adjustment_spec.rb +0 -96
  263. data/spec/models/spree/promotion/actions/create_item_adjustments_spec.rb +0 -165
  264. data/spec/models/spree/promotion/actions/create_quantity_adjustments_spec.rb +0 -115
  265. data/spec/models/spree/promotion/actions/free_shipping_spec.rb +0 -40
  266. data/spec/models/spree/promotion/rules/first_order_spec.rb +0 -75
  267. data/spec/models/spree/promotion/rules/item_total_spec.rb +0 -67
  268. data/spec/models/spree/promotion/rules/nth_order_spec.rb +0 -70
  269. data/spec/models/spree/promotion/rules/one_use_per_user_spec.rb +0 -42
  270. data/spec/models/spree/promotion/rules/option_value_spec.rb +0 -94
  271. data/spec/models/spree/promotion/rules/product_spec.rb +0 -143
  272. data/spec/models/spree/promotion/rules/taxon_spec.rb +0 -102
  273. data/spec/models/spree/promotion/rules/user_logged_in_spec.rb +0 -27
  274. data/spec/models/spree/promotion/rules/user_spec.rb +0 -37
  275. data/spec/models/spree/promotion_builder_spec.rb +0 -118
  276. data/spec/models/spree/promotion_category_spec.rb +0 -17
  277. data/spec/models/spree/promotion_code/code_builder_spec.rb +0 -79
  278. data/spec/models/spree/promotion_code_spec.rb +0 -187
  279. data/spec/models/spree/promotion_handler/cart_spec.rb +0 -114
  280. data/spec/models/spree/promotion_handler/coupon_spec.rb +0 -335
  281. data/spec/models/spree/promotion_handler/free_shipping_spec.rb +0 -47
  282. data/spec/models/spree/promotion_handler/page_spec.rb +0 -44
  283. data/spec/models/spree/promotion_rule_spec.rb +0 -28
  284. data/spec/models/spree/promotion_spec.rb +0 -767
  285. data/spec/models/spree/refund_spec.rb +0 -204
  286. data/spec/models/spree/reimbursement/credit_spec.rb +0 -36
  287. data/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb +0 -140
  288. data/spec/models/spree/reimbursement/reimbursement_type_validator_spec.rb +0 -83
  289. data/spec/models/spree/reimbursement_performer_spec.rb +0 -30
  290. data/spec/models/spree/reimbursement_spec.rb +0 -231
  291. data/spec/models/spree/reimbursement_tax_calculator_spec.rb +0 -51
  292. data/spec/models/spree/reimbursement_type/credit_spec.rb +0 -53
  293. data/spec/models/spree/reimbursement_type/exchange_spec.rb +0 -46
  294. data/spec/models/spree/reimbursement_type/original_payment_spec.rb +0 -107
  295. data/spec/models/spree/reimbursement_type/store_credit_spec.rb +0 -97
  296. data/spec/models/spree/return_authorization_spec.rb +0 -290
  297. data/spec/models/spree/return_item/eligibility_validator/default_spec.rb +0 -77
  298. data/spec/models/spree/return_item/eligibility_validator/inventory_shipped_spec.rb +0 -58
  299. data/spec/models/spree/return_item/eligibility_validator/no_reimbursements_spec.rb +0 -85
  300. data/spec/models/spree/return_item/eligibility_validator/order_completed_spec.rb +0 -32
  301. data/spec/models/spree/return_item/eligibility_validator/rma_required_spec.rb +0 -29
  302. data/spec/models/spree/return_item/eligibility_validator/time_since_purchase_spec.rb +0 -35
  303. data/spec/models/spree/return_item/exchange_variant_eligibility/same_option_value_spec.rb +0 -65
  304. data/spec/models/spree/return_item/exchange_variant_eligibility/same_product_spec.rb +0 -43
  305. data/spec/models/spree/return_item_spec.rb +0 -775
  306. data/spec/models/spree/returns_calculator_spec.rb +0 -14
  307. data/spec/models/spree/shipment_spec.rb +0 -709
  308. data/spec/models/spree/shipping_calculator_spec.rb +0 -45
  309. data/spec/models/spree/shipping_method_spec.rb +0 -88
  310. data/spec/models/spree/shipping_rate_spec.rb +0 -142
  311. data/spec/models/spree/state_spec.rb +0 -14
  312. data/spec/models/spree/stock/availability_validator_spec.rb +0 -83
  313. data/spec/models/spree/stock/coordinator_spec.rb +0 -116
  314. data/spec/models/spree/stock/differentiator_spec.rb +0 -39
  315. data/spec/models/spree/stock/estimator_spec.rb +0 -146
  316. data/spec/models/spree/stock/inventory_unit_builder_spec.rb +0 -38
  317. data/spec/models/spree/stock/package_spec.rb +0 -163
  318. data/spec/models/spree/stock/packer_spec.rb +0 -91
  319. data/spec/models/spree/stock/prioritizer_spec.rb +0 -125
  320. data/spec/models/spree/stock/quantifier_spec.rb +0 -115
  321. data/spec/models/spree/stock/splitter/backordered_spec.rb +0 -29
  322. data/spec/models/spree/stock/splitter/base_spec.rb +0 -21
  323. data/spec/models/spree/stock/splitter/shipping_category_spec.rb +0 -50
  324. data/spec/models/spree/stock/splitter/weight_spec.rb +0 -29
  325. data/spec/models/spree/stock_item_spec.rb +0 -426
  326. data/spec/models/spree/stock_location_spec.rb +0 -279
  327. data/spec/models/spree/stock_movement_spec.rb +0 -56
  328. data/spec/models/spree/stock_transfer_spec.rb +0 -290
  329. data/spec/models/spree/store_credit_category_spec.rb +0 -17
  330. data/spec/models/spree/store_credit_event_spec.rb +0 -314
  331. data/spec/models/spree/store_credit_spec.rb +0 -876
  332. data/spec/models/spree/store_spec.rb +0 -55
  333. data/spec/models/spree/tax_category_spec.rb +0 -27
  334. data/spec/models/spree/tax_rate_spec.rb +0 -378
  335. data/spec/models/spree/taxon_spec.rb +0 -74
  336. data/spec/models/spree/taxonomy_spec.rb +0 -18
  337. data/spec/models/spree/tracker_spec.rb +0 -21
  338. data/spec/models/spree/transfer_item_spec.rb +0 -264
  339. data/spec/models/spree/unit_cancel_spec.rb +0 -148
  340. data/spec/models/spree/user_spec.rb +0 -223
  341. data/spec/models/spree/validations/db_maximum_length_validator_spec.rb +0 -23
  342. data/spec/models/spree/variant/scopes_spec.rb +0 -55
  343. data/spec/models/spree/variant_spec.rb +0 -546
  344. data/spec/models/spree/zone_spec.rb +0 -305
  345. data/spec/spec_helper.rb +0 -78
  346. data/spec/support/big_decimal.rb +0 -5
  347. data/spec/support/concerns/default_price.rb +0 -34
  348. data/spec/support/dummy_ability.rb +0 -4
  349. data/spec/support/test_gateway.rb +0 -2
@@ -1,96 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::PaymentMethod, :type => :model do
4
- describe "#available" do
5
- before do
6
- [nil, 'both', 'front_end', 'back_end'].each do |display_on|
7
- Spree::Gateway::Test.create(
8
- :name => 'Display Both',
9
- :display_on => display_on,
10
- :active => true,
11
- :environment => 'test',
12
- :description => 'foofah'
13
- )
14
- end
15
- end
16
-
17
- it "should have 4 total methods" do
18
- expect(Spree::PaymentMethod.all.size).to eq(4)
19
- end
20
-
21
- it "should return all methods available to front-end/back-end when no parameter is passed" do
22
- expect(Spree::PaymentMethod.available.size).to eq(2)
23
- end
24
-
25
- it "should return all methods available to front-end/back-end when display_on = :both" do
26
- expect(Spree::PaymentMethod.available(:both).size).to eq(2)
27
- end
28
-
29
- it "should return all methods available to front-end when display_on = :front_end" do
30
- expect(Spree::PaymentMethod.available(:front_end).size).to eq(2)
31
- end
32
-
33
- it "should return all methods available to back-end when display_on = :back_end" do
34
- expect(Spree::PaymentMethod.available(:back_end).size).to eq(2)
35
- end
36
- end
37
-
38
- describe '#auto_capture?' do
39
- class TestGateway < Spree::Gateway
40
- def provider_class
41
- Provider
42
- end
43
- end
44
-
45
- let(:gateway) { TestGateway.new }
46
-
47
- subject { gateway.auto_capture? }
48
-
49
- context 'when auto_capture is nil' do
50
- before(:each) do
51
- expect(Spree::Config).to receive('[]').with(:auto_capture).and_return(auto_capture)
52
- end
53
-
54
- context 'and when Spree::Config[:auto_capture] is false' do
55
- let(:auto_capture) { false }
56
-
57
- it 'should be false' do
58
- expect(gateway.auto_capture).to be_nil
59
- expect(subject).to be false
60
- end
61
- end
62
-
63
- context 'and when Spree::Config[:auto_capture] is true' do
64
- let(:auto_capture) { true }
65
-
66
- it 'should be true' do
67
- expect(gateway.auto_capture).to be_nil
68
- expect(subject).to be true
69
- end
70
- end
71
- end
72
-
73
- context 'when auto_capture is not nil' do
74
- before(:each) do
75
- gateway.auto_capture = auto_capture
76
- end
77
-
78
- context 'and is true' do
79
- let(:auto_capture) { true }
80
-
81
- it 'should be true' do
82
- expect(subject).to be true
83
- end
84
- end
85
-
86
- context 'and is false' do
87
- let(:auto_capture) { false }
88
-
89
- it 'should be true' do
90
- expect(subject).to be false
91
- end
92
- end
93
- end
94
- end
95
-
96
- end
@@ -1,1045 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Spree::Payment, :type => :model do
4
- let(:order) { Spree::Order.create }
5
- let(:refund_reason) { create(:refund_reason) }
6
-
7
- let(:gateway) do
8
- gateway = Spree::Gateway::Bogus.new(:environment => 'test', :active => true, :name => 'Bogus gateway')
9
- allow(gateway).to receive_messages :source_required => true
10
- gateway
11
- end
12
-
13
- let(:avs_code) { 'D' }
14
- let(:cvv_code) { 'M' }
15
-
16
- let(:card) { create :credit_card }
17
-
18
- let(:payment) do
19
- payment = Spree::Payment.new
20
- payment.source = card
21
- payment.order = order
22
- payment.payment_method = gateway
23
- payment.amount = 5
24
- payment
25
- end
26
-
27
- let(:amount_in_cents) { (payment.amount * 100).round }
28
-
29
- let!(:success_response) do
30
- ActiveMerchant::Billing::Response.new(true, '', {}, {
31
- authorization: '123',
32
- cvv_result: cvv_code,
33
- avs_result: { code: avs_code }
34
- })
35
- end
36
-
37
- let(:failed_response) do
38
- ActiveMerchant::Billing::Response.new(false, '', {}, {})
39
- end
40
-
41
- before(:each) do
42
- # So it doesn't create log entries every time a processing method is called
43
- allow(payment.log_entries).to receive(:create!)
44
- end
45
-
46
- context '.risky' do
47
-
48
- let!(:payment_1) { create(:payment, avs_response: 'Y', cvv_response_code: 'M', cvv_response_message: 'Match') }
49
- let!(:payment_2) { create(:payment, avs_response: 'Y', cvv_response_code: 'M', cvv_response_message: '') }
50
- let!(:payment_3) { create(:payment, avs_response: 'A', cvv_response_code: 'M', cvv_response_message: 'Match') }
51
- let!(:payment_4) { create(:payment, avs_response: 'Y', cvv_response_code: 'N', cvv_response_message: 'No Match') }
52
-
53
- it 'should not return successful responses' do
54
- expect(subject.class.risky.to_a).to match_array([payment_3, payment_4])
55
- end
56
-
57
- end
58
-
59
- context "#captured_amount" do
60
- context "calculates based on capture events" do
61
- it "with 0 capture events" do
62
- expect(payment.captured_amount).to eq(0)
63
- end
64
-
65
- it "with some capture events" do
66
- payment.save
67
- payment.capture_events.create!(amount: 2.0)
68
- payment.capture_events.create!(amount: 3.0)
69
- expect(payment.captured_amount).to eq(5)
70
- end
71
- end
72
- end
73
-
74
- context '#uncaptured_amount' do
75
- context "calculates based on capture events" do
76
- it "with 0 capture events" do
77
- expect(payment.uncaptured_amount).to eq(5.0)
78
- end
79
-
80
- it "with some capture events" do
81
- payment.save
82
- payment.capture_events.create!(amount: 2.0)
83
- payment.capture_events.create!(amount: 3.0)
84
- expect(payment.uncaptured_amount).to eq(0)
85
- end
86
- end
87
- end
88
-
89
- context 'validations' do
90
- it "returns useful error messages when source is invalid" do
91
- payment.source = Spree::CreditCard.new
92
- expect(payment).not_to be_valid
93
- cc_errors = payment.errors['Credit Card']
94
- expect(cc_errors).to include("Number can't be blank")
95
- expect(cc_errors).to include("Month is not a number")
96
- expect(cc_errors).to include("Year is not a number")
97
- expect(cc_errors).to include("Verification Value can't be blank")
98
- end
99
- end
100
-
101
- # Regression test for https://github.com/spree/spree/pull/2224
102
- context 'failure' do
103
- it 'should transition to failed from pending state' do
104
- payment.state = 'pending'
105
- payment.failure
106
- expect(payment.state).to eql('failed')
107
- end
108
-
109
- it 'should transition to failed from processing state' do
110
- payment.state = 'processing'
111
- payment.failure
112
- expect(payment.state).to eql('failed')
113
- end
114
-
115
- end
116
-
117
- context 'invalidate' do
118
- it 'should transition from checkout to invalid' do
119
- payment.state = 'checkout'
120
- payment.invalidate
121
- expect(payment.state).to eq('invalid')
122
- end
123
-
124
- context "the payment's source is invalid" do
125
-
126
- before(:each) do
127
- card.year = 2014
128
- payment.source = card
129
- end
130
-
131
- it "transitions to invalid" do
132
- payment.state = 'checkout'
133
- payment.invalidate
134
- expect(payment.state).to eq ('invalid')
135
- end
136
- end
137
- end
138
-
139
- context "processing" do
140
- describe "#process!" do
141
- context 'with autocapture' do
142
- before do
143
- payment.payment_method.update_attributes!(auto_capture: true)
144
- end
145
-
146
- it "should purchase" do
147
- payment.process!
148
- expect(payment).to be_completed
149
- end
150
- end
151
-
152
- context 'without autocapture' do
153
- before do
154
- payment.payment_method.update_attributes!(auto_capture: false)
155
- end
156
-
157
- context 'when in the checkout state' do
158
- before { payment.update_attributes!(state: 'checkout') }
159
-
160
- it "authorizes" do
161
- payment.process!
162
- expect(payment).to be_pending
163
- end
164
- end
165
-
166
- context 'when in the processing state' do
167
- before { payment.update_attributes!(state: 'processing') }
168
-
169
- it "does not authorize" do
170
- payment.process!
171
- expect(payment).to be_processing
172
- end
173
- end
174
-
175
- context 'when in the pending state' do
176
- before { payment.update_attributes!(state: 'pending') }
177
-
178
- it "does not re-authorize" do
179
- expect(payment).to_not receive(:authorize!)
180
- payment.process!
181
- expect(payment).to be_pending
182
- end
183
- end
184
-
185
- context 'when in a failed state' do
186
- before { payment.update_attributes!(state: 'failed') }
187
-
188
- it "raises an exception" do
189
- expect {
190
- payment.process!
191
- }.to raise_error(StateMachines::InvalidTransition, /Cannot transition/)
192
- end
193
- end
194
-
195
- context 'when in the completed state' do
196
- before { payment.update_attributes!(state: 'completed') }
197
-
198
- it "authorizes" do
199
- payment.process!
200
- # TODO: Is this really what we want to happen in this case?
201
- expect(payment).to be_pending
202
- end
203
- end
204
- end
205
-
206
- it "should make the state 'processing'" do
207
- expect(payment).to receive(:started_processing!)
208
- payment.process!
209
- end
210
-
211
- it "should invalidate if payment method doesnt support source" do
212
- expect(payment.payment_method).to receive(:supports?).with(payment.source).and_return(false)
213
- expect { payment.process!}.to raise_error(Spree::Core::GatewayError)
214
- expect(payment.state).to eq('invalid')
215
- end
216
-
217
- # Regression test for #4598
218
- it "should allow payments with a gateway_customer_profile_id" do
219
- allow(payment.source).to receive_messages :gateway_customer_profile_id => "customer_1"
220
- expect(payment.payment_method).to receive(:supports?).with(payment.source).and_return(false)
221
- expect(payment).to receive(:started_processing!)
222
- payment.process!
223
- end
224
-
225
- # Another regression test for #4598
226
- it "should allow payments with a gateway_payment_profile_id" do
227
- allow(payment.source).to receive_messages :gateway_payment_profile_id => "customer_1"
228
- expect(payment.payment_method).to receive(:supports?).with(payment.source).and_return(false)
229
- expect(payment).to receive(:started_processing!)
230
- payment.process!
231
- end
232
- end
233
-
234
- describe "#authorize!" do
235
- it "should call authorize on the gateway with the payment amount" do
236
- expect(payment.payment_method).to receive(:authorize).with(amount_in_cents,
237
- card,
238
- anything).and_return(success_response)
239
- payment.authorize!
240
- end
241
-
242
- it "should call authorize on the gateway with the currency code" do
243
- allow(payment).to receive_messages :currency => 'GBP'
244
- expect(payment.payment_method).to receive(:authorize).with(amount_in_cents,
245
- card,
246
- hash_including({:currency => "GBP"})).and_return(success_response)
247
- payment.authorize!
248
- end
249
-
250
- it "should log the response" do
251
- payment.save!
252
- expect(payment.log_entries).to receive(:create!).with(details: anything)
253
- payment.authorize!
254
- end
255
-
256
- context "when gateway does not match the environment" do
257
- it "should raise an exception" do
258
- allow(gateway).to receive_messages :environment => "foo"
259
- expect { payment.authorize! }.to raise_error(Spree::Core::GatewayError)
260
- end
261
- end
262
-
263
- context "if successful" do
264
- before do
265
- expect(payment.payment_method).to receive(:authorize).with(amount_in_cents,
266
- card,
267
- anything).and_return(success_response)
268
- end
269
-
270
- it "should store the response_code, avs_response and cvv_response fields" do
271
- payment.authorize!
272
- expect(payment.response_code).to eq('123')
273
- expect(payment.avs_response).to eq(avs_code)
274
- expect(payment.cvv_response_code).to eq(cvv_code)
275
- expect(payment.cvv_response_message).to eq(ActiveMerchant::Billing::CVVResult::MESSAGES[cvv_code])
276
- end
277
-
278
- it "should make payment pending" do
279
- expect(payment).to receive(:pend!)
280
- payment.authorize!
281
- end
282
- end
283
-
284
- context "if unsuccessful" do
285
- it "should mark payment as failed" do
286
- allow(gateway).to receive(:authorize).and_return(failed_response)
287
- expect(payment).to receive(:failure)
288
- expect(payment).not_to receive(:pend)
289
- expect {
290
- payment.authorize!
291
- }.to raise_error(Spree::Core::GatewayError)
292
- end
293
- end
294
- end
295
-
296
- describe "#purchase!" do
297
- it "should call purchase on the gateway with the payment amount" do
298
- expect(gateway).to receive(:purchase).with(amount_in_cents, card, anything).and_return(success_response)
299
- payment.purchase!
300
- end
301
-
302
- it "should log the response" do
303
- payment.save!
304
- expect(payment.log_entries).to receive(:create!).with(details: anything)
305
- payment.purchase!
306
- end
307
-
308
- context "when gateway does not match the environment" do
309
- it "should raise an exception" do
310
- allow(gateway).to receive_messages :environment => "foo"
311
- expect { payment.purchase! }.to raise_error(Spree::Core::GatewayError)
312
- end
313
- end
314
-
315
- context "if successful" do
316
- before do
317
- expect(payment.payment_method).to receive(:purchase).with(amount_in_cents,
318
- card,
319
- anything).and_return(success_response)
320
- end
321
-
322
- it "should store the response_code and avs_response" do
323
- payment.purchase!
324
- expect(payment.response_code).to eq('123')
325
- expect(payment.avs_response).to eq(avs_code)
326
- end
327
-
328
- it "should make payment complete" do
329
- expect(payment).to receive(:complete!)
330
- payment.purchase!
331
- end
332
-
333
- it "should log a capture event" do
334
- payment.purchase!
335
- expect(payment.capture_events.count).to eq(1)
336
- expect(payment.capture_events.first.amount).to eq(payment.amount)
337
- end
338
-
339
- it "should set the uncaptured amount to 0" do
340
- payment.purchase!
341
- expect(payment.uncaptured_amount).to eq(0)
342
- end
343
- end
344
-
345
- context "if unsuccessful" do
346
- before do
347
- allow(gateway).to receive(:purchase).and_return(failed_response)
348
- expect(payment).to receive(:failure)
349
- expect(payment).not_to receive(:pend)
350
- end
351
-
352
- it "should make payment failed" do
353
- expect { payment.purchase! }.to raise_error(Spree::Core::GatewayError)
354
- end
355
-
356
- it "should not log a capture event" do
357
- expect { payment.purchase! }.to raise_error(Spree::Core::GatewayError)
358
- expect(payment.capture_events.count).to eq(0)
359
- end
360
- end
361
- end
362
-
363
- describe "#capture!" do
364
- context "when payment is pending" do
365
- before do
366
- payment.amount = 100
367
- payment.state = 'pending'
368
- payment.response_code = '12345'
369
- end
370
-
371
- context "if successful" do
372
- context 'for entire amount' do
373
- before do
374
- expect(payment.payment_method).to receive(:capture).with(payment.display_amount.money.cents, payment.response_code, anything).and_return(success_response)
375
- end
376
-
377
- it "should make payment complete" do
378
- expect(payment).to receive(:complete!)
379
- payment.capture!
380
- end
381
-
382
- it "logs capture events" do
383
- payment.capture!
384
- expect(payment.capture_events.count).to eq(1)
385
- expect(payment.capture_events.first.amount).to eq(payment.amount)
386
- end
387
- end
388
-
389
- it "logs capture events" do
390
- payment.capture!
391
- expect(payment.capture_events.count).to eq(1)
392
- expect(payment.capture_events.first.amount).to eq(payment.amount)
393
- end
394
- end
395
-
396
- context "capturing a partial amount" do
397
- it "logs capture events" do
398
- payment.capture!(5000)
399
- expect(payment.capture_events.count).to eq(1)
400
- expect(payment.capture_events.first.amount).to eq(50)
401
- end
402
-
403
- it "stores the captured amount on the payment" do
404
- payment.capture!(6000)
405
- expect(payment.captured_amount).to eq(60)
406
- end
407
-
408
- it "updates the amount of the payment" do
409
- payment.capture!(6000)
410
- expect(payment.reload.amount).to eq(60)
411
- end
412
- end
413
-
414
- context "if unsuccessful" do
415
- it "should not make payment complete" do
416
- allow(gateway).to receive_messages :capture => failed_response
417
- expect(payment).to receive(:failure)
418
- expect(payment).not_to receive(:complete)
419
- expect { payment.capture! }.to raise_error(Spree::Core::GatewayError)
420
- end
421
- end
422
- end
423
-
424
- # Regression test for #2119
425
- context "when payment is completed" do
426
- before do
427
- payment.state = 'completed'
428
- end
429
-
430
- it "should do nothing" do
431
- expect(payment).not_to receive(:complete)
432
- expect(payment.payment_method).not_to receive(:capture)
433
- expect(payment.log_entries).not_to receive(:create!)
434
- payment.capture!
435
- end
436
- end
437
- end
438
-
439
- describe "#cancel!" do
440
- before do
441
- payment.response_code = 'abc'
442
- payment.state = 'pending'
443
- end
444
-
445
- context "if successful" do
446
- it "should update the response_code with the authorization from the gateway" do
447
- # Change it to something different
448
- allow(gateway).to receive_messages :cancel => success_response
449
- payment.cancel!
450
- expect(payment.state).to eq('void')
451
- expect(payment.response_code).to eq('123')
452
- end
453
- end
454
-
455
- context "if unsuccessful" do
456
- it "should not void the payment" do
457
- allow(gateway).to receive_messages :cancel => failed_response
458
- expect { payment.cancel! }.to raise_error(Spree::Core::GatewayError)
459
- expect(payment.state).to eq('pending')
460
- expect(payment.response_code).to eq('abc')
461
- end
462
- end
463
-
464
- end
465
-
466
-
467
- describe "#void_transaction!" do
468
- before do
469
- payment.response_code = '123'
470
- payment.state = 'pending'
471
- end
472
-
473
- context "when profiles are supported" do
474
- it "should call payment_gateway.void with the payment's response_code" do
475
- allow(gateway).to receive_messages :payment_profiles_supported? => true
476
- expect(gateway).to receive(:void).with('123', card, anything).and_return(success_response)
477
- payment.void_transaction!
478
- end
479
- end
480
-
481
- context "when profiles are not supported" do
482
- it "should call payment_gateway.void with the payment's response_code" do
483
- allow(gateway).to receive_messages :payment_profiles_supported? => false
484
- expect(gateway).to receive(:void).with('123', anything).and_return(success_response)
485
- payment.void_transaction!
486
- end
487
- end
488
-
489
- it "should log the response" do
490
- expect(payment.log_entries).to receive(:create!).with(:details => anything)
491
- payment.void_transaction!
492
- end
493
-
494
- context "when gateway does not match the environment" do
495
- it "should raise an exception" do
496
- allow(gateway).to receive_messages :environment => "foo"
497
- expect { payment.void_transaction! }.to raise_error(Spree::Core::GatewayError)
498
- end
499
- end
500
-
501
- context "if successful" do
502
- it "should update the response_code with the authorization from the gateway" do
503
- # Change it to something different
504
- payment.response_code = 'abc'
505
- payment.void_transaction!
506
- expect(payment.response_code).to eq('12345')
507
- end
508
- end
509
-
510
- context "if unsuccessful" do
511
- it "should not void the payment" do
512
- allow(gateway).to receive_messages :void => failed_response
513
- expect(payment).not_to receive(:void)
514
- expect { payment.void_transaction! }.to raise_error(Spree::Core::GatewayError)
515
- end
516
- end
517
-
518
- # Regression test for #2119
519
- context "if payment is already voided" do
520
- before do
521
- payment.state = 'void'
522
- end
523
-
524
- it "should not void the payment" do
525
- expect(payment.payment_method).not_to receive(:void)
526
- payment.void_transaction!
527
- end
528
- end
529
- end
530
-
531
- end
532
-
533
- context "when already processing" do
534
- it "should return nil without trying to process the source" do
535
- payment.state = 'processing'
536
-
537
- expect(payment.process!).to be_nil
538
- end
539
- end
540
-
541
- context "with source required" do
542
- context "raises an error if no source is specified" do
543
- before do
544
- payment.source = nil
545
- end
546
-
547
- specify do
548
- expect { payment.process! }.to raise_error(Spree::Core::GatewayError, Spree.t(:payment_processing_failed))
549
- end
550
- end
551
- end
552
-
553
- context "with source optional" do
554
- context "raises no error if source is not specified" do
555
- before do
556
- payment.source = nil
557
- allow(payment.payment_method).to receive_messages(:source_required? => false)
558
- end
559
-
560
- specify do
561
- expect { payment.process! }.not_to raise_error
562
- end
563
- end
564
- end
565
-
566
- describe "#credit_allowed" do
567
- # Regression test for #4403 & #4407
568
- it "is the difference between offsets total and payment amount" do
569
- payment.amount = 100
570
- allow(payment).to receive(:offsets_total).and_return(0)
571
- expect(payment.credit_allowed).to eq(100)
572
- allow(payment).to receive(:offsets_total).and_return(-80)
573
- expect(payment.credit_allowed).to eq(20)
574
- end
575
- end
576
-
577
- describe "#can_credit?" do
578
- it "is true if credit_allowed > 0" do
579
- allow(payment).to receive(:credit_allowed).and_return(100)
580
- expect(payment.can_credit?).to be true
581
- end
582
-
583
- it "is false if credit_allowed is 0" do
584
- allow(payment).to receive(:credit_allowed).and_return(0)
585
- expect(payment.can_credit?).to be false
586
- end
587
- end
588
-
589
- describe "#save" do
590
- context "captured payments" do
591
- it "update order payment total" do
592
- payment = create(:payment, order: order, state: 'completed')
593
- expect(order.payment_total).to eq payment.amount
594
- end
595
- end
596
-
597
- context "not completed payments" do
598
- it "doesn't update order payment total" do
599
- expect {
600
- Spree::Payment.create(:amount => 100, :order => order)
601
- }.not_to change { order.payment_total }
602
- end
603
- end
604
-
605
- context 'when the payment was completed but now void' do
606
- let(:payment) do
607
- Spree::Payment.create(
608
- amount: 100,
609
- order: order,
610
- state: 'completed'
611
- )
612
- end
613
-
614
- it 'updates order payment total' do
615
- payment.void
616
- expect(order.payment_total).to eq 0
617
- end
618
- end
619
-
620
- context "completed orders" do
621
- let(:payment_method) { create(:check_payment_method) }
622
- before { allow(order).to receive_messages completed?: true }
623
-
624
- it "updates payment_state and shipments" do
625
- expect(order.updater).to receive(:update_payment_state)
626
- expect(order.updater).to receive(:update_shipment_state)
627
- Spree::Payment.create!(amount: 100, order: order, payment_method: payment_method)
628
- end
629
- end
630
-
631
- context "when profiles are supported" do
632
- before do
633
- allow(gateway).to receive_messages :payment_profiles_supported? => true
634
- allow(payment.source).to receive_messages :has_payment_profile? => false
635
- end
636
-
637
- context "when there is an error connecting to the gateway" do
638
- it "should call gateway_error " do
639
- expect(gateway).to receive(:create_profile).and_raise(ActiveMerchant::ConnectionError.new("foo", nil))
640
- expect do
641
- Spree::Payment.create(
642
- :amount => 100,
643
- :order => order,
644
- :source => card,
645
- :payment_method => gateway
646
- )
647
- end.to raise_error(Spree::Core::GatewayError)
648
- end
649
- end
650
-
651
- context "with multiple payment attempts" do
652
- let(:attributes) { attributes_for(:credit_card) }
653
- it "should not try to create profiles on old failed payment attempts" do
654
- allow_any_instance_of(Spree::Payment).to receive(:payment_method) { gateway }
655
-
656
- order.payments.create!(
657
- source_attributes: attributes,
658
- payment_method: gateway,
659
- amount: 100
660
- )
661
- expect(gateway).to receive(:create_profile).exactly :once
662
- expect(order.payments.count).to eq(1)
663
- order.payments.create!(
664
- source_attributes: attributes,
665
- payment_method: gateway,
666
- amount: 100
667
- )
668
- end
669
-
670
- end
671
-
672
- context "when successfully connecting to the gateway" do
673
- it "should create a payment profile" do
674
- expect(payment.payment_method).to receive :create_profile
675
- payment = Spree::Payment.create(
676
- :amount => 100,
677
- :order => order,
678
- :source => card,
679
- :payment_method => gateway
680
- )
681
- end
682
- end
683
- end
684
-
685
- context "when profiles are not supported" do
686
- before { allow(gateway).to receive_messages :payment_profiles_supported? => false }
687
-
688
- it "should not create a payment profile" do
689
- expect(gateway).not_to receive :create_profile
690
- payment = Spree::Payment.create(
691
- :amount => 100,
692
- :order => order,
693
- :source => card,
694
- :payment_method => gateway
695
- )
696
- end
697
- end
698
- end
699
-
700
- describe '#invalidate_old_payments' do
701
- it 'should not invalidate other payments if not valid' do
702
- payment.save
703
- invalid_payment = Spree::Payment.new(:amount => 100, :order => order, :state => 'invalid', :payment_method => gateway)
704
- invalid_payment.save
705
- expect(payment.reload.state).to eq('checkout')
706
- end
707
- end
708
-
709
- describe "#build_source" do
710
- let(:params) do
711
- {
712
- :amount => 100,
713
- :payment_method => gateway,
714
- :source_attributes => {
715
- :expiry =>"01 / 99",
716
- :number => '1234567890123',
717
- :verification_value => '123',
718
- :name => 'Spree Commerce'
719
- }
720
- }
721
- end
722
-
723
- it "should build the payment's source" do
724
- payment = Spree::Payment.new(params)
725
- expect(payment).to be_valid
726
- expect(payment.source).not_to be_nil
727
- end
728
-
729
- it "assigns user and gateway to payment source" do
730
- order = create(:order)
731
- source = order.payments.new(params).source
732
-
733
- expect(source.user_id).to eq order.user_id
734
- expect(source.payment_method_id).to eq gateway.id
735
- end
736
-
737
- it "errors when payment source not valid" do
738
- params = { :amount => 100, :payment_method => gateway,
739
- :source_attributes => {:expiry => "1 / 12" }}
740
-
741
- payment = Spree::Payment.new(params)
742
- expect(payment).not_to be_valid
743
- expect(payment.source).not_to be_nil
744
- expect(payment.source.error_on(:number).size).to eq(1)
745
- expect(payment.source.error_on(:verification_value).size).to eq(1)
746
- end
747
-
748
- it "does not build a new source when duplicating the model with source_attributes set" do
749
- payment = create(:payment)
750
- payment.source_attributes = params[:source_attributes]
751
- expect { payment.dup }.to_not change { payment.source }
752
- end
753
- end
754
-
755
- describe "#currency" do
756
- before { allow(order).to receive(:currency) { "ABC" } }
757
- it "returns the order currency" do
758
- expect(payment.currency).to eq("ABC")
759
- end
760
- end
761
-
762
- describe "#display_amount" do
763
- it "returns a Spree::Money for this amount" do
764
- expect(payment.display_amount).to eq(Spree::Money.new(payment.amount))
765
- end
766
- end
767
-
768
- # Regression test for #2216
769
- describe "#gateway_options" do
770
- before { allow(order).to receive_messages(:last_ip_address => "192.168.1.1") }
771
-
772
- it "contains an IP" do
773
- expect(payment.gateway_options[:ip]).to eq(order.last_ip_address)
774
- end
775
-
776
- it "contains the email address from a persisted order" do
777
- # Sets the payment's order to a different Ruby object entirely
778
- payment.order = Spree::Order.find(payment.order_id)
779
- email = 'foo@example.com'
780
- order.update_attributes(:email => email)
781
- expect(payment.gateway_options[:email]).to eq(email)
782
- end
783
- end
784
-
785
- describe "#set_unique_identifier" do
786
- # Regression test for #1998
787
- it "sets a unique identifier on create" do
788
- payment.run_callbacks(:create)
789
- expect(payment.identifier).not_to be_blank
790
- expect(payment.identifier.size).to eq(8)
791
- expect(payment.identifier).to be_a(String)
792
- end
793
-
794
- # Regression test for #3733
795
- it "does not regenerate the identifier on re-save" do
796
- payment.save
797
- old_identifier = payment.identifier
798
- payment.save
799
- expect(payment.identifier).to eq(old_identifier)
800
- end
801
-
802
- context "other payment exists" do
803
- let(:other_payment) {
804
- payment = Spree::Payment.new
805
- payment.source = card
806
- payment.order = order
807
- payment.payment_method = gateway
808
- payment
809
- }
810
-
811
- before { other_payment.save! }
812
-
813
- it "doesn't set duplicate identifier" do
814
- expect(payment).to receive(:generate_identifier).and_return(other_payment.identifier)
815
- expect(payment).to receive(:generate_identifier).and_call_original
816
-
817
- payment.run_callbacks(:create)
818
-
819
- expect(payment.identifier).not_to be_blank
820
- expect(payment.identifier).not_to eq(other_payment.identifier)
821
- end
822
- end
823
- end
824
-
825
- describe "#amount=" do
826
- before do
827
- subject.amount = amount
828
- end
829
-
830
- context "when the amount is a string" do
831
- context "amount is a decimal" do
832
- let(:amount) { '2.99' }
833
-
834
- it '#amount' do
835
- expect(subject.amount).to eql(BigDecimal('2.99'))
836
- end
837
- end
838
-
839
- context "amount is an integer" do
840
- let(:amount) { '2' }
841
-
842
- it '#amount' do
843
- expect(subject.amount).to eql(BigDecimal('2.0'))
844
- end
845
- end
846
-
847
- context "amount contains a dollar sign" do
848
- let(:amount) { '$2.99' }
849
-
850
- it '#amount' do
851
- expect(subject.amount).to eql(BigDecimal('2.99'))
852
- end
853
- end
854
-
855
- context "amount contains a comma" do
856
- let(:amount) { '$2,999.99' }
857
-
858
- it '#amount' do
859
- expect(subject.amount).to eql(BigDecimal('2999.99'))
860
- end
861
- end
862
-
863
- context "amount contains a negative sign" do
864
- let(:amount) { '-2.99' }
865
-
866
- it '#amount' do
867
- expect(subject.amount).to eql(BigDecimal('-2.99'))
868
- end
869
- end
870
-
871
- context "amount is invalid" do
872
- let(:amount) { 'invalid' }
873
-
874
- # this is a strange default for ActiveRecord
875
-
876
- it '#amount' do
877
- expect(subject.amount).to eql(BigDecimal('0'))
878
- end
879
- end
880
-
881
- context "amount is an empty string" do
882
- let(:amount) { '' }
883
-
884
- it '#amount' do
885
- expect(subject.amount).to be_nil
886
- end
887
- end
888
- end
889
-
890
- context "when the amount is a number" do
891
- let(:amount) { 1.55 }
892
-
893
- it '#amount' do
894
- expect(subject.amount).to eql(BigDecimal('1.55'))
895
- end
896
- end
897
-
898
- context "when the locale uses a coma as a decimal separator" do
899
- before(:each) do
900
- I18n.backend.store_translations(:fr, { :number => { :currency => { :format => { :delimiter => ' ', :separator => ',' } } } })
901
- I18n.locale = :fr
902
- subject.amount = amount
903
- end
904
-
905
- after do
906
- I18n.locale = I18n.default_locale
907
- end
908
-
909
- context "amount is a decimal" do
910
- let(:amount) { '2,99' }
911
-
912
- it '#amount' do
913
- expect(subject.amount).to eql(BigDecimal('2.99'))
914
- end
915
- end
916
-
917
- context "amount contains a $ sign" do
918
- let(:amount) { '2,99 $' }
919
-
920
- it '#amount' do
921
- expect(subject.amount).to eql(BigDecimal('2.99'))
922
- end
923
- end
924
-
925
- context "amount is a number" do
926
- let(:amount) { 2.99 }
927
-
928
- it '#amount' do
929
- expect(subject.amount).to eql(BigDecimal('2.99'))
930
- end
931
- end
932
-
933
- context "amount contains a negative sign" do
934
- let(:amount) { '-2,99 $' }
935
-
936
- it '#amount' do
937
- expect(subject.amount).to eql(BigDecimal('-2.99'))
938
- end
939
- end
940
-
941
- context "amount uses a dot as a decimal separator" do
942
- let(:amount) { '2.99' }
943
-
944
- it '#amount' do
945
- expect(subject.amount).to eql(BigDecimal('2.99'))
946
- end
947
- end
948
- end
949
- end
950
-
951
- describe "is_avs_risky?" do
952
- it "returns false if avs_response included in NON_RISKY_AVS_CODES" do
953
- ('A'..'Z').reject{ |x| subject.class::RISKY_AVS_CODES.include?(x) }.to_a.each do |char|
954
- payment.update_attribute(:avs_response, char)
955
- expect(payment.is_avs_risky?).to eq false
956
- end
957
- end
958
-
959
- it "returns false if avs_response.blank?" do
960
- payment.update_attribute(:avs_response, nil)
961
- expect(payment.is_avs_risky?).to eq false
962
- payment.update_attribute(:avs_response, '')
963
- expect(payment.is_avs_risky?).to eq false
964
- end
965
-
966
- it "returns true if avs_response in RISKY_AVS_CODES" do
967
- # should use avs_response_code helper
968
- ('A'..'Z').reject{ |x| subject.class::NON_RISKY_AVS_CODES.include?(x) }.to_a.each do |char|
969
- payment.update_attribute(:avs_response, char)
970
- expect(payment.is_avs_risky?).to eq true
971
- end
972
- end
973
- end
974
-
975
- describe "is_cvv_risky?" do
976
- it "returns false if cvv_response_code == 'M'" do
977
- payment.update_attribute(:cvv_response_code, "M")
978
- expect(payment.is_cvv_risky?).to eq(false)
979
- end
980
-
981
- it "returns false if cvv_response_code == nil" do
982
- payment.update_attribute(:cvv_response_code, nil)
983
- expect(payment.is_cvv_risky?).to eq(false)
984
- end
985
-
986
- it "returns false if cvv_response_message == ''" do
987
- payment.update_attribute(:cvv_response_message, '')
988
- expect(payment.is_cvv_risky?).to eq(false)
989
- end
990
-
991
- it "returns true if cvv_response_code == [A-Z], omitting D" do
992
- # should use cvv_response_code helper
993
- (%w{N P S U} << "").each do |char|
994
- payment.update_attribute(:cvv_response_code, char)
995
- expect(payment.is_cvv_risky?).to eq(true)
996
- end
997
- end
998
- end
999
-
1000
- # Regression test for #4072 (kinda)
1001
- # The need for this was discovered in the research for #4072
1002
- context "state changes" do
1003
- it "are logged to the database" do
1004
- expect(payment.state_changes).to be_empty
1005
- expect(payment.process!).to be true
1006
- expect(payment.state_changes.count).to eq(2)
1007
- changes = payment.state_changes.map { |change| { change.previous_state => change.next_state} }
1008
- expect(changes).to match_array([
1009
- {"checkout" => "processing"},
1010
- { "processing" => "pending"}
1011
- ])
1012
- end
1013
- end
1014
-
1015
- describe "#actions" do
1016
- let(:source) { Spree::CreditCard.new }
1017
- before { allow(subject).to receive(:payment_source) { source } }
1018
-
1019
- it "includes the actions that the source can take" do
1020
- allow(source).to receive(:can_capture?) { true }
1021
- expect(subject.actions).to include "capture"
1022
- end
1023
-
1024
- it "excludes actions that the source cannot take" do
1025
- allow(source).to receive(:can_capture?) { false }
1026
- expect(subject.actions).not_to include "capture"
1027
- end
1028
-
1029
- it "does not include 'failure' by default" do
1030
- expect(subject.actions).not_to include "failure"
1031
- end
1032
-
1033
- context "payment state is processing" do
1034
- it "includes the 'failure' action" do
1035
- # because the processing state does not provide
1036
- # clarity about what has happened with an external
1037
- # payment processor, so we want to allow the ability
1038
- # to have someone look at the what happened and determine
1039
- # to mark the payment as having failed
1040
- subject.state = 'processing'
1041
- expect(subject.actions).to include "failure"
1042
- end
1043
- end
1044
- end
1045
- end