diff --git a/auth0/src/main/java/com/auth0/android/request/ServerResponse.kt b/auth0/src/main/java/com/auth0/android/request/ServerResponse.kt index 0e40ef13..732a36d4 100644 --- a/auth0/src/main/java/com/auth0/android/request/ServerResponse.kt +++ b/auth0/src/main/java/com/auth0/android/request/ServerResponse.kt @@ -1,6 +1,7 @@ package com.auth0.android.request import java.io.InputStream +import java.util.* /** * Contains the information received from the server after executing a network request. @@ -23,5 +24,8 @@ public data class ServerResponse( * Checks if the Content-Type headers declare the received media type as 'application/json'. * @return whether this response contains a JSON body or not. */ - public fun isJson(): Boolean = headers["Content-Type"]?.contains("application/json") ?: false + public fun isJson(): Boolean = + headers.mapKeys { it.key.lowercase(Locale.getDefault()) }["content-type"] + ?.contains("application/json") + ?: false } \ No newline at end of file diff --git a/auth0/src/test/java/com/auth0/android/request/ServerResponseTest.kt b/auth0/src/test/java/com/auth0/android/request/ServerResponseTest.kt new file mode 100644 index 00000000..8438f9f6 --- /dev/null +++ b/auth0/src/test/java/com/auth0/android/request/ServerResponseTest.kt @@ -0,0 +1,65 @@ +package com.auth0.android.request + +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Test +import org.mockito.Mockito.mock +import java.io.InputStream + +public class ServerResponseTest { + + @Test + public fun shouldDetectSuccessfulResponse() { + val responseSuccess = ServerResponse( + 200, + mock(InputStream::class.java), + emptyMap() + ) + val responseNoContent = ServerResponse( + 204, + mock(InputStream::class.java), + emptyMap() + ) + assertTrue(responseSuccess.isSuccess()) + assertTrue(responseNoContent.isSuccess()) + } + + @Test + public fun shouldDetectFailedResponse() { + val responseMultipleChoices = ServerResponse( + 300, + mock(InputStream::class.java), + emptyMap() + ) + val responseUnauthorized = ServerResponse( + 401, + mock(InputStream::class.java), + emptyMap() + ) + assertFalse(responseMultipleChoices.isSuccess()) + assertFalse(responseUnauthorized.isSuccess()) + } + + @Test + public fun shouldDetectJsonContentHeader() { + val responseMixed = ServerResponse( + 200, + mock(InputStream::class.java), + mapOf("Content-Type" to listOf("application/json")) + ) + val responseLower = ServerResponse( + 200, + mock(InputStream::class.java), + mapOf("content-type" to listOf("application/json")) + ) + val responseUpper = ServerResponse( + 200, + mock(InputStream::class.java), + mapOf("CONTENT-TYPE" to listOf("application/json")) + ) + + assertTrue(responseMixed.isJson()) + assertTrue(responseLower.isJson()) + assertTrue(responseUpper.isJson()) + } +} \ No newline at end of file