2008-12-19 4 views
6

Estoy intentando escribir un escenario de Pepino que requiere que tenga un usuario conectado; eso sería bastante simple pero solo estoy usando Autenticación OpenID (curtosy del plugin de autenticación). Sin embargo, después de excavar las agallas de los complementos de open_id_authentication, no estoy seguro de cómo lograrlo dentro de Cucumber.¿Cómo falsifico el inicio de sesión de OpenID en la historia del usuario de RSpec?/Cucumber cuando uso el complemento open_id_authentication

Respuesta

4

que he descubierto una manera, si coloca esto en su características/soporte/env.rb:

ActionController::Base.class_eval do 
    private 

    def begin_open_id_authentication(identity_url, options = {}) 
    yield OpenIdAuthentication::Result.new(:successful), identity_url, nil 
    end 
end 

continuación, sólo puede hacer algo como esto en su paso apropiado:

Given /^I am logged in as "(.*)"$/ do |name| 
    user = User.find_by_name(user) 
    post '/session', :openid_url => user.identity_url 
    # Some assertions just to make sure our hack in env.rb is still working 
    response.should redirect_to('/') 
    flash[:notice].should eql('Logged in successfully') 
end 

Estoy acabando completamente con la autenticación de identificación abierta para las funciones de pepino, obviamente, si necesito instancias en las que haya un inicio de sesión fallido, podría hacerlo en función de la identidad identificada.

0

respuesta de Defusion funciona excepto que necesitaba para normalizar la identity_url como:

ActionController::Base.class_eval do 

    private 

     def begin_open_id_authentication(identity_url, options = {}) 
      yield OpenIdAuthentication::Result.new(:successful), self.normalize_identifier(identity_url), nil 
     end 
end 

Gracias

2

Bort, una aplicación de esqueleto carriles, tiene un conjunto completo de pruebas rspec y soporta entrada openID por lo que puede Quiero echar un vistazo y ver lo que hacen.

2

Si usted quiere ser capaz de apagar las respuestas de hacer esto:

En funciones/soporte/helpers.rb:

ActionController::Base.class_eval do 

    private 
    def fake_openid_response(identity_url) 
     [OpenIdAuthentication::Result.new(:successful), identity_url, nil] 
    end 

    def begin_open_id_authentication(identity_url, options = {}) 
     yield fake_openid_response(identity_url) 
    end 
end 

Moviendo la respuesta a un método separado ahora se puede stub la respuesta en tus pasos si es necesario. Por ejemplo, si quisiera una: falta respuesta y tenía un controlador GoogleLoginController, podría hacer lo siguiente con Mocha:

GoogleLoginController.any_instance.stubs(:fake_openid_response) 
    .returns([OpenIdAuthentication::Result.new(:missing), identity_url, nil]) 
Cuestiones relacionadas