event_spec.rb 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. require 'spec_helper'
  2. describe Event do
  3. describe "#reemit" do
  4. it "creates a new event identical to itself" do
  5. events(:bob_website_agent_event).lat = 2
  6. events(:bob_website_agent_event).lng = 3
  7. events(:bob_website_agent_event).created_at = 2.weeks.ago
  8. lambda {
  9. events(:bob_website_agent_event).reemit!
  10. }.should change { Event.count }.by(1)
  11. Event.last.payload.should == events(:bob_website_agent_event).payload
  12. Event.last.agent.should == events(:bob_website_agent_event).agent
  13. Event.last.lat.should == 2
  14. Event.last.lng.should == 3
  15. Event.last.created_at.to_i.should be_within(2).of(Time.now.to_i)
  16. end
  17. end
  18. describe ".cleanup_expired!" do
  19. it "removes any Events whose expired_at date is non-null and in the past, updating Agent counter caches" do
  20. half_hour_event = agents(:jane_weather_agent).create_event :expires_at => 20.minutes.from_now
  21. one_hour_event = agents(:bob_weather_agent).create_event :expires_at => 1.hours.from_now
  22. two_hour_event = agents(:jane_weather_agent).create_event :expires_at => 2.hours.from_now
  23. three_hour_event = agents(:jane_weather_agent).create_event :expires_at => 3.hours.from_now
  24. non_expiring_event = agents(:bob_weather_agent).create_event({})
  25. initial_bob_count = agents(:bob_weather_agent).reload.events_count
  26. initial_jane_count = agents(:jane_weather_agent).reload.events_count
  27. current_time = Time.now
  28. stub(Time).now { current_time }
  29. Event.cleanup_expired!
  30. Event.find_by_id(half_hour_event.id).should_not be_nil
  31. Event.find_by_id(one_hour_event.id).should_not be_nil
  32. Event.find_by_id(two_hour_event.id).should_not be_nil
  33. Event.find_by_id(three_hour_event.id).should_not be_nil
  34. Event.find_by_id(non_expiring_event.id).should_not be_nil
  35. agents(:bob_weather_agent).reload.events_count.should == initial_bob_count
  36. agents(:jane_weather_agent).reload.events_count.should == initial_jane_count
  37. current_time = 119.minutes.from_now # move almost 2 hours into the future
  38. Event.cleanup_expired!
  39. Event.find_by_id(half_hour_event.id).should be_nil
  40. Event.find_by_id(one_hour_event.id).should be_nil
  41. Event.find_by_id(two_hour_event.id).should_not be_nil
  42. Event.find_by_id(three_hour_event.id).should_not be_nil
  43. Event.find_by_id(non_expiring_event.id).should_not be_nil
  44. agents(:bob_weather_agent).reload.events_count.should == initial_bob_count - 1
  45. agents(:jane_weather_agent).reload.events_count.should == initial_jane_count - 1
  46. current_time = 2.minutes.from_now # move 2 minutes further into the future
  47. Event.cleanup_expired!
  48. Event.find_by_id(two_hour_event.id).should be_nil
  49. Event.find_by_id(three_hour_event.id).should_not be_nil
  50. Event.find_by_id(non_expiring_event.id).should_not be_nil
  51. agents(:bob_weather_agent).reload.events_count.should == initial_bob_count - 1
  52. agents(:jane_weather_agent).reload.events_count.should == initial_jane_count - 2
  53. end
  54. it "doesn't touch Events with no expired_at" do
  55. event = Event.new
  56. event.agent = agents(:jane_weather_agent)
  57. event.expires_at = nil
  58. event.save!
  59. current_time = Time.now
  60. stub(Time).now { current_time }
  61. Event.cleanup_expired!
  62. Event.find_by_id(event.id).should_not be_nil
  63. current_time = 2.days.from_now
  64. Event.cleanup_expired!
  65. Event.find_by_id(event.id).should_not be_nil
  66. end
  67. end
  68. end
  69. describe EventDrop do
  70. def interpolate(string, event)
  71. event.agent.interpolate_string(string, event.to_liquid)
  72. end
  73. before do
  74. @event = Event.new
  75. @event.agent = agents(:jane_weather_agent)
  76. @event.payload = {
  77. 'title' => 'some title',
  78. 'url' => 'http://some.site.example.org/',
  79. }
  80. @event.save!
  81. end
  82. it 'should be created via Agent#to_liquid' do
  83. @event.to_liquid.class.should be(EventDrop)
  84. end
  85. it 'should have attributes of its payload' do
  86. t = '{{title}}: {{url}}'
  87. interpolate(t, @event).should eq('some title: http://some.site.example.org/')
  88. end
  89. it 'should be iteratable' do
  90. # to_liquid returns self
  91. t = "{% for pair in to_liquid %}{{pair | join:':' }}\n{% endfor %}"
  92. interpolate(t, @event).should eq("title:some title\nurl:http://some.site.example.org/\n")
  93. end
  94. it 'should have agent' do
  95. t = '{{agent.name}}'
  96. interpolate(t, @event).should eq('SF Weather')
  97. end
  98. end