-
-
Save mattconnolly/4158961 to your computer and use it in GitHub Desktop.
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 |
The Rack::Test authorize method didn't work for me (method not found), but this gist absolutely did the trick - thanks!
works great, thanks
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
Have you seen the
basic_authorize
method that is built into of Rack::Test?:https://github.com/brynary/rack-test/blob/1b1e730866/lib/rack/test.rb#L142-L152