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
This commit is contained in:
parent
9faf30fb45
commit
92af0eccd5
4 changed files with 124 additions and 0 deletions
10
test/fixtures/users.yml
vendored
10
test/fixtures/users.yml
vendored
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
81
test/integration/user_login_test.rb
Normal file
81
test/integration/user_login_test.rb
Normal file
|
@ -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
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue