From 5c557cfe7c1894d29cdbdacd15f2ae7e05c9d35d Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Tue, 13 Dec 2011 10:26:46 +0000 Subject: [PATCH] Add some tests for updating users --- test/fixtures/users.yml | 13 +++ test/functional/user_controller_test.rb | 140 +++++++++++++++++++++++- 2 files changed, 151 insertions(+), 2 deletions(-) diff --git a/test/fixtures/users.yml b/test/fixtures/users.yml index 615e00cb8..7d89b858d 100644 --- a/test/fixtures/users.yml +++ b/test/fixtures/users.yml @@ -110,3 +110,16 @@ openid_user: terms_agreed: "2010-01-01 11:22:33" terms_seen: true languages: en + +uppercase_user: + id: 9 + email: TEST@OPENSTREETMAP.ORG + status: active + pass_crypt: <%= Digest::MD5.hexdigest('test') %> + creation_time: "2007-01-01 00:00:00" + display_name: TEST + data_public: false + description: test + terms_agreed: "2010-01-01 11:22:33" + terms_seen: true + languages: en diff --git a/test/functional/user_controller_test.rb b/test/functional/user_controller_test.rb index a069f20a2..b9a65ec4d 100644 --- a/test/functional/user_controller_test.rb +++ b/test/functional/user_controller_test.rb @@ -49,11 +49,11 @@ class UserControllerTest < ActionController::TestCase 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 @@ -62,6 +62,142 @@ class UserControllerTest < ActionController::TestCase 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 # information for the user def test_view_user_account -- 2.43.2