Last active
August 29, 2015 14:19
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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