btw, to answer the same question for member actions (such as show),
you can stub or assert the association proxy class
@article = current_user.articles.find(params[:id])
then,
it "should find article scoped by current_user" do
article = mock_model(Article)
current_user.should_receive(:articles).and_return(Article)
Article.should_receive(:find).and_return(article)
get :show, :id => article.id
end
this will ensure that your controller is not calling Article.find
unscoped
linoj
On Dec 3, 2007, at 5:44 AM, Daniel N wrote:
Assuming that there is a call like this in your controller
@articles = current_user.articles
One way to do this is to stub out the controller.current_user to
return a mock object of the current_user
Then put an expectation on the current user that it's articles
method gets called. (return a mocked collection of articles)
Then check that @articles is set to the returned mocked collection
of articles from current_user.articles
phew...
Ok So one way you might write this could be (This is untested...)
it "should scope the articles to the currrent_user" do
user = mock_model(User)
articles = [mock_model(Article)]
controller.stub!(:current_user).and_return(user)
user.should_receive (:articles).and_return(articles)
get :index
assigns[:articles].should == articles
end
Like I said though, that's not tested itself. If that's not
exactly right... it's along the right track of an option that can
work.
HTH
Daniel
On Dec 3, 2007 9:07 PM, Stefan Magnus Landrø
<[EMAIL PROTECTED]> wrote:
Typically, I'd write a method in your user model that returns the
user's articles:
class User do
def find_articles_for_user
Article.find(:all, :conditions => ['userid = ?', id)
end
end
Then you'd use a mock in your controller spec, and make sure you
test that your method is being called.
On the other hand, the user model should be tested directly against
the db.
HTH,
Stefan
2007/12/3, Fischer, Daniel <[EMAIL PROTECTED]>:
Let's say you're using the restful_authentication plugin.
You have a model called articles. On the index action of the
articlescontroller you simply want to spec out that it'll scope the
results to the ownership of the current_user.
It should NOT include any articles other than the articles that
user owns.
How would you properly spec this out?
Thanks for the help!
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users
--
Bekk Open Source
http://boss.bekk.no
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users