|
require 'rails_helper'
describe Agents::DeDuplicationAgent do
def create_event(output=nil)
event = Event.new
event.agent = agents(:jane_weather_agent)
event.payload = {
:output => output
}
event.save!
event
end
before do
@valid_params = {
:property => "{{output}}",
:lookback => 3,
:expected_update_period_in_days => "1",
}
@checker = Agents::DeDuplicationAgent.new(:name => "somename", :options => @valid_params)
@checker.user = users(:jane)
@checker.save!
end
describe "validation" do
before do
expect(@checker).to be_valid
end
it "should validate presence of lookback" do
@checker.options[:lookback] = nil
expect(@checker).not_to be_valid
end
it "should validate presence of property" do
@checker.options[:expected_update_period_in_days] = nil
expect(@checker).not_to be_valid
end
end
describe '#initialize_memory' do
it 'sets properties to an empty array' do
expect(@checker.memory['properties']).to eq([])
end
it 'does not override an existing value' do
@checker.memory['properties'] = [1,2,3]
@checker.save
@checker.reload
expect(@checker.memory['properties']).to eq([1,2,3])
end
end
describe "#working?" do
before :each do
# Need to create an event otherwise event_created_within? returns nil
event = create_event
@checker.receive([event])
end
it "is when event created within :expected_update_period_in_days" do
@checker.options[:expected_update_period_in_days] = 2
expect(@checker).to be_working
end
it "isnt when event created outside :expected_update_period_in_days" do
@checker.options[:expected_update_period_in_days] = 2
time_travel_to 2.days.from_now do
expect(@checker).not_to be_working
end
end
end
describe "#receive" do
before :each do
@event = create_event("2014-07-01")
end
it "creates events when memory is empty" do
@event.payload[:output] = "2014-07-01"
expect {
@checker.receive([@event])
}.to change(Event, :count).by(1)
expect(Event.last.payload[:command]).to eq(@event.payload[:command])
expect(Event.last.payload[:output]).to eq(@event.payload[:output])
end
it "creates events when new event is unique" do
@event.payload[:output] = "2014-07-01"
@checker.receive([@event])
event = create_event("2014-08-01")
expect {
@checker.receive([event])
}.to change(Event, :count).by(1)
end
it "does not create event when event is a duplicate" do
@event.payload[:output] = "2014-07-01"
@checker.receive([@event])
expect {
@checker.receive([@event])
}.to change(Event, :count).by(0)
end
it "should respect the lookback value" do
3.times do |i|
@event.payload[:output] = "2014-07-0#{i}"
@checker.receive([@event])
end
@event.payload[:output] = "2014-07-05"
expect {
@checker.receive([@event])
}.to change(Event, :count).by(1)
expect(@checker.memory['properties'].length).to eq(3)
expect(@checker.memory['properties']).to eq(["2014-07-01", "2014-07-02", "2014-07-05"])
end
it "should hash the value if its longer then 10 chars" do
@event.payload[:output] = "01234567890"
expect {
@checker.receive([@event])
}.to change(Event, :count).by(1)
expect(@checker.memory['properties'].last).to eq('2256157795')
end
it "should use the whole event if :property is blank" do
@checker.options['property'] = ''
expect {
@checker.receive([@event])
}.to change(Event, :count).by(1)
expect(@checker.memory['properties'].last).to eq('3023526198')
end
it "should still work after the memory was cleared" do
@checker.memory = {}
@checker.save
@checker.reload
expect {
@checker.receive([@event])
}.not_to raise_error
end
end
end
|