From 28a22218fcc5be9a998f47eabbc39b7a1f89a659 Mon Sep 17 00:00:00 2001
From: Ashita Prasad <ashitaprasad92@gmail.com>
Date: Tue, 17 Sep 2024 02:30:58 +0530
Subject: [PATCH] Fixes  #415

---
 lib/utils/http_utils.dart               | 49 +++++++++++++------------
 lib/widgets/response_widgets.dart       | 14 ++++---
 test/widgets/response_widgets_test.dart | 15 +++++---
 3 files changed, 42 insertions(+), 36 deletions(-)

diff --git a/lib/utils/http_utils.dart b/lib/utils/http_utils.dart
index e323939a..e12f029f 100644
--- a/lib/utils/http_utils.dart
+++ b/lib/utils/http_utils.dart
@@ -101,33 +101,34 @@ String stripUrlParams(String url) {
 
 (List<ResponseBodyView>, String?) getResponseBodyViewOptions(
     MediaType? mediaType) {
-  if (mediaType != null) {
-    var type = mediaType.type;
-    var subtype = mediaType.subtype;
-    if (kResponseBodyViewOptions.containsKey(type)) {
-      if (kResponseBodyViewOptions[type]!.containsKey(subtype)) {
-        return (
-          kResponseBodyViewOptions[type]![subtype]!,
-          kCodeHighlighterMap[subtype] ?? subtype
-        );
-      }
-      if (subtype.contains(kSubTypeJson)) {
-        subtype = kSubTypeJson;
-      }
-      if (subtype.contains(kSubTypeXml)) {
-        subtype = kSubTypeXml;
-      }
-      if (kResponseBodyViewOptions[type]!.containsKey(subtype)) {
-        return (
-          kResponseBodyViewOptions[type]![subtype]!,
-          kCodeHighlighterMap[subtype] ?? subtype
-        );
-      }
+  if (mediaType == null) {
+    return (kRawBodyViewOptions, null);
+  }
+  var type = mediaType.type;
+  var subtype = mediaType.subtype;
+  if (kResponseBodyViewOptions.containsKey(type)) {
+    if (kResponseBodyViewOptions[type]!.containsKey(subtype)) {
       return (
-        kResponseBodyViewOptions[type]![kSubTypeDefaultViewOptions]!,
-        subtype
+        kResponseBodyViewOptions[type]![subtype]!,
+        kCodeHighlighterMap[subtype] ?? subtype
       );
     }
+    if (subtype.contains(kSubTypeJson)) {
+      subtype = kSubTypeJson;
+    }
+    if (subtype.contains(kSubTypeXml)) {
+      subtype = kSubTypeXml;
+    }
+    if (kResponseBodyViewOptions[type]!.containsKey(subtype)) {
+      return (
+        kResponseBodyViewOptions[type]![subtype]!,
+        kCodeHighlighterMap[subtype] ?? subtype
+      );
+    }
+    return (
+      kResponseBodyViewOptions[type]![kSubTypeDefaultViewOptions]!,
+      subtype
+    );
   }
   return (kNoBodyViewOptions, null);
 }
diff --git a/lib/widgets/response_widgets.dart b/lib/widgets/response_widgets.dart
index 42154478..7b269fc1 100644
--- a/lib/widgets/response_widgets.dart
+++ b/lib/widgets/response_widgets.dart
@@ -345,12 +345,14 @@ class ResponseBody extends StatelessWidget {
       );
     }
 
-    var mediaType = responseModel.mediaType;
-    if (mediaType == null) {
-      return ErrorMessage(
-          message:
-              '$kMsgUnknowContentType - ${responseModel.contentType}. $kUnexpectedRaiseIssue');
-    }
+    final mediaType =
+        responseModel.mediaType ?? MediaType(kTypeText, kSubTypePlain);
+    // Fix #415: Treat null Content-type as plain text instead of Error message
+    // if (mediaType == null) {
+    //   return ErrorMessage(
+    //       message:
+    //           '$kMsgUnknowContentType - ${responseModel.contentType}. $kUnexpectedRaiseIssue');
+    // }
 
     var responseBodyView = getResponseBodyViewOptions(mediaType);
     var options = responseBodyView.$1;
diff --git a/test/widgets/response_widgets_test.dart b/test/widgets/response_widgets_test.dart
index 1c3c4bef..74df9a1b 100644
--- a/test/widgets/response_widgets_test.dart
+++ b/test/widgets/response_widgets_test.dart
@@ -214,8 +214,13 @@ void main() {
         findsOneWidget);
   });
 
-  testWidgets('Testing Response Body, no mediaType', (tester) async {
-    var responseModelNoHeaders = responseModel.copyWith(headers: null);
+  testWidgets(
+      'Testing Response Body, no mediaType; shoud be default plaintext preview',
+      (tester) async {
+    var responseModelNoHeaders = responseModel.copyWith(
+      headers: null,
+      formattedBody: null,
+    );
     var requestModelNoResponseHeaders =
         testRequestModel.copyWith(httpResponseModel: responseModelNoHeaders);
 
@@ -230,10 +235,8 @@ void main() {
       ),
     );
 
-    expect(
-        find.text(
-            'Unknown Response Content-Type - ${responseModelNoHeaders.contentType}. $kUnexpectedRaiseIssue'),
-        findsOneWidget);
+    expect(find.text("Raw"), findsOneWidget);
+    expect(find.text('{"data":"world"}'), findsOneWidget);
   });
 
   testWidgets('Testing Response Body for No body view', (tester) async {