Hej,
zastanawiam się jak w sposób najbardziej elegancki sprawdzić w kontrollerze że użytkownik dostaje tylko własne rekordy:
[code=ruby]def index
current_user.orders
end
def show
current_user.orders.find(params[:id])
end[/code]
Jak napisać do tego zwięzłe testy, czy poprostu trzeba zacisnąć zęby i wstawiać shared examples do każdego kontekstu? Jak taki kod kod u was wygląda?
Na razie sprawdzam takie rzeczy w klasach logiki biznesowej, ale wolał bym ustawiać te rekorty w kontrollerach, a też robienie dodatkowej klasy typu OrderFetcher, OrdersFetcher jest dla mnie trochę uciążliwe…
Można użyć can cana i jego load_and_authorize_resource, ale na dłuższą metę mnie on wkurza. Trzeba rozważyć, gdzie opłaca się go wykorzystać, a gdzie to po prostu nie ma sensu.
Możesz spróbować wyjąć to do metody i wtedy testujesz tylko metodę na kontrolerze:
[code]def index
orders
end
def show
orders.find(params[:id])
end
private
def orders
current_user.orders
end[/code]
Ja często takie rzeczy i tak testuję używając rack::test albo pdobnego rozwiązania, bo wypływające dane są większym problemem niż wolne testy. No i tak jak już pisałem ostatnio, testy integracyjne można puścić jako część CI a u siebie puszczać tylko unitowe.