@@ -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 |
|