3

J'essaie d'obtenir une signature de test en utilisant l'authentification de base. J'ai essayé quelques approches. Voir le code ci-dessous pour une liste des tentatives infructueuses et du code. Y at-il quelque chose d'évident que je fais mal. MerciTest d'intégration Rails API avec authentification de base

class ClientApiTest < ActionController::IntegrationTest 
    fixtures :all 

    test "adding an entry" do 

    # No access to @request 
    #@request.env["HTTP_AUTHORIZATION"] = "Basic " + Base64::encode64("[email protected]:qwerty123") 

    # Not sure why this didn't work 
    #session["warden.user.user.key"] = [User, 1] 

    # This didn't work either 
    # url = URI.parse("http://localhost.co.uk/diary/people/1/entries.xml") 
    # req = Net::HTTP::Post.new(url.path) 
    # req.basic_auth '[email protected]', 'qwerty123' 

    post "/diary/people/1/entries.xml", {:diary_entry => { 
               :drink_product_id => 4, 
               :drink_amount_id => 1, 
               :quantity => 3 
              }, 
             } 
    puts response.body 
    assert_response 200 
    end 
end 
+0

Je La réponse de sse est correcte. Vous devriez marquer que la réponse est correcte. –

Répondre

6

Il semble que vous pourriez exécuter rails3 - Rails3 commuté sur rack :: test pour la syntaxe est différente. Vous passez dans un hachage d'environnement pour définir vos variables de requête comme des en-têtes.

Essayez quelque chose comme:

path = "/diary/people/1/entries.xml" 
params = {:diary_entry => { 
    :drink_product_id => 4, 
    :drink_amount_id => 1, 
    :quantity => 3} 

env=Hash.new 
env["CONTENT_TYPE"] = "application/json" 
env["ACCEPT"] = "application/json" 
env["HTTP_AUTHORIZATION"] = "Basic " + Base64::encode64("[email protected]:qwerty123") 

get(end_point, params, env) 

Cela pourrait fonctionner aussi, mais il pourrait être une sinatra seule chose:

get '/protected', {}, {'HTTP_AUTHORIZATION' => encode_credentials('go', 'away')} 

Sinatra test credit

+0

Comment le ferions-nous pour une authentification Digest pour Rails3? –

4

Cela fonctionne pour moi dans Rails 3

@request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials('username', 'password') 
get :index 
+1

Cela ne fonctionne pas dans les tests d'intégration car '@ request' n'est pas disponible (mentionné dans la question d'origine). – jstr