@@ -24,6 +24,25 @@ def last_response = Rack::Response.new
2424 end . to raise_error ( OpenapiFirst ::Error )
2525 end
2626
27+ it 'runs request validation after handling the request' do
28+ OpenapiFirst ::Test . register ( './examples/openapi.yaml' )
29+ myapp = lambda do |env |
30+ expect ( env [ OpenapiFirst ::Test ::REQUEST ] ) . to be_nil
31+ Rack ::Response . new ( 'hello' ) . finish
32+ end
33+
34+ minitest_class = Class . new ( Minitest ::Test ) do
35+ include OpenapiFirst ::Test ::Methods [ myapp ]
36+ end
37+
38+ expect ( minitest_class . included_modules ) . to include ( OpenapiFirst ::Test ::MinitestHelpers )
39+ test_app = minitest_class . new ( 1 ) . app
40+ env = Rack ::MockRequest . env_for ( '/' )
41+ expect ( test_app . call ( env ) ) . to eq ( Rack ::Response . new ( 'hello' ) . finish )
42+ expect ( env [ OpenapiFirst ::Test ::REQUEST ] ) . to be_valid
43+ expect ( env [ OpenapiFirst ::Test ::RESPONSE ] ) . to be_a ( OpenapiFirst ::ValidatedResponse )
44+ end
45+
2746 context 'with RSpec' do
2847 context 'with metadata' , api : :v1 do
2948 include OpenapiFirst ::Test ::Methods
@@ -88,24 +107,31 @@ def last_response = Rack::Response.new
88107 end
89108
90109 context 'with [arguments]' do
91- it 'adds an app method that wraps the default API ' do
110+ it 'can run validation before handling the request ' do
92111 OpenapiFirst ::Test . register ( './examples/openapi.yaml' )
93- myapp = -> ( _env ) { Rack ::Response . new ( 'hello' ) . finish }
112+ myapp = lambda do |env |
113+ expect ( env [ OpenapiFirst ::Test ::REQUEST ] ) . to be_a ( OpenapiFirst ::ValidatedRequest )
114+ Rack ::Response . new ( 'hello' ) . finish
115+ end
94116
95117 minitest_class = Class . new ( Minitest ::Test ) do
96- include OpenapiFirst ::Test ::Methods [ myapp ]
118+ include OpenapiFirst ::Test ::Methods [ myapp , validate_request_before_handling : true ]
97119 end
98120
99121 expect ( minitest_class . included_modules ) . to include ( OpenapiFirst ::Test ::MinitestHelpers )
100122 test_app = minitest_class . new ( 1 ) . app
101123 env = Rack ::MockRequest . env_for ( '/' )
102124 expect ( test_app . call ( env ) ) . to eq ( Rack ::Response . new ( 'hello' ) . finish )
103125 expect ( env [ OpenapiFirst ::Test ::REQUEST ] ) . to be_valid
126+ expect ( env [ OpenapiFirst ::Test ::RESPONSE ] ) . to be_a ( OpenapiFirst ::ValidatedResponse )
104127 end
105128
106129 it 'adds an app method that wraps the app for a specific API' do
107130 OpenapiFirst ::Test . register ( './examples/openapi.yaml' , as : :v1 )
108- myapp = -> ( _env ) { Rack ::Response . new ( 'hello' ) . finish }
131+ myapp = lambda do |env |
132+ expect ( env [ OpenapiFirst ::Test ::REQUEST ] ) . to be_nil
133+ Rack ::Response . new ( 'hello' ) . finish
134+ end
109135
110136 minitest_class = Class . new ( Minitest ::Test ) do
111137 include OpenapiFirst ::Test ::Methods [ myapp , api : :v1 ]
@@ -116,6 +142,26 @@ def last_response = Rack::Response.new
116142 env = Rack ::MockRequest . env_for ( '/' )
117143 expect ( test_app . call ( env ) ) . to eq ( Rack ::Response . new ( 'hello' ) . finish )
118144 expect ( env [ OpenapiFirst ::Test ::REQUEST ] ) . to be_valid
145+ expect ( env [ OpenapiFirst ::Test ::RESPONSE ] ) . to be_a ( OpenapiFirst ::ValidatedResponse )
146+ end
147+
148+ it 'can run validation before handling the request, for a specific API' do
149+ OpenapiFirst ::Test . register ( './examples/openapi.yaml' , as : :v1 )
150+ myapp = lambda do |env |
151+ expect ( env [ OpenapiFirst ::Test ::REQUEST ] ) . to be_a ( OpenapiFirst ::ValidatedRequest )
152+ Rack ::Response . new ( 'hello' ) . finish
153+ end
154+
155+ minitest_class = Class . new ( Minitest ::Test ) do
156+ include OpenapiFirst ::Test ::Methods [ myapp , api : :v1 , validate_request_before_handling : true ]
157+ end
158+
159+ expect ( minitest_class . included_modules ) . to include ( OpenapiFirst ::Test ::MinitestHelpers )
160+ test_app = minitest_class . new ( 1 ) . app
161+ env = Rack ::MockRequest . env_for ( '/' )
162+ expect ( test_app . call ( env ) ) . to eq ( Rack ::Response . new ( 'hello' ) . finish )
163+ expect ( env [ OpenapiFirst ::Test ::REQUEST ] ) . to be_valid
164+ expect ( env [ OpenapiFirst ::Test ::RESPONSE ] ) . to be_a ( OpenapiFirst ::ValidatedResponse )
119165 end
120166
121167 it 'adds an assert_api_conform method that targets the specified API' do
0 commit comments