Forum: Rails-ES Problemas con test funcional

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Héctor (Guest)
on 2007-05-06 16:18
Hola a todos,

Tengo un filtro para una autenticación básica, la del Agile, que
redirige en caso de que no envíen el id del usuario como variable de
sesión. Este es:

  def authorize
    @p=Person.find_by_id(session[:person_id])
    unless @p
      flash[:notice] = "Please log in"
      redirect_to(:controller => "login" , :action => "login" )
    end
  end

El problema es que en el test funcional me redirige aún cuando le paso
la variable adecuadamente (¿no?):

    p = Person.find(:first)
    assert p!=nil
    get :index, {}, { :person_id => p.id }
    assert_response :success

El primer assert confirma que p existe, pero aún así el assert_response
falla porque redirige. Da el siguiente error:

  1) Failure:
test_index_with_user(HomeControllerTest)
    [/usr/lib/ruby/gems/1.8/gems/actionpack-1.13.2/lib/action_controller/assertions/response_assertions.rb:26:in
`assert_response'
     /usr/lib/ruby/gems/1.8/gems/actionpack-1.13.2/lib/action_controller/assertions/response_assertions.rb:18:in
`assert_response'
     test/functional/home_controller_test.rb:27:in
`test_index_with_user']:
Expected response to be a <:success>, but was <302>


Y en log/test.log aparece:

Processing HomeController#index (for 0.0.0.0 at 2007-05-06 14:13:15)
[GET]
  Session ID:
  Parameters: {"action"=>"index", "controller"=>"home"}
  Person Load (0.000317)   SELECT * FROM people WHERE (people.`id` IS
NULL) LIMIT 1
Redirected to http://test.host/login/login

¿Alguna idea? Gracias.
Daniel R. Troitiño (Guest)
on 2007-05-06 20:03
(Received via mailing list)
On 5/6/07, Héctor <removed_email_address@domain.invalid> wrote:
>       flash[:notice] = "Please log in"
>     assert_response :success
>      test/functional/home_controller_test.rb:27:in
>   Person Load (0.000317)   SELECT * FROM people WHERE (people.`id` IS
> NULL) LIMIT 1
> Redirected to http://test.host/login/login
>
> ¿Alguna idea? Gracias.
>

El tercer parámetro de get son los headers, no los valores de la
sesión. Para meter datos en la sesión deberías utilizar una línea como

@request.session[:person_id] = p.id

antes de utilizar get.
Héctor (Guest)
on 2007-05-07 22:44
Gracias por tu respuesta Daniel.

Me sigue dando el mismo error. ¿Cómo podría asegurarme que envío los
datos de la sesión?

@request.session[:person_id] = p.id
assert @request.session[:person_id]==p.id
get :index, {}, { :person_id => p.id } # ó get :index, {}, {} ; el
resultado es el mismo
assert_response :success
Daniel R. Troitiño (Guest)
on 2007-05-07 23:22
(Received via mailing list)
On 5/7/07, Héctor <removed_email_address@domain.invalid> wrote:
> Gracias por tu respuesta Daniel.
>
> Me sigue dando el mismo error. ¿Cómo podría asegurarme que envío los
> datos de la sesión?
>
> @request.session[:person_id] = p.id
> assert @request.session[:person_id]==p.id
> get :index, {}, { :person_id => p.id } # ó get :index, {}, {} ; el
> resultado es el mismo
> assert_response :success
>

Prueba poniendo en tu controlador antes de la línea del find:

log.debug session.inspect

Y mira el test.log a ver que aparece. Debería aparecer el valor de
:person_id, si no aparece... pues no tengo más idea de lo que puede
ser.
Héctor (Guest)
on 2007-05-08 00:16
log.debug session.inspect
no me iba; he tenido que poner:
logger.debug session.inspect

Definitivamente no guarda el valor en la sesión. En log/test.log
aparece:

#<ActionController::TestSession:0xb755a55c @attributes={"flash"=>{}},
@session_id="", @saved_attributes=nil>

Bueno, ya miraré (dejo de testear por ahora ;) De todas formas, gracias
por tu ayuda.

Saludos,

Héctor.
This topic is locked and can not be replied to.