123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- require 'spec_helper'
- describe Event do
- describe "#reemit" do
- it "creates a new event identical to itself" do
- events(:bob_website_agent_event).lat = 2
- events(:bob_website_agent_event).lng = 3
- events(:bob_website_agent_event).created_at = 2.weeks.ago
- lambda {
- events(:bob_website_agent_event).reemit!
- }.should change { Event.count }.by(1)
- Event.last.payload.should == events(:bob_website_agent_event).payload
- Event.last.agent.should == events(:bob_website_agent_event).agent
- Event.last.lat.should == 2
- Event.last.lng.should == 3
- Event.last.created_at.to_i.should be_within(2).of(Time.now.to_i)
- end
- end
- describe ".cleanup_expired!" do
- it "removes any Events whose expired_at date is non-null and in the past, updating Agent counter caches" do
- half_hour_event = agents(:jane_weather_agent).create_event :expires_at => 20.minutes.from_now
- one_hour_event = agents(:bob_weather_agent).create_event :expires_at => 1.hours.from_now
- two_hour_event = agents(:jane_weather_agent).create_event :expires_at => 2.hours.from_now
- three_hour_event = agents(:jane_weather_agent).create_event :expires_at => 3.hours.from_now
- non_expiring_event = agents(:bob_weather_agent).create_event({})
- initial_bob_count = agents(:bob_weather_agent).reload.events_count
- initial_jane_count = agents(:jane_weather_agent).reload.events_count
- current_time = Time.now
- stub(Time).now { current_time }
- Event.cleanup_expired!
- Event.find_by_id(half_hour_event.id).should_not be_nil
- Event.find_by_id(one_hour_event.id).should_not be_nil
- Event.find_by_id(two_hour_event.id).should_not be_nil
- Event.find_by_id(three_hour_event.id).should_not be_nil
- Event.find_by_id(non_expiring_event.id).should_not be_nil
- agents(:bob_weather_agent).reload.events_count.should == initial_bob_count
- agents(:jane_weather_agent).reload.events_count.should == initial_jane_count
- current_time = 119.minutes.from_now # move almost 2 hours into the future
- Event.cleanup_expired!
- Event.find_by_id(half_hour_event.id).should be_nil
- Event.find_by_id(one_hour_event.id).should be_nil
- Event.find_by_id(two_hour_event.id).should_not be_nil
- Event.find_by_id(three_hour_event.id).should_not be_nil
- Event.find_by_id(non_expiring_event.id).should_not be_nil
- agents(:bob_weather_agent).reload.events_count.should == initial_bob_count - 1
- agents(:jane_weather_agent).reload.events_count.should == initial_jane_count - 1
- current_time = 2.minutes.from_now # move 2 minutes further into the future
- Event.cleanup_expired!
- Event.find_by_id(two_hour_event.id).should be_nil
- Event.find_by_id(three_hour_event.id).should_not be_nil
- Event.find_by_id(non_expiring_event.id).should_not be_nil
- agents(:bob_weather_agent).reload.events_count.should == initial_bob_count - 1
- agents(:jane_weather_agent).reload.events_count.should == initial_jane_count - 2
- end
- it "doesn't touch Events with no expired_at" do
- event = Event.new
- event.agent = agents(:jane_weather_agent)
- event.expires_at = nil
- event.save!
- current_time = Time.now
- stub(Time).now { current_time }
- Event.cleanup_expired!
- Event.find_by_id(event.id).should_not be_nil
- current_time = 2.days.from_now
- Event.cleanup_expired!
- Event.find_by_id(event.id).should_not be_nil
- end
- end
- end
- describe EventDrop do
- def interpolate(string, event)
- event.agent.interpolate_string(string, event.to_liquid)
- end
- before do
- @event = Event.new
- @event.agent = agents(:jane_weather_agent)
- @event.payload = {
- 'title' => 'some title',
- 'url' => 'http://some.site.example.org/',
- }
- @event.save!
- end
- it 'should be created via Agent#to_liquid' do
- @event.to_liquid.class.should be(EventDrop)
- end
- it 'should have attributes of its payload' do
- t = '{{title}}: {{url}}'
- interpolate(t, @event).should eq('some title: http://some.site.example.org/')
- end
- it 'should be iteratable' do
- # to_liquid returns self
- t = "{% for pair in to_liquid %}{{pair | join:':' }}\n{% endfor %}"
- interpolate(t, @event).should eq("title:some title\nurl:http://some.site.example.org/\n")
- end
- it 'should have agent' do
- t = '{{agent.name}}'
- interpolate(t, @event).should eq('SF Weather')
- end
- end
|