From a45576a8714a04f6465798031252e953ddd0b72b Mon Sep 17 00:00:00 2001
From: Asmir Mustafic <asmir.mustafic@getyourguide.com>
Date: Thu, 23 Jan 2025 18:04:41 +0100
Subject: [PATCH] handle missing error code (0 as default)

---
 .../contentstack/sdk/CSHttpConnection.java    |  9 +++-
 .../sdk/CSHttpConnectionTest.java             | 41 +++++++++++++++++++
 2 files changed, 49 insertions(+), 1 deletion(-)
 create mode 100644 src/test/java/com/contentstack/sdk/CSHttpConnectionTest.java

diff --git a/src/main/java/com/contentstack/sdk/CSHttpConnection.java b/src/main/java/com/contentstack/sdk/CSHttpConnection.java
index 4a7c1b23..af215a69 100644
--- a/src/main/java/com/contentstack/sdk/CSHttpConnection.java
+++ b/src/main/java/com/contentstack/sdk/CSHttpConnection.java
@@ -305,7 +305,14 @@ void setError(String errResp) {
         responseJSON.put(ERROR_MESSAGE, responseJSON.optString(ERROR_MESSAGE));
         responseJSON.put(ERROR_CODE, responseJSON.optString(ERROR_CODE));
         responseJSON.put(ERRORS, responseJSON.optString(ERRORS));
-        int errCode = Integer.parseInt(responseJSON.optString(ERROR_CODE));
+
+        int errCode = 0;
+        try {
+            errCode = Integer.parseInt(responseJSON.optString(ERROR_CODE));
+        } catch (NumberFormatException e) {
+            // in case of missing error code, we keep it 0
+        }
+
         connectionRequest.onRequestFailed(responseJSON, errCode, callBackObject);
     }
 
diff --git a/src/test/java/com/contentstack/sdk/CSHttpConnectionTest.java b/src/test/java/com/contentstack/sdk/CSHttpConnectionTest.java
new file mode 100644
index 00000000..0570e20c
--- /dev/null
+++ b/src/test/java/com/contentstack/sdk/CSHttpConnectionTest.java
@@ -0,0 +1,41 @@
+package com.contentstack.sdk;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import org.json.JSONObject;
+import org.junit.jupiter.api.Test;
+
+class CSHttpConnectionTest {
+
+  static class MockIRequestModelHTTP implements IRequestModelHTTP {
+    public JSONObject error;
+    public int statusCode;
+
+    @Override
+    public void sendRequest() {
+      // Do nothing
+    }
+
+    @Override
+    public void onRequestFailed(JSONObject error, int statusCode, ResultCallBack callBackObject) {
+      this.error = error;
+      this.statusCode = statusCode;
+    }
+
+    @Override
+    public void onRequestFinished(CSHttpConnection request) {
+      // Do nothing
+    }
+  };
+
+  @Test
+  void setError() {
+    MockIRequestModelHTTP csConnectionRequest = new MockIRequestModelHTTP();
+
+    CSHttpConnection connection = new CSHttpConnection("https://www.example.com", csConnectionRequest);
+    connection.setError("Something bad");
+
+    assertEquals("Something bad", csConnectionRequest.error.getString("error_message"));
+    assertEquals(0, csConnectionRequest.statusCode);
+  }
+}
\ No newline at end of file