Skip to content

Commit

Permalink
Add support for Basic Auth
Browse files Browse the repository at this point in the history
  • Loading branch information
aslakhellesoy committed Oct 17, 2008
1 parent e2c70b8 commit 17cf56e
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 10 deletions.
1 change: 1 addition & 0 deletions History.txt
Expand Up @@ -2,6 +2,7 @@

* Major enhancements

* Added #basic_auth(user, pass) to support HTTP Basic Auth (Aslak Hellesøy)
* Added support for Sinatra and Rack (Aslak Hellesøy)
* Added #within for manipulating the current page within a selector scope
* Add support for simulating SSL requests (Luke Melia)
Expand Down
26 changes: 19 additions & 7 deletions lib/webrat/core/session.rb
Expand Up @@ -10,8 +10,9 @@ class Session
attr_reader :current_url

def initialize
@http_method = :get
@data = {}
@http_method = :get
@data = {}
@default_headers = {}
end

# Saves the page out to RAILS_ROOT/tmp/ and opens it in the default
Expand Down Expand Up @@ -52,14 +53,25 @@ def saved_page_dir
File.expand_path(".")
end

def basic_auth(user, pass)
@default_headers['HTTP_AUTHORIZATION'] = "Basic " + ["#{user}:#{pass}"].pack("m*")
end

def headers
@default_headers.dup
end

def request_page(url, http_method, data)
debug_log "REQUESTING PAGE: #{http_method.to_s.upcase} #{url} with #{data.inspect}"
if @current_url
send "#{http_method}", url, data || {}, {"HTTP_REFERER" => @current_url}
else
h = headers
h['HTTP_REFERER'] = @current_url if @current_url

debug_log "REQUESTING PAGE: #{http_method.to_s.upcase} #{url} with #{data.inspect} and HTTP headers #{h.inspect}"
if h.empty?
send "#{http_method}", url, data || {}
else
send "#{http_method}", url, data || {}, h
end

save_and_open_page if exception_caught?
flunk("Page load was not successful (Code: #{response_code.inspect})") unless success_code?

Expand Down
7 changes: 4 additions & 3 deletions lib/webrat/sinatra/sinatra_session.rb
Expand Up @@ -7,9 +7,10 @@ class SinatraSession < RackSession
include Sinatra::Test::Methods

%w(get head post put delete).each do |verb|
define_method(verb) do |*args|
url, data, headers = *args
self.__send__("#{verb}_it", url, data)
define_method(verb) do |*args| # (path, data, headers = nil)
path, data, headers = *args
params = data.merge({:env => headers || {}})
self.__send__("#{verb}_it", path, params)
follow! while @response.redirect?
end
end
Expand Down
23 changes: 23 additions & 0 deletions spec/api/basic_auth_spec.rb
@@ -0,0 +1,23 @@
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")

describe "Basic Auth HTTP headers" do
before do
@session = Webrat::TestSession.new
@session.basic_auth('user', 'secret')
end

it "should be present in visits" do
@session.should_receive(:get).with("/", {}, {'HTTP_AUTHORIZATION' => "Basic dXNlcjpzZWNyZXQ=\n"})
@session.visits("/")
end

it "should be present in form submits" do
@session.response_body = <<-EOS
<form method="post" action="/form1">
<input type="submit" />
</form>
EOS
@session.should_receive(:post).with("/form1", {}, {'HTTP_AUTHORIZATION' => "Basic dXNlcjpzZWNyZXQ=\n"})
@session.clicks_button
end
end

0 comments on commit 17cf56e

Please sign in to comment.