digest_email_agent_spec.rb 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. require 'spec_helper'
  2. describe Agents::DigestEmailAgent do
  3. def get_message_part(mail, content_type)
  4. mail.body.parts.find { |p| p.content_type.match content_type }.body.raw_source
  5. end
  6. before do
  7. @checker = Agents::DigestEmailAgent.new(:name => "something", :options => { :expected_receive_period_in_days => 2, :subject => "something interesting" })
  8. @checker.user = users(:bob)
  9. @checker.save!
  10. end
  11. after do
  12. ActionMailer::Base.deliveries = []
  13. end
  14. describe "#receive" do
  15. it "queues any payloads it receives" do
  16. event1 = Event.new
  17. event1.agent = agents(:bob_rain_notifier_agent)
  18. event1.payload = { :data => "Something you should know about" }
  19. event1.save!
  20. event2 = Event.new
  21. event2.agent = agents(:bob_weather_agent)
  22. event2.payload = { :data => "Something else you should know about" }
  23. event2.save!
  24. Agents::DigestEmailAgent.async_receive(@checker.id, [event1.id, event2.id])
  25. @checker.reload.memory[:queue].should == [{ 'data' => "Something you should know about" }, { 'data' => "Something else you should know about" }]
  26. end
  27. end
  28. describe "#check" do
  29. it "should send an email" do
  30. Agents::DigestEmailAgent.async_check(@checker.id)
  31. ActionMailer::Base.deliveries.should == []
  32. @checker.memory[:queue] = [{ :data => "Something you should know about" },
  33. { :title => "Foo", :url => "http://google.com", :bar => 2 },
  34. { "message" => "hi", :woah => "there" },
  35. { "test" => 2 }]
  36. @checker.memory[:events] = [1,2,3,4]
  37. @checker.save!
  38. Agents::DigestEmailAgent.async_check(@checker.id)
  39. ActionMailer::Base.deliveries.last.to.should == ["bob@example.com"]
  40. ActionMailer::Base.deliveries.last.subject.should == "something interesting"
  41. get_message_part(ActionMailer::Base.deliveries.last, /plain/).strip.should == "Event\n data: Something you should know about\n\nFoo\n bar: 2\n url: http://google.com\n\nhi\n woah: there\n\nEvent\n test: 2"
  42. @checker.reload.memory[:queue].should be_empty
  43. end
  44. it "can receive complex events and send them on" do
  45. stub_request(:any, /wunderground/).to_return(:body => File.read(Rails.root.join("spec/data_fixtures/weather.json")), :status => 200)
  46. stub.any_instance_of(Agents::WeatherAgent).is_tomorrow?(anything) { true }
  47. @checker.sources << agents(:bob_weather_agent)
  48. Agent.async_check(agents(:bob_weather_agent).id)
  49. Agent.receive!
  50. @checker.reload.memory[:queue].should_not be_empty
  51. Agents::DigestEmailAgent.async_check(@checker.id)
  52. plain_email_text = get_message_part(ActionMailer::Base.deliveries.last, /plain/).strip
  53. html_email_text = get_message_part(ActionMailer::Base.deliveries.last, /html/).strip
  54. plain_email_text.should =~ /avehumidity/
  55. html_email_text.should =~ /avehumidity/
  56. @checker.reload.memory[:queue].should be_empty
  57. end
  58. end
  59. end