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'])
Beispiel #2
0
    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))
Beispiel #3
0
    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'])
Beispiel #4
0
    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)
Beispiel #5
0
    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)
Beispiel #7
0
    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)
Beispiel #9
0
    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"])
Beispiel #10
0
    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"])
Beispiel #11
0
    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()
Beispiel #12
0
    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