<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:garamond,new york,times,serif;font-size:12pt">I'm wondering whether I'm wasting my time trying to verify that an addition I've made to legacy code is in fact setting a new attribute on a model.<br><br><span>Substruct's (<a target="_blank" href="http://dev.subimage.com/projects/substruct">http://dev.subimage.com/projects/substruct</a>) OrderHelper contains this method:</span><br><br>&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp; def create_order_from_post<br>&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @use_separate_shipping_address = params[:use_separate_shipping_address]<br>&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @order_user = OrderUser.find_or_create_by_email_address(<br>&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 params[:order_user][:email_address]<br>&nbsp;&nbsp;&nbsp;&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br>&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @order_user.valid?<br>&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @order = Order.new(params[:order])<br>&nbsp;&nbsp;&nbsp; 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @order.valid?<br>&nbsp;&nbsp;&nbsp; 11&nbsp; <br>&nbsp;&nbsp;&nbsp; 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Look up billing address and update if customer is logged in.<br>&nbsp;&nbsp;&nbsp; 13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if @customer<br>&nbsp;&nbsp;&nbsp; 14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @billing_address = @customer.billing_address<br>&nbsp;&nbsp;&nbsp; 15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @billing_address.attributes = params[:billing_address]<br>&nbsp;&nbsp;&nbsp; 16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @shipping_address = @customer.billing_address<br>&nbsp;&nbsp;&nbsp;
 17&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @shipping_address.attributes = params[:shipping_address]<br>&nbsp;&nbsp;&nbsp; 18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp; 19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @billing_address = OrderAddress.new(params[:billing_address])<br>&nbsp;&nbsp;&nbsp; 20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @shipping_address = OrderAddress.new(params[:shipping_address])<br>&nbsp;&nbsp;&nbsp; 21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br>&nbsp;&nbsp;&nbsp; 22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @billing_address.valid?<br>&nbsp;&nbsp;&nbsp; 23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; 24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if @use_separate_shipping_address<br>&nbsp;&nbsp;&nbsp; 25&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @shipping_address.valid?<br>&nbsp;&nbsp;&nbsp; 26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br>&nbsp;&nbsp;&nbsp; 27&nbsp; <br>&nbsp;&nbsp;&nbsp; 28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @order_account =
 OrderAccount.new(params[:order_account])<br>&nbsp;&nbsp;&nbsp; 29&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @order_account.valid?<br>&nbsp;&nbsp;&nbsp; 30&nbsp; <br>&nbsp;&nbsp;&nbsp; 31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OrderUser.transaction do<br>&nbsp;&nbsp;&nbsp; 32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @order_user.save!<br>&nbsp;&nbsp;&nbsp; 33&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Order.transaction do<br>&nbsp;&nbsp;&nbsp; 34&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @order = @order_user.orders.build(params[:order])<br>&nbsp;&nbsp;&nbsp; 35&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @order.order_number = Order.generate_order_number<br>&nbsp;&nbsp;&nbsp; 36&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @order.save!<br>&nbsp;&nbsp;&nbsp; 37&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br>&nbsp;&nbsp;&nbsp; 38&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OrderAddress.transaction do<br>&nbsp;&nbsp;&nbsp;
 39&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Addresses<br>&nbsp;&nbsp;&nbsp; 40&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @billing_address = @order_user.order_addresses.create(params[:billing_address])<br>&nbsp;&nbsp;&nbsp; 41&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @billing_address.order_id = @order.id<br>&nbsp;&nbsp;&nbsp; 42&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @billing_address.is_shipping = true<br>&nbsp;&nbsp;&nbsp; 43&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @billing_address.save!<br>&nbsp;&nbsp;&nbsp; 44&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if @use_separate_shipping_address then<br>&nbsp;&nbsp;&nbsp; 45&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @shipping_address = @order_user.order_addresses.create(params[:shipping_address])<br>&nbsp;&nbsp;&nbsp; 46&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 @shipping_address.is_shipping = true<br>&nbsp;&nbsp;&nbsp; 47&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @billing_address.is_shipping = false<br>&nbsp;&nbsp;&nbsp; 48&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @billing_address.save!<br>&nbsp;&nbsp;&nbsp; 49&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @shipping_address.order_id = @order.id<br>&nbsp;&nbsp;&nbsp; 50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @shipping_address.save!<br>&nbsp;&nbsp;&nbsp; 51&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br>&nbsp;&nbsp;&nbsp; 52&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br>&nbsp;&nbsp;&nbsp; 53&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OrderAccount.transaction do<br>&nbsp;&nbsp;&nbsp; 54&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @order_account = OrderAccount.new(params[:order_account])<br>&nbsp;&nbsp;&nbsp;
 55&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @order_account.order_id = @order.id<br>&nbsp;&nbsp;&nbsp; 56&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @order_account.order_user_id = @order_user.id<br>&nbsp;&nbsp;&nbsp; 57&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @order_account.order_address_id = @billing_address.id<br>&nbsp;&nbsp;&nbsp; 58&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @order_account.save!<br>&nbsp;&nbsp;&nbsp; 59&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br>&nbsp;&nbsp;&nbsp; 60&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br>&nbsp;&nbsp;&nbsp; 61&nbsp;&nbsp;&nbsp; end<br><br>I am adding to the OrderAddress model the concept of whether an address is a business address (as opposed to a home/residential address):<br><br>describe OrderHelper do<br>&nbsp; it 'should record the fact that the address is a business address' do<br>&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order = mock_model(
 Order, :null_object =&gt; TRUE )<br>&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order.stub!( :valid? ).and_return( TRUE )<br>&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Order.stub!( :new ).and_return( order )<br>&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order.stub!( :order_number= )<br>&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order.stub!( :save! )<br>&nbsp;&nbsp;&nbsp;&nbsp; 6&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; params[:order_user] = Hash.new<br>&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; params[:order_user][:email_address] = ''<br>&nbsp;&nbsp;&nbsp;&nbsp; 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order_user = mock_model( OrderUser )<br>&nbsp;&nbsp;&nbsp; 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order_user.stub!( :valid? ).and_return( TRUE )<br>&nbsp;&nbsp;&nbsp; 11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order_user.stub!( :save! )<br>&nbsp;&nbsp;&nbsp;
 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; orders = mock( 'orders' )<br>&nbsp;&nbsp;&nbsp; 13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; orders.stub!( :build ).and_return( order )<br>&nbsp;&nbsp;&nbsp; 14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order_user.stub!( :orders ).and_return( orders )<br>&nbsp;&nbsp;&nbsp; 15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OrderUser.stub!( :find_or_create_by_email_address ).and_return( order_user )<br>&nbsp;&nbsp;&nbsp; 16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order_user.stub!( :order_addresses ).and_return( OrderAddress )<br>&nbsp;&nbsp;&nbsp; 17&nbsp; <br>&nbsp;&nbsp;&nbsp; 18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order_address = mock_model( OrderAddress ) #, :null_object =&gt; TRUE )<br>&nbsp;&nbsp;&nbsp; 19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order_address.stub!( :valid? ).and_return( TRUE )<br>&nbsp;&nbsp;&nbsp; 20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OrderAddress.stub!( :new ).and_return( order_address )<br>&nbsp;&nbsp;&nbsp; 21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order_address.stub!(
 :order_id= )<br>&nbsp;&nbsp;&nbsp; 22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order_address.stub!( :is_shipping= )<br>&nbsp;&nbsp;&nbsp; 23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order_address.stub!( :save! )<br>&nbsp;&nbsp;&nbsp; 24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order_address.should_receive( :save )<br>&nbsp;&nbsp;&nbsp; 25&nbsp; <br>&nbsp;&nbsp;&nbsp; 26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order_account = mock_model( OrderAccount )<br>&nbsp;&nbsp;&nbsp; 27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order_account.stub!( :valid? ).and_return( TRUE )<br>&nbsp;&nbsp;&nbsp; 28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order_account.stub!( :order_id= )<br>&nbsp;&nbsp;&nbsp; 29&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order_account.stub!( :order_user_id= )<br>&nbsp;&nbsp;&nbsp; 30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order_account.stub!( :order_address_id= )<br>&nbsp;&nbsp;&nbsp; 31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order_account.stub!( :save! )<br>&nbsp;&nbsp;&nbsp; 32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OrderAccount.stub!( :new
 ).and_return( order_account )<br>&nbsp;&nbsp;&nbsp; 33&nbsp; <br>&nbsp;&nbsp;&nbsp; 34&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; assigns[:use_separate_shipping_address] = FALSE<br>&nbsp;&nbsp;&nbsp; 35&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; params[:is_business_address] = TRUE<br>&nbsp;&nbsp;&nbsp; 36&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; create_order_from_post<br>&nbsp;&nbsp;&nbsp; 37<br>&nbsp;&nbsp;&nbsp; 38 &nbsp;&nbsp;&nbsp;&nbsp; assigns[:billing_address].is_business_address.should be_true<br>&nbsp; end<br>end<br><br>What I am trying to demonstrate to myself is that the addition of a boolean "is_business_address" column to the order_addresses table via a migration allows line 40 of the create_order_from_post method to set this property when an OrderAddress instance is created.&nbsp; But my example as shown tells me that assigns[:billing_address] is nil when I run it.&nbsp; Also, I realize that line 16 of the example isn't returning the right thing; it should be an
 AssociationCollection of OrderAddress.&nbsp; That's where I'm starting to wonder if I'm spending too much time on something that is probably simple enough that it's already working but disproportionately hard to write an RSpec example for (because the existing create_order_from_post method has no tests or examples and thus isn't easy to test -- witness the 32 lines, modulo blank lines, of stubbing just to get the example to run).<br><br>Suggestions on how to write the example, or advice on whether to continue to try, are requested.<br><br><br>Al</div><br>
      <hr size=1>Get easy, one-click access to your favorites. 
<a href="http://us.rd.yahoo.com/evt=51443/*http://www.yahoo.com/r/hs"> Make Yahoo! your homepage.</a>

</body></html>