diff --git a/chopper/lib/src/interceptors/response_converter_interceptor.dart b/chopper/lib/src/interceptors/response_converter_interceptor.dart index 5d2dd188..07d054e4 100644 --- a/chopper/lib/src/interceptors/response_converter_interceptor.dart +++ b/chopper/lib/src/interceptors/response_converter_interceptor.dart @@ -52,17 +52,13 @@ class ResponseConverterInterceptor implements InternalInterceptor { Response response, ConvertResponse? responseConverter, ) async { - Response? newResponse; if (responseConverter != null) { - newResponse = await responseConverter(response); + response = await responseConverter(response); } else if (_converter != null) { - newResponse = await _decodeResponse(response, _converter!); + response = await _decodeResponse(response, _converter!); } - return Response( - newResponse?.base ?? response.base, - newResponse?.body ?? response.body, - ); + return Response(response.base, response.body); } /// Converts the [response] using [_converter]. diff --git a/chopper/test/chain/response_converter_interceptor_test.dart b/chopper/test/chain/response_converter_interceptor_test.dart index 1edfe680..41a3a968 100644 --- a/chopper/test/chain/response_converter_interceptor_test.dart +++ b/chopper/test/chain/response_converter_interceptor_test.dart @@ -70,6 +70,44 @@ void main() { expect(converter.called, 0); }); + test( + 'response is successful converter is not null and response converter is null, response is converted with null body', + () async { + final converter = ResponseNullBodyConverter(); + interceptorChain = InterceptorChain( + interceptors: [ + ResponseConverterInterceptor(converter: converter), + ResponseInterceptor(), + ], + request: testRequest, + ); + + final response = await interceptorChain.proceed(testRequest); + + expect(response.body, null); + expect(converter.called, 1); + }); + + test( + 'response is successful converter is not null and response converter is not null, response is converted by response converter with null body', + () async { + final converter = ResponseNullBodyConverter(); + interceptorChain = InterceptorChain( + interceptors: [ + ResponseConverterInterceptor( + converter: converter, + responseConverter: (response) => Response(response.base, null)), + ResponseInterceptor(), + ], + request: testRequest, + ); + + final response = await interceptorChain.proceed(testRequest); + + expect(response.body, null); + expect(converter.called, 0); + }); + test( 'response is unsuccessful converter is not null and response converter is not null, response is not converted', () async { @@ -153,6 +191,8 @@ void main() { expect(converter.called, 0); }); }); + + group('response converter returns converted response tests', () {}); } // ignore mutability warning for test class. @@ -173,6 +213,24 @@ class ResponseConverter implements Converter { } } +// ignore mutability warning for test class. +//ignore: must_be_immutable +class ResponseNullBodyConverter implements Converter { + int called = 0; + + @override + FutureOr convertRequest(Request request) { + return request; + } + + @override + FutureOr> convertResponse( + Response response) { + called++; + return Response(response.base, null as BodyType); + } +} + // ignore mutability warning for test class. //ignore: must_be_immutable class ResponseErrorConverter implements ErrorConverter {