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