diff --git a/packages/talker_dio_logger/lib/dio_logs.dart b/packages/talker_dio_logger/lib/dio_logs.dart index dd66e5c4..46a25a53 100644 --- a/packages/talker_dio_logger/lib/dio_logs.dart +++ b/packages/talker_dio_logger/lib/dio_logs.dart @@ -82,6 +82,7 @@ class DioResponseLog extends TalkerLog { final responseMessage = response.statusMessage; final data = response.data; final headers = response.headers.map; + final redirects = response.redirects; msg += '\nStatus: ${response.statusCode}'; @@ -98,6 +99,13 @@ class DioResponseLog extends TalkerLog { final prettyHeaders = _encoder.convert(headers); msg += '\nHeaders: $prettyHeaders'; } + + if (settings.printResponseRedirects && redirects.isNotEmpty) { + final prettyRedirects = redirects.map((redirect) { + return '[${redirect.statusCode} ${redirect.method} - ${redirect.location}]'; + }).join('\n'); + msg += '\nRedirects:\n$prettyRedirects'; + } } catch (_) { // TODO: add handling can`t convert } diff --git a/packages/talker_dio_logger/lib/talker_dio_logger_settings.dart b/packages/talker_dio_logger/lib/talker_dio_logger_settings.dart index 7d2b3724..fe24625e 100644 --- a/packages/talker_dio_logger/lib/talker_dio_logger_settings.dart +++ b/packages/talker_dio_logger/lib/talker_dio_logger_settings.dart @@ -8,6 +8,7 @@ class TalkerDioLoggerSettings { this.printResponseData = true, this.printResponseHeaders = false, this.printResponseMessage = true, + this.printResponseRedirects = false, this.printErrorData = true, this.printErrorHeaders = true, this.printErrorMessage = true, @@ -34,6 +35,9 @@ class TalkerDioLoggerSettings { /// Print [response.statusMessage] if true final bool printResponseMessage; + /// Print [response.redirects] if true + final bool printResponseRedirects; + /// Print [error.response.data] if true final bool printErrorData; diff --git a/packages/talker_dio_logger/test/logs_test.dart b/packages/talker_dio_logger/test/logs_test.dart index b46439bf..f01d725f 100644 --- a/packages/talker_dio_logger/test/logs_test.dart +++ b/packages/talker_dio_logger/test/logs_test.dart @@ -52,6 +52,57 @@ void main() { result, contains('Headers: {\n "Authorization": "Bearer Token"\n}')); }); + test( + 'generateTextMessage should include redirects if printResponseRedirects is true', + () { + final requestOptions = RequestOptions( + path: '/test', + method: 'GET', + ); + final settings = TalkerDioLoggerSettings(printResponseRedirects: true); + final dioRequestLog = DioResponseLog( + 'Test message', + response: Response( + requestOptions: requestOptions, + redirects: [ + RedirectRecord(200, 'GET', Uri.parse('about:blank')), + RedirectRecord(200, 'POST', Uri.parse('about:blank')), + ], + ), + settings: settings, + ); + + final result = dioRequestLog.generateTextMessage(); + + expect( + result, + contains( + 'Redirects:\n[200 GET - about:blank]\n[200 POST - about:blank]')); + }); + + test( + 'generateTextMessage should not include redirects if printResponseRedirects is false', + () { + final requestOptions = RequestOptions( + path: '/test', + method: 'GET', + ); + final settings = TalkerDioLoggerSettings(printResponseRedirects: false); + final dioRequestLog = DioResponseLog( + 'Test message', + response: Response( + requestOptions: requestOptions, + redirects: [ + RedirectRecord(200, 'GET', Uri.parse('about:blank')), + ], + ), + settings: settings, + ); + + final result = dioRequestLog.generateTextMessage(); + expect(result.contains('Redirects:'), isFalse); + }); + // Add more tests for DioRequestLog as needed });