Skip to content

Commit eaaee1f

Browse files
committed
Add option to ignore all unknown responses in API coverage
This is intended to be used just for a short period of time when adapting an existing OAD and should not be used once the OAD is aligned with the implementation.
1 parent 9f9ca9c commit eaaee1f

5 files changed

Lines changed: 57 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
## Unreleased
44

5+
- Add `OpenapiFirst::Test::Configuration#ignore_all_unknown_responses=` (use only temporarily when working with an unmaintained OAD)
6+
57
## 2.11.1
68

79
- OpenapiFirst can now route requests correctly for paths like `/stuffs` and `/stuffs{format}` (https://github.com/ahx/openapi_first/issues/386)

lib/openapi_first/test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ def self.raise_request_error?(validated_request)
124124
end
125125

126126
def self.raise_response_error?(validated_response)
127-
configuration.response_raise_error && !configuration.ignored_unknown_status.include?(validated_response.status)
127+
configuration.response_raise_error && !configuration.ignore_response?(validated_response)
128128
end
129129

130130
def self.uninstall

lib/openapi_first/test/configuration.rb

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ def initialize
1212
@skip_coverage = nil
1313
@response_raise_error = true
1414
@ignored_unknown_status = [404]
15+
@ignore_all_unknown_responses = false
1516
@report_coverage = true
1617
@ignore_unknown_requests = false
1718
@registry = {}
@@ -31,7 +32,7 @@ def observe(app, api: :default)
3132
end
3233

3334
attr_accessor :coverage_formatter_options, :coverage_formatter, :response_raise_error,
34-
:ignore_unknown_requests
35+
:ignore_unknown_requests, :ignore_all_unknown_responses
3536
attr_reader :registry, :apps, :report_coverage, :ignored_unknown_status, :minimum_coverage
3637

3738
# Configure report coverage
@@ -63,6 +64,12 @@ def skip_coverage(&block)
6364

6465
@skip_coverage = block
6566
end
67+
68+
def ignore_response?(validated_response)
69+
return true if @ignore_all_unknown_responses
70+
71+
ignored_unknown_status.include?(validated_response.status)
72+
end
6673
end
6774
end
6875
end

spec/test/configuration_spec.rb

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,38 @@
1919
expect(configuration.ignored_unknown_status).to eq [404, 401]
2020
end
2121
end
22+
23+
describe '#ignore_response?' do
24+
let(:valid_response) { double(valid?: true, known?: true, status: 302) }
25+
let(:invalid_response) { double(valid?: false, known?: true, status: 302) }
26+
let(:unknown_response) { double(valid?: false, known?: false, status: 302) }
27+
28+
it 'returns false by default for a valid responses' do
29+
expect(configuration.ignore_response?(valid_response)).to eq(false)
30+
end
31+
32+
it 'returns false by default for an invalid responses' do
33+
expect(configuration.ignore_response?(invalid_response)).to eq(false)
34+
end
35+
36+
it 'returns false by default for an unkonwn responses' do
37+
expect(configuration.ignore_response?(unknown_response)).to eq(false)
38+
end
39+
40+
context 'when status is ignored' do
41+
before { configuration.ignored_unknown_status << invalid_response.status }
42+
43+
it 'returns true' do
44+
expect(configuration.ignore_response?(invalid_response)).to eq(true)
45+
end
46+
end
47+
48+
context 'when all responses are ignored' do
49+
before { configuration.ignore_all_unknown_responses = true }
50+
51+
it 'returns true' do
52+
expect(configuration.ignore_response?(invalid_response)).to eq(true)
53+
end
54+
end
55+
end
2256
end

spec/test_spec.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -623,5 +623,17 @@ def call(_env)
623623
end.not_to raise_error
624624
end
625625
end
626+
627+
context 'with ignore_all_unknown_responses = true' do
628+
before(:each) do
629+
described_class.configuration.ignore_all_unknown_responses = true
630+
end
631+
632+
it 'does not raise an error' do
633+
expect do
634+
app.call(Rack::MockRequest.env_for('/roll', method: 'POST'))
635+
end.not_to raise_error
636+
end
637+
end
626638
end
627639
end

0 commit comments

Comments
 (0)