event_formatting_agent_spec.rb 4.8KB

    require 'spec_helper' describe Agents::EventFormattingAgent do before do @valid_params = { :name => "somename", :options => { :instructions => { :message => "Received <$.content.text.*> from <$.content.name> .", :subject => "Weather looks like <$.conditions> according to the forecast at <$.pretty_date.time>" }, :mode => "clean", :matchers => [ { :path => "$.date.pretty", :regexp => "\\A(?<time>\\d\\d:\\d\\d [AP]M [A-Z]+)", :to => "pretty_date", }, ], :skip_agent => "false", :skip_created_at => "false" } } @checker = Agents::EventFormattingAgent.new(@valid_params) @checker.user = users(:jane) @checker.save! @event = Event.new @event.agent = agents(:jane_weather_agent) @event.created_at = Time.now @event.payload = { :content => { :text => "Some Lorem Ipsum", :name => "somevalue", }, :date => { :epoch => "1357959600", :pretty => "10:00 PM EST on January 11, 2013" }, :conditions => "someothervalue" } end describe "#receive" do it "should accept clean mode" do @checker.receive([@event]) Event.last.payload[:content].should == nil end it "should accept merge mode" do @checker.options[:mode] = "merge" @checker.receive([@event]) Event.last.payload[:content].should_not == nil end it "should accept skip_agent" do @checker.receive([@event]) Event.last.payload[:agent].should == "WeatherAgent" @checker.options[:skip_agent] = "true" @checker.receive([@event]) Event.last.payload[:agent].should == nil end it "should accept skip_created_at" do @checker.receive([@event]) Event.last.payload[:created_at].should_not == nil @checker.options[:skip_created_at] = "true" @checker.receive([@event]) Event.last.payload[:created_at].should == nil end it "should handle JSONPaths in instructions" do @checker.receive([@event]) Event.last.payload[:message].should == "Received Some Lorem Ipsum from somevalue ." end it "should handle matchers and JSONPaths in instructions" do @checker.receive([@event]) Event.last.payload[:subject].should == "Weather looks like someothervalue according to the forecast at 10:00 PM EST" end it "should allow escaping" do @event.payload[:content][:name] = "escape this!?" @event.save! @checker.options[:instructions][:message] = "Escaped: <escape $.content.name>\nNot escaped: <$.content.name>" @checker.save! @checker.receive([@event]) Event.last.payload[:message].should == "Escaped: escape+this%21%3F\nNot escaped: escape this!?" end it "should handle multiple events" do event1 = Event.new event1.agent = agents(:bob_weather_agent) event1.payload = { :content => { :text => "Some Lorem Ipsum", :name => "somevalue" }, :conditions => "someothervalue" } event2 = Event.new event2.agent = agents(:bob_weather_agent) event2.payload = { :content => { :text => "Some Lorem Ipsum", :name => "somevalue" }, :conditions => "someothervalue" } lambda { @checker.receive([event2, event1]) }.should change { Event.count }.by(2) end end describe "validation" do before do @checker.should be_valid end it "should validate presence of instructions" do @checker.options[:instructions] = "" @checker.should_not be_valid end it "should validate type of matchers" do @checker.options[:matchers] = "" @checker.should_not be_valid @checker.options[:matchers] = {} @checker.should_not be_valid end it "should validate the contents of matchers" do @checker.options[:matchers] = [ {} ] @checker.should_not be_valid @checker.options[:matchers] = [ { :regexp => "(not closed", :path => "text" } ] @checker.should_not be_valid @checker.options[:matchers] = [ { :regexp => "(closed)", :path => "text", :to => "foo" } ] @checker.should be_valid end it "should validate presence of mode" do @checker.options[:mode] = "" @checker.should_not be_valid end it "should validate presence of skip_agent" do @checker.options[:skip_agent] = "" @checker.should_not be_valid end it "should validate presence of skip_created_at" do @checker.options[:skip_created_at] = "" @checker.should_not be_valid end end end