<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">
<div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Hi Daniel,</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">You're trying to do too much in the controller. It's not the controller's responsibility to ensure that the user is capable of returning its own article without including anyone else's - that's the user's (or the Article model's, perhaps) responsibility. Your controller should be thin and simple, delegating all business logic onto the model objects. See this article: <a href="http://www.pragprog.com/articles/tell-dont-ask">http://www.pragprog.com/articles/tell-dont-ask</a></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Once thinned down like this, speccing the controller becomes trivial - just mock the current_user method and ensure that it receives a call to "available_articles" or whatever the method name is. Then, spec that method in the User model. At that point, don't mock anything you don't have to, and test the behaviour of the User model (e.g. "it should not return anyone else's article within its available articles" or something like that).</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Hope this helps,</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Daniel</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><br class="webkit-block-placeholder"></div><div><div>On 3 Dec 2007, at 10:33 3 Dec 2007, Fischer, Daniel wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">yuck, that seems kind of nasty, no?<div><br class="webkit-block-placeholder"></div><div>user.articles is already scoped...</div><div><br class="webkit-block-placeholder"></div><div>There has to be a different solution!<br> <br><div class="gmail_quote">On Dec 3, 2007 2:07 AM, Stefan Magnus Landrø <<a href="mailto:stefan.landro@gmail.com">stefan.landro@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"> Typically, I'd write a method in your user model that returns the user's articles:<br><br>class User do<br><br> def find_articles_for_user<br> Article.find(:all, :conditions => ['userid = ?', id)<br> end <br><br>end<br><br>Then you'd use a mock in your controller spec, and make sure you test that your method is being called.<br><br>On the other hand, the user model should be tested directly against the db.<br><br>HTH, <br><br>Stefan<br><br><div><span class="gmail_quote">2007/12/3, Fischer, Daniel <<a href="mailto:daniel@helpmebuyacar.org" target="_blank">daniel@helpmebuyacar.org</a>>:</span><blockquote class="gmail_quote" style="border-left:1px solid rgb(204, 204, 204);margin:0pt 0pt 0pt 0.8ex;padding-left:1ex"> <div><div></div><div class="Wj3C7c"> Let's say you're using the restful_authentication plugin.<div><br></div><div>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. </div><div><br></div><div>It should NOT include any articles other than the articles that user owns.</div><div><br></div><div>How would you properly spec this out? </div><div><br></div><div>Thanks for the help!</div></div></div> <br>_______________________________________________<br>rspec-users mailing list<br><a href="mailto:rspec-users@rubyforge.org" target="_blank">rspec-users@rubyforge.org</a><br><a href="http://rubyforge.org/mailman/listinfo/rspec-users" target="_blank"> http://rubyforge.org/mailman/listinfo/rspec-users</a><br></blockquote></div><font color="#888888"><br><br clear="all"><br>-- <br>Bekk Open Source<br><a href="http://boss.bekk.no" target="_blank">http://boss.bekk.no</a> </font><br>_______________________________________________<br>rspec-users mailing list<br><a href="mailto:rspec-users@rubyforge.org">rspec-users@rubyforge.org</a><br><a href="http://rubyforge.org/mailman/listinfo/rspec-users" target="_blank"> http://rubyforge.org/mailman/listinfo/rspec-users</a><br></blockquote></div><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">_______________________________________________</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">rspec-users mailing list</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><a href="mailto:rspec-users@rubyforge.org">rspec-users@rubyforge.org</a></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><a href="http://rubyforge.org/mailman/listinfo/rspec-users">http://rubyforge.org/mailman/listinfo/rspec-users</a></div> </blockquote></div><br></body></html>