require 'test_helper'

class PasswordsControllerTest < ActionController::TestCase
  include Devise::TestHelpers
  setup do
    request.env["devise.mapping"] = Devise.mappings[:user]
    @user = users(:erik)
  end

  test 'should send password reset instructions if email address is found' do
    num_deliveries = ActionMailer::Base.deliveries.size
    post :create, :user => {:email => @user.email}
    assert_equal num_deliveries + 1, ActionMailer::Base.deliveries.size
    assert_response :success
    email = ActionMailer::Base.deliveries.last
    assert_equal [@user.email], email.to
    assert_equal "Reset password instructions", email.subject
  end

  test 'should not send password reset instructions if email address is not found' do
    post :create, :user => {:email => 'not_found@example.com'}
    assert_response :error
  end

  # test 'should render edit view' do
  #   skip 'Password reset not yet implemented'
  #   get :edit, :reset_password_token => 'token'
  #   assert_response :success
  # end

  test 'should reset user password with an valid reset password token' do
    old_password = @user.password
    @user.send :generate_reset_password_token!
    put :update, :user => {:reset_password_token => @user.reset_password_token, :password => 'new_password', :password_confirmation => 'new_password'}
    @user.reload
    assert !@user.valid_password?(old_password)
    assert @user.valid_password?('new_password')
    assert_response :success
  end

  test 'should not reset user password with an invalid reset password token' do
    put :update, :user => {:reset_password_token => 'invalid_token', :password => 'new_password', :password_confirmation => 'new_password'}
    assert_response :error
  end
end