event_spec.rb 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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.created_at = Time.now
  77. @event.payload = {
  78. 'title' => 'some title',
  79. 'url' => 'http://some.site.example.org/',
  80. }
  81. @event.save!
  82. end
  83. it 'should be created via Agent#to_liquid' do
  84. @event.to_liquid.class.should be(EventDrop)
  85. end
  86. it 'should have attributes of its payload' do
  87. t = '{{title}}: {{url}}'
  88. interpolate(t, @event).should eq('some title: http://some.site.example.org/')
  89. end
  90. it 'should use created_at from the payload if it exists' do
  91. created_at = @event.created_at - 86400
  92. # Avoid timezone issue by using %s
  93. @event.payload['created_at'] = created_at.strftime("%s")
  94. @event.save!
  95. t = '{{created_at | date:"%s" }}'
  96. interpolate(t, @event).should eq(created_at.strftime("%s"))
  97. end
  98. it 'should be iteratable' do
  99. # to_liquid returns self
  100. t = "{% for pair in to_liquid %}{{pair | join:':' }}\n{% endfor %}"
  101. interpolate(t, @event).should eq("title:some title\nurl:http://some.site.example.org/\n")
  102. end
  103. it 'should have agent' do
  104. t = '{{agent.name}}'
  105. interpolate(t, @event).should eq('SF Weather')
  106. end
  107. it 'should have created_at' do
  108. t = '{{created_at | date:"%FT%T%z" }}'
  109. interpolate(t, @event).should eq(@event.created_at.strftime("%FT%T%z"))
  110. end
  111. end