diff --git a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/CookieJarImpl.kt b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/CookieJarImpl.kt index 9070c812..83ad8f5c 100644 --- a/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/CookieJarImpl.kt +++ b/owncloudComLibrary/src/main/java/com/owncloud/android/lib/common/http/CookieJarImpl.kt @@ -8,7 +8,7 @@ class CookieJarImpl( private val sCookieStore: HashMap> ) : CookieJar { - private fun containsCookieWithName(cookies: List, name: String): Boolean { + fun containsCookieWithName(cookies: List, name: String): Boolean { for (cookie: Cookie in cookies) { if (cookie.name == name) { return true; @@ -17,7 +17,7 @@ class CookieJarImpl( return false; } - private fun getUpdatedCookies(oldCookies: List, newCookies: List): List { + fun getUpdatedCookies(oldCookies: List, newCookies: List): List { val updatedList = ArrayList(newCookies); for (oldCookie: Cookie in oldCookies) { if (!containsCookieWithName(updatedList, oldCookie.name)) { @@ -27,11 +27,11 @@ class CookieJarImpl( return updatedList; } - override fun saveFromResponse(url: HttpUrl, newCookies: List) { + override fun saveFromResponse(url: HttpUrl, cookies: List) { // Avoid duplicated cookies but update val currentCookies: List = sCookieStore[url.host] ?: ArrayList() - val updatedCookies: List = getUpdatedCookies(currentCookies, newCookies); - sCookieStore.put(url.host, updatedCookies); + val updatedCookies: List = getUpdatedCookies(currentCookies, cookies); + sCookieStore[url.host] = updatedCookies; } override fun loadForRequest(url: HttpUrl) = diff --git a/owncloudComLibrary/src/test/java/com/owncloud/android/lib/CookieJarImplTest.kt b/owncloudComLibrary/src/test/java/com/owncloud/android/lib/CookieJarImplTest.kt new file mode 100644 index 00000000..f0e62a1f --- /dev/null +++ b/owncloudComLibrary/src/test/java/com/owncloud/android/lib/CookieJarImplTest.kt @@ -0,0 +1,74 @@ +package com.owncloud.android.lib + +import com.owncloud.android.lib.common.http.CookieJarImpl +import junit.framework.Assert.assertEquals +import junit.framework.Assert.assertFalse +import junit.framework.Assert.assertTrue +import okhttp3.Cookie +import okhttp3.HttpUrl.Companion.toHttpUrl +import org.junit.Test + +class CookieJarImplTest { + + private val oldCookies = ArrayList().apply { + add(COOKIE_A) + add(COOKIE_B_OLD) + } + + private val newCookies = ArrayList().apply { + add(COOKIE_B_NEW) + } + + private val updatedCookies = ArrayList().apply { + add(COOKIE_A) + add(COOKIE_B_NEW) + } + + private val cookieStore = HashMap>().apply { + put(SOME_HOST, oldCookies) + } + + private val cookieJarImpl = CookieJarImpl(cookieStore) + + @Test + fun testContainsCookieWithNameReturnsTrue() { + assertTrue(cookieJarImpl.containsCookieWithName(oldCookies, COOKIE_B_OLD.name)) + } + + @Test + fun testContainsCookieWithNameReturnsFalse() { + assertFalse(cookieJarImpl.containsCookieWithName(newCookies, COOKIE_A.name)) + } + + @Test + fun testGetUpdatedCookies() { + val generatedUpdatedCookies = cookieJarImpl.getUpdatedCookies(oldCookies, newCookies) + assertEquals(2, generatedUpdatedCookies.size) + assertEquals(updatedCookies[0], generatedUpdatedCookies[1]) + assertEquals(updatedCookies[1], generatedUpdatedCookies[0]) + } + + @Test + fun testCookieStoreUpdateViaSaveFromResponse() { + cookieJarImpl.saveFromResponse(SOME_URL, newCookies) + val generatedUpdatedCookies = cookieStore[SOME_HOST] + assertEquals(2, generatedUpdatedCookies?.size) + assertEquals(updatedCookies[0], generatedUpdatedCookies?.get(1)) + assertEquals(updatedCookies[1], generatedUpdatedCookies?.get(0)) + } + + @Test + fun testLoadForRequest() { + val cookies = cookieJarImpl.loadForRequest(SOME_URL) + assertEquals(oldCookies[0], cookies[0]) + assertEquals(oldCookies[1], cookies[1]) + } + + companion object { + const val SOME_HOST = "some.host.com" + val SOME_URL = "https://$SOME_HOST".toHttpUrl() + val COOKIE_A = Cookie.parse(SOME_URL, "CookieA=CookieValueA")!! + val COOKIE_B_OLD = Cookie.parse(SOME_URL, "CookieB=CookieOldValueB")!! + val COOKIE_B_NEW = Cookie.parse(SOME_URL, "CookieB=CookieNewValueB")!! + } +} \ No newline at end of file