def test_givenSerializable_whenApplyingFilter_thenSetContentTypeToApplicationJson(self): body = {"hello": "goodbye"} response = ResponseBuilder().body(body).build() self.filter.doFilter(A_REQUEST, response, self.filterChainMock) self.assertEqual("application/json", response.headers['Content-Type'])
def test_givenAList_whenApplyingFilter_thenSerializeToJson(self): body = ["hello"] response = ResponseBuilder().body(body).build() self.filter.doFilter(A_REQUEST, response, self.filterChainMock) self.assertEqual(body, json.loads(response.body))
def test_whenApplyingFilter_thenAddsAHeaderField(self): request = RequestBuilder().build() response = ResponseBuilder().build() self.filter.doFilter(request, response, self.filter_chain_mock) self.assertTrue("Jivago" in response.headers['X-POWERED-BY'])
def test_givenDtoNotAnnotatedAsSerializable_whenApplyingFilter_thenBodyIsNotSerialized(self): response = ResponseBuilder().body(AN_UNSERIALIZABLE_OBJECT).build() self.registryMock.is_annotated.return_value = False self.filter.doFilter(A_REQUEST, response, self.filterChainMock) self.assertEqual(AN_UNSERIALIZABLE_OBJECT, response.body)
def test_givenSerializableBody_whenApplyingFilter_thenDtoIsConvertedToDictionaryByHandler(self): expected_body = {"data": TEST_DATA} response = ResponseBuilder().body(A_DTO).build() self.serializerMock.serialize.return_value = expected_body self.filter.doFilter(A_REQUEST, response, self.filterChainMock) self.assertEqual(expected_body, response.body)
def test_givenTrailingSemiColonInContentType_whenApplyingFilter_thenMatchAnyway(self): request = RequestBuilder() \ .headers({"Content-Type": "application/json; "}) \ .body(b'{"name": "bar"}') \ .build() self.filter.doFilter(request, ResponseBuilder().build(), self.filterChainMock) self.assertEqual({"name": "bar"}, request.body)
def test_givenApplicationJsonHeaderWithEmptyBody_whenApplyingFilter_thenDoNotDeserializeTheEmptyString( self): request = RequestBuilder().headers({ "Content-Type": "application/json" }).body("").method("POST").build() self.filter.doFilter(A_REQUEST, ResponseBuilder().build(), self.filterChainMock) self.assertEqual("", request.body)
def test_givenMultipleContentTypeDirectives_whenApplyingFilter_thenMatchOnMediaType(self): """https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type""" request = RequestBuilder() \ .headers({"Content-Type": "application/json; charset=utf-8"}) \ .body(b'{"name": "bar"}') \ .build() self.filter.doFilter(request, ResponseBuilder().build(), self.filterChainMock) self.assertEqual({"name": "bar"}, request.body)
def test_givenAnyResponse_whenApplyingFilter_ShouldNotAddTransferEncodingHeader(self): response = ResponseBuilder().body("some body").build() self.filter.doFilter(RequestBuilder().build(), response, self.filterChainMock) self.assertIsNone(response.headers["Transfer-Encoding"])
def test_givenStreamingResponseBody_whenApplyingFilter_ShouldAddTransferEncodingHeader(self): response = ResponseBuilder().body(StreamingResponseBody([])).build() self.filter.doFilter(RequestBuilder().build(), response, self.filterChainMock) self.assertEqual("chunked", response.headers["Transfer-Encoding"])
def test_given404Response_shouldNotInjectCorsHeaders(self): response = ResponseBuilder().status(404).build() self.filter.doFilter(self.request, response, self.filter_chain_mock) self.cors_handler_mock.inject_cors_headers.assert_not_called()
def setUp(self): self.request_scope_mock: RequestScopeCache = mock.create_autospec(RequestScopeCache) self.filter_chain_mock: FilterChain = mock.create_autospec(FilterChain) self.filter = RequestScopeFilter(self.request_scope_mock) self.mock_container = Mock() self.mock_container.filter_chain, self.mock_container.request_scope = self.filter_chain_mock, self.request_scope_mock def test_whenApplyingFilter_shouldClearScopeCacheAfterInvokingFilterChain(self): self.filter.doFilter(SOME_REQUEST, SOME_RESPONSE, self.filter_chain_mock) self.mock_container.assert_has_calls( [call.filter_chain.doFilter(SOME_REQUEST, SOME_RESPONSE), call.request_scope.clear()]) def test_givenUncaughtException_whenApplyingFilter_shouldClearCacheAndRethrow(self): self.filter_chain_mock.doFilter.side_effect = MyException() with self.assertRaises(MyException): self.filter.doFilter(SOME_REQUEST, SOME_RESPONSE, self.filter_chain_mock) self.request_scope_mock.clear.assert_called() SOME_RESPONSE = ResponseBuilder().build() SOME_REQUEST = RequestBuilder().build() class MyException(Exception): pass