<br><br><div><span class="gmail_quote">On 1/24/07, <b class="gmail_sendername">aslak hellesoy</b> &lt;<a href="mailto:aslak.hellesoy@gmail.com">aslak.hellesoy@gmail.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
On 1/24/07, Pat Maddox &lt;<a href="mailto:pergesu@gmail.com">pergesu@gmail.com</a>&gt; wrote:<br>&gt; Here are the specs:<br>&gt; context &quot;Finding all the stylesheets available to a company&quot; do<br>&gt;&nbsp;&nbsp; setup do
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; @mock_company = mock(&quot;company&quot;)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; @mock_company.stub!(:to_param).and_return &quot;1&quot;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; Stylesheet.stub!(:find)<br>&gt;&nbsp;&nbsp; end<br>&gt;<br>&gt;&nbsp;&nbsp; def do_find<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; Stylesheet.find_available_to
 @mock_company<br>&gt;&nbsp;&nbsp; end<br>&gt;<br>&gt;&nbsp;&nbsp; specify &quot;should convert the company into a parameter&quot; do<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; @mock_company.should_receive(:to_param).and_return &quot;1&quot;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; do_find<br>&gt;&nbsp;&nbsp; end
<br>&gt;<br>&gt;&nbsp;&nbsp; specify &quot;should find stylesheets belonging to only the company or to<br>&gt; nobody&quot; do<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; Stylesheet.should_receive(:find).with(:all, :conditions =&gt;<br>&gt; [&quot;company_id IS NULL OR company_id=?&quot;, &quot;1&quot;])
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; do_find<br>&gt;&nbsp;&nbsp; end<br>&gt; end<br>&gt;<br>&gt; And here&#39;s the code:<br>&gt; class Stylesheet &lt; ActiveRecord::Base<br>&gt;&nbsp;&nbsp; def self.find_available_to(company)<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; find :all, :conditions =&gt; [&quot;company_id IS NULL OR company_id=?&quot;,
<br>&gt; company.to_param]<br>&gt;&nbsp;&nbsp; end<br>&gt; end<br>&gt;<br>&gt; You can see that the implementation is duplicated.&nbsp;&nbsp;In fact, I wrote<br>&gt; the implementation in the spec and then basically just copied it over.<br>&gt;
<br>&gt; That bugs me.<br>&gt;<br>&gt; The obvious way to fix it would be to create a couple stylesheet<br>&gt; entries in the database, run the query, and see if it matches the<br>&gt; expected results.<br>&gt;<br>&gt; The only benefit of the current approach (that I can see) is that the
<br>&gt; behavior is explicit.&nbsp;&nbsp;If you&#39;ve just got the results, you have to<br>&gt; mentally link them to the query.<br>&gt;<br>&gt; Anyway I&#39;m just sort of stuck on this one.&nbsp;&nbsp;I think there&#39;s a much<br>&gt; better way that is evading me.
<br>&gt;<br><br>I wouldn&#39;t use mocks for model specs. I&#39;d test it against the real database.<br><br>Aslak</blockquote><div><br>In addition to actually finding real records from the database for the Stylesheet model (don&#39;t stub find), I would also suggest that to_param is not the right method to use in this case. You&#39;re stating that company_id should equal the url formatted string for a company (which it is typical to overload to handle things like 10-name_of_company). Clearly your database naming says 
<a href="http://company.id">company.id</a> so it&#39;s safer to just use <a href="http://company.id">company.id</a>.<br><br>-Martin<br></div><br></div><br>