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