X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/64f373dc598e9c672e1575622f2fc76c29655b8d..5c557cfe7c1894d29cdbdacd15f2ae7e05c9d35d:/test/functional/user_controller_test.rb diff --git a/test/functional/user_controller_test.rb b/test/functional/user_controller_test.rb index cbe66a0db..b9a65ec4d 100644 --- a/test/functional/user_controller_test.rb +++ b/test/functional/user_controller_test.rb @@ -8,7 +8,7 @@ class UserControllerTest < ActionController::TestCase get :new assert_response :success - assert_select "html:root", :count => 1 do + assert_select "html", :count => 1 do assert_select "head", :count => 1 do assert_select "title", :text => /Create account/, :count => 1 end @@ -43,23 +43,159 @@ class UserControllerTest < ActionController::TestCase assert_match /#{@url}/, register_email.body # Check the page - assert_redirected_to :action => 'login' + assert_redirected_to :action => 'login', :referer => nil ActionMailer::Base.deliveries.clear end def test_user_create_submit_duplicate_email - dup_email = users(:public_user).email + email = users(:public_user).email display_name = "new_tester" assert_difference('User.count', 0) do assert_difference('ActionMailer::Base.deliveries.size', 0) do - post :save, :user => { :email => dup_email, :email_confirmation => dup_email, :display_name => display_name, :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest"} + post :save, :user => { :email => email, :email_confirmation => email, :display_name => display_name, :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest"} end end assert_response :success assert_template 'new' assert_select "div#errorExplanation" - assert_select "table#signupForm > tr > td > div[class=fieldWithErrors] > input#user_email" + assert_select "table#signupForm > tr > td > div[class=field_with_errors] > input#user_email" + end + + def test_user_create_submit_duplicate_email_uppercase + email = users(:public_user).email.upcase + display_name = "new_tester" + assert_difference('User.count', 0) do + assert_difference('ActionMailer::Base.deliveries.size', 0) do + post :save, :user => { :email => email, :email_confirmation => email, :display_name => display_name, :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest"} + end + end + assert_response :success + assert_template 'new' + assert_select "div#errorExplanation" + assert_select "table#signupForm > tr > td > div[class=field_with_errors] > input#user_email" + end + + def test_user_create_submit_duplicate_name + email = "new_tester@example.com" + display_name = users(:public_user).display_name + assert_difference('User.count', 0) do + assert_difference('ActionMailer::Base.deliveries.size', 0) do + post :save, :user => { :email => email, :email_confirmation => email, :display_name => display_name, :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest"} + end + end + assert_response :success + assert_template 'new' + assert_select "div#errorExplanation" + assert_select "table#signupForm > tr > td > div[class=field_with_errors] > input#user_display_name" + end + + def test_user_create_submit_duplicate_name_uppercase + email = "new_tester@example.com" + display_name = users(:public_user).display_name.upcase + assert_difference('User.count', 0) do + assert_difference('ActionMailer::Base.deliveries.size', 0) do + post :save, :user => { :email => email, :email_confirmation => email, :display_name => display_name, :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest"} + end + end + assert_response :success + assert_template 'new' + assert_select "div#errorExplanation" + assert_select "table#signupForm > tr > td > div[class=field_with_errors] > input#user_display_name" + end + + def test_user_update + # Get a user to work with - note that this user deliberately + # conflicts with uppercase_user in the email and display name + # fields to test that we can change other fields without any + # validation errors being reported + user = users(:normal_user) + + # Set the username cookie + @request.cookies["_osm_username"] = user.display_name + + # Make sure that you are redirected to the login page when + # you are not logged in + get :account, { :display_name => user.display_name } + assert_response :redirect + assert_redirected_to :controller => :user, :action => "login", :referer => "/user/test/account" + + # Make sure that you are redirected to the login page when + # you are not logged in as the right user + get :account, { :display_name => user.display_name }, { "user" => users(:public_user).id } + assert_response :redirect + assert_redirected_to :controller => :user, :action => "login", :referer => "/user/test/account" + + # Make sure we get the page when we are logged in as the right user + get :account, { :display_name => user.display_name }, { "user" => user } + assert_response :success + assert_template :account + + # Updating the description should work + user.description = "new description" + post :account, { :display_name => user.display_name, :user => user.attributes }, { "user" => user.id } + assert_response :success + assert_template :account + assert_select "div#errorExplanation", false + assert_select "div#notice", /^User information updated successfully/ + assert_select "table#accountForm > tr > td > textarea#user_description", user.description + + # Changing name to one that exists should fail + user.display_name = users(:public_user).display_name + post :account, { :display_name => user.display_name, :user => user.attributes }, { "user" => user.id } + assert_response :success + assert_template :account + assert_select "div#notice", false + assert_select "div#errorExplanation" + assert_select "table#accountForm > tr > td > div[class=field_with_errors] > input#user_display_name" + + # Changing name to one that exists should fail, regardless of case + user.display_name = users(:public_user).display_name.upcase + post :account, { :display_name => user.display_name, :user => user.attributes }, { "user" => user.id } + assert_response :success + assert_template :account + assert_select "div#notice", false + assert_select "div#errorExplanation" + assert_select "table#accountForm > tr > td > div[class=field_with_errors] > input#user_display_name" + + # Changing name to one that doesn't exist should work + user.display_name = "new tester" + post :account, { :display_name => user.display_name, :user => user.attributes }, { "user" => user.id } + assert_response :success + assert_template :account + assert_select "div#errorExplanation", false + assert_select "div#notice", /^User information updated successfully/ + assert_select "table#accountForm > tr > td > input#user_display_name[value=?]", user.display_name + + # Need to update cookies now to stay valid + @request.cookies["_osm_username"] = user.display_name + + # Changing email to one that exists should fail + user.new_email = users(:public_user).email + post :account, { :display_name => user.display_name, :user => user.attributes }, { "user" => user.id } + assert_response :success + assert_template :account + assert_select "div#notice", false + assert_select "div#errorExplanation" + assert_select "table#accountForm > tr > td > div[class=field_with_errors] > input#user_new_email" + + # Changing email to one that exists should fail, regardless of case + user.new_email = users(:public_user).email.upcase + post :account, { :display_name => user.display_name, :user => user.attributes }, { "user" => user.id } + assert_response :success + assert_template :account + assert_select "div#notice", false + assert_select "div#errorExplanation" + assert_select "table#accountForm > tr > td > div[class=field_with_errors] > input#user_new_email" + + # Changing email to one that doesn't exist should work + user.new_email = "new_tester@example.com" + post :account, { :display_name => user.display_name, :user => user.attributes }, { "user" => user.id } + assert_response :success + assert_template :account + assert_select "div#errorExplanation", false + assert_select "div#notice", /^User information updated successfully/ + assert_select "table#accountForm > tr > td > input#user_new_email[value=?]", user.new_email end # Check that the user account page will display and contains some relevant