- def test_login
- user = create(:user)
-
- get login_path
- assert_response :redirect
- assert_redirected_to login_path(:cookie_test => true)
- follow_redirect!
- assert_response :success
- assert_template "login"
-
- get login_path, :params => { :username => user.display_name, :password => "test" }
- assert_response :success
- assert_template "login"
-
- post login_path, :params => { :username => user.display_name, :password => "test" }
- assert_response :redirect
- assert_redirected_to root_path
- end
-
- def test_logout_without_referer
- post logout_path
- assert_response :redirect
- assert_redirected_to root_path
- end
-
- def test_logout_with_referer
- post logout_path, :params => { :referer => "/test" }
- assert_response :redirect
- assert_redirected_to "/test"
- end
-
- def test_logout_fallback_without_referer
- get logout_path
- assert_response :success
- assert_template :logout
- assert_select "input[name=referer]:not([value])"
- end
-
- def test_logout_fallback_with_referer
- get logout_path, :params => { :referer => "/test" }
- assert_response :success
- assert_template :logout
- assert_select "input[name=referer][value=?]", "/test"
- end
-
- def test_logout_removes_session_token
- user = build(:user, :pending)
- post user_new_path, :params => { :user => user.attributes }
- post user_save_path, :params => { :read_ct => 1, :read_tou => 1 }
-
- assert_difference "User.find_by(:email => user.email).tokens.count", -1 do
- post logout_path
- end
- assert_response :redirect
- assert_redirected_to root_path
- end
-
- def test_confirm_get
- user = build(:user, :pending)
- post user_new_path, :params => { :user => user.attributes }
- post user_save_path, :params => { :read_ct => 1, :read_tou => 1 }
- confirm_string = User.find_by(:email => user.email).tokens.create.token
-
- get user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string }
- assert_response :success
- assert_template :confirm
- end
-
- def test_confirm_get_already_confirmed
- user = build(:user, :pending)
- stub_gravatar_request(user.email)
- post user_new_path, :params => { :user => user.attributes }
- post user_save_path, :params => { :read_ct => 1, :read_tou => 1 }
- confirm_string = User.find_by(:email => user.email).tokens.create.token
-
- # Get the confirmation page
- get user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string }
- assert_response :success
- assert_template :confirm
-
- # Confirm the user
- post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string }
- assert_redirected_to welcome_path
-
- # Now try to get the confirmation page again
- get user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string }
- assert_response :redirect
- assert_redirected_to root_path
- end
-
- def test_confirm_success_no_token_no_referer
- user = build(:user, :pending)
- stub_gravatar_request(user.email)
- post user_new_path, :params => { :user => user.attributes }
- post user_save_path, :params => { :read_ct => 1, :read_tou => 1 }
- confirm_string = User.find_by(:email => user.email).tokens.create.token
-
- post logout_path
-
- post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string }
- assert_redirected_to login_path
- assert_match(/Confirmed your account/, flash[:notice])
- end
-
- def test_confirm_success_good_token_no_referer
- user = build(:user, :pending)
- stub_gravatar_request(user.email)
- post user_new_path, :params => { :user => user.attributes }
- post user_save_path, :params => { :read_ct => 1, :read_tou => 1 }
- confirm_string = User.find_by(:email => user.email).tokens.create.token
-
- post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string }
- assert_redirected_to welcome_path
- end
-
- def test_confirm_success_bad_token_no_referer
- user = build(:user, :pending)
- stub_gravatar_request(user.email)
- post user_new_path, :params => { :user => user.attributes }
- post user_save_path, :params => { :read_ct => 1, :read_tou => 1 }
- confirm_string = User.find_by(:email => user.email).tokens.create.token
-
- post logout_path
- session_for(create(:user))
-
- post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string }
- assert_redirected_to login_path
- assert_match(/Confirmed your account/, flash[:notice])
- end
-
- def test_confirm_success_no_token_with_referer
- user = build(:user, :pending)
- stub_gravatar_request(user.email)
- post user_new_path, :params => { :user => user.attributes }
- post user_save_path, :params => { :read_ct => 1, :read_tou => 1 }
- confirm_string = User.find_by(:email => user.email).tokens.create(:referer => new_diary_entry_path).token
-
- post logout_path
-
- post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string }
- assert_redirected_to login_path(:referer => new_diary_entry_path)
- assert_match(/Confirmed your account/, flash[:notice])
- end
-
- def test_confirm_success_good_token_with_referer
- user = build(:user, :pending)
- stub_gravatar_request(user.email)
- post user_new_path, :params => { :user => user.attributes }
- post user_save_path, :params => { :read_ct => 1, :read_tou => 1 }
- confirm_string = User.find_by(:email => user.email).tokens.create(:referer => new_diary_entry_path).token
-
- post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string }
- assert_redirected_to new_diary_entry_path
- end
-
- def test_confirm_success_bad_token_with_referer
- user = build(:user, :pending)
- stub_gravatar_request(user.email)
- post user_new_path, :params => { :user => user.attributes }
- post user_save_path, :params => { :read_ct => 1, :read_tou => 1 }
- confirm_string = User.find_by(:email => user.email).tokens.create(:referer => new_diary_entry_path).token
-
- post logout_path
- session_for(create(:user))
-
- post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string }
- assert_redirected_to login_path(:referer => new_diary_entry_path)
- assert_match(/Confirmed your account/, flash[:notice])
- end
-
- def test_confirm_expired_token
- user = build(:user, :pending)
- stub_gravatar_request(user.email)
- post user_new_path, :params => { :user => user.attributes }
- post user_save_path, :params => { :read_ct => 1, :read_tou => 1 }
- confirm_string = User.find_by(:email => user.email).tokens.create(:expiry => 1.day.ago).token
-
- post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string }
- assert_redirected_to :action => "confirm"
- assert_match(/confirmation code has expired/, flash[:error])
- end
-
- def test_confirm_already_confirmed
- user = build(:user, :pending)
- stub_gravatar_request(user.email)
- post user_new_path, :params => { :user => user.attributes }
- post user_save_path, :params => { :read_ct => 1, :read_tou => 1 }
- confirm_string = User.find_by(:email => user.email).tokens.create(:referer => new_diary_entry_path).token
-
- post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string }
- assert_redirected_to new_diary_entry_path
-
- post logout_path
-
- confirm_string = User.find_by(:email => user.email).tokens.create(:referer => new_diary_entry_path).token
- post user_confirm_path, :params => { :display_name => user.display_name, :confirm_string => confirm_string }
- assert_redirected_to :action => "login"
- assert_match(/already been confirmed/, flash[:error])
- end
-
- def test_confirm_resend_success
- user = build(:user, :pending)
- post user_new_path, :params => { :user => user.attributes }
- post user_save_path, :params => { :read_ct => 1, :read_tou => 1 }
-
- assert_difference "ActionMailer::Base.deliveries.size", 1 do
- perform_enqueued_jobs do
- get user_confirm_resend_path(user)
- end
- end
-
- assert_response :redirect
- assert_redirected_to login_path
- assert_match(/sent a new confirmation/, flash[:notice])
-
- email = ActionMailer::Base.deliveries.last
-
- assert_equal user.email, email.to.first
-
- ActionMailer::Base.deliveries.clear
- end
-
- def test_confirm_resend_no_token
- user = build(:user, :pending)
- # only complete first half of registration
- post user_new_path, :params => { :user => user.attributes }
-
- assert_no_difference "ActionMailer::Base.deliveries.size" do
- perform_enqueued_jobs do
- get user_confirm_resend_path(user)
- end
- end
-
- assert_response :redirect
- assert_redirected_to login_path
- assert_match "User #{user.display_name} not found.", flash[:error]
- end
-
- def test_confirm_resend_unknown_user
- assert_no_difference "ActionMailer::Base.deliveries.size" do
- perform_enqueued_jobs do
- get user_confirm_resend_path(:display_name => "No Such User")
- end
- end
-
- assert_response :redirect
- assert_redirected_to login_path
- assert_match "User No Such User not found.", flash[:error]
- end
-
- def test_confirm_email_get
- user = create(:user)
- confirm_string = user.tokens.create.token
-
- get user_confirm_email_path, :params => { :confirm_string => confirm_string }
- assert_response :success
- assert_template :confirm_email
- end
-
- def test_confirm_email_success
- user = create(:user, :new_email => "test-new@example.com")
- stub_gravatar_request(user.new_email)
- confirm_string = user.tokens.create.token
-
- post user_confirm_email_path, :params => { :confirm_string => confirm_string }
- assert_response :redirect
- assert_redirected_to :action => :account, :display_name => user.display_name
- assert_match(/Confirmed your change of email address/, flash[:notice])
- end
-
- def test_confirm_email_already_confirmed
- user = create(:user)
- confirm_string = user.tokens.create.token
-
- post user_confirm_email_path, :params => { :confirm_string => confirm_string }
- assert_response :redirect
- assert_redirected_to :action => :account, :display_name => user.display_name
- assert_match(/already been confirmed/, flash[:error])
- end
-
- def test_confirm_email_bad_token
- post user_confirm_email_path, :params => { :confirm_string => "XXXXX" }
- assert_response :success
- assert_template :confirm_email
- assert_match(/confirmation code has expired or does not exist/, flash[:error])
- end
-
- ##
- # test if testing for a gravatar works
- # this happens when the email is actually changed
- # which is triggered by the confirmation mail
- def test_gravatar_auto_enable
- # switch to email that has a gravatar
- user = create(:user, :new_email => "test-new@example.com")
- stub_gravatar_request(user.new_email, 200)
- confirm_string = user.tokens.create.token
- # precondition gravatar should be turned off
- assert_not user.image_use_gravatar
- post user_confirm_email_path, :params => { :confirm_string => confirm_string }
- assert_response :redirect
- assert_redirected_to :action => :account, :display_name => user.display_name
- assert_match(/Confirmed your change of email address/, flash[:notice])
- # gravatar use should now be enabled
- assert User.find(user.id).image_use_gravatar
- end
-
- def test_gravatar_auto_disable
- # switch to email without a gravatar
- user = create(:user, :new_email => "test-new@example.com", :image_use_gravatar => true)
- stub_gravatar_request(user.new_email, 404)
- confirm_string = user.tokens.create.token
- # precondition gravatar should be turned on
- assert user.image_use_gravatar
- post user_confirm_email_path, :params => { :confirm_string => confirm_string }
- assert_response :redirect
- assert_redirected_to :action => :account, :display_name => user.display_name
- assert_match(/Confirmed your change of email address/, flash[:notice])
- # gravatar use should now be disabled
- assert_not User.find(user.id).image_use_gravatar
- end
-