Mam problem ze zrobieniem testów funkcjonalnych dla kontrolera, w którym są dwa zbiory metod: dla zalogowanych i dla niezalogowanych. Do tego wszystkiego korzystam z authlogic i nijak nie idzie mi przetestowanie. Nie wiem co robię źle, możliwe, że coś przeoczyłem.
ApplicationController
[code]class ApplicationController < ActionController::Base
…
helper_method :current_user_session, :current_user
before_filter :require_user
private
def current_user_session
return @current_user_session if defined?(@current_user_session)
@current_user_session = UserSession.find
end
def current_user
return @current_user if defined?(@current_user)
@current_user = current_user_session && current_user_session.user
end
def require_user
unless current_user
store_location
redirect_to root_url
return false
end
end
def require_no_user
if current_user
store_location
redirect_to account_url
return false
end
end
def store_location
session[:return_to] = request.request_uri
end
def redirect_back_or_default(default)
redirect_to(session[:return_to] || default)
session[:return_to] = nil
end
end[/code]
UsersController
[code]class UsersController < ApplicationController
before_filter :require_no_user, :only => [:new, :create]
skip_before_filter :require_user, :only => [:new, :create]
def new
# …
end
def create
# …
end
def show
# …
end
def edit
# …
end
def update
# …
end[/code]
User
class User < ActiveRecord::Base
acts_as_authentic
Teraz muszę sprawdzić, czy: rejestrować (new, create) mogą się tylko niezalogowani oraz czy edytować dane(edit), aktualizować(update) i pokazywać jakieś informacje(show) - zalogowani. Za kontrolę dostępu do metod odpowiada before_filter :request(_no)_user.
Mam takie testy - pierwszy nie przekierowuje.
[code]require ‘test_helper’
class UsersControllerTest < ActionController::TestCase
fixtures :users
def setup
Authlogic::Session::Base.controller = Authlogic::ControllerAdapters::RailsAdapter.new(self)
end
nie powinen przejsc do strony “new” ponieważ jest zalogowany, powinen przekierować na account_url - nie przechodzi testu
test “shouldn’t get new” do
UserSession.create(users(:user10).to_param)
get :new
assert_redirected_to account_url
end
end[/code]
Test zwraca 200, zamiast przekierować. Nie wiem jak zalogować użytkownika w teście, czy jest coś takiego jak login_as [tu_obiekt] w authlogic?
Szukałem w sieci i znalazłem, że authlogic trzeba aktywować do testów (w setup jest ta aktywacja), ale nic więcej.