From: Kai Krueger Date: Sun, 2 May 2010 10:04:51 +0000 (+0100) Subject: Add test for OpenID login and signup X-Git-Tag: live~6314^2~1 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/92af0eccd59af0138b161f0aa841576221a40428 Add test for OpenID login and signup The tests need the ROTS (Ruby OpenID Test Server) running. ROTS can be found at http://github.com/roman/rots If ROTS is not running, there will be 4 failed test cases, but otherwise things should work --- diff --git a/test/fixtures/users.yml b/test/fixtures/users.yml index 1849fd4d9..8c8577520 100644 --- a/test/fixtures/users.yml +++ b/test/fixtures/users.yml @@ -68,3 +68,13 @@ administrator_user: creation_time: "2008-05-01 01:23:45" display_name: administrator data_public: true + +openid_user: + id: 7 + email: openid-user@example.com + active: true + pass_crypt: <%= Digest::MD5.hexdigest('test') %> + creation_time: "2008-05-01 01:23:45" + display_name: openIDuser + data_public: true + openid_url: http://localhost:1123/john.doe?openid.success=true diff --git a/test/integration/user_creation_test.rb b/test/integration/user_creation_test.rb index 77d73552a..da0ffd768 100644 --- a/test/integration/user_creation_test.rb +++ b/test/integration/user_creation_test.rb @@ -127,4 +127,28 @@ class UserCreationTest < ActionController::IntegrationTest assert_response :success assert_template "trace/list.html.erb" end + + def test_user_create_openid_success + new_email = "newtester-openid@osm.org" + display_name = "new_tester-openid" + assert_difference('User.count') do + assert_difference('ActionMailer::Base.deliveries.size', 1) do + post "/user/save", + {:user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, :openid_url => "http://localhost:1123/john.doe?openid.success=newuser"}} + assert_response :redirect + res = openid_request(@response.redirected_to) + post '/user/save', res + assert_response :redirect + follow_redirect! + end + end + + # Check the page + assert_response :success + assert_template 'login' + + ActionMailer::Base.deliveries.clear + end + + end diff --git a/test/integration/user_login_test.rb b/test/integration/user_login_test.rb new file mode 100644 index 000000000..0fe5b6570 --- /dev/null +++ b/test/integration/user_login_test.rb @@ -0,0 +1,81 @@ +require File.dirname(__FILE__) + '/../test_helper' + +class UserLoginTest < ActionController::IntegrationTest + fixtures :users + + def test_login_openid_success + get '/login' + assert_response :redirect + assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true" + follow_redirect! + assert_response :success + post '/login', {'user[openid_url]' => "http://localhost:1123/john.doe?openid.success=true", :referer => "/browse"} + assert_response :redirect + + res = openid_request(@response.redirected_to) + res2 = post '/login', res + + assert_response :redirect + follow_redirect! + assert_response :success + assert_template 'changeset/list' + end + + def test_login_openid_cancel + get '/login' + assert_response :redirect + assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true" + follow_redirect! + assert_response :success + post '/login', {'user[openid_url]' => "http://localhost:1123/john.doe", :referer => "/diary"} + assert_response :redirect + + res = openid_request(@response.redirected_to) + post '/login', res + + assert_response :success + assert_template 'login' + end + + def test_login_openid_invalid_provider + get '/login' + assert_response :redirect + assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true" + follow_redirect! + assert_response :success + #Use a different port that doesn't have the OpenID provider running on to test an invalid openID + post '/login', {'user[openid_url]' => "http://localhost:1124/john.doe", :referer => "/diary"} + assert_response :success + assert_template 'login' + end + + def test_login_openid_invalid_url + get '/login' + assert_response :redirect + assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true" + follow_redirect! + assert_response :success + #Use a url with an invalid protocol to make sure it handles that correctly too + post '/login', {'user[openid_url]' => "htt://localhost:1123/john.doe", :referer => "/diary"} + assert_response :success + assert_template 'login' + end + + def test_login_openid_unknown + get '/login' + assert_response :redirect + assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true" + follow_redirect! + assert_response :success + post '/login', {'user[openid_url]' => "http://localhost:1123/john.doe?openid.success=true_somethingelse", :referer => "/diary"} + assert_response :redirect + + res = openid_request(@response.redirected_to) + res2 = post '/login', res + + assert_response :redirect + follow_redirect! + assert_response :success + assert_template 'user/new' + end +end diff --git a/test/test_helper.rb b/test/test_helper.rb index 4972ee6d6..a83a89f2a 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -141,6 +141,15 @@ class ActiveSupport::TestCase def assert_no_missing_translations(msg="") assert_select "span[class=translation_missing]", false, "Missing translation #{msg}" end + + def openid_request(openid_request_uri) + openid_response = Net::HTTP.get_response(URI.parse(openid_request_uri)) + openid_response_uri = URI(openid_response['Location']) + openid_response_qs = Rack::Utils.parse_query(openid_response_uri.query) + + return openid_response_qs + end + # Add more helper methods to be used by all tests here... end