Skip to content

Commit 57eed65

Browse files
committed
fix: do not invoke error reporters for validation errors
1 parent 66ad33a commit 57eed65

File tree

5 files changed

+28
-5
lines changed

5 files changed

+28
-5
lines changed

lib/pact_broker/api/resources/error_handler.rb

+5-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@ def self.call e, request, response
1212
logger.error e
1313
logger.error e.backtrace
1414
response.body = {:message => e.message, :backtrace => e.backtrace }.to_json
15-
report e, request
15+
report(e, request) if reportable?(e)
16+
end
17+
18+
def self.reportable? e
19+
!e.is_a?(PactBroker::Error)
1620
end
1721

1822
def self.report e, request

lib/pact_broker/api/resources/error_test.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ def allowed_methods
2424
end
2525

2626
def to_json
27-
raise PactBroker::Error.new("Don't panic. This is a test API error.")
27+
raise PactBroker::TestError.new("Don't panic. This is a test API error.")
2828
end
2929

3030
def from_json
31-
raise PactBroker::Error.new("Don't panic. This is a test API error.")
31+
raise PactBroker::TestError.new("Don't panic. This is a test API error.")
3232
end
3333
end
3434
end

lib/pact_broker/error.rb

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
module PactBroker
22

33
class Error < StandardError; end
4+
class TestError < StandardError; end
45

56
end

lib/pact_broker/ui/controllers/error_test.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ class ErrorTest < Base
99
include PactBroker::Services
1010

1111
get "/" do
12-
raise PactBroker::Error.new("Don't panic. This is a test UI error.")
12+
raise PactBroker::TestError.new("Don't panic. This is a test UI error.")
1313
end
1414
end
1515
end

spec/lib/pact_broker/api/resources/error_handler_spec.rb

+19-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ module Api
55
module Resources
66
describe ErrorHandler do
77
describe "call" do
8-
let(:error) { PactBroker::Error.new('test error') }
8+
let(:error) { StandardError.new('test error') }
99
let(:thing) { double('thing', call: nil, another_call: nil) }
1010
let(:options) { { env: env } }
1111
let(:request) { double('request' ) }
@@ -31,6 +31,24 @@ module Resources
3131
subject
3232
end
3333

34+
context "when the error is a PactBroker::Error or subclass" do
35+
let(:error) { Class.new(PactBroker::Error).new('test error') }
36+
37+
it "does not invoke the api error reporters" do
38+
expect(thing).to_not receive(:call).with(error, options)
39+
subject
40+
end
41+
end
42+
43+
context "when the error is a PactBroker::TestError" do
44+
let(:error) { PactBroker::TestError.new('test error') }
45+
46+
it "invokes the api error reporters" do
47+
expect(thing).to receive(:call).with(error, options)
48+
subject
49+
end
50+
end
51+
3452
context "when the error reporter raises an error itself" do
3553
class TestError < StandardError; end
3654

0 commit comments

Comments
 (0)