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.
Substruct's (http://dev.subimage.com/projects/substruct) OrderHelper contains
this method:
1 def create_order_from_post
2 @use_separate_shipping_address =
params[:use_separate_shipping_address]
3
4 @order_user = OrderUser.find_or_create_by_email_address(
5 params[:order_user][:email_address]
6 )
7 @order_user.valid?
8
9 @order = Order.new(params[:order])
10 @order.valid?
11
12 # Look up billing address and update if customer is logged in.
13 if @customer
14 @billing_address = @customer.billing_address
15 @billing_address.attributes = params[:billing_address]
16 @shipping_address = @customer.billing_address
17 @shipping_address.attributes = params[:shipping_address]
18 else
19 @billing_address = OrderAddress.new(params[:billing_address])
20 @shipping_address = OrderAddress.new(params[:shipping_address])
21 end
22 @billing_address.valid?
23
24 if @use_separate_shipping_address
25 @shipping_address.valid?
26 end
27
28 @order_account = OrderAccount.new(params[:order_account])
29 @order_account.valid?
30
31 OrderUser.transaction do
32 @order_user.save!
33 Order.transaction do
34 @order = @order_user.orders.build(params[:order])
35 @order.order_number = Order.generate_order_number
36 @order.save!
37 end
38 OrderAddress.transaction do
39 # Addresses
40 @billing_address =
@order_user.order_addresses.create(params[:billing_address])
41 @billing_address.order_id = @order.id
42 @billing_address.is_shipping = true
43 @billing_address.save!
44 if @use_separate_shipping_address then
45 @shipping_address =
@order_user.order_addresses.create(params[:shipping_address])
46 @shipping_address.is_shipping = true
47 @billing_address.is_shipping = false
48 @billing_address.save!
49 @shipping_address.order_id = @order.id
50 @shipping_address.save!
51 end
52 end
53 OrderAccount.transaction do
54 @order_account = OrderAccount.new(params[:order_account])
55 @order_account.order_id = @order.id
56 @order_account.order_user_id = @order_user.id
57 @order_account.order_address_id = @billing_address.id
58 @order_account.save!
59 end
60 end
61 end
I am adding to the OrderAddress model the concept of whether an address is a
business address (as opposed to a home/residential address):
describe OrderHelper do
it 'should record the fact that the address is a business address' do
1 order = mock_model( Order, :null_object => TRUE )
2 order.stub!( :valid? ).and_return( TRUE )
3 Order.stub!( :new ).and_return( order )
4 order.stub!( :order_number= )
5 order.stub!( :save! )
6
7 params[:order_user] = Hash.new
8 params[:order_user][:email_address] = ''
9 order_user = mock_model( OrderUser )
10 order_user.stub!( :valid? ).and_return( TRUE )
11 order_user.stub!( :save! )
12 orders = mock( 'orders' )
13 orders.stub!( :build ).and_return( order )
14 order_user.stub!( :orders ).and_return( orders )
15 OrderUser.stub!( :find_or_create_by_email_address ).and_return(
order_user )
16 order_user.stub!( :order_addresses ).and_return( OrderAddress )
17
18 order_address = mock_model( OrderAddress ) #, :null_object => TRUE )
19 order_address.stub!( :valid? ).and_return( TRUE )
20 OrderAddress.stub!( :new ).and_return( order_address )
21 order_address.stub!( :order_id= )
22 order_address.stub!( :is_shipping= )
23 order_address.stub!( :save! )
24 order_address.should_receive( :save )
25
26 order_account = mock_model( OrderAccount )
27 order_account.stub!( :valid? ).and_return( TRUE )
28 order_account.stub!( :order_id= )
29 order_account.stub!( :order_user_id= )
30 order_account.stub!( :order_address_id= )
31 order_account.stub!( :save! )
32 OrderAccount.stub!( :new ).and_return( order_account )
33
34 assigns[:use_separate_shipping_address] = FALSE
35 params[:is_business_address] = TRUE
36 create_order_from_post
37
38 assigns[:billing_address].is_business_address.should be_true
end
end
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. But my example as shown tells me that
assigns[:billing_address] is nil when I run it. Also, I realize that line 16
of the example isn't returning the right thing; it should be an
AssociationCollection of OrderAddress. 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).
Suggestions on how to write the example, or advice on whether to continue to
try, are requested.
Al
____________________________________________________________________________________
Never miss a thing. Make Yahoo your home page.
http://www.yahoo.com/r/hs_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users