PageRenderTime 46ms CodeModel.GetById 20ms RepoModel.GetById 1ms app.codeStats 0ms

/test/models/recoverable_test.rb

https://github.com/gguerragui/devise
Ruby | 138 lines | 118 code | 20 blank | 0 comment | 0 complexity | d97e6a63564fb3a30d5f9e49e5d4410b MD5 | raw file
  1. require 'test_helper'
  2. class RecoverableTest < ActiveSupport::TestCase
  3. def setup
  4. setup_mailer
  5. end
  6. test 'should not generate reset password token after creating a record' do
  7. assert_nil new_user.reset_password_token
  8. end
  9. test 'should regenerate reset password token each time' do
  10. user = create_user
  11. 3.times do
  12. token = user.reset_password_token
  13. user.send_reset_password_instructions
  14. assert_not_equal token, user.reset_password_token
  15. end
  16. end
  17. test 'should never generate the same reset password token for different users' do
  18. reset_password_tokens = []
  19. 3.times do
  20. user = create_user
  21. user.send_reset_password_instructions
  22. token = user.reset_password_token
  23. assert !reset_password_tokens.include?(token)
  24. reset_password_tokens << token
  25. end
  26. end
  27. test 'should reset password and password confirmation from params' do
  28. user = create_user
  29. user.reset_password!('123456789', '987654321')
  30. assert_equal '123456789', user.password
  31. assert_equal '987654321', user.password_confirmation
  32. end
  33. test 'should reset password and save the record' do
  34. assert create_user.reset_password!('123456789', '123456789')
  35. end
  36. test 'should clear reset password token while reseting the password' do
  37. user = create_user
  38. assert_nil user.reset_password_token
  39. user.send_reset_password_instructions
  40. assert_present user.reset_password_token
  41. assert user.reset_password!('123456789', '123456789')
  42. assert_nil user.reset_password_token
  43. end
  44. test 'should not clear reset password token if record is invalid' do
  45. user = create_user
  46. user.send_reset_password_instructions
  47. assert_present user.reset_password_token
  48. assert_not user.reset_password!('123456789', '987654321')
  49. assert_present user.reset_password_token
  50. end
  51. test 'should not reset password with invalid data' do
  52. user = create_user
  53. user.stubs(:valid?).returns(false)
  54. assert_not user.reset_password!('123456789', '987654321')
  55. end
  56. test 'should reset reset password token and send instructions by email' do
  57. user = create_user
  58. assert_email_sent do
  59. token = user.reset_password_token
  60. user.send_reset_password_instructions
  61. assert_not_equal token, user.reset_password_token
  62. end
  63. end
  64. test 'should find a user to send instructions by email' do
  65. user = create_user
  66. reset_password_user = User.send_reset_password_instructions(:email => user.email)
  67. assert_equal reset_password_user, user
  68. end
  69. test 'should return a new record with errors if user was not found by e-mail' do
  70. reset_password_user = User.send_reset_password_instructions(:email => "invalid@email.com")
  71. assert_not reset_password_user.persisted?
  72. assert_equal "not found", reset_password_user.errors[:email].join
  73. end
  74. test 'should reset reset_password_token before send the reset instructions email' do
  75. user = create_user
  76. token = user.reset_password_token
  77. reset_password_user = User.send_reset_password_instructions(:email => user.email)
  78. assert_not_equal token, user.reload.reset_password_token
  79. end
  80. test 'should send email instructions to the user reset his password' do
  81. user = create_user
  82. assert_email_sent do
  83. User.send_reset_password_instructions(:email => user.email)
  84. end
  85. end
  86. test 'should find a user to reset his password based on reset_password_token' do
  87. user = create_user
  88. user.send :generate_reset_password_token!
  89. reset_password_user = User.reset_password_by_token(:reset_password_token => user.reset_password_token)
  90. assert_equal reset_password_user, user
  91. end
  92. test 'should a new record with errors if no reset_password_token is found' do
  93. reset_password_user = User.reset_password_by_token(:reset_password_token => 'invalid_token')
  94. assert_not reset_password_user.persisted?
  95. assert_equal "is invalid", reset_password_user.errors[:reset_password_token].join
  96. end
  97. test 'should a new record with errors if reset_password_token is blank' do
  98. reset_password_user = User.reset_password_by_token(:reset_password_token => '')
  99. assert_not reset_password_user.persisted?
  100. assert_match "can't be blank", reset_password_user.errors[:reset_password_token].join
  101. end
  102. test 'should reset successfully user password given the new password and confirmation' do
  103. user = create_user
  104. old_password = user.password
  105. user.send :generate_reset_password_token!
  106. reset_password_user = User.reset_password_by_token(
  107. :reset_password_token => user.reset_password_token,
  108. :password => 'new_password',
  109. :password_confirmation => 'new_password'
  110. )
  111. user.reload
  112. assert_not user.valid_password?(old_password)
  113. assert user.valid_password?('new_password')
  114. end
  115. end