Skip to content

Instantly share code, notes, and snippets.

@Jamedjo
Last active August 29, 2015 14:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Jamedjo/ac7be8e499f82dec23b7 to your computer and use it in GitHub Desktop.
Save Jamedjo/ac7be8e499f82dec23b7 to your computer and use it in GitHub Desktop.
Rspec helper for http basic auth which works across feature, controller and request specs.
module AuthHelper
module Feature
def basic_auth(login, password)
if page.driver.respond_to?(:basic_auth)
page.driver.basic_auth(login, password)
elsif page.driver.respond_to?(:basic_authorize)
page.driver.basic_authorize(login, password)
elsif page.driver.respond_to?(:browser) && page.driver.browser.respond_to?(:basic_authorize)
page.driver.browser.basic_authorize(login, password)
else
raise "Unknown auth method for #{page.driver}"
end
end
end
module PrivateHelpers
def add_auth(env, login, password)
env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials(login, password)
end
end
module Controller
include PrivateHelpers
def basic_auth(login, password)
add_auth(request.env, login, password)
end
end
module RequestEnvHelper
%i{delete delete_via_redirect get get_via_redirect head post post_via_redirect put put_via_redirect}.each do |method|
define_method(method) do |path, parameters=nil, headers=nil|
super(path, parameters, merge_env(headers))
end
end
%i{request_via_redirect xml_http_request xhr}.each do |method|
define_method(method) do |request_method, path, parameters=nil, headers=nil|
super(request_method, path, parameters, merge_env(headers))
end
end
def env
@env ||= {}
end
private
def merge_env(headers)
(headers || {}).merge(env)
end
end
module Request
include PrivateHelpers
include RequestEnvHelper
def basic_auth(login, password)
add_auth(env, login, password)
end
end
end
RSpec.configure do |config|
config.include AuthHelper::Feature, :type => :feature
config.include AuthHelper::Controller, :type => :controller
config.include AuthHelper::Request, :type => :request
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment