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

Reply via email to