diff --git a/app/src/main/java/fr/free/nrw/commons/CommonsAppAdapter.java b/app/src/main/java/fr/free/nrw/commons/CommonsAppAdapter.java deleted file mode 100644 index 57cbf13b1..000000000 --- a/app/src/main/java/fr/free/nrw/commons/CommonsAppAdapter.java +++ /dev/null @@ -1,77 +0,0 @@ -package fr.free.nrw.commons; - -import androidx.annotation.NonNull; -import fr.free.nrw.commons.auth.SessionManager; -import fr.free.nrw.commons.kvstore.JsonKvStore; -import okhttp3.OkHttpClient; -import org.wikipedia.AppAdapter; -import org.wikipedia.dataclient.SharedPreferenceCookieManager; -import org.wikipedia.json.GsonMarshaller; -import org.wikipedia.json.GsonUnmarshaller; - -public class CommonsAppAdapter extends AppAdapter { - private final int DEFAULT_THUMB_SIZE = 640; - private final String COOKIE_STORE_NAME = "cookie_store"; - - private final SessionManager sessionManager; - private final JsonKvStore preferences; - - CommonsAppAdapter(@NonNull SessionManager sessionManager, @NonNull JsonKvStore preferences) { - this.sessionManager = sessionManager; - this.preferences = preferences; - } - - @Override - public String getMediaWikiBaseUrl() { - return BuildConfig.COMMONS_URL; - } - - @Override - public String getRestbaseUriFormat() { - return BuildConfig.COMMONS_URL; - } - - @Override - public OkHttpClient getOkHttpClient() { - return OkHttpConnectionFactory.getClient(); - } - - @Override - public int getDesiredLeadImageDp() { - return DEFAULT_THUMB_SIZE; - } - - @Override - public boolean isLoggedIn() { - return sessionManager.isUserLoggedIn(); - } - - @Override - public String getUserName() { - return sessionManager.getUserName(); - } - - @Override - public String getPassword() { - return sessionManager.getPassword(); - } - - @Override - public SharedPreferenceCookieManager getCookies() { - if (!preferences.contains(COOKIE_STORE_NAME)) { - return null; - } - return GsonUnmarshaller.unmarshal(SharedPreferenceCookieManager.class, - preferences.getString(COOKIE_STORE_NAME, null)); - } - - @Override - public void setCookies(@NonNull SharedPreferenceCookieManager cookies) { - preferences.putString(COOKIE_STORE_NAME, GsonMarshaller.marshal(cookies)); - } - - @Override - public boolean logErrorsInsteadOfCrashing() { - return false; - } -} diff --git a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java index f129da0a5..2bd18bc0d 100644 --- a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java +++ b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java @@ -41,6 +41,7 @@ import fr.free.nrw.commons.media.CustomOkHttpNetworkFetcher; import fr.free.nrw.commons.settings.Prefs; import fr.free.nrw.commons.upload.FileUtils; import fr.free.nrw.commons.utils.ConfigUtils; +import fr.free.nrw.commons.wikidata.cookies.CommonsCookieJar; import io.reactivex.Completable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.internal.functions.Functions; @@ -58,7 +59,6 @@ import org.acra.annotation.AcraCore; import org.acra.annotation.AcraDialog; import org.acra.annotation.AcraMailSender; import org.acra.data.StringFormat; -import org.wikipedia.AppAdapter; import org.wikipedia.language.AppLanguageLookUpTable; import timber.log.Timber; @@ -94,6 +94,9 @@ public class CommonsApplication extends MultiDexApplication { @Named("default_preferences") JsonKvStore defaultPrefs; + @Inject + CommonsCookieJar cookieJar; + @Inject CustomOkHttpNetworkFetcher customOkHttpNetworkFetcher; @@ -161,8 +164,6 @@ public class CommonsApplication extends MultiDexApplication { .getCommonsApplicationComponent() .inject(this); - AppAdapter.set(new CommonsAppAdapter(sessionManager, defaultPrefs)); - initTimber(); if (!defaultPrefs.getBoolean("has_user_manually_removed_location")) { diff --git a/app/src/main/java/fr/free/nrw/commons/OkHttpConnectionFactory.java b/app/src/main/java/fr/free/nrw/commons/OkHttpConnectionFactory.java index ab00d1721..a750d789f 100644 --- a/app/src/main/java/fr/free/nrw/commons/OkHttpConnectionFactory.java +++ b/app/src/main/java/fr/free/nrw/commons/OkHttpConnectionFactory.java @@ -1,9 +1,9 @@ package fr.free.nrw.commons; import androidx.annotation.NonNull; +import fr.free.nrw.commons.wikidata.cookies.CommonsCookieJar; import java.io.File; import java.io.IOException; -import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.concurrent.TimeUnit; @@ -15,28 +15,27 @@ import okhttp3.Response; import okhttp3.ResponseBody; import okhttp3.logging.HttpLoggingInterceptor; import okhttp3.logging.HttpLoggingInterceptor.Level; -import org.wikipedia.dataclient.SharedPreferenceCookieManager; import org.wikipedia.dataclient.okhttp.HttpStatusException; import timber.log.Timber; public final class OkHttpConnectionFactory { private static final String CACHE_DIR_NAME = "okhttp-cache"; private static final long NET_CACHE_SIZE = 64 * 1024 * 1024; - @NonNull private static final Cache NET_CACHE = new Cache(new File(CommonsApplication.getInstance().getCacheDir(), - CACHE_DIR_NAME), NET_CACHE_SIZE); - @NonNull - private static final OkHttpClient CLIENT = createClient(); + public static OkHttpClient CLIENT; - @NonNull public static OkHttpClient getClient() { + @NonNull public static OkHttpClient getClient(final CommonsCookieJar cookieJar) { + if (CLIENT == null) { + CLIENT = createClient(cookieJar); + } return CLIENT; } @NonNull - private static OkHttpClient createClient() { + private static OkHttpClient createClient(final CommonsCookieJar cookieJar) { return new OkHttpClient.Builder() - .cookieJar(SharedPreferenceCookieManager.getInstance()) - .cache(NET_CACHE) + .cookieJar(cookieJar) + .cache(new Cache(new File(CommonsApplication.getInstance().getCacheDir(), CACHE_DIR_NAME), NET_CACHE_SIZE)) .connectTimeout(120, TimeUnit.SECONDS) .writeTimeout(120, TimeUnit.SECONDS) .readTimeout(120, TimeUnit.SECONDS) diff --git a/app/src/main/java/fr/free/nrw/commons/auth/csrf/CsrfTokenClient.kt b/app/src/main/java/fr/free/nrw/commons/auth/csrf/CsrfTokenClient.kt index a46095441..30f61ee92 100644 --- a/app/src/main/java/fr/free/nrw/commons/auth/csrf/CsrfTokenClient.kt +++ b/app/src/main/java/fr/free/nrw/commons/auth/csrf/CsrfTokenClient.kt @@ -2,8 +2,6 @@ package fr.free.nrw.commons.auth.csrf import androidx.annotation.VisibleForTesting import fr.free.nrw.commons.auth.SessionManager -import org.wikipedia.AppAdapter -import org.wikipedia.dataclient.SharedPreferenceCookieManager import org.wikipedia.dataclient.mwapi.MwQueryResponse import fr.free.nrw.commons.auth.login.LoginClient import fr.free.nrw.commons.auth.login.LoginCallback @@ -19,7 +17,8 @@ import java.util.concurrent.Executors.newSingleThreadExecutor class CsrfTokenClient( private val sessionManager: SessionManager, private val csrfTokenInterface: CsrfTokenInterface, - private val loginClient: LoginClient + private val loginClient: LoginClient, + private val logoutClient: LogoutClient ) { private var retries = 0 private var csrfTokenCall: Call? = null @@ -27,8 +26,8 @@ class CsrfTokenClient( @Throws(Throwable::class) fun getTokenBlocking(): String { var token = "" - val userName = AppAdapter.get().getUserName() - val password = AppAdapter.get().getPassword() + val userName = sessionManager.userName ?: "" + val password = sessionManager.password ?: "" for (retry in 0 until MAX_RETRIES_OF_LOGIN_BLOCKING) { try { @@ -47,7 +46,7 @@ class CsrfTokenClient( } token = response.body()!!.query()!!.csrfToken()!! - if (AppAdapter.get().isLoggedIn() && token == ANON_TOKEN) { + if (sessionManager.isUserLoggedIn && token == ANON_TOKEN) { throw RuntimeException("App believes we're logged in, but got anonymous token.") } break @@ -66,7 +65,7 @@ class CsrfTokenClient( fun request(service: CsrfTokenInterface, cb: Callback): Call = requestToken(service, object : Callback { override fun success(token: String?) { - if (AppAdapter.get().isLoggedIn() && token == ANON_TOKEN) { + if (sessionManager.isUserLoggedIn && token == ANON_TOKEN) { retryWithLogin(cb) { RuntimeException("App believes we're logged in, but got anonymous token.") } @@ -102,11 +101,11 @@ class CsrfTokenClient( } private fun retryWithLogin(callback: Callback, caught: () -> Throwable?) { - val userName = AppAdapter.get().getUserName() - val password = AppAdapter.get().getPassword() + val userName = sessionManager.userName + val password = sessionManager.password if (retries < MAX_RETRIES && !userName.isNullOrEmpty() && !password.isNullOrEmpty()) { retries++ - SharedPreferenceCookieManager.getInstance().clearAllCookies() + logoutClient.logout() login(userName, password, callback) { Timber.i("retrying...") cancel() diff --git a/app/src/main/java/fr/free/nrw/commons/auth/csrf/LogoutClient.kt b/app/src/main/java/fr/free/nrw/commons/auth/csrf/LogoutClient.kt new file mode 100644 index 000000000..eb462beaf --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/auth/csrf/LogoutClient.kt @@ -0,0 +1,8 @@ +package fr.free.nrw.commons.auth.csrf + +import fr.free.nrw.commons.wikidata.cookies.CommonsCookieStorage +import javax.inject.Inject + +class LogoutClient @Inject constructor(private val store: CommonsCookieStorage) { + fun logout() = store.clear() +} \ No newline at end of file diff --git a/app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationModule.java b/app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationModule.java index 01e4121b2..00086e83e 100644 --- a/app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationModule.java +++ b/app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationModule.java @@ -257,8 +257,8 @@ public class CommonsApplicationModule { @Named("username") @Provides - public String provideLoggedInUsername() { - return Objects.toString(AppAdapter.get().getUserName(), ""); + public String provideLoggedInUsername(SessionManager sessionManager) { + return Objects.toString(sessionManager.getUserName(), ""); } @Provides diff --git a/app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.java b/app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.java index 9d6459d45..dff0bb9c2 100644 --- a/app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.java +++ b/app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.java @@ -12,7 +12,10 @@ import fr.free.nrw.commons.actions.PageEditClient; import fr.free.nrw.commons.actions.PageEditInterface; import fr.free.nrw.commons.actions.ThanksInterface; import fr.free.nrw.commons.auth.SessionManager; +import fr.free.nrw.commons.auth.csrf.CsrfTokenClient; import fr.free.nrw.commons.auth.csrf.CsrfTokenInterface; +import fr.free.nrw.commons.auth.csrf.LogoutClient; +import fr.free.nrw.commons.auth.login.LoginClient; import fr.free.nrw.commons.auth.login.LoginInterface; import fr.free.nrw.commons.category.CategoryInterface; import fr.free.nrw.commons.explore.depictions.DepictsClient; @@ -30,6 +33,8 @@ import fr.free.nrw.commons.upload.WikiBaseInterface; import fr.free.nrw.commons.upload.depicts.DepictsInterface; import fr.free.nrw.commons.wikidata.CommonsServiceFactory; import fr.free.nrw.commons.wikidata.WikidataInterface; +import fr.free.nrw.commons.wikidata.cookies.CommonsCookieJar; +import fr.free.nrw.commons.wikidata.cookies.CommonsCookieStorage; import java.io.File; import java.util.Locale; import java.util.concurrent.TimeUnit; @@ -40,11 +45,8 @@ import okhttp3.HttpUrl; import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor; import okhttp3.logging.HttpLoggingInterceptor.Level; -import fr.free.nrw.commons.auth.csrf.CsrfTokenClient; -import org.wikipedia.AppAdapter; import org.wikipedia.dataclient.WikiSite; import org.wikipedia.json.GsonUtil; -import fr.free.nrw.commons.auth.login.LoginClient; import timber.log.Timber; @Module @@ -78,8 +80,8 @@ public class NetworkingModule { @Provides @Singleton - public CommonsServiceFactory serviceFactory() { - return new CommonsServiceFactory(AppAdapter.get().getOkHttpClient()); + public CommonsServiceFactory serviceFactory(CommonsCookieJar cookieJar) { + return new CommonsServiceFactory(OkHttpConnectionFactory.getClient(cookieJar)); } @Provides @@ -107,12 +109,27 @@ public class NetworkingModule { gson); } + @Provides + @Singleton + public CommonsCookieStorage provideCookieStorage( + @Named("default_preferences") JsonKvStore preferences) { + CommonsCookieStorage cookieStorage = new CommonsCookieStorage(preferences); + cookieStorage.load(); + return cookieStorage; + } + + @Provides + @Singleton + public CommonsCookieJar provideCookieJar(CommonsCookieStorage storage) { + return new CommonsCookieJar(storage); + } + @Named(NAMED_COMMONS_CSRF) @Provides @Singleton public CsrfTokenClient provideCommonsCsrfTokenClient(SessionManager sessionManager, - CsrfTokenInterface tokenInterface, LoginClient loginClient) { - return new CsrfTokenClient(sessionManager, tokenInterface, loginClient); + CsrfTokenInterface tokenInterface, LoginClient loginClient, LogoutClient logoutClient) { + return new CsrfTokenClient(sessionManager, tokenInterface, loginClient, logoutClient); } @Provides diff --git a/app/src/main/java/fr/free/nrw/commons/wikidata/cookies/CommonsCookieJar.kt b/app/src/main/java/fr/free/nrw/commons/wikidata/cookies/CommonsCookieJar.kt new file mode 100644 index 000000000..34b38ab80 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/wikidata/cookies/CommonsCookieJar.kt @@ -0,0 +1,98 @@ +package fr.free.nrw.commons.wikidata.cookies + +import okhttp3.Cookie +import okhttp3.CookieJar +import okhttp3.HttpUrl + +class CommonsCookieJar(private val cookieStorage: CommonsCookieStorage) : CookieJar { + override fun loadForRequest(url: HttpUrl): List { + val cookieList = mutableListOf() + val domain: String = url.toUri().getAuthority() + + cookieStorage.domains.forEach { domainSpec -> + if (domain.endsWith(domainSpec, true)) { + buildCookieList(cookieList, cookieStorage[domainSpec], null) + } else if (domainSpec.endsWith("commons.wikimedia.org")) { + // For sites outside the wikipedia.org domain, transfer the centralauth cookies + // from commons.wikimedia.org unconditionally. + buildCookieList(cookieList, cookieStorage[domainSpec], "centralauth_") + } + } + return cookieList + } + + override fun saveFromResponse(url: HttpUrl, cookies: List) { + if (cookies.isEmpty()) { + return + } + + var cookieJarModified = false + cookies.forEach { cookie -> + // Default to the URI's domain if cookie's domain is not explicitly set + val domainSpec = cookie.domainSpec(url) + if (!cookieStorage.contains(domainSpec)) { + cookieStorage[domainSpec] = mutableListOf() + } + + val cookieList = cookieStorage[domainSpec] + if (cookie.expiredOrDeleted()) { + cookieJarModified = cookieList.removeAll { it.name == cookie.name } + } else { + val i = cookieList.iterator() + var exists = false + while (i.hasNext()) { + val c = i.next() + if (c == cookie) { + // an identical cookie already exists, so we don't need to update it. + exists = true + break + } else if (c.name == cookie.name) { + // it's a cookie with the same name, but different contents, so remove the + // current cookie, so that the new one will be added. + i.remove() + } + } + if (!exists) { + cookieList.add(cookie) + cookieJarModified = true + } + } + cookieStorage[domainSpec] = cookieList + } + + if (cookieJarModified) { + cookieStorage.save() + } + } + + private fun buildCookieList( + outList: MutableList, inList: MutableList, prefix: String? + ) { + var cookieJarModified = false + + val i = inList.iterator() + while (i.hasNext()) { + val cookie = i.next() + if (prefix != null && !cookie.name.startsWith(prefix)) { + continue + } + // But wait, is the cookie expired? + if (cookie.expiresAt < System.currentTimeMillis()) { + i.remove() + cookieJarModified = true + } else { + outList.add(cookie) + } + } + + if (cookieJarModified) { + cookieStorage.save() + } + } + + private fun Cookie.expiredOrDeleted(): Boolean = + expiresAt < System.currentTimeMillis() || "deleted" == value + + private fun Cookie.domainSpec(url: HttpUrl): String = + domain.ifEmpty { url.toUri().getAuthority() } +} diff --git a/app/src/main/java/fr/free/nrw/commons/wikidata/cookies/CommonsCookieStorage.kt b/app/src/main/java/fr/free/nrw/commons/wikidata/cookies/CommonsCookieStorage.kt new file mode 100644 index 000000000..a306538a8 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/wikidata/cookies/CommonsCookieStorage.kt @@ -0,0 +1,93 @@ +package fr.free.nrw.commons.wikidata.cookies + +import com.google.gson.GsonBuilder +import com.google.gson.TypeAdapter +import com.google.gson.stream.JsonReader +import com.google.gson.stream.JsonWriter +import fr.free.nrw.commons.kvstore.JsonKvStore +import okhttp3.Cookie +import okhttp3.HttpUrl +import okhttp3.HttpUrl.Companion.toHttpUrlOrNull +import org.wikipedia.dataclient.WikiSite + +private const val COOKIE_STORE = "cookie_store" + +class CommonsCookieStorage(private val preferences: JsonKvStore? = null) { + private val gson = GsonBuilder().registerTypeAdapter( + CommonsCookieStorage::class.java, + CookieStorageTypeAdapter() + ).create() + private val cookieMap: MutableMap> = mutableMapOf() + + val domains : Set get() = cookieMap.keys.toSet() + + operator fun set(domainSpec: String, cookies: MutableList) = + cookieMap.put(domainSpec, cookies.toList()) + + operator fun get(domainSpec: String): MutableList = + cookieMap[domainSpec]?.toMutableList() ?: mutableListOf() + + fun clear() { + cookieMap.clear() + save() + } + + fun load() { + cookieMap.clear() + val json = preferences!!.getString(COOKIE_STORE, null) + if (!json.isNullOrEmpty()) { + val serializedData = gson.fromJson(json, CommonsCookieStorage::class.java) + cookieMap.putAll(serializedData.cookieMap) + } + } + + fun save() = + preferences!!.putString(COOKIE_STORE, gson.toJson(this)) + + fun contains(domainSpec: String): Boolean = + cookieMap.containsKey(domainSpec) + + companion object { + fun from(map: Map>) = CommonsCookieStorage().apply { + cookieMap.clear() + cookieMap.putAll(map) + } + } +} + +private class CookieStorageTypeAdapter : TypeAdapter() { + override fun write(out: JsonWriter, value: CommonsCookieStorage) { + out.beginObject() + value.domains.forEach { domain -> + out.name(domain).beginArray() + value[domain].forEach { out.value(it.toString()) } + out.endArray() + } + out.endObject() + } + + override fun read(input: JsonReader): CommonsCookieStorage { + val map = mutableMapOf>() + input.beginObject() + while (input.hasNext()) { + val key = input.nextName() + map[key] = input.readCookies((WikiSite.DEFAULT_SCHEME + "://" + key).toHttpUrlOrNull()) + } + input.endObject() + return CommonsCookieStorage.from(map) + } + + private fun JsonReader.readCookies(url: HttpUrl?): MutableList { + val list = mutableListOf() + beginArray() + while (hasNext()) { + val str = nextString() + url?.let { + val element: Cookie? = Cookie.parse(url, str) + element?.let { list += element } + } + } + endArray() + return list + } +} \ No newline at end of file diff --git a/app/src/test/kotlin/fr/free/nrw/commons/CommonsAppAdapterUnitTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/CommonsAppAdapterUnitTest.kt deleted file mode 100644 index 442de350a..000000000 --- a/app/src/test/kotlin/fr/free/nrw/commons/CommonsAppAdapterUnitTest.kt +++ /dev/null @@ -1,103 +0,0 @@ -package fr.free.nrw.commons - -import com.nhaarman.mockitokotlin2.verify -import com.nhaarman.mockitokotlin2.whenever -import fr.free.nrw.commons.auth.SessionManager -import fr.free.nrw.commons.kvstore.JsonKvStore -import org.junit.Assert -import org.junit.Before -import org.junit.Test -import org.mockito.Mock -import org.mockito.MockitoAnnotations -import org.wikipedia.dataclient.SharedPreferenceCookieManager -import org.wikipedia.json.GsonMarshaller -import fr.free.nrw.commons.auth.login.LoginResult - -class CommonsAppAdapterUnitTest { - - private lateinit var adapter: CommonsAppAdapter - - @Mock - private lateinit var sessionManager: SessionManager - - @Mock - private lateinit var preferences: JsonKvStore - - @Mock - private lateinit var result: LoginResult - - @Mock - private lateinit var cookies: SharedPreferenceCookieManager - - @Before - fun setUp() { - MockitoAnnotations.openMocks(this) - adapter = CommonsAppAdapter(sessionManager, preferences) - } - - @Test - @Throws(Exception::class) - fun checkAdapterNotNull() { - Assert.assertNotNull(adapter) - } - - @Test - @Throws(Exception::class) - fun testGetMediaWikiBaseUrl() { - Assert.assertEquals(adapter.mediaWikiBaseUrl, BuildConfig.COMMONS_URL) - } - - @Test - @Throws(Exception::class) - fun testGetRestbaseUriFormat() { - Assert.assertEquals(adapter.restbaseUriFormat, BuildConfig.COMMONS_URL) - } - - @Test - @Throws(Exception::class) - fun testGetDesiredLeadImageDp() { - Assert.assertEquals(adapter.desiredLeadImageDp, 640) - } - - @Test - @Throws(Exception::class) - fun testIsLoggedIn() { - whenever(sessionManager.isUserLoggedIn).thenReturn(true) - Assert.assertEquals(adapter.isLoggedIn, true) - } - - @Test - @Throws(Exception::class) - fun testGetUserName() { - whenever(sessionManager.userName).thenReturn("test") - Assert.assertEquals(adapter.userName, "test") - } - - @Test - @Throws(Exception::class) - fun testGetPassword() { - whenever(sessionManager.password).thenReturn("test") - Assert.assertEquals(adapter.password, "test") - } - - @Test - @Throws(Exception::class) - fun testSetCookies() { - adapter.cookies = cookies - verify(preferences).putString("cookie_store", GsonMarshaller.marshal(cookies)) - } - - @Test - @Throws(Exception::class) - fun testLogErrorsInsteadOfCrashing() { - Assert.assertEquals(adapter.logErrorsInsteadOfCrashing(), false) - } - - @Test - @Throws(Exception::class) - fun testGetCookiesCaseNull() { - whenever(preferences.contains("cookie_store")).thenReturn(false) - Assert.assertEquals(adapter.cookies, null) - } - -} \ No newline at end of file diff --git a/app/src/test/kotlin/fr/free/nrw/commons/MockWebServerTest.java b/app/src/test/kotlin/fr/free/nrw/commons/MockWebServerTest.java index 667e35e63..cfb364ba1 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/MockWebServerTest.java +++ b/app/src/test/kotlin/fr/free/nrw/commons/MockWebServerTest.java @@ -1,5 +1,7 @@ package fr.free.nrw.commons; +import static fr.free.nrw.commons.TestConnectionFactoryKt.createTestClient; + import androidx.annotation.NonNull; import java.util.List; import java.util.concurrent.AbstractExecutorService; @@ -12,7 +14,6 @@ import org.junit.After; import org.junit.Before; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; -import org.wikipedia.AppAdapter; import org.wikipedia.json.GsonUtil; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; @@ -23,9 +24,9 @@ public abstract class MockWebServerTest { private final TestWebServer server = new TestWebServer(); @Before public void setUp() throws Throwable { - AppAdapter.set(new TestAppAdapter()); - OkHttpClient.Builder builder = AppAdapter.get().getOkHttpClient().newBuilder(); - okHttpClient = builder.dispatcher(new Dispatcher(new ImmediateExecutorService())).build(); + OkHttpConnectionFactory.CLIENT = createTestClient(); + okHttpClient = OkHttpConnectionFactory.CLIENT.newBuilder() + .dispatcher(new Dispatcher(new ImmediateExecutorService())).build(); server.setUp(); } diff --git a/app/src/test/kotlin/fr/free/nrw/commons/TestAppAdapter.java b/app/src/test/kotlin/fr/free/nrw/commons/TestAppAdapter.java deleted file mode 100644 index 051646449..000000000 --- a/app/src/test/kotlin/fr/free/nrw/commons/TestAppAdapter.java +++ /dev/null @@ -1,65 +0,0 @@ -package fr.free.nrw.commons; - -import androidx.annotation.NonNull; -import fr.free.nrw.commons.wikidata.WikidataConstants; -import okhttp3.OkHttpClient; -import org.wikipedia.AppAdapter; -import org.wikipedia.dataclient.SharedPreferenceCookieManager; -import org.wikipedia.dataclient.okhttp.TestStubInterceptor; -import org.wikipedia.dataclient.okhttp.UnsuccessfulResponseInterceptor; - -public class TestAppAdapter extends AppAdapter { - - @Override - public String getMediaWikiBaseUrl() { - return WikidataConstants.WIKIPEDIA_URL; - } - - @Override - public String getRestbaseUriFormat() { - return "%1$s://%2$s/api/rest_v1/"; - } - - @Override - public OkHttpClient getOkHttpClient() { - return new OkHttpClient.Builder() - .addInterceptor(new UnsuccessfulResponseInterceptor()) - .addInterceptor(new TestStubInterceptor()) - .build(); - } - - @Override - public int getDesiredLeadImageDp() { - return 0; - } - - @Override - public boolean isLoggedIn() { - return false; - } - - @Override - public String getUserName() { - return null; - } - - @Override - public String getPassword() { - return null; - } - - @Override - public SharedPreferenceCookieManager getCookies() { - return null; - } - - @Override - public void setCookies(@NonNull SharedPreferenceCookieManager cookies) { - } - - @Override - public boolean logErrorsInsteadOfCrashing() { - return false; - } -} - diff --git a/app/src/test/kotlin/fr/free/nrw/commons/TestConnectionFactory.kt b/app/src/test/kotlin/fr/free/nrw/commons/TestConnectionFactory.kt new file mode 100644 index 000000000..2dc3a477c --- /dev/null +++ b/app/src/test/kotlin/fr/free/nrw/commons/TestConnectionFactory.kt @@ -0,0 +1,10 @@ +package fr.free.nrw.commons + +import okhttp3.OkHttpClient +import org.wikipedia.dataclient.okhttp.TestStubInterceptor +import org.wikipedia.dataclient.okhttp.UnsuccessfulResponseInterceptor + +fun createTestClient(): OkHttpClient = OkHttpClient.Builder() + .addInterceptor(UnsuccessfulResponseInterceptor()) + .addInterceptor(TestStubInterceptor()) + .build() diff --git a/app/src/test/kotlin/fr/free/nrw/commons/auth/LoginActivityUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/auth/LoginActivityUnitTests.kt index a98aef12f..2d80c65c9 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/auth/LoginActivityUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/auth/LoginActivityUnitTests.kt @@ -10,9 +10,10 @@ import android.view.View import android.view.ViewGroup import android.widget.TextView import androidx.test.core.app.ApplicationProvider +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.auth.login.LoginResult import fr.free.nrw.commons.kvstore.JsonKvStore import org.junit.Assert @@ -27,7 +28,6 @@ import org.robolectric.Robolectric import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config import org.robolectric.fakes.RoboMenuItem -import org.wikipedia.AppAdapter import java.lang.reflect.Method @@ -74,7 +74,7 @@ class LoginActivityUnitTests { @Before fun setUp() { MockitoAnnotations.openMocks(this) - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() activity = Robolectric.buildActivity(LoginActivity::class.java).create().get() context = ApplicationProvider.getApplicationContext() menuItem = RoboMenuItem(null) diff --git a/app/src/test/kotlin/fr/free/nrw/commons/auth/csrf/CsrfTokenClientTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/auth/csrf/CsrfTokenClientTest.kt index e2f4a7773..8d8106d7e 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/auth/csrf/CsrfTokenClientTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/auth/csrf/CsrfTokenClientTest.kt @@ -19,7 +19,8 @@ class CsrfTokenClientTest : MockWebServerTest() { private val sessionManager = mock(SessionManager::class.java) private val tokenInterface = mock(CsrfTokenInterface::class.java) private val loginClient = mock(LoginClient::class.java) - private val subject = CsrfTokenClient(sessionManager, tokenInterface, loginClient) + private val logoutClient = mock(LogoutClient::class.java) + private val subject = CsrfTokenClient(sessionManager, tokenInterface, loginClient, logoutClient) @Test @Throws(Throwable::class) diff --git a/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/BookmarkListRootFragmentUnitTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/BookmarkListRootFragmentUnitTest.kt index 57a39a0f0..18e7e67a4 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/BookmarkListRootFragmentUnitTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/BookmarkListRootFragmentUnitTest.kt @@ -15,9 +15,10 @@ import com.nhaarman.mockitokotlin2.times import com.nhaarman.mockitokotlin2.verify import com.nhaarman.mockitokotlin2.whenever import fr.free.nrw.commons.Media +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesFragment import fr.free.nrw.commons.contributions.MainActivity import fr.free.nrw.commons.explore.ParentViewPager @@ -35,7 +36,6 @@ import org.robolectric.Robolectric import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode -import org.wikipedia.AppAdapter import java.lang.reflect.Field @RunWith(RobolectricTestRunner::class) @@ -84,7 +84,7 @@ class BookmarkListRootFragmentUnitTest { @Before fun setUp() { MockitoAnnotations.openMocks(this) - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() activity = Robolectric.buildActivity(MainActivity::class.java).create().get() context = ApplicationProvider.getApplicationContext() diff --git a/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/items/BookmarkItemsFragmentUnitTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/items/BookmarkItemsFragmentUnitTest.kt index 7ebcc605d..78962ec9f 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/items/BookmarkItemsFragmentUnitTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/items/BookmarkItemsFragmentUnitTest.kt @@ -12,9 +12,10 @@ import androidx.fragment.app.FragmentTransaction import androidx.recyclerview.widget.RecyclerView import androidx.test.core.app.ApplicationProvider import com.nhaarman.mockitokotlin2.whenever +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.category.CategoryItem import fr.free.nrw.commons.profile.ProfileActivity import fr.free.nrw.commons.upload.structure.depictions.DepictedItem @@ -28,7 +29,6 @@ import org.robolectric.Robolectric import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode -import org.wikipedia.AppAdapter import java.lang.reflect.Method import java.util.* @@ -78,7 +78,7 @@ class BookmarkItemsFragmentUnitTest { fun setUp() { MockitoAnnotations.openMocks(this) context = ApplicationProvider.getApplicationContext() - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() val activity = Robolectric.buildActivity(ProfileActivity::class.java).create().get() fragment = BookmarkItemsFragment.newInstance() val fragmentManager: FragmentManager = activity.supportFragmentManager diff --git a/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationFragmentUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationFragmentUnitTests.kt index 12fc130f8..3777ee58c 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationFragmentUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationFragmentUnitTests.kt @@ -12,9 +12,10 @@ import androidx.fragment.app.FragmentTransaction import androidx.recyclerview.widget.RecyclerView import androidx.test.core.app.ApplicationProvider import com.nhaarman.mockitokotlin2.whenever +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.contributions.ContributionController import fr.free.nrw.commons.kvstore.JsonKvStore import fr.free.nrw.commons.nearby.Place @@ -32,7 +33,6 @@ import org.robolectric.Robolectric import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode -import org.wikipedia.AppAdapter import java.lang.reflect.Method @RunWith(RobolectricTestRunner::class) @@ -98,7 +98,7 @@ class BookmarkLocationFragmentUnitTests { fun setUp() { MockitoAnnotations.initMocks(this) context = ApplicationProvider.getApplicationContext() - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() val activity = Robolectric.buildActivity(ProfileActivity::class.java).create().get() fragment = BookmarkLocationsFragment.newInstance() val fragmentManager: FragmentManager = activity.supportFragmentManager diff --git a/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesFragmentUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesFragmentUnitTests.kt index b785e01cc..dceb33060 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesFragmentUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesFragmentUnitTests.kt @@ -19,9 +19,10 @@ import com.nhaarman.mockitokotlin2.any import com.nhaarman.mockitokotlin2.times import com.nhaarman.mockitokotlin2.verify import fr.free.nrw.commons.Media +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.category.GridViewAdapter import fr.free.nrw.commons.media.MediaClient import fr.free.nrw.commons.profile.ProfileActivity @@ -38,7 +39,6 @@ import org.robolectric.RobolectricTestRunner import org.robolectric.Shadows.shadowOf import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode -import org.wikipedia.AppAdapter import java.lang.reflect.Method @@ -89,7 +89,7 @@ class BookmarkPicturesFragmentUnitTests { fun setUp() { MockitoAnnotations.initMocks(this) context = ApplicationProvider.getApplicationContext() - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() val activity = Robolectric.buildActivity(ProfileActivity::class.java).create().get() fragment = BookmarkPicturesFragment.newInstance() val fragmentManager: FragmentManager = activity.supportFragmentManager diff --git a/app/src/test/kotlin/fr/free/nrw/commons/campaigns/CampaignViewUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/campaigns/CampaignViewUnitTests.kt index 783ae1cef..efb5b6564 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/campaigns/CampaignViewUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/campaigns/CampaignViewUnitTests.kt @@ -2,10 +2,11 @@ package fr.free.nrw.commons.campaigns import android.app.Activity import android.view.View -import fr.free.nrw.commons.TestAppAdapter +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.TestCommonsApplication -import fr.free.nrw.commons.contributions.MainActivity +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.campaigns.models.Campaign +import fr.free.nrw.commons.contributions.MainActivity import org.junit.Assert import org.junit.Before import org.junit.Test @@ -16,7 +17,6 @@ import org.robolectric.Robolectric import org.robolectric.RobolectricTestRunner import org.robolectric.android.controller.ActivityController import org.robolectric.annotation.Config -import org.wikipedia.AppAdapter import java.lang.reflect.Method @RunWith(RobolectricTestRunner::class) @@ -35,7 +35,7 @@ class CampaignViewUnitTests { fun setUp() { MockitoAnnotations.initMocks(this) - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() activityController = Robolectric.buildActivity(Activity::class.java) activity = Robolectric.buildActivity(MainActivity::class.java).create().get() diff --git a/app/src/test/kotlin/fr/free/nrw/commons/category/CategoryDetailsActivityUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/category/CategoryDetailsActivityUnitTests.kt index 403003576..e5e17704d 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/category/CategoryDetailsActivityUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/category/CategoryDetailsActivityUnitTests.kt @@ -4,8 +4,9 @@ import android.content.Context import android.view.Menu import android.view.MenuItem import androidx.test.core.app.ApplicationProvider -import fr.free.nrw.commons.TestAppAdapter +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.explore.categories.media.CategoriesMediaFragment import org.junit.Assert import org.junit.Before @@ -18,7 +19,6 @@ import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config import org.robolectric.fakes.RoboMenu import org.robolectric.fakes.RoboMenuItem -import org.wikipedia.AppAdapter import java.lang.reflect.Field @RunWith(RobolectricTestRunner::class) @@ -41,7 +41,7 @@ class CategoryDetailsActivityUnitTests { MockitoAnnotations.openMocks(this) - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() context = ApplicationProvider.getApplicationContext() diff --git a/app/src/test/kotlin/fr/free/nrw/commons/contributions/ContributionsFragmentUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/contributions/ContributionsFragmentUnitTests.kt index 6c9ebba5c..2bf6e7c08 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/contributions/ContributionsFragmentUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/contributions/ContributionsFragmentUnitTests.kt @@ -9,9 +9,10 @@ import android.widget.TextView import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentTransaction import androidx.test.core.app.ApplicationProvider +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.campaigns.CampaignView import fr.free.nrw.commons.campaigns.models.Campaign import fr.free.nrw.commons.kvstore.JsonKvStore @@ -38,7 +39,6 @@ import org.robolectric.RobolectricTestRunner import org.robolectric.Shadows import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode -import org.wikipedia.AppAdapter import java.lang.reflect.Method @RunWith(RobolectricTestRunner::class) @@ -99,7 +99,7 @@ class ContributionsFragmentUnitTests { fun setUp() { MockitoAnnotations.initMocks(this) - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() context = ApplicationProvider.getApplicationContext() activity = Robolectric.buildActivity(MainActivity::class.java).create().get() diff --git a/app/src/test/kotlin/fr/free/nrw/commons/contributions/ContributionsListFragmentUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/contributions/ContributionsListFragmentUnitTests.kt index 936b0fd94..3f6f0b878 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/contributions/ContributionsListFragmentUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/contributions/ContributionsListFragmentUnitTests.kt @@ -8,23 +8,23 @@ import androidx.lifecycle.Lifecycle import androidx.test.ext.junit.runners.AndroidJUnit4 import com.google.android.material.floatingactionbutton.FloatingActionButton import fr.free.nrw.commons.Media -import fr.free.nrw.commons.TestAppAdapter +import fr.free.nrw.commons.OkHttpConnectionFactory +import fr.free.nrw.commons.R import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.upload.WikidataPlace import org.junit.Assert import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentMatchers.anyInt +import org.mockito.Mockito.mock import org.mockito.Mockito.verify import org.mockito.Mockito.`when` import org.robolectric.Shadows import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode -import org.wikipedia.AppAdapter import java.lang.reflect.Method -import fr.free.nrw.commons.R -import org.mockito.Mockito.mock @RunWith(AndroidJUnit4::class) @Config(sdk = [21], application = TestCommonsApplication::class) @@ -41,7 +41,7 @@ class ContributionsListFragmentUnitTests { @Before fun setUp() { - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() scenario = launchFragmentInContainer( initialState = Lifecycle.State.RESUMED, diff --git a/app/src/test/kotlin/fr/free/nrw/commons/contributions/MainActivityUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/contributions/MainActivityUnitTests.kt index ef48b3b68..f163e43f3 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/contributions/MainActivityUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/contributions/MainActivityUnitTests.kt @@ -10,9 +10,10 @@ import androidx.test.core.app.ApplicationProvider import androidx.work.Configuration import androidx.work.testing.WorkManagerTestInitHelper import fr.free.nrw.commons.CommonsApplication +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.bookmarks.BookmarkFragment import fr.free.nrw.commons.contributions.MainActivity.ActiveFragment import fr.free.nrw.commons.explore.ExploreFragment @@ -36,7 +37,6 @@ import org.robolectric.Shadows import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode import org.robolectric.fakes.RoboMenuItem -import org.wikipedia.AppAdapter import java.lang.reflect.Field import java.lang.reflect.Method @@ -85,7 +85,7 @@ class MainActivityUnitTests { @Before fun setUp() { MockitoAnnotations.initMocks(this) - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() activity = Robolectric.buildActivity(MainActivity::class.java).create().get() activity.applicationKvStore = applicationKvStore diff --git a/app/src/test/kotlin/fr/free/nrw/commons/customselector/helper/OnSwipeTouchListenerTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/customselector/helper/OnSwipeTouchListenerTest.kt index 99cf39294..4e206f2a6 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/customselector/helper/OnSwipeTouchListenerTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/customselector/helper/OnSwipeTouchListenerTest.kt @@ -6,8 +6,9 @@ import android.view.MotionEvent import android.view.View import androidx.test.core.app.ApplicationProvider import com.nhaarman.mockitokotlin2.whenever -import fr.free.nrw.commons.TestAppAdapter +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.TestUtility.setFinalStatic import org.junit.Before import org.junit.Test @@ -15,12 +16,8 @@ import org.junit.runner.RunWith import org.mockito.Mock import org.mockito.MockitoAnnotations import org.powermock.core.classloader.annotations.PrepareForTest -import org.powermock.reflect.Whitebox import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config -import org.wikipedia.AppAdapter -import java.lang.reflect.Field -import java.lang.reflect.Modifier @RunWith(RobolectricTestRunner::class) @Config(sdk = [21], application = TestCommonsApplication::class) @@ -46,8 +43,7 @@ internal class OnSwipeTouchListenerTest { @Before fun setUp() { MockitoAnnotations.initMocks(this) - AppAdapter.set(TestAppAdapter()) -// motionEvent1 = MotionEvent.obtain(200, 300, MotionEvent.ACTION_MOVE, 15.0f, 10.0f, 0); + OkHttpConnectionFactory.CLIENT = createTestClient() context = ApplicationProvider.getApplicationContext() onSwipeTouchListener = OnSwipeTouchListener(context) diff --git a/app/src/test/kotlin/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivityTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivityTest.kt index b58448cb6..11c6a3feb 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivityTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivityTest.kt @@ -3,11 +3,11 @@ package fr.free.nrw.commons.customselector.ui.selector import android.content.Intent import android.net.Uri import android.os.Bundle -import fr.free.nrw.commons.TestAppAdapter +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.customselector.model.Image import fr.free.nrw.commons.customselector.ui.adapter.ImageAdapter -import kotlinx.android.synthetic.main.bottom_sheet_nearby.bottom_sheet import org.junit.Before import org.junit.Test import org.junit.jupiter.api.Assertions.assertEquals @@ -19,7 +19,6 @@ import org.powermock.reflect.Whitebox import org.robolectric.Robolectric import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config -import org.wikipedia.AppAdapter import java.lang.reflect.Field import java.lang.reflect.Method @@ -46,7 +45,7 @@ class CustomSelectorActivityTest { @Before fun setUp() { MockitoAnnotations.openMocks(this) - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() activity = Robolectric.buildActivity(CustomSelectorActivity::class.java) .get() diff --git a/app/src/test/kotlin/fr/free/nrw/commons/customselector/ui/selector/FolderFragmentTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/customselector/ui/selector/FolderFragmentTest.kt index 2cad053ba..bac523d47 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/customselector/ui/selector/FolderFragmentTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/customselector/ui/selector/FolderFragmentTest.kt @@ -5,7 +5,6 @@ import android.os.Bundle import android.os.Looper import android.view.LayoutInflater import android.view.View -import fr.free.nrw.commons.customselector.model.Result import android.widget.ProgressBar import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentTransaction @@ -13,10 +12,12 @@ import androidx.recyclerview.widget.RecyclerView import androidx.test.core.app.ApplicationProvider import com.facebook.drawee.backends.pipeline.Fresco import com.facebook.soloader.SoLoader +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.customselector.model.CallbackStatus +import fr.free.nrw.commons.customselector.model.Result import fr.free.nrw.commons.customselector.ui.adapter.FolderAdapter import org.junit.Before import org.junit.Test @@ -30,7 +31,6 @@ import org.robolectric.RobolectricTestRunner import org.robolectric.Shadows import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode -import org.wikipedia.AppAdapter import java.lang.reflect.Field /** @@ -62,7 +62,7 @@ class FolderFragmentTest { fun setUp() { MockitoAnnotations.initMocks(this) context = ApplicationProvider.getApplicationContext() - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() SoLoader.setInTestMode() Fresco.initialize(context) val activity = Robolectric.buildActivity(CustomSelectorActivity::class.java).create().get() diff --git a/app/src/test/kotlin/fr/free/nrw/commons/customselector/ui/selector/ImageFragmentTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/customselector/ui/selector/ImageFragmentTest.kt index 971bc3076..f3e08cdb3 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/customselector/ui/selector/ImageFragmentTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/customselector/ui/selector/ImageFragmentTest.kt @@ -15,9 +15,10 @@ import androidx.test.core.app.ApplicationProvider import com.facebook.drawee.backends.pipeline.Fresco import com.facebook.soloader.SoLoader import com.nhaarman.mockitokotlin2.whenever +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.customselector.model.CallbackStatus import fr.free.nrw.commons.customselector.model.Image import fr.free.nrw.commons.customselector.model.Result @@ -35,7 +36,6 @@ import org.robolectric.Shadows import org.robolectric.Shadows.shadowOf import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode -import org.wikipedia.AppAdapter import java.lang.reflect.Field /** @@ -74,7 +74,7 @@ class ImageFragmentTest { fun setUp(){ MockitoAnnotations.initMocks(this) context = ApplicationProvider.getApplicationContext() - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() SoLoader.setInTestMode() Fresco.initialize(context) activity = Robolectric.buildActivity(CustomSelectorActivity::class.java).create().get() diff --git a/app/src/test/kotlin/fr/free/nrw/commons/explore/ExploreFragmentUnitTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/explore/ExploreFragmentUnitTest.kt index 930eccdb4..3eb28fced 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/explore/ExploreFragmentUnitTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/explore/ExploreFragmentUnitTest.kt @@ -7,17 +7,18 @@ import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentTransaction import androidx.test.core.app.ApplicationProvider import com.google.android.material.tabs.TabLayout +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.contributions.MainActivity import org.junit.Assert import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock -import org.mockito.Mockito.`when` import org.mockito.Mockito.verify +import org.mockito.Mockito.`when` import org.mockito.MockitoAnnotations import org.powermock.reflect.Whitebox import org.robolectric.Robolectric @@ -27,7 +28,6 @@ import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode import org.robolectric.fakes.RoboMenu import org.robolectric.fakes.RoboMenuItem -import org.wikipedia.AppAdapter @RunWith(RobolectricTestRunner::class) @Config(sdk = [21], application = TestCommonsApplication::class) @@ -56,7 +56,7 @@ class ExploreFragmentUnitTest { MockitoAnnotations.openMocks(this) context = ApplicationProvider.getApplicationContext() - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() activity = Robolectric.buildActivity(MainActivity::class.java).create().get() fragment = ExploreFragment() diff --git a/app/src/test/kotlin/fr/free/nrw/commons/explore/ExploreListRootFragmentUnitTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/explore/ExploreListRootFragmentUnitTest.kt index b142bc30c..f67f2a243 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/explore/ExploreListRootFragmentUnitTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/explore/ExploreListRootFragmentUnitTest.kt @@ -11,9 +11,10 @@ import com.google.android.material.tabs.TabLayout import com.nhaarman.mockitokotlin2.any import com.nhaarman.mockitokotlin2.times import fr.free.nrw.commons.Media +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.contributions.MainActivity import fr.free.nrw.commons.explore.categories.media.CategoriesMediaFragment import fr.free.nrw.commons.media.MediaDetailPagerFragment @@ -23,15 +24,14 @@ import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentMatchers.anyInt import org.mockito.Mock -import org.mockito.Mockito.`when` import org.mockito.Mockito.verify +import org.mockito.Mockito.`when` import org.mockito.MockitoAnnotations import org.powermock.reflect.Whitebox import org.robolectric.Robolectric import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode -import org.wikipedia.AppAdapter import java.lang.reflect.Field @RunWith(RobolectricTestRunner::class) @@ -76,7 +76,7 @@ class ExploreListRootFragmentUnitTest { MockitoAnnotations.openMocks(this) context = ApplicationProvider.getApplicationContext() - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() activity = Robolectric.buildActivity(MainActivity::class.java).create().get() fragment = ExploreListRootFragment() diff --git a/app/src/test/kotlin/fr/free/nrw/commons/explore/depictions/WikidataItemDetailsActivityUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/explore/depictions/WikidataItemDetailsActivityUnitTests.kt index bdf8fc388..b3b9d7b42 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/explore/depictions/WikidataItemDetailsActivityUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/explore/depictions/WikidataItemDetailsActivityUnitTests.kt @@ -8,9 +8,10 @@ import androidx.fragment.app.FragmentManager import androidx.test.core.app.ApplicationProvider import androidx.viewpager.widget.ViewPager import com.google.android.material.tabs.TabLayout +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.explore.depictions.media.DepictedImagesFragment import fr.free.nrw.commons.media.MediaDetailPagerFragment import fr.free.nrw.commons.upload.structure.depictions.DepictedItem @@ -28,7 +29,6 @@ import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode import org.robolectric.fakes.RoboMenu import org.robolectric.fakes.RoboMenuItem -import org.wikipedia.AppAdapter @RunWith(RobolectricTestRunner::class) @Config(sdk = [21], application = TestCommonsApplication::class) @@ -65,7 +65,7 @@ class WikidataItemDetailsActivityUnitTests { @Before fun setUp() { MockitoAnnotations.openMocks(this) - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() val intent = Intent( ApplicationProvider.getApplicationContext(), WikidataItemDetailsActivity::class.java diff --git a/app/src/test/kotlin/fr/free/nrw/commons/explore/recentsearches/RecentSearchesFragmentUnitTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/explore/recentsearches/RecentSearchesFragmentUnitTest.kt index bbbd4643f..ee565dfa5 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/explore/recentsearches/RecentSearchesFragmentUnitTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/explore/recentsearches/RecentSearchesFragmentUnitTest.kt @@ -12,10 +12,11 @@ import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentTransaction import androidx.test.core.app.ApplicationProvider import com.nhaarman.mockitokotlin2.whenever +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.contributions.MainActivity +import fr.free.nrw.commons.createTestClient import org.junit.Assert import org.junit.Before import org.junit.Test @@ -27,7 +28,6 @@ import org.robolectric.Robolectric import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode -import org.wikipedia.AppAdapter import java.lang.reflect.Method @RunWith(RobolectricTestRunner::class) @@ -67,7 +67,7 @@ class RecentSearchesFragmentUnitTest { MockitoAnnotations.openMocks(this) context = ApplicationProvider.getApplicationContext() - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() val activity = Robolectric.buildActivity(MainActivity::class.java).create().get() fragment = RecentSearchesFragment() diff --git a/app/src/test/kotlin/fr/free/nrw/commons/feedback/FeedbackContentCreatorUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/feedback/FeedbackContentCreatorUnitTests.kt index e2054ade7..a2fea95e1 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/feedback/FeedbackContentCreatorUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/feedback/FeedbackContentCreatorUnitTests.kt @@ -3,20 +3,17 @@ package fr.free.nrw.commons.feedback import android.content.Context import androidx.test.core.app.ApplicationProvider import fr.free.nrw.commons.FakeContextWrapper -import fr.free.nrw.commons.TestAppAdapter +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.feedback.model.Feedback import org.junit.Assert import org.junit.Before import org.junit.Test import org.junit.runner.RunWith -import org.mockito.Mock -import org.mockito.Mockito.doReturn -import org.mockito.Mockito.mock import org.mockito.MockitoAnnotations import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config -import org.wikipedia.AppAdapter @RunWith(RobolectricTestRunner::class) @Config(sdk = [21], application = TestCommonsApplication::class) @@ -29,7 +26,7 @@ class FeedbackContentCreatorUnitTests { @Before fun setup() { MockitoAnnotations.openMocks(this) - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() context = FakeContextWrapper(ApplicationProvider.getApplicationContext()) } diff --git a/app/src/test/kotlin/fr/free/nrw/commons/feedback/FeedbackDialogTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/feedback/FeedbackDialogTests.kt index ce39a6f82..7b3c2738c 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/feedback/FeedbackDialogTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/feedback/FeedbackDialogTests.kt @@ -5,20 +5,20 @@ import android.os.Looper.getMainLooper import android.text.Editable import androidx.test.core.app.ApplicationProvider import com.nhaarman.mockitokotlin2.doReturn -import fr.free.nrw.commons.TestAppAdapter +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.TestUtility.setFinalStatic import fr.free.nrw.commons.contributions.MainActivity import fr.free.nrw.commons.databinding.DialogFeedbackBinding import fr.free.nrw.commons.ui.PasteSensitiveTextInputEditText import org.junit.Assert import org.junit.Before -import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock -import org.mockito.Mockito.`when` import org.mockito.Mockito.mock +import org.mockito.Mockito.`when` import org.mockito.MockitoAnnotations import org.powermock.reflect.Whitebox import org.robolectric.Robolectric @@ -26,7 +26,6 @@ import org.robolectric.RobolectricTestRunner import org.robolectric.Shadows.shadowOf import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode -import org.wikipedia.AppAdapter @RunWith(RobolectricTestRunner::class) @Config(sdk = [21], application = TestCommonsApplication::class) @@ -45,7 +44,7 @@ class FeedbackDialogTests { MockitoAnnotations.openMocks(this) context = ApplicationProvider.getApplicationContext() - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() val activity = Robolectric.buildActivity(MainActivity::class.java).create().get() diff --git a/app/src/test/kotlin/fr/free/nrw/commons/leaderboard/LeaderboardFragmentUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/leaderboard/LeaderboardFragmentUnitTests.kt index ac4032e82..7ed228cd9 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/leaderboard/LeaderboardFragmentUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/leaderboard/LeaderboardFragmentUnitTests.kt @@ -13,9 +13,10 @@ import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentTransaction import androidx.recyclerview.widget.RecyclerView import androidx.test.core.app.ApplicationProvider +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.auth.SessionManager import fr.free.nrw.commons.profile.ProfileActivity import fr.free.nrw.commons.profile.leaderboard.LeaderboardFragment @@ -28,17 +29,14 @@ import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock import org.mockito.Mockito.`when` -import org.mockito.Mockito.doReturn import org.mockito.MockitoAnnotations import org.powermock.reflect.Whitebox import org.robolectric.Robolectric import org.robolectric.RobolectricTestRunner -import org.robolectric.Shadows import org.robolectric.Shadows.shadowOf import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode import org.robolectric.shadows.ShadowToast -import org.wikipedia.AppAdapter import java.lang.reflect.Method @RunWith(RobolectricTestRunner::class) @@ -84,7 +82,7 @@ class LeaderboardFragmentUnitTests { MockitoAnnotations.initMocks(this) context = ApplicationProvider.getApplicationContext() - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() val activity = Robolectric.buildActivity(ProfileActivity::class.java).create().get() fragment = LeaderboardFragment() diff --git a/app/src/test/kotlin/fr/free/nrw/commons/login/LoginActivityUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/login/LoginActivityUnitTests.kt index e0d4a9409..3a0bf557a 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/login/LoginActivityUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/login/LoginActivityUnitTests.kt @@ -6,9 +6,10 @@ import android.view.MenuItem import android.view.View import android.view.ViewGroup import androidx.test.core.app.ApplicationProvider +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.auth.LoginActivity import org.junit.Assert import org.junit.Before @@ -20,7 +21,6 @@ import org.robolectric.Robolectric import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config import org.robolectric.fakes.RoboMenuItem -import org.wikipedia.AppAdapter import java.lang.reflect.Field @@ -49,7 +49,7 @@ class LoginActivityUnitTests { MockitoAnnotations.openMocks(this) - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() activity = Robolectric.buildActivity(LoginActivity::class.java).create().get() diff --git a/app/src/test/kotlin/fr/free/nrw/commons/media/MediaDetailFragmentUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/media/MediaDetailFragmentUnitTests.kt index 25b1332c5..a62d3400f 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/media/MediaDetailFragmentUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/media/MediaDetailFragmentUnitTests.kt @@ -20,13 +20,14 @@ import com.facebook.drawee.backends.pipeline.Fresco import com.facebook.drawee.generic.GenericDraweeHierarchy import com.facebook.drawee.view.SimpleDraweeView import com.facebook.soloader.SoLoader -import com.nhaarman.mockitokotlin2.whenever import com.nhaarman.mockitokotlin2.doReturn +import com.nhaarman.mockitokotlin2.whenever import fr.free.nrw.commons.LocationPicker.LocationPickerActivity import fr.free.nrw.commons.Media +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.delete.DeleteHelper import fr.free.nrw.commons.delete.ReasonBuilder import fr.free.nrw.commons.explore.SearchActivity @@ -50,7 +51,6 @@ import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode import org.robolectric.shadows.ShadowActivity import org.robolectric.shadows.ShadowIntent -import org.wikipedia.AppAdapter import java.lang.reflect.Field import java.lang.reflect.Method import java.util.* @@ -154,7 +154,7 @@ class MediaDetailFragmentUnitTests { MockitoAnnotations.openMocks(this) context = ApplicationProvider.getApplicationContext() - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() SoLoader.setInTestMode() diff --git a/app/src/test/kotlin/fr/free/nrw/commons/media/MediaDetailPagerFragmentUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/media/MediaDetailPagerFragmentUnitTests.kt index 9529637a3..3e39a2904 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/media/MediaDetailPagerFragmentUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/media/MediaDetailPagerFragmentUnitTests.kt @@ -17,8 +17,9 @@ import com.nhaarman.mockitokotlin2.never import com.nhaarman.mockitokotlin2.times import com.nhaarman.mockitokotlin2.verify import fr.free.nrw.commons.Media -import fr.free.nrw.commons.TestAppAdapter +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.auth.SessionManager import fr.free.nrw.commons.explore.SearchActivity import io.reactivex.android.plugins.RxAndroidPlugins @@ -37,7 +38,6 @@ import org.robolectric.RobolectricTestRunner import org.robolectric.Shadows import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode -import org.wikipedia.AppAdapter import java.lang.reflect.Field import java.lang.reflect.Method import java.util.concurrent.Callable @@ -77,7 +77,7 @@ class MediaDetailPagerFragmentUnitTests { context = ApplicationProvider.getApplicationContext() - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() SoLoader.setInTestMode() diff --git a/app/src/test/kotlin/fr/free/nrw/commons/media/ZoomableActivityUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/media/ZoomableActivityUnitTests.kt index bbb05f936..7543562cb 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/media/ZoomableActivityUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/media/ZoomableActivityUnitTests.kt @@ -6,8 +6,9 @@ import android.net.Uri import androidx.test.core.app.ApplicationProvider import com.facebook.drawee.backends.pipeline.Fresco import com.facebook.soloader.SoLoader -import fr.free.nrw.commons.TestAppAdapter +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.customselector.model.CallbackStatus import fr.free.nrw.commons.customselector.model.Image import fr.free.nrw.commons.customselector.model.Result @@ -22,7 +23,6 @@ import org.robolectric.Robolectric import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode -import org.wikipedia.AppAdapter import java.lang.reflect.Field @RunWith(RobolectricTestRunner::class) @@ -44,7 +44,7 @@ class ZoomableActivityUnitTests { @Before fun setUp() { MockitoAnnotations.openMocks(this) - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() context = ApplicationProvider.getApplicationContext() SoLoader.setInTestMode() Fresco.initialize(context) diff --git a/app/src/test/kotlin/fr/free/nrw/commons/navtab/MoreBottomSheetFragmentUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/navtab/MoreBottomSheetFragmentUnitTests.kt index 6f863ba35..f9606b8d9 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/navtab/MoreBottomSheetFragmentUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/navtab/MoreBottomSheetFragmentUnitTests.kt @@ -8,15 +8,15 @@ import android.os.Looper import android.view.LayoutInflater import android.view.View import android.widget.Button -import android.widget.TextView import androidx.appcompat.app.AlertDialog import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentTransaction import androidx.test.core.app.ApplicationProvider import fr.free.nrw.commons.CommonsApplication +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.actions.PageEditClient import fr.free.nrw.commons.feedback.model.Feedback import fr.free.nrw.commons.kvstore.JsonKvStore @@ -38,7 +38,6 @@ import org.robolectric.annotation.LooperMode import org.robolectric.shadows.ShadowActivity import org.robolectric.shadows.ShadowAlertDialog import org.robolectric.shadows.ShadowDialog -import org.wikipedia.AppAdapter import java.lang.reflect.Method @@ -63,7 +62,7 @@ class MoreBottomSheetFragmentUnitTests { fun setUp() { MockitoAnnotations.openMocks(this) context = ApplicationProvider.getApplicationContext() - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() activity = Robolectric.buildActivity(ProfileActivity::class.java).create().get() fragment = MoreBottomSheetFragment() diff --git a/app/src/test/kotlin/fr/free/nrw/commons/nearby/AdvanceQueryFragmentUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/nearby/AdvanceQueryFragmentUnitTests.kt index 2b6ef693b..e8bf0460b 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/nearby/AdvanceQueryFragmentUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/nearby/AdvanceQueryFragmentUnitTests.kt @@ -8,10 +8,11 @@ import androidx.appcompat.widget.AppCompatButton import androidx.appcompat.widget.AppCompatEditText import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentTransaction +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.contributions.MainActivity +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.nearby.fragments.AdvanceQueryFragment import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull @@ -19,8 +20,8 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock -import org.mockito.Mockito.`when` import org.mockito.Mockito.verify +import org.mockito.Mockito.`when` import org.mockito.MockitoAnnotations import org.powermock.reflect.Whitebox import org.robolectric.Robolectric @@ -28,7 +29,6 @@ import org.robolectric.RobolectricTestRunner import org.robolectric.Shadows import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode -import org.wikipedia.AppAdapter @RunWith(RobolectricTestRunner::class) @Config(sdk = [21], application = TestCommonsApplication::class) @@ -60,7 +60,7 @@ class AdvanceQueryFragmentUnitTests { @Before fun setUp() { MockitoAnnotations.openMocks(this) - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() activity = Robolectric.buildActivity(MainActivity::class.java).create().get() fragment = AdvanceQueryFragment() diff --git a/app/src/test/kotlin/fr/free/nrw/commons/nearby/NearbyParentFragmentUnitTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/nearby/NearbyParentFragmentUnitTest.kt index fa140d91c..3137a5a01 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/nearby/NearbyParentFragmentUnitTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/nearby/NearbyParentFragmentUnitTest.kt @@ -21,13 +21,13 @@ import com.google.android.material.floatingactionbutton.FloatingActionButton import com.mapbox.mapboxsdk.camera.CameraPosition import com.mapbox.mapboxsdk.camera.CameraUpdateFactory import com.mapbox.mapboxsdk.geometry.LatLng -import com.mapbox.mapboxsdk.maps.MapView import com.mapbox.mapboxsdk.maps.MapboxMap import com.nhaarman.mockitokotlin2.verify import com.nhaarman.mockitokotlin2.whenever +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsDao import fr.free.nrw.commons.contributions.MainActivity import fr.free.nrw.commons.kvstore.JsonKvStore @@ -53,7 +53,6 @@ import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode import org.robolectric.shadows.ShadowActivity import org.robolectric.shadows.ShadowAlertDialog -import org.wikipedia.AppAdapter import java.lang.reflect.Method @RunWith(RobolectricTestRunner::class) @@ -132,7 +131,7 @@ class NearbyParentFragmentUnitTest { MockitoAnnotations.openMocks(this) context = ApplicationProvider.getApplicationContext() - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() activity = Robolectric.buildActivity(MainActivity::class.java).create().get() fragment = NearbyParentFragment() diff --git a/app/src/test/kotlin/fr/free/nrw/commons/notification/NotificationActivityUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/notification/NotificationActivityUnitTests.kt index 54349ad2d..08d08772a 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/notification/NotificationActivityUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/notification/NotificationActivityUnitTests.kt @@ -5,10 +5,11 @@ import android.content.Intent import android.view.Menu import android.view.MenuItem import androidx.test.core.app.ApplicationProvider +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R import fr.free.nrw.commons.ShadowActionBar -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.notification.models.Notification import fr.free.nrw.commons.notification.models.NotificationType import fr.free.nrw.commons.utils.NetworkUtils @@ -17,15 +18,14 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock -import org.mockito.Mockito.`when` import org.mockito.Mockito.mock +import org.mockito.Mockito.`when` import org.mockito.MockitoAnnotations import org.robolectric.Robolectric import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config import org.robolectric.fakes.RoboMenu import org.robolectric.fakes.RoboMenuItem -import org.wikipedia.AppAdapter import java.lang.reflect.Field import java.lang.reflect.Method @@ -58,7 +58,7 @@ class NotificationActivityUnitTests { networkUtils = mock(NetworkUtils::class.java) - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() val intent = Intent().putExtra("title", "read") diff --git a/app/src/test/kotlin/fr/free/nrw/commons/profile/achievements/AchievementsFragmentUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/profile/achievements/AchievementsFragmentUnitTests.kt index 5bbe49f29..fee4f5d8d 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/profile/achievements/AchievementsFragmentUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/profile/achievements/AchievementsFragmentUnitTests.kt @@ -7,16 +7,13 @@ import android.view.LayoutInflater import android.view.MenuItem import android.view.View import android.view.ViewGroup -import android.widget.ImageView -import android.widget.ProgressBar -import android.widget.TextView import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentTransaction import androidx.test.core.app.ApplicationProvider -import com.dinuscxj.progressbar.CircleProgressBar +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.auth.SessionManager import fr.free.nrw.commons.profile.ProfileActivity import fr.free.nrw.commons.utils.ConfigUtils @@ -35,7 +32,6 @@ import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode import org.robolectric.fakes.RoboMenuItem import org.robolectric.shadows.ShadowToast -import org.wikipedia.AppAdapter import java.lang.reflect.Method @@ -76,7 +72,8 @@ class AchievementsFragmentUnitTests { context = ApplicationProvider.getApplicationContext() menuItem = RoboMenuItem(context) - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() + val activity = Robolectric.buildActivity(ProfileActivity::class.java).create().get() val fragmentManager: FragmentManager = activity.supportFragmentManager val fragmentTransaction: FragmentTransaction = fragmentManager.beginTransaction() diff --git a/app/src/test/kotlin/fr/free/nrw/commons/review/ReviewActivityTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/review/ReviewActivityTest.kt index 3b2f0e118..5fffa1a2f 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/review/ReviewActivityTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/review/ReviewActivityTest.kt @@ -4,19 +4,15 @@ import android.content.Context import android.os.Looper.getMainLooper import android.view.Menu import android.view.MenuItem -import android.widget.Button import androidx.test.core.app.ApplicationProvider -import butterknife.BindView import com.facebook.drawee.backends.pipeline.Fresco import com.facebook.soloader.SoLoader import com.nhaarman.mockitokotlin2.doNothing import fr.free.nrw.commons.Media -import fr.free.nrw.commons.TestAppAdapter +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.TestCommonsApplication -import io.reactivex.Scheduler +import fr.free.nrw.commons.createTestClient import io.reactivex.Single -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.schedulers.Schedulers import org.junit.Assert import org.junit.Before import org.junit.Test @@ -25,7 +21,6 @@ import org.mockito.ArgumentMatchers import org.mockito.Mock import org.mockito.Mockito.* import org.mockito.MockitoAnnotations -import org.mockito.Spy import org.powermock.reflect.Whitebox import org.robolectric.Robolectric import org.robolectric.RobolectricTestRunner @@ -34,7 +29,6 @@ import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode import org.robolectric.fakes.RoboMenu import org.robolectric.fakes.RoboMenuItem -import org.wikipedia.AppAdapter import java.lang.reflect.Method @RunWith(RobolectricTestRunner::class) @@ -70,7 +64,7 @@ class ReviewActivityTest { context = ApplicationProvider.getApplicationContext() - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() SoLoader.setInTestMode() diff --git a/app/src/test/kotlin/fr/free/nrw/commons/review/ReviewControllerTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/review/ReviewControllerTest.kt index 66ad7cbc6..1e2a663eb 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/review/ReviewControllerTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/review/ReviewControllerTest.kt @@ -9,12 +9,13 @@ import com.facebook.soloader.SoLoader import com.nhaarman.mockitokotlin2.verify import com.nhaarman.mockitokotlin2.whenever import fr.free.nrw.commons.Media +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.delete.DeleteHelper -import org.junit.Assert.assertEquals import media +import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Before import org.junit.Test @@ -29,7 +30,6 @@ import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode import org.robolectric.shadows.ShadowNotificationManager import org.robolectric.shadows.ShadowToast -import org.wikipedia.AppAdapter import org.wikipedia.dataclient.mwapi.MwQueryPage import java.lang.reflect.Method import java.util.* @@ -58,7 +58,7 @@ class ReviewControllerTest { fun setUp() { MockitoAnnotations.openMocks(this) context = ApplicationProvider.getApplicationContext() - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() SoLoader.setInTestMode() Fresco.initialize(context) activity = Robolectric.buildActivity(ReviewActivity::class.java).create().get() diff --git a/app/src/test/kotlin/fr/free/nrw/commons/review/ReviewImageFragmentTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/review/ReviewImageFragmentTest.kt index ec56fedf4..fdadedc03 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/review/ReviewImageFragmentTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/review/ReviewImageFragmentTest.kt @@ -14,16 +14,16 @@ import com.facebook.drawee.backends.pipeline.Fresco import com.facebook.soloader.SoLoader import com.nhaarman.mockitokotlin2.doReturn import fr.free.nrw.commons.Media +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import org.junit.Assert import org.junit.Before import org.junit.Test import org.junit.jupiter.api.Assertions.assertEquals import org.junit.runner.RunWith import org.mockito.Mock -import org.mockito.Mockito.`when` import org.mockito.Mockito.mock import org.mockito.MockitoAnnotations import org.powermock.reflect.Whitebox @@ -32,7 +32,6 @@ import org.robolectric.RobolectricTestRunner import org.robolectric.Shadows.shadowOf import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode -import org.wikipedia.AppAdapter import java.lang.reflect.Method @RunWith(RobolectricTestRunner::class) @@ -63,7 +62,7 @@ class ReviewImageFragmentTest { MockitoAnnotations.openMocks(this) context = ApplicationProvider.getApplicationContext() - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() SoLoader.setInTestMode() Fresco.initialize(context) diff --git a/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadActivityUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadActivityUnitTests.kt index 23ba4370d..b406dd09e 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadActivityUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadActivityUnitTests.kt @@ -6,16 +6,16 @@ import androidx.test.core.app.ApplicationProvider import androidx.work.Configuration import androidx.work.testing.WorkManagerTestInitHelper import fr.free.nrw.commons.CommonsApplication +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.contributions.ContributionController import fr.free.nrw.commons.filepicker.UploadableFile import fr.free.nrw.commons.upload.categories.UploadCategoriesFragment import fr.free.nrw.commons.upload.license.MediaLicenseFragment import org.junit.Assert import org.junit.Before -import org.junit.Ignore import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock @@ -26,7 +26,6 @@ import org.robolectric.Robolectric import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode -import org.wikipedia.AppAdapter import java.lang.reflect.Method @@ -53,7 +52,7 @@ class UploadActivityUnitTests { @Before fun setUp() { MockitoAnnotations.openMocks(this) - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() val intent = Intent() val list = ArrayList() list.add(uploadableFile) diff --git a/app/src/test/kotlin/fr/free/nrw/commons/upload/categories/UploadCategoriesFragmentUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/upload/categories/UploadCategoriesFragmentUnitTests.kt index 413d3dfb6..4e54a8aa3 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/upload/categories/UploadCategoriesFragmentUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/upload/categories/UploadCategoriesFragmentUnitTests.kt @@ -17,11 +17,11 @@ import androidx.test.core.app.ApplicationProvider import com.google.android.material.textfield.TextInputLayout import com.nhaarman.mockitokotlin2.times import com.nhaarman.mockitokotlin2.verify -import com.nhaarman.mockitokotlin2.whenever import fr.free.nrw.commons.Media +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.ui.PasteSensitiveTextInputEditText import fr.free.nrw.commons.upload.UploadActivity import fr.free.nrw.commons.upload.UploadBaseFragment @@ -39,7 +39,6 @@ import org.robolectric.RobolectricTestRunner import org.robolectric.Shadows import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode -import org.wikipedia.AppAdapter import java.lang.reflect.Method @RunWith(RobolectricTestRunner::class) @@ -103,7 +102,7 @@ class UploadCategoriesFragmentUnitTests { fun setUp() { MockitoAnnotations.openMocks(this) context = ApplicationProvider.getApplicationContext() - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() val activity = Robolectric.buildActivity(UploadActivity::class.java).create().get() fragment = UploadCategoriesFragment() fragmentManager = activity.supportFragmentManager diff --git a/app/src/test/kotlin/fr/free/nrw/commons/upload/depicts/DepictsFragmentUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/upload/depicts/DepictsFragmentUnitTests.kt index 1e041917c..af851b3e3 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/upload/depicts/DepictsFragmentUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/upload/depicts/DepictsFragmentUnitTests.kt @@ -17,9 +17,10 @@ import com.google.android.material.textfield.TextInputLayout import com.nhaarman.mockitokotlin2.whenever import depictedItem import fr.free.nrw.commons.Media +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.kvstore.JsonKvStore import fr.free.nrw.commons.ui.PasteSensitiveTextInputEditText import fr.free.nrw.commons.upload.UploadActivity @@ -36,7 +37,6 @@ import org.robolectric.Robolectric import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode -import org.wikipedia.AppAdapter import java.lang.reflect.Method @RunWith(RobolectricTestRunner::class) @@ -96,7 +96,7 @@ class DepictsFragmentUnitTests { fun setUp() { MockitoAnnotations.openMocks(this) context = ApplicationProvider.getApplicationContext() - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() val activity = Robolectric.buildActivity(UploadActivity::class.java).create().get() fragment = DepictsFragment() diff --git a/app/src/test/kotlin/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragmentUnitTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragmentUnitTest.kt index 91b77d927..9fbeda6d3 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragmentUnitTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragmentUnitTest.kt @@ -23,9 +23,10 @@ import com.mapbox.mapboxsdk.geometry.LatLng import com.nhaarman.mockitokotlin2.mock import fr.free.nrw.commons.LocationPicker.LocationPicker import fr.free.nrw.commons.LocationPicker.LocationPickerActivity +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.R -import fr.free.nrw.commons.TestAppAdapter import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.kvstore.JsonKvStore import fr.free.nrw.commons.nearby.Place import fr.free.nrw.commons.upload.ImageCoordinates @@ -50,7 +51,6 @@ import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode import org.robolectric.shadows.ShadowActivity import org.robolectric.shadows.ShadowIntent -import org.wikipedia.AppAdapter import java.lang.reflect.Method @RunWith(RobolectricTestRunner::class) @@ -115,7 +115,7 @@ class UploadMediaDetailFragmentUnitTest { MockitoAnnotations.openMocks(this) context = ApplicationProvider.getApplicationContext() - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() activity = Robolectric.buildActivity(UploadActivity::class.java).create().get() layoutInflater = LayoutInflater.from(activity) diff --git a/app/src/test/kotlin/fr/free/nrw/commons/widget/PicOfDayAppWidgetUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/widget/PicOfDayAppWidgetUnitTests.kt index 74b21363f..1547c313b 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/widget/PicOfDayAppWidgetUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/widget/PicOfDayAppWidgetUnitTests.kt @@ -7,8 +7,9 @@ import androidx.test.core.app.ApplicationProvider import com.facebook.imagepipeline.core.ImagePipelineFactory import com.facebook.soloader.SoLoader import fr.free.nrw.commons.Media -import fr.free.nrw.commons.TestAppAdapter +import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.TestCommonsApplication +import fr.free.nrw.commons.createTestClient import fr.free.nrw.commons.media.MediaClient import io.reactivex.Single import io.reactivex.disposables.CompositeDisposable @@ -22,7 +23,6 @@ import org.mockito.MockitoAnnotations import org.powermock.reflect.Whitebox import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config -import org.wikipedia.AppAdapter import java.lang.reflect.Method @RunWith(RobolectricTestRunner::class) @@ -46,7 +46,7 @@ class PicOfDayAppWidgetUnitTests { @Before fun setUp() { - AppAdapter.set(TestAppAdapter()) + OkHttpConnectionFactory.CLIENT = createTestClient() context = ApplicationProvider.getApplicationContext() SoLoader.setInTestMode() ImagePipelineFactory.initialize(context) diff --git a/data-client/src/main/java/org/wikipedia/AppAdapter.java b/data-client/src/main/java/org/wikipedia/AppAdapter.java index f89bcae51..6fdcf2b44 100644 --- a/data-client/src/main/java/org/wikipedia/AppAdapter.java +++ b/data-client/src/main/java/org/wikipedia/AppAdapter.java @@ -7,20 +7,19 @@ import org.wikipedia.dataclient.SharedPreferenceCookieManager; import okhttp3.OkHttpClient; public abstract class AppAdapter { + private final int DEFAULT_THUMB_SIZE = 640; - public abstract String getMediaWikiBaseUrl(); - public abstract String getRestbaseUriFormat(); public abstract OkHttpClient getOkHttpClient(); - public abstract int getDesiredLeadImageDp(); - public abstract boolean isLoggedIn(); - public abstract String getUserName(); - public abstract String getPassword(); + // Unused from commons app, implement here as a temporary step during refactoring + public String getRestbaseUriFormat() { + return ""; + } - public abstract SharedPreferenceCookieManager getCookies(); - public abstract void setCookies(@NonNull SharedPreferenceCookieManager cookies); - - public abstract boolean logErrorsInsteadOfCrashing(); + // Unused from commons app, implement here as a temporary step during refactoring + public int getDesiredLeadImageDp() { + return DEFAULT_THUMB_SIZE; + } private static AppAdapter INSTANCE; public static void set(AppAdapter instance) { diff --git a/data-client/src/main/java/org/wikipedia/dataclient/SharedPreferenceCookieManager.java b/data-client/src/main/java/org/wikipedia/dataclient/SharedPreferenceCookieManager.java index 856250fc2..72c03302a 100644 --- a/data-client/src/main/java/org/wikipedia/dataclient/SharedPreferenceCookieManager.java +++ b/data-client/src/main/java/org/wikipedia/dataclient/SharedPreferenceCookieManager.java @@ -28,13 +28,13 @@ public final class SharedPreferenceCookieManager implements CookieJar { @NonNull public static SharedPreferenceCookieManager getInstance() { - if (INSTANCE == null) { - try { - INSTANCE = AppAdapter.get().getCookies(); - } catch (Exception e) { - L.logRemoteErrorIfProd(e); - } - } +// if (INSTANCE == null) { +// try { +// INSTANCE = AppAdapter.get().getCookies(); +// } catch (Exception e) { +// L.logRemoteErrorIfProd(e); +// } +// } if (INSTANCE == null) { INSTANCE = new SharedPreferenceCookieManager(); } @@ -54,7 +54,7 @@ public final class SharedPreferenceCookieManager implements CookieJar { } private void persistCookies() { - AppAdapter.get().setCookies(this); +// AppAdapter.get().setCookies(this); } public synchronized void clearAllCookies() { diff --git a/data-client/src/main/java/org/wikipedia/json/CookieManagerTypeAdapter.java b/data-client/src/main/java/org/wikipedia/json/CookieManagerTypeAdapter.java index aa336979d..43d65d019 100644 --- a/data-client/src/main/java/org/wikipedia/json/CookieManagerTypeAdapter.java +++ b/data-client/src/main/java/org/wikipedia/json/CookieManagerTypeAdapter.java @@ -30,24 +30,24 @@ public class CookieManagerTypeAdapter extends TypeAdapter> map = new HashMap<>(); - in.beginObject(); - while (in.hasNext()) { - String key = in.nextName(); + input.beginObject(); + while (input.hasNext()) { + String key = input.nextName(); List list = new ArrayList<>(); map.put(key, list); - in.beginArray(); + input.beginArray(); HttpUrl url = HttpUrl.parse(WikiSite.DEFAULT_SCHEME + "://" + key); - while (in.hasNext()) { - String str = in.nextString(); + while (input.hasNext()) { + String str = input.nextString(); if (url != null) { list.add(Cookie.parse(url, str)); } } - in.endArray(); + input.endArray(); } - in.endObject(); + input.endObject(); return new SharedPreferenceCookieManager(map); } } diff --git a/data-client/src/main/java/org/wikipedia/util/log/L.java b/data-client/src/main/java/org/wikipedia/util/log/L.java index 4b0376336..059cef287 100644 --- a/data-client/src/main/java/org/wikipedia/util/log/L.java +++ b/data-client/src/main/java/org/wikipedia/util/log/L.java @@ -107,11 +107,12 @@ public final class L { } public static void logRemoteErrorIfProd(@NonNull Throwable t) { - if (AppAdapter.get().logErrorsInsteadOfCrashing()) { - logRemoteError(t); - } else { + // Since "logErrorsInsteadOfCrashing()" only ever returns false... + // if (AppAdapter.get().logErrorsInsteadOfCrashing()) { + // logRemoteError(t); + // } else { throw new RuntimeException(t); - } + // } } public static void setRemoteLogger(@Nullable RemoteExceptionLogger logger) { diff --git a/data-client/src/test/java/org/wikipedia/TestAppAdapter.java b/data-client/src/test/java/org/wikipedia/TestAppAdapter.java index c2f58865e..b5ad98aaa 100644 --- a/data-client/src/test/java/org/wikipedia/TestAppAdapter.java +++ b/data-client/src/test/java/org/wikipedia/TestAppAdapter.java @@ -1,27 +1,11 @@ package org.wikipedia; -import androidx.annotation.NonNull; - -import org.wikipedia.dataclient.Service; -import org.wikipedia.dataclient.SharedPreferenceCookieManager; +import okhttp3.OkHttpClient; import org.wikipedia.dataclient.okhttp.TestStubInterceptor; import org.wikipedia.dataclient.okhttp.UnsuccessfulResponseInterceptor; -import org.wikipedia.login.LoginResult; - -import okhttp3.OkHttpClient; public class TestAppAdapter extends AppAdapter { - @Override - public String getMediaWikiBaseUrl() { - return Service.WIKIPEDIA_URL; - } - - @Override - public String getRestbaseUriFormat() { - return "%1$s://%2$s/api/rest_v1/"; - } - @Override public OkHttpClient getOkHttpClient() { return new OkHttpClient.Builder() @@ -30,41 +14,4 @@ public class TestAppAdapter extends AppAdapter { .build(); } - @Override - public int getDesiredLeadImageDp() { - return 0; - } - - @Override - public boolean isLoggedIn() { - return false; - } - - @Override - public String getUserName() { - return null; - } - - @Override - public String getPassword() { - return null; - } - - @Override - public void updateAccount(@NonNull LoginResult result) { - } - - @Override - public SharedPreferenceCookieManager getCookies() { - return null; - } - - @Override - public void setCookies(@NonNull SharedPreferenceCookieManager cookies) { - } - - @Override - public boolean logErrorsInsteadOfCrashing() { - return false; - } }