event_formatting_agent_spec.rb 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. require 'spec_helper'
  2. describe Agents::EventFormattingAgent do
  3. before do
  4. @valid_params = {
  5. :name => "somename",
  6. :options => {
  7. :instructions => {
  8. :message => "Received <$.content.text.*> from <$.content.name> .",
  9. :subject => "Weather looks like <$.conditions>"
  10. },
  11. :mode => "clean",
  12. :skip_agent => "false",
  13. :skip_created_at => "false"
  14. }
  15. }
  16. @checker = Agents::EventFormattingAgent.new(@valid_params)
  17. @checker.user = users(:jane)
  18. @checker.save!
  19. @event = Event.new
  20. @event.agent = agents(:jane_weather_agent)
  21. @event.created_at = Time.now
  22. @event.payload = {
  23. :content => {
  24. :text => "Some Lorem Ipsum",
  25. :name => "somevalue"
  26. },
  27. :conditions => "someothervalue"
  28. }
  29. end
  30. describe "#receive" do
  31. it "should accept clean mode" do
  32. @checker.receive([@event])
  33. Event.last.payload[:content].should == nil
  34. end
  35. it "should accept merge mode" do
  36. @checker.options[:mode] = "merge"
  37. @checker.receive([@event])
  38. Event.last.payload[:content].should_not == nil
  39. end
  40. it "should accept skip_agent" do
  41. @checker.receive([@event])
  42. Event.last.payload[:agent].should == "WeatherAgent"
  43. @checker.options[:skip_agent] = "true"
  44. @checker.receive([@event])
  45. Event.last.payload[:agent].should == nil
  46. end
  47. it "should accept skip_created_at" do
  48. @checker.receive([@event])
  49. Event.last.payload[:created_at].should_not == nil
  50. @checker.options[:skip_created_at] = "true"
  51. @checker.receive([@event])
  52. Event.last.payload[:created_at].should == nil
  53. end
  54. it "should handle JSONPaths in instructions" do
  55. @checker.receive([@event])
  56. Event.last.payload[:message].should == "Received Some Lorem Ipsum from somevalue ."
  57. Event.last.payload[:subject].should == "Weather looks like someothervalue"
  58. end
  59. it "should allow escaping" do
  60. @event.payload[:content][:name] = "escape this!?"
  61. @event.save!
  62. @checker.options[:instructions][:message] = "Escaped: <escape $.content.name>\nNot escaped: <$.content.name>"
  63. @checker.save!
  64. @checker.receive([@event])
  65. Event.last.payload[:message].should == "Escaped: escape+this%21%3F\nNot escaped: escape this!?"
  66. end
  67. it "should handle multiple events" do
  68. event1 = Event.new
  69. event1.agent = agents(:bob_weather_agent)
  70. event1.payload = {
  71. :content => {
  72. :text => "Some Lorem Ipsum",
  73. :name => "somevalue"
  74. },
  75. :conditions => "someothervalue"
  76. }
  77. event2 = Event.new
  78. event2.agent = agents(:bob_weather_agent)
  79. event2.payload = {
  80. :content => {
  81. :text => "Some Lorem Ipsum",
  82. :name => "somevalue"
  83. },
  84. :conditions => "someothervalue"
  85. }
  86. lambda {
  87. @checker.receive([event2, event1])
  88. }.should change { Event.count }.by(2)
  89. end
  90. end
  91. describe "validation" do
  92. before do
  93. @checker.should be_valid
  94. end
  95. it "should validate presence of instructions" do
  96. @checker.options[:instructions] = ""
  97. @checker.should_not be_valid
  98. end
  99. it "should validate presence of mode" do
  100. @checker.options[:mode] = ""
  101. @checker.should_not be_valid
  102. end
  103. it "should validate presence of skip_agent" do
  104. @checker.options[:skip_agent] = ""
  105. @checker.should_not be_valid
  106. end
  107. it "should validate presence of skip_created_at" do
  108. @checker.options[:skip_created_at] = ""
  109. @checker.should_not be_valid
  110. end
  111. end
  112. end