123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- require 'rails_helper'
- describe Agents::ChangeDetectorAgent do
- def create_event(output=nil)
- event = Event.new
- event.agent = agents(:jane_weather_agent)
- event.payload = {
- :command => 'some-command',
- :output => output
- }
- event.save!
- event
- end
- before do
- @valid_params = {
- :property => "{{output}}",
- :expected_update_period_in_days => "1",
- }
- @checker = Agents::ChangeDetectorAgent.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 property" do
- @checker.options[:property] = 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 "#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
- travel 49.hours 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 changed" 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 no change" do
- @event.payload[:output] = "2014-07-01"
- @checker.receive([@event])
- expect {
- @checker.receive([@event])
- }.to change(Event, :count).by(0)
- end
- end
- describe "#receive using last_property to track lowest value" do
- before :each do
- @event = create_event("100")
- end
- before do
- # Evaluate the output as number and detect a new lowest value
- @checker.options['property'] = '{% assign drop = last_property | minus: output %}{% if last_property == blank or drop > 0 %}{{ output | default: last_property }}{% else %}{{ last_property }}{% endif %}'
- end
- it "creates events when the value drops" do
- @checker.receive([@event])
- event = create_event("90")
- expect {
- @checker.receive([event])
- }.to change(Event, :count).by(1)
- expect(@checker.memory['last_property']).to eq "90"
- end
- it "does not create event when the value does not change" do
- @checker.receive([@event])
- event = create_event("100")
- expect {
- @checker.receive([event])
- }.not_to change(Event, :count)
- expect(@checker.memory['last_property']).to eq "100"
- end
- it "does not create event when the value rises" do
- @checker.receive([@event])
- event = create_event("110")
- expect {
- @checker.receive([event])
- }.not_to change(Event, :count)
- expect(@checker.memory['last_property']).to eq "100"
- end
- it "does not create event when the value is blank" do
- @checker.receive([@event])
- event = create_event("")
- expect {
- @checker.receive([event])
- }.not_to change(Event, :count)
- expect(@checker.memory['last_property']).to eq "100"
- end
- it "creates events when memory is empty" do
- expect {
- @checker.receive([@event])
- }.to change(Event, :count).by(1)
- expect(@checker.memory['last_property']).to eq "100"
- end
- end
- end
|