@@ -151,6 +151,15 @@ module Agents |
||
| 151 | 151 |
end |
| 152 | 152 |
|
| 153 | 153 |
validate_web_request_options! |
| 154 |
+ validate_extract_options! |
|
| 155 |
+ end |
|
| 156 |
+ |
|
| 157 |
+ def validate_extract_options! |
|
| 158 |
+ if extraction_type == "json" && interpolated['extract'].is_a?(Hash) |
|
| 159 |
+ unless interpolated['extract'].all? { |name, details| details.is_a?(Hash) && details['path'].present? }
|
|
| 160 |
+ errors.add(:base, 'When type is json, all extractions must have a path attribute.') |
|
| 161 |
+ end |
|
| 162 |
+ end |
|
| 154 | 163 |
end |
| 155 | 164 |
|
| 156 | 165 |
def check |
@@ -75,6 +75,23 @@ describe Agents::WebsiteAgent do |
||
| 75 | 75 |
@checker.options['force_encoding'] = 'UTF-42' |
| 76 | 76 |
expect(@checker).not_to be_valid |
| 77 | 77 |
end |
| 78 |
+ |
|
| 79 |
+ context "in 'json' type" do |
|
| 80 |
+ it "should ensure that all extractions have a 'path'" do |
|
| 81 |
+ @checker.options['type'] = 'json' |
|
| 82 |
+ @checker.options['extract'] = {
|
|
| 83 |
+ 'url' => { 'foo' => 'bar' },
|
|
| 84 |
+ } |
|
| 85 |
+ expect(@checker).to_not be_valid |
|
| 86 |
+ expect(@checker.errors_on(:base)).to include("When type is json, all extractions must have a path attribute.")
|
|
| 87 |
+ |
|
| 88 |
+ @checker.options['type'] = 'json' |
|
| 89 |
+ @checker.options['extract'] = {
|
|
| 90 |
+ 'url' => { 'path' => 'bar' },
|
|
| 91 |
+ } |
|
| 92 |
+ expect(@checker).to be_valid |
|
| 93 |
+ end |
|
| 94 |
+ end |
|
| 78 | 95 |
end |
| 79 | 96 |
|
| 80 | 97 |
describe "#check" do |
@@ -179,7 +196,6 @@ describe Agents::WebsiteAgent do |
||
| 179 | 196 |
|
| 180 | 197 |
checker.check |
| 181 | 198 |
event = Event.last |
| 182 |
- puts event.payload |
|
| 183 | 199 |
expect(event.payload['version']).to eq(2) |
| 184 | 200 |
end |
| 185 | 201 |
end |