Created
November 28, 2012 04:04
-
-
Save mattconnolly/4158961 to your computer and use it in GitHub Desktop.
RSpec basic authentication helper module for request and controller 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 | |
def http_login | |
user = 'username' | |
pw = 'password' | |
request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials(user,pw) | |
end | |
end | |
module AuthRequestHelper | |
# | |
# pass the @env along with your request, eg: | |
# | |
# GET '/labels', {}, @env | |
# | |
def http_login | |
@env ||= {} | |
user = 'username' | |
pw = 'password' | |
@env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials(user,pw) | |
end | |
end | |
# then in Rspec support: | |
RSpec.configure do |config| | |
config.include AuthRequestHelper, :type => :request | |
config.include AuthHelper, :type => :controller | |
end | |
# request specs need to explicitly pass the @env parameter along, eg: | |
describe "some request" do | |
http_login # or put this in a before :all | |
GET '/path', {}, @env | |
end |
Wish there was a way to +1 this - helped me a lot, thanks!
If you're using the force_ssl option in your application you might consider setting the https header in these methods
request.env['HTTPS'] = 'on'
@env['HTTPS'] = 'on'
Great help this. thanks!
I've modified this to create a slightly more convenient solution:
https://gist.github.com/lehresman/794f261708c82962763f
Great job man! Thanks!
thanks for the examples! 👍
If you're writing an integration test / request spec, just use https!
:
it 'should not allow access' do
https!
get '/data/properties'
expect(response.body).to eq( {'error' => 'Unauthorized'}.to_json )
end
Working with request specs with rspec-rails 3.x (3.7.2 in my case), you can pass the auth in the headers:
get '/path', headers: { 'HTTP_AUTHORIZATION' => ActionController::HttpAuthentication::Basic.encode_credentials(username, password) }
Thanks @mattconnolly, and thanks @fwilkens for update.
This modification worked for me
module AuthHelper
def http_login
username = 'username'
password = 'password'
request.headers['AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials(username,password)
end
end
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
works great, thanks