@@ -134,7 +134,9 @@ class Agent < ActiveRecord::Base |
||
| 134 | 134 |
end |
| 135 | 135 |
|
| 136 | 136 |
def set_last_checked_event_id |
| 137 |
- self.last_checked_event_id = Event.last.id |
|
| 137 |
+ if newest_event_id = Event.order("id desc").limit(1).pluck(:id).first
|
|
| 138 |
+ self.last_checked_event_id = newest_event_id |
|
| 139 |
+ end |
|
| 138 | 140 |
end |
| 139 | 141 |
|
| 140 | 142 |
# Class Methods |
@@ -64,6 +64,12 @@ describe Agent do |
||
| 64 | 64 |
|
| 65 | 65 |
class Agents::CannotBeScheduled < Agent |
| 66 | 66 |
cannot_be_scheduled! |
| 67 |
+ |
|
| 68 |
+ def receive(events) |
|
| 69 |
+ events.each do |event| |
|
| 70 |
+ create_event :payload => { :events_received => 1 }
|
|
| 71 |
+ end |
|
| 72 |
+ end |
|
| 67 | 73 |
end |
| 68 | 74 |
|
| 69 | 75 |
before do |
@@ -109,31 +115,31 @@ describe Agent do |
||
| 109 | 115 |
|
| 110 | 116 |
describe "#create_event" do |
| 111 | 117 |
it "should use the checker's user" do |
| 112 |
- @checker = Agents::SomethingSource.new(:name => "something") |
|
| 113 |
- @checker.user = users(:bob) |
|
| 114 |
- @checker.save! |
|
| 118 |
+ checker = Agents::SomethingSource.new(:name => "something") |
|
| 119 |
+ checker.user = users(:bob) |
|
| 120 |
+ checker.save! |
|
| 115 | 121 |
|
| 116 |
- @checker.check |
|
| 117 |
- Event.last.user.should == @checker.user |
|
| 122 |
+ checker.check |
|
| 123 |
+ Event.last.user.should == checker.user |
|
| 118 | 124 |
end |
| 119 | 125 |
end |
| 120 | 126 |
|
| 121 | 127 |
describe ".async_check" do |
| 122 | 128 |
it "records last_check_at and calls check on the given Agent" do |
| 123 |
- @checker = Agents::SomethingSource.new(:name => "something") |
|
| 124 |
- @checker.user = users(:bob) |
|
| 125 |
- @checker.save! |
|
| 129 |
+ checker = Agents::SomethingSource.new(:name => "something") |
|
| 130 |
+ checker.user = users(:bob) |
|
| 131 |
+ checker.save! |
|
| 126 | 132 |
|
| 127 |
- mock(@checker).check.once {
|
|
| 128 |
- @checker.options[:new] = true |
|
| 133 |
+ mock(checker).check.once {
|
|
| 134 |
+ checker.options[:new] = true |
|
| 129 | 135 |
} |
| 130 | 136 |
|
| 131 |
- mock(Agent).find(@checker.id) { @checker }
|
|
| 137 |
+ mock(Agent).find(checker.id) { checker }
|
|
| 132 | 138 |
|
| 133 |
- @checker.last_check_at.should be_nil |
|
| 134 |
- Agents::SomethingSource.async_check(@checker.id) |
|
| 135 |
- @checker.reload.last_check_at.should be_within(2).of(Time.now) |
|
| 136 |
- @checker.reload.options[:new].should be_true # Show that we save options |
|
| 139 |
+ checker.last_check_at.should be_nil |
|
| 140 |
+ Agents::SomethingSource.async_check(checker.id) |
|
| 141 |
+ checker.reload.last_check_at.should be_within(2).of(Time.now) |
|
| 142 |
+ checker.reload.options[:new].should be_true # Show that we save options |
|
| 137 | 143 |
end |
| 138 | 144 |
end |
| 139 | 145 |
|
@@ -149,7 +155,7 @@ describe Agent do |
||
| 149 | 155 |
Agent.receive! |
| 150 | 156 |
end |
| 151 | 157 |
|
| 152 |
- it "should track when events have been seen and not see them again" do |
|
| 158 |
+ it "should track when events have been seen and not received them again" do |
|
| 153 | 159 |
mock.any_instance_of(Agents::TriggerAgent).receive(anything).once |
| 154 | 160 |
Agent.async_check(agents(:bob_weather_agent).id) |
| 155 | 161 |
Agent.receive! |
@@ -171,30 +177,27 @@ describe Agent do |
||
| 171 | 177 |
end |
| 172 | 178 |
end |
| 173 | 179 |
|
| 174 |
- describe "creating a new agent and then .receive!" do |
|
| 175 |
- before do |
|
| 176 |
- stub_request(:any, /wunderground/).to_return(:body => File.read(Rails.root.join("spec/data_fixtures/weather.json")), :status => 200)
|
|
| 177 |
- stub.any_instance_of(Agents::WeatherAgent).is_tomorrow?(anything) { true }
|
|
| 178 |
- end |
|
| 179 |
- |
|
| 180 |
+ describe "creating a new agent and then calling .receive!" do |
|
| 180 | 181 |
it "should not backfill events for a newly created agent" do |
| 181 |
- Agent.async_check(agents(:bob_weather_agent).id) |
|
| 182 |
+ Event.delete_all |
|
| 183 |
+ sender = Agents::SomethingSource.new(:name => "Sending Agent") |
|
| 184 |
+ sender.user = users(:bob) |
|
| 185 |
+ sender.save! |
|
| 186 |
+ sender.create_event :payload => {}
|
|
| 187 |
+ sender.create_event :payload => {}
|
|
| 188 |
+ sender.events.count.should == 2 |
|
| 189 |
+ |
|
| 190 |
+ receiver = Agents::CannotBeScheduled.new(:name => "Receiving Agent") |
|
| 191 |
+ receiver.user = users(:bob) |
|
| 192 |
+ receiver.sources << sender |
|
| 193 |
+ receiver.save! |
|
| 194 |
+ |
|
| 195 |
+ receiver.events.count.should == 0 |
|
| 182 | 196 |
Agent.receive! |
| 183 |
- checker = Agents::TriggerAgent.new(:name => "New trigger agent", :options => {
|
|
| 184 |
- :expected_receive_period_in_days => "2", |
|
| 185 |
- :rules => [{
|
|
| 186 |
- :type => "regex", |
|
| 187 |
- :value => "rain", |
|
| 188 |
- :path => "conditions" |
|
| 189 |
- }], |
|
| 190 |
- :message => "Just so you know, it looks like '<conditions>' tomorrow in <zipcode>" |
|
| 191 |
- }) |
|
| 192 |
- checker.user = users(:bob) |
|
| 193 |
- checker.sources << agents(:bob_weather_agent) |
|
| 194 |
- checker.save! |
|
| 195 |
- checker.sources.first.events.count.should be > 0 |
|
| 197 |
+ receiver.events.count.should == 0 |
|
| 198 |
+ sender.create_event :payload => {}
|
|
| 196 | 199 |
Agent.receive! |
| 197 |
- checker.events.count.should eq(0) |
|
| 200 |
+ receiver.events.count.should == 1 |
|
| 198 | 201 |
end |
| 199 | 202 |
end |
| 200 | 203 |
|