diff options
author | taryn <teast@globalpersonals.co.uk> | 2009-08-19 12:05:36 +0100 |
---|---|---|
committer | Joshua Peek <josh@joshpeek.com> | 2009-08-19 09:03:57 -0500 |
commit | 36bf5873474c7f3a8c69e6e037ad53aa6d66491a (patch) | |
tree | 56c8ba2eb7d882f59b1e0eda28673d1f17d17a6d /activeresource/test/cases/authorization_test.rb | |
parent | c2f90d6530dfd0ed68df9f4c429d0f498235e1d4 (diff) | |
download | rails-36bf5873474c7f3a8c69e6e037ad53aa6d66491a.tar.gz rails-36bf5873474c7f3a8c69e6e037ad53aa6d66491a.tar.bz2 rails-36bf5873474c7f3a8c69e6e037ad53aa6d66491a.zip |
Moved all test cases into a new test/cases directory to match Active Record test directory structure.
Signed-off-by: Joshua Peek <josh@joshpeek.com>
Diffstat (limited to 'activeresource/test/cases/authorization_test.rb')
-rw-r--r-- | activeresource/test/cases/authorization_test.rb | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/activeresource/test/cases/authorization_test.rb b/activeresource/test/cases/authorization_test.rb new file mode 100644 index 0000000000..ca25f437e3 --- /dev/null +++ b/activeresource/test/cases/authorization_test.rb @@ -0,0 +1,122 @@ +require 'abstract_unit' + +class AuthorizationTest < Test::Unit::TestCase + Response = Struct.new(:code) + + def setup + @conn = ActiveResource::Connection.new('http://localhost') + @matz = { :id => 1, :name => 'Matz' }.to_xml(:root => 'person') + @david = { :id => 2, :name => 'David' }.to_xml(:root => 'person') + @authenticated_conn = ActiveResource::Connection.new("http://david:test123@localhost") + @authorization_request_header = { 'Authorization' => 'Basic ZGF2aWQ6dGVzdDEyMw==' } + + ActiveResource::HttpMock.respond_to do |mock| + mock.get "/people/2.xml", @authorization_request_header, @david + mock.put "/people/2.xml", @authorization_request_header, nil, 204 + mock.delete "/people/2.xml", @authorization_request_header, nil, 200 + mock.post "/people/2/addresses.xml", @authorization_request_header, nil, 201, 'Location' => '/people/1/addresses/5' + end + end + + def test_authorization_header + authorization_header = @authenticated_conn.__send__(:authorization_header) + assert_equal @authorization_request_header['Authorization'], authorization_header['Authorization'] + authorization = authorization_header["Authorization"].to_s.split + + assert_equal "Basic", authorization[0] + assert_equal ["david", "test123"], ActiveSupport::Base64.decode64(authorization[1]).split(":")[0..1] + end + + def test_authorization_header_with_username_but_no_password + @conn = ActiveResource::Connection.new("http://david:@localhost") + authorization_header = @conn.__send__(:authorization_header) + authorization = authorization_header["Authorization"].to_s.split + + assert_equal "Basic", authorization[0] + assert_equal ["david"], ActiveSupport::Base64.decode64(authorization[1]).split(":")[0..1] + end + + def test_authorization_header_with_password_but_no_username + @conn = ActiveResource::Connection.new("http://:test123@localhost") + authorization_header = @conn.__send__(:authorization_header) + authorization = authorization_header["Authorization"].to_s.split + + assert_equal "Basic", authorization[0] + assert_equal ["", "test123"], ActiveSupport::Base64.decode64(authorization[1]).split(":")[0..1] + end + + def test_authorization_header_with_decoded_credentials_from_url + @conn = ActiveResource::Connection.new("http://my%40email.com:%31%32%33@localhost") + authorization_header = @conn.__send__(:authorization_header) + authorization = authorization_header["Authorization"].to_s.split + + assert_equal "Basic", authorization[0] + assert_equal ["my@email.com", "123"], ActiveSupport::Base64.decode64(authorization[1]).split(":")[0..1] + end + + def test_authorization_header_explicitly_setting_username_and_password + @authenticated_conn = ActiveResource::Connection.new("http://@localhost") + @authenticated_conn.user = 'david' + @authenticated_conn.password = 'test123' + authorization_header = @authenticated_conn.__send__(:authorization_header) + assert_equal @authorization_request_header['Authorization'], authorization_header['Authorization'] + authorization = authorization_header["Authorization"].to_s.split + + assert_equal "Basic", authorization[0] + assert_equal ["david", "test123"], ActiveSupport::Base64.decode64(authorization[1]).split(":")[0..1] + end + + def test_authorization_header_explicitly_setting_username_but_no_password + @conn = ActiveResource::Connection.new("http://@localhost") + @conn.user = "david" + authorization_header = @conn.__send__(:authorization_header) + authorization = authorization_header["Authorization"].to_s.split + + assert_equal "Basic", authorization[0] + assert_equal ["david"], ActiveSupport::Base64.decode64(authorization[1]).split(":")[0..1] + end + + def test_authorization_header_explicitly_setting_password_but_no_username + @conn = ActiveResource::Connection.new("http://@localhost") + @conn.password = "test123" + authorization_header = @conn.__send__(:authorization_header) + authorization = authorization_header["Authorization"].to_s.split + + assert_equal "Basic", authorization[0] + assert_equal ["", "test123"], ActiveSupport::Base64.decode64(authorization[1]).split(":")[0..1] + end + + def test_get + david = @authenticated_conn.get("/people/2.xml") + assert_equal "David", david["name"] + end + + def test_post + response = @authenticated_conn.post("/people/2/addresses.xml") + assert_equal "/people/1/addresses/5", response["Location"] + end + + def test_put + response = @authenticated_conn.put("/people/2.xml") + assert_equal 204, response.code + end + + def test_delete + response = @authenticated_conn.delete("/people/2.xml") + assert_equal 200, response.code + end + + def test_raises_invalid_request_on_unauthorized_requests + assert_raise(ActiveResource::InvalidRequestError) { @conn.post("/people/2.xml") } + assert_raise(ActiveResource::InvalidRequestError) { @conn.post("/people/2/addresses.xml") } + assert_raise(ActiveResource::InvalidRequestError) { @conn.put("/people/2.xml") } + assert_raise(ActiveResource::InvalidRequestError) { @conn.delete("/people/2.xml") } + end + + protected + def assert_response_raises(klass, code) + assert_raise(klass, "Expected response code #{code} to raise #{klass}") do + @conn.__send__(:handle_response, Response.new(code)) + end + end +end |