19
19
20
20
21
21
@pytest .fixture
22
- def method_handler_chain () -> RestApiGatewayHandlerChain :
23
- """Returns a dummy chain for testing."""
24
- method_handler_chain = RestApiGatewayHandlerChain (request_handlers = [MethodRequestHandler ()])
25
- # Sets raise_on_error to allow capturing the Exceptions raised by the validator
26
- method_handler_chain .raise_on_error = True
27
- return method_handler_chain
22
+ def method_request_handler ():
23
+ """Returns a dummy request handler invoker for testing."""
24
+
25
+ def _handler_invoker (context : RestApiInvocationContext ):
26
+ return MethodRequestHandler ()(RestApiGatewayHandlerChain (), context , Response ())
27
+
28
+ return _handler_invoker
28
29
29
30
30
31
@pytest .fixture
@@ -40,10 +41,10 @@ def dummy_context():
40
41
41
42
42
43
class TestMethodRequestHandler :
43
- def test_no_validator (self , method_handler_chain , dummy_context ):
44
- method_handler_chain . handle (dummy_context , Response () )
44
+ def test_no_validator (self , method_request_handler , dummy_context ):
45
+ method_request_handler (dummy_context )
45
46
46
- def test_validator_no_validation_required (self , method_handler_chain , dummy_context ):
47
+ def test_validator_no_validation_required (self , method_request_handler , dummy_context ):
47
48
validator_id = "validatorId"
48
49
validator = RequestValidator (id = validator_id , validateRequestParameters = False )
49
50
dummy_context .deployment .rest_api .validators = {validator_id : validator }
@@ -54,9 +55,9 @@ def test_validator_no_validation_required(self, method_handler_chain, dummy_cont
54
55
"method.request.header.foo" : True ,
55
56
},
56
57
)
57
- method_handler_chain . handle (dummy_context , Response () )
58
+ method_request_handler (dummy_context )
58
59
59
- def test_validator_no_params_to_validate (self , method_handler_chain , dummy_context ):
60
+ def test_validator_no_params_to_validate (self , method_request_handler , dummy_context ):
60
61
validator_id = "validatorId"
61
62
validator = RequestValidator (id = validator_id , validateRequestParameters = False )
62
63
dummy_context .deployment .rest_api .validators = {validator_id : validator }
@@ -67,9 +68,9 @@ def test_validator_no_params_to_validate(self, method_handler_chain, dummy_conte
67
68
"method.request.header.foo" : False ,
68
69
},
69
70
)
70
- method_handler_chain . handle (dummy_context , Response () )
71
+ method_request_handler (dummy_context )
71
72
72
- def test_validator_request_parameters (self , method_handler_chain , dummy_context ):
73
+ def test_validator_request_parameters (self , method_request_handler , dummy_context ):
73
74
validator_id = "validatorId"
74
75
validator = RequestValidator (id = validator_id , validateRequestParameters = True )
75
76
dummy_context .deployment .rest_api .validators = {validator_id : validator }
@@ -87,29 +88,26 @@ def test_validator_request_parameters(self, method_handler_chain, dummy_context)
87
88
headers = {}, query_string_parameters = {}, path = ""
88
89
)
89
90
with pytest .raises (BadRequestParametersError ) as e :
90
- method_handler_chain . handle (dummy_context , Response () )
91
+ method_request_handler (dummy_context )
91
92
assert e .value .message == "Missing required request parameters: [x-header, proxy, query]"
92
93
93
94
# invocation with valid header
94
95
dummy_context .invocation_request ["headers" ]["x-header" ] = "foobar"
95
- method_handler_chain .error = None
96
96
with pytest .raises (BadRequestParametersError ) as e :
97
- method_handler_chain . handle (dummy_context , Response () )
97
+ method_request_handler (dummy_context )
98
98
assert e .value .message == "Missing required request parameters: [proxy, query]"
99
99
100
100
# invocation with valid header and querystring
101
101
dummy_context .invocation_request ["query_string_parameters" ]["query" ] = "result"
102
- method_handler_chain .error = None
103
102
with pytest .raises (BadRequestParametersError ) as e :
104
- method_handler_chain . handle (dummy_context , Response () )
103
+ method_request_handler (dummy_context )
105
104
assert e .value .message == "Missing required request parameters: [proxy]"
106
105
107
106
# invocation with valid request
108
107
dummy_context .invocation_request ["path" ] = "/proxy/path"
109
- method_handler_chain .error = None
110
- method_handler_chain .handle (dummy_context , Response ())
108
+ method_request_handler (dummy_context )
111
109
112
- def test_validator_request_body_empty_model (self , method_handler_chain , dummy_context ):
110
+ def test_validator_request_body_empty_model (self , method_request_handler , dummy_context ):
113
111
validator_id = "validatorId"
114
112
model_id = "model_id"
115
113
validator = RequestValidator (id = validator_id , validateRequestBody = True )
@@ -128,13 +126,13 @@ def test_validator_request_body_empty_model(self, method_handler_chain, dummy_co
128
126
129
127
# Invocation with no body
130
128
dummy_context .invocation_request = InvocationRequest (body = b"{}" )
131
- method_handler_chain . handle (dummy_context , Response () )
129
+ method_request_handler (dummy_context )
132
130
133
131
# Invocation with a body
134
132
dummy_context .invocation_request = InvocationRequest (body = b'{"foo": "bar"}' )
135
- method_handler_chain . handle (dummy_context , Response () )
133
+ method_request_handler (dummy_context )
136
134
137
- def test_validator_validate_body_with_schema (self , method_handler_chain , dummy_context ):
135
+ def test_validator_validate_body_with_schema (self , method_request_handler , dummy_context ):
138
136
validator_id = "validatorId"
139
137
model_id = "model_id"
140
138
validator = RequestValidator (id = validator_id , validateRequestBody = True )
@@ -155,25 +153,22 @@ def test_validator_validate_body_with_schema(self, method_handler_chain, dummy_c
155
153
156
154
# Invocation with no body
157
155
dummy_context .invocation_request = InvocationRequest (body = b"{}" )
158
- method_handler_chain .error = None
159
156
with pytest .raises (BadRequestBodyError ) as e :
160
- method_handler_chain . handle (dummy_context , Response () )
157
+ method_request_handler (dummy_context )
161
158
assert e .value .message == "Invalid request body"
162
159
163
160
# Invocation with an invalid body
164
161
dummy_context .invocation_request = InvocationRequest (body = b'{"not": "foo"}' )
165
- method_handler_chain .error = None
166
162
with pytest .raises (BadRequestBodyError ) as e :
167
- method_handler_chain . handle (dummy_context , Response () )
163
+ method_request_handler (dummy_context )
168
164
assert e .value .message == "Invalid request body"
169
165
170
166
# Invocation with a valid body
171
167
dummy_context .invocation_request = InvocationRequest (body = b'{"foo": "bar"}' )
172
- method_handler_chain .error = None
173
- method_handler_chain .handle (dummy_context , Response ())
168
+ method_request_handler (dummy_context )
174
169
175
170
def test_validator_validate_body_with_no_model_for_schema_name (
176
- self , method_handler_chain , dummy_context
171
+ self , method_request_handler , dummy_context
177
172
):
178
173
# TODO verify this is required as it might not be a possible scenario on aws
179
174
validator_id = "validatorId"
@@ -185,13 +180,12 @@ def test_validator_validate_body_with_no_model_for_schema_name(
185
180
)
186
181
187
182
dummy_context .invocation_request = InvocationRequest (body = b"{}" )
188
- method_handler_chain .error = None
189
183
with pytest .raises (BadRequestBodyError ) as e :
190
- method_handler_chain . handle (dummy_context , Response () )
184
+ method_request_handler (dummy_context )
191
185
assert e .value .message == "Invalid request body"
192
186
193
187
def test_validate_body_with_circular_and_recursive_model (
194
- self , method_handler_chain , dummy_context
188
+ self , method_request_handler , dummy_context
195
189
):
196
190
validator_id = "validatorId"
197
191
model_1 = "Person"
@@ -266,7 +260,7 @@ def test_validate_body_with_circular_and_recursive_model(
266
260
).encode ()
267
261
)
268
262
with pytest .raises (BadRequestBodyError ) as e :
269
- method_handler_chain . handle (dummy_context , Response () )
263
+ method_request_handler (dummy_context )
270
264
assert e .value .message == "Invalid request body"
271
265
272
266
# Valid body
@@ -284,5 +278,4 @@ def test_validate_body_with_circular_and_recursive_model(
284
278
}
285
279
).encode ()
286
280
)
287
- method_handler_chain .error = None
288
- method_handler_chain .handle (dummy_context , Response ())
281
+ method_request_handler (dummy_context )
0 commit comments