I've got a model Message, which needs to send an email using action
mailer after it's first saved in the database.

I want to pass the model to the mailer which then uses methods on the
message model to render the email.

So the natural way to do this is in an after_create callback on the
Message model.

But I can't see an easy way to test this. Here's my spec

describe Message, "from anyone" do

  it "should be sent on save" do
    msg_creation_parms = {
      :subject => "Subj",
      :body => "hi",
      :sender => people(:rick),
      :recipient => people(:john)
      }
    
SantasMailbox.should_receive(:deliver_secret_santa).with(Message.new(msg_creation_parms))
    Message.create(msg_creation_parms)
  end

end

This fails, but only because the model object has an id and time
stamps assigned as it's saved.

Spec::Mocks::MockExpectationError in 'Message from anyone should be
sent on save'
Mock 'Class' expected :deliver_secret_santa with (#<Message id: nil,
subject: "Subj", body: "hi", sender_id: 343839476, recipient_id:
21341157, message_type: nil, created_at: nil, updated_at: nil>) but
received it with (#<Message id: 1, subject: "Subj", body: "hi",
sender_id: 343839476, recipient_id: 21341157, message_type: nil,
created_at: "2007-12-12 21:53:16", updated_at: "2007-12-12 21:53:16">)

I figured I'd through this out to the list for ideas on how best to
approach this before I go to bed and sleep on it. <G>

-- 
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to