The summary is that I've code that works when manually testing, but isn't doing what I would think it should when trying to build an automated test. Here are the details: I've two models: Payment and PaymentTranscation.
class Payment ...
has_many :transactions, :class_name => 'PaymentTransaction'
class PaymentTranscation ...
belongs_to payment
The PaymentTransaction is only created in a Payment model method, like so:
def pay_up
...
transactions.create!(params...)
...
end
I've manually tested this code, inspected the database, and everything works well. The failing automated test looks like this:
def test_pay_up
purchase = Payment.new(...)
assert purchase.save
assert_equal purchase.state, :initialized.to_s
assert purchase.pay_up # this should create a new PaymentTransaction...
assert_equal purchase.state, :succeeded.to_s
assert_equal purchase.transactions.count, 1 # FAILS HERE; transactions is an empty array
end
If I step through the code, it's clear that the PaymentTransaction is getting created correctly (though I can't see it in the database because everything is in a testing transaction). What I can't figure out is why transactions is returning an empty array in the test when I know a valid PaymentTransaction is getting created. Anybody have some suggestions?
Thanks in advance,
east