Remove the data-client app adapter implementation (#5499)

* logErrorsInsteadOfCrashing only ever returned false, so remove it and simplify logger

* Removed unused getMediaWikiBaseUrl()

* Removed getDesiredLeadImageDp() from commons app adapter, since it's unused

* Inlined the isLoggedIn() method of the app adapter

* Inline the app adapter username/password

* Removed the unused getRestbaseUriFormat() from the commons app adapter

* Remove references to the data-client SharedPreferenceCookieManager

* Manage our own OkHttpClient and remove the AppAdapter implementation
This commit is contained in:
Paul Hawke 2024-01-30 19:21:43 -06:00 committed by GitHub
parent ab9e57f5be
commit 8db0b54929
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
57 changed files with 422 additions and 518 deletions

View file

@ -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;
}
}

View file

@ -41,6 +41,7 @@ import fr.free.nrw.commons.media.CustomOkHttpNetworkFetcher;
import fr.free.nrw.commons.settings.Prefs; import fr.free.nrw.commons.settings.Prefs;
import fr.free.nrw.commons.upload.FileUtils; import fr.free.nrw.commons.upload.FileUtils;
import fr.free.nrw.commons.utils.ConfigUtils; import fr.free.nrw.commons.utils.ConfigUtils;
import fr.free.nrw.commons.wikidata.cookies.CommonsCookieJar;
import io.reactivex.Completable; import io.reactivex.Completable;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.internal.functions.Functions; import io.reactivex.internal.functions.Functions;
@ -58,7 +59,6 @@ import org.acra.annotation.AcraCore;
import org.acra.annotation.AcraDialog; import org.acra.annotation.AcraDialog;
import org.acra.annotation.AcraMailSender; import org.acra.annotation.AcraMailSender;
import org.acra.data.StringFormat; import org.acra.data.StringFormat;
import org.wikipedia.AppAdapter;
import org.wikipedia.language.AppLanguageLookUpTable; import org.wikipedia.language.AppLanguageLookUpTable;
import timber.log.Timber; import timber.log.Timber;
@ -94,6 +94,9 @@ public class CommonsApplication extends MultiDexApplication {
@Named("default_preferences") @Named("default_preferences")
JsonKvStore defaultPrefs; JsonKvStore defaultPrefs;
@Inject
CommonsCookieJar cookieJar;
@Inject @Inject
CustomOkHttpNetworkFetcher customOkHttpNetworkFetcher; CustomOkHttpNetworkFetcher customOkHttpNetworkFetcher;
@ -161,8 +164,6 @@ public class CommonsApplication extends MultiDexApplication {
.getCommonsApplicationComponent() .getCommonsApplicationComponent()
.inject(this); .inject(this);
AppAdapter.set(new CommonsAppAdapter(sessionManager, defaultPrefs));
initTimber(); initTimber();
if (!defaultPrefs.getBoolean("has_user_manually_removed_location")) { if (!defaultPrefs.getBoolean("has_user_manually_removed_location")) {

View file

@ -1,9 +1,9 @@
package fr.free.nrw.commons; package fr.free.nrw.commons;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import fr.free.nrw.commons.wikidata.cookies.CommonsCookieJar;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -15,28 +15,27 @@ import okhttp3.Response;
import okhttp3.ResponseBody; import okhttp3.ResponseBody;
import okhttp3.logging.HttpLoggingInterceptor; import okhttp3.logging.HttpLoggingInterceptor;
import okhttp3.logging.HttpLoggingInterceptor.Level; import okhttp3.logging.HttpLoggingInterceptor.Level;
import org.wikipedia.dataclient.SharedPreferenceCookieManager;
import org.wikipedia.dataclient.okhttp.HttpStatusException; import org.wikipedia.dataclient.okhttp.HttpStatusException;
import timber.log.Timber; import timber.log.Timber;
public final class OkHttpConnectionFactory { public final class OkHttpConnectionFactory {
private static final String CACHE_DIR_NAME = "okhttp-cache"; private static final String CACHE_DIR_NAME = "okhttp-cache";
private static final long NET_CACHE_SIZE = 64 * 1024 * 1024; 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 public static OkHttpClient CLIENT;
private static final OkHttpClient CLIENT = createClient();
@NonNull public static OkHttpClient getClient() { @NonNull public static OkHttpClient getClient(final CommonsCookieJar cookieJar) {
if (CLIENT == null) {
CLIENT = createClient(cookieJar);
}
return CLIENT; return CLIENT;
} }
@NonNull @NonNull
private static OkHttpClient createClient() { private static OkHttpClient createClient(final CommonsCookieJar cookieJar) {
return new OkHttpClient.Builder() return new OkHttpClient.Builder()
.cookieJar(SharedPreferenceCookieManager.getInstance()) .cookieJar(cookieJar)
.cache(NET_CACHE) .cache(new Cache(new File(CommonsApplication.getInstance().getCacheDir(), CACHE_DIR_NAME), NET_CACHE_SIZE))
.connectTimeout(120, TimeUnit.SECONDS) .connectTimeout(120, TimeUnit.SECONDS)
.writeTimeout(120, TimeUnit.SECONDS) .writeTimeout(120, TimeUnit.SECONDS)
.readTimeout(120, TimeUnit.SECONDS) .readTimeout(120, TimeUnit.SECONDS)

View file

@ -2,8 +2,6 @@ package fr.free.nrw.commons.auth.csrf
import androidx.annotation.VisibleForTesting import androidx.annotation.VisibleForTesting
import fr.free.nrw.commons.auth.SessionManager import fr.free.nrw.commons.auth.SessionManager
import org.wikipedia.AppAdapter
import org.wikipedia.dataclient.SharedPreferenceCookieManager
import org.wikipedia.dataclient.mwapi.MwQueryResponse import org.wikipedia.dataclient.mwapi.MwQueryResponse
import fr.free.nrw.commons.auth.login.LoginClient import fr.free.nrw.commons.auth.login.LoginClient
import fr.free.nrw.commons.auth.login.LoginCallback import fr.free.nrw.commons.auth.login.LoginCallback
@ -19,7 +17,8 @@ import java.util.concurrent.Executors.newSingleThreadExecutor
class CsrfTokenClient( class CsrfTokenClient(
private val sessionManager: SessionManager, private val sessionManager: SessionManager,
private val csrfTokenInterface: CsrfTokenInterface, private val csrfTokenInterface: CsrfTokenInterface,
private val loginClient: LoginClient private val loginClient: LoginClient,
private val logoutClient: LogoutClient
) { ) {
private var retries = 0 private var retries = 0
private var csrfTokenCall: Call<MwQueryResponse?>? = null private var csrfTokenCall: Call<MwQueryResponse?>? = null
@ -27,8 +26,8 @@ class CsrfTokenClient(
@Throws(Throwable::class) @Throws(Throwable::class)
fun getTokenBlocking(): String { fun getTokenBlocking(): String {
var token = "" var token = ""
val userName = AppAdapter.get().getUserName() val userName = sessionManager.userName ?: ""
val password = AppAdapter.get().getPassword() val password = sessionManager.password ?: ""
for (retry in 0 until MAX_RETRIES_OF_LOGIN_BLOCKING) { for (retry in 0 until MAX_RETRIES_OF_LOGIN_BLOCKING) {
try { try {
@ -47,7 +46,7 @@ class CsrfTokenClient(
} }
token = response.body()!!.query()!!.csrfToken()!! 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.") throw RuntimeException("App believes we're logged in, but got anonymous token.")
} }
break break
@ -66,7 +65,7 @@ class CsrfTokenClient(
fun request(service: CsrfTokenInterface, cb: Callback): Call<MwQueryResponse?> = fun request(service: CsrfTokenInterface, cb: Callback): Call<MwQueryResponse?> =
requestToken(service, object : Callback { requestToken(service, object : Callback {
override fun success(token: String?) { override fun success(token: String?) {
if (AppAdapter.get().isLoggedIn() && token == ANON_TOKEN) { if (sessionManager.isUserLoggedIn && token == ANON_TOKEN) {
retryWithLogin(cb) { retryWithLogin(cb) {
RuntimeException("App believes we're logged in, but got anonymous token.") RuntimeException("App believes we're logged in, but got anonymous token.")
} }
@ -102,11 +101,11 @@ class CsrfTokenClient(
} }
private fun retryWithLogin(callback: Callback, caught: () -> Throwable?) { private fun retryWithLogin(callback: Callback, caught: () -> Throwable?) {
val userName = AppAdapter.get().getUserName() val userName = sessionManager.userName
val password = AppAdapter.get().getPassword() val password = sessionManager.password
if (retries < MAX_RETRIES && !userName.isNullOrEmpty() && !password.isNullOrEmpty()) { if (retries < MAX_RETRIES && !userName.isNullOrEmpty() && !password.isNullOrEmpty()) {
retries++ retries++
SharedPreferenceCookieManager.getInstance().clearAllCookies() logoutClient.logout()
login(userName, password, callback) { login(userName, password, callback) {
Timber.i("retrying...") Timber.i("retrying...")
cancel() cancel()

View file

@ -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()
}

View file

@ -257,8 +257,8 @@ public class CommonsApplicationModule {
@Named("username") @Named("username")
@Provides @Provides
public String provideLoggedInUsername() { public String provideLoggedInUsername(SessionManager sessionManager) {
return Objects.toString(AppAdapter.get().getUserName(), ""); return Objects.toString(sessionManager.getUserName(), "");
} }
@Provides @Provides

View file

@ -12,7 +12,10 @@ import fr.free.nrw.commons.actions.PageEditClient;
import fr.free.nrw.commons.actions.PageEditInterface; import fr.free.nrw.commons.actions.PageEditInterface;
import fr.free.nrw.commons.actions.ThanksInterface; import fr.free.nrw.commons.actions.ThanksInterface;
import fr.free.nrw.commons.auth.SessionManager; 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.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.auth.login.LoginInterface;
import fr.free.nrw.commons.category.CategoryInterface; import fr.free.nrw.commons.category.CategoryInterface;
import fr.free.nrw.commons.explore.depictions.DepictsClient; 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.upload.depicts.DepictsInterface;
import fr.free.nrw.commons.wikidata.CommonsServiceFactory; import fr.free.nrw.commons.wikidata.CommonsServiceFactory;
import fr.free.nrw.commons.wikidata.WikidataInterface; 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.io.File;
import java.util.Locale; import java.util.Locale;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -40,11 +45,8 @@ import okhttp3.HttpUrl;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor; import okhttp3.logging.HttpLoggingInterceptor;
import okhttp3.logging.HttpLoggingInterceptor.Level; 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.dataclient.WikiSite;
import org.wikipedia.json.GsonUtil; import org.wikipedia.json.GsonUtil;
import fr.free.nrw.commons.auth.login.LoginClient;
import timber.log.Timber; import timber.log.Timber;
@Module @Module
@ -78,8 +80,8 @@ public class NetworkingModule {
@Provides @Provides
@Singleton @Singleton
public CommonsServiceFactory serviceFactory() { public CommonsServiceFactory serviceFactory(CommonsCookieJar cookieJar) {
return new CommonsServiceFactory(AppAdapter.get().getOkHttpClient()); return new CommonsServiceFactory(OkHttpConnectionFactory.getClient(cookieJar));
} }
@Provides @Provides
@ -107,12 +109,27 @@ public class NetworkingModule {
gson); 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) @Named(NAMED_COMMONS_CSRF)
@Provides @Provides
@Singleton @Singleton
public CsrfTokenClient provideCommonsCsrfTokenClient(SessionManager sessionManager, public CsrfTokenClient provideCommonsCsrfTokenClient(SessionManager sessionManager,
CsrfTokenInterface tokenInterface, LoginClient loginClient) { CsrfTokenInterface tokenInterface, LoginClient loginClient, LogoutClient logoutClient) {
return new CsrfTokenClient(sessionManager, tokenInterface, loginClient); return new CsrfTokenClient(sessionManager, tokenInterface, loginClient, logoutClient);
} }
@Provides @Provides

View file

@ -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<Cookie> {
val cookieList = mutableListOf<Cookie>()
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<Cookie>) {
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<Cookie>, inList: MutableList<Cookie>, 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() }
}

View file

@ -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<String, List<Cookie>> = mutableMapOf()
val domains : Set<String> get() = cookieMap.keys.toSet()
operator fun set(domainSpec: String, cookies: MutableList<Cookie>) =
cookieMap.put(domainSpec, cookies.toList())
operator fun get(domainSpec: String): MutableList<Cookie> =
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<String, List<Cookie>>) = CommonsCookieStorage().apply {
cookieMap.clear()
cookieMap.putAll(map)
}
}
}
private class CookieStorageTypeAdapter : TypeAdapter<CommonsCookieStorage>() {
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<String, List<Cookie>>()
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<Cookie> {
val list = mutableListOf<Cookie>()
beginArray()
while (hasNext()) {
val str = nextString()
url?.let {
val element: Cookie? = Cookie.parse(url, str)
element?.let { list += element }
}
}
endArray()
return list
}
}

View file

@ -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)
}
}

View file

@ -1,5 +1,7 @@
package fr.free.nrw.commons; package fr.free.nrw.commons;
import static fr.free.nrw.commons.TestConnectionFactoryKt.createTestClient;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import java.util.List; import java.util.List;
import java.util.concurrent.AbstractExecutorService; import java.util.concurrent.AbstractExecutorService;
@ -12,7 +14,6 @@ import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.wikipedia.AppAdapter;
import org.wikipedia.json.GsonUtil; import org.wikipedia.json.GsonUtil;
import retrofit2.Retrofit; import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory; import retrofit2.converter.gson.GsonConverterFactory;
@ -23,9 +24,9 @@ public abstract class MockWebServerTest {
private final TestWebServer server = new TestWebServer(); private final TestWebServer server = new TestWebServer();
@Before public void setUp() throws Throwable { @Before public void setUp() throws Throwable {
AppAdapter.set(new TestAppAdapter()); OkHttpConnectionFactory.CLIENT = createTestClient();
OkHttpClient.Builder builder = AppAdapter.get().getOkHttpClient().newBuilder(); okHttpClient = OkHttpConnectionFactory.CLIENT.newBuilder()
okHttpClient = builder.dispatcher(new Dispatcher(new ImmediateExecutorService())).build(); .dispatcher(new Dispatcher(new ImmediateExecutorService())).build();
server.setUp(); server.setUp();
} }

View file

@ -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;
}
}

View file

@ -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()

View file

@ -10,9 +10,10 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.TextView import android.widget.TextView
import androidx.test.core.app.ApplicationProvider import androidx.test.core.app.ApplicationProvider
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication 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.auth.login.LoginResult
import fr.free.nrw.commons.kvstore.JsonKvStore import fr.free.nrw.commons.kvstore.JsonKvStore
import org.junit.Assert import org.junit.Assert
@ -27,7 +28,6 @@ import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.fakes.RoboMenuItem import org.robolectric.fakes.RoboMenuItem
import org.wikipedia.AppAdapter
import java.lang.reflect.Method import java.lang.reflect.Method
@ -74,7 +74,7 @@ class LoginActivityUnitTests {
@Before @Before
fun setUp() { fun setUp() {
MockitoAnnotations.openMocks(this) MockitoAnnotations.openMocks(this)
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
activity = Robolectric.buildActivity(LoginActivity::class.java).create().get() activity = Robolectric.buildActivity(LoginActivity::class.java).create().get()
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
menuItem = RoboMenuItem(null) menuItem = RoboMenuItem(null)

View file

@ -19,7 +19,8 @@ class CsrfTokenClientTest : MockWebServerTest() {
private val sessionManager = mock(SessionManager::class.java) private val sessionManager = mock(SessionManager::class.java)
private val tokenInterface = mock(CsrfTokenInterface::class.java) private val tokenInterface = mock(CsrfTokenInterface::class.java)
private val loginClient = mock(LoginClient::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 @Test
@Throws(Throwable::class) @Throws(Throwable::class)

View file

@ -15,9 +15,10 @@ import com.nhaarman.mockitokotlin2.times
import com.nhaarman.mockitokotlin2.verify import com.nhaarman.mockitokotlin2.verify
import com.nhaarman.mockitokotlin2.whenever import com.nhaarman.mockitokotlin2.whenever
import fr.free.nrw.commons.Media import fr.free.nrw.commons.Media
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication 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.bookmarks.pictures.BookmarkPicturesFragment
import fr.free.nrw.commons.contributions.MainActivity import fr.free.nrw.commons.contributions.MainActivity
import fr.free.nrw.commons.explore.ParentViewPager import fr.free.nrw.commons.explore.ParentViewPager
@ -35,7 +36,6 @@ import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.wikipedia.AppAdapter
import java.lang.reflect.Field import java.lang.reflect.Field
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@ -84,7 +84,7 @@ class BookmarkListRootFragmentUnitTest {
@Before @Before
fun setUp() { fun setUp() {
MockitoAnnotations.openMocks(this) MockitoAnnotations.openMocks(this)
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
activity = Robolectric.buildActivity(MainActivity::class.java).create().get() activity = Robolectric.buildActivity(MainActivity::class.java).create().get()
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()

View file

@ -12,9 +12,10 @@ import androidx.fragment.app.FragmentTransaction
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.test.core.app.ApplicationProvider import androidx.test.core.app.ApplicationProvider
import com.nhaarman.mockitokotlin2.whenever import com.nhaarman.mockitokotlin2.whenever
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.category.CategoryItem import fr.free.nrw.commons.category.CategoryItem
import fr.free.nrw.commons.profile.ProfileActivity import fr.free.nrw.commons.profile.ProfileActivity
import fr.free.nrw.commons.upload.structure.depictions.DepictedItem import fr.free.nrw.commons.upload.structure.depictions.DepictedItem
@ -28,7 +29,6 @@ import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.wikipedia.AppAdapter
import java.lang.reflect.Method import java.lang.reflect.Method
import java.util.* import java.util.*
@ -78,7 +78,7 @@ class BookmarkItemsFragmentUnitTest {
fun setUp() { fun setUp() {
MockitoAnnotations.openMocks(this) MockitoAnnotations.openMocks(this)
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
val activity = Robolectric.buildActivity(ProfileActivity::class.java).create().get() val activity = Robolectric.buildActivity(ProfileActivity::class.java).create().get()
fragment = BookmarkItemsFragment.newInstance() fragment = BookmarkItemsFragment.newInstance()
val fragmentManager: FragmentManager = activity.supportFragmentManager val fragmentManager: FragmentManager = activity.supportFragmentManager

View file

@ -12,9 +12,10 @@ import androidx.fragment.app.FragmentTransaction
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.test.core.app.ApplicationProvider import androidx.test.core.app.ApplicationProvider
import com.nhaarman.mockitokotlin2.whenever import com.nhaarman.mockitokotlin2.whenever
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.contributions.ContributionController import fr.free.nrw.commons.contributions.ContributionController
import fr.free.nrw.commons.kvstore.JsonKvStore import fr.free.nrw.commons.kvstore.JsonKvStore
import fr.free.nrw.commons.nearby.Place import fr.free.nrw.commons.nearby.Place
@ -32,7 +33,6 @@ import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.wikipedia.AppAdapter
import java.lang.reflect.Method import java.lang.reflect.Method
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@ -98,7 +98,7 @@ class BookmarkLocationFragmentUnitTests {
fun setUp() { fun setUp() {
MockitoAnnotations.initMocks(this) MockitoAnnotations.initMocks(this)
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
val activity = Robolectric.buildActivity(ProfileActivity::class.java).create().get() val activity = Robolectric.buildActivity(ProfileActivity::class.java).create().get()
fragment = BookmarkLocationsFragment.newInstance() fragment = BookmarkLocationsFragment.newInstance()
val fragmentManager: FragmentManager = activity.supportFragmentManager val fragmentManager: FragmentManager = activity.supportFragmentManager

View file

@ -19,9 +19,10 @@ import com.nhaarman.mockitokotlin2.any
import com.nhaarman.mockitokotlin2.times import com.nhaarman.mockitokotlin2.times
import com.nhaarman.mockitokotlin2.verify import com.nhaarman.mockitokotlin2.verify
import fr.free.nrw.commons.Media import fr.free.nrw.commons.Media
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.category.GridViewAdapter import fr.free.nrw.commons.category.GridViewAdapter
import fr.free.nrw.commons.media.MediaClient import fr.free.nrw.commons.media.MediaClient
import fr.free.nrw.commons.profile.ProfileActivity import fr.free.nrw.commons.profile.ProfileActivity
@ -38,7 +39,6 @@ import org.robolectric.RobolectricTestRunner
import org.robolectric.Shadows.shadowOf import org.robolectric.Shadows.shadowOf
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.wikipedia.AppAdapter
import java.lang.reflect.Method import java.lang.reflect.Method
@ -89,7 +89,7 @@ class BookmarkPicturesFragmentUnitTests {
fun setUp() { fun setUp() {
MockitoAnnotations.initMocks(this) MockitoAnnotations.initMocks(this)
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
val activity = Robolectric.buildActivity(ProfileActivity::class.java).create().get() val activity = Robolectric.buildActivity(ProfileActivity::class.java).create().get()
fragment = BookmarkPicturesFragment.newInstance() fragment = BookmarkPicturesFragment.newInstance()
val fragmentManager: FragmentManager = activity.supportFragmentManager val fragmentManager: FragmentManager = activity.supportFragmentManager

View file

@ -2,10 +2,11 @@ package fr.free.nrw.commons.campaigns
import android.app.Activity import android.app.Activity
import android.view.View 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.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.campaigns.models.Campaign
import fr.free.nrw.commons.contributions.MainActivity
import org.junit.Assert import org.junit.Assert
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
@ -16,7 +17,6 @@ import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner import org.robolectric.RobolectricTestRunner
import org.robolectric.android.controller.ActivityController import org.robolectric.android.controller.ActivityController
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.wikipedia.AppAdapter
import java.lang.reflect.Method import java.lang.reflect.Method
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@ -35,7 +35,7 @@ class CampaignViewUnitTests {
fun setUp() { fun setUp() {
MockitoAnnotations.initMocks(this) MockitoAnnotations.initMocks(this)
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
activityController = Robolectric.buildActivity(Activity::class.java) activityController = Robolectric.buildActivity(Activity::class.java)
activity = Robolectric.buildActivity(MainActivity::class.java).create().get() activity = Robolectric.buildActivity(MainActivity::class.java).create().get()

View file

@ -4,8 +4,9 @@ import android.content.Context
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import androidx.test.core.app.ApplicationProvider 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.TestCommonsApplication
import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.explore.categories.media.CategoriesMediaFragment import fr.free.nrw.commons.explore.categories.media.CategoriesMediaFragment
import org.junit.Assert import org.junit.Assert
import org.junit.Before import org.junit.Before
@ -18,7 +19,6 @@ import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.fakes.RoboMenu import org.robolectric.fakes.RoboMenu
import org.robolectric.fakes.RoboMenuItem import org.robolectric.fakes.RoboMenuItem
import org.wikipedia.AppAdapter
import java.lang.reflect.Field import java.lang.reflect.Field
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@ -41,7 +41,7 @@ class CategoryDetailsActivityUnitTests {
MockitoAnnotations.openMocks(this) MockitoAnnotations.openMocks(this)
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()

View file

@ -9,9 +9,10 @@ import android.widget.TextView
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentTransaction import androidx.fragment.app.FragmentTransaction
import androidx.test.core.app.ApplicationProvider import androidx.test.core.app.ApplicationProvider
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication 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.CampaignView
import fr.free.nrw.commons.campaigns.models.Campaign import fr.free.nrw.commons.campaigns.models.Campaign
import fr.free.nrw.commons.kvstore.JsonKvStore import fr.free.nrw.commons.kvstore.JsonKvStore
@ -38,7 +39,6 @@ import org.robolectric.RobolectricTestRunner
import org.robolectric.Shadows import org.robolectric.Shadows
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.wikipedia.AppAdapter
import java.lang.reflect.Method import java.lang.reflect.Method
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@ -99,7 +99,7 @@ class ContributionsFragmentUnitTests {
fun setUp() { fun setUp() {
MockitoAnnotations.initMocks(this) MockitoAnnotations.initMocks(this)
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
activity = Robolectric.buildActivity(MainActivity::class.java).create().get() activity = Robolectric.buildActivity(MainActivity::class.java).create().get()

View file

@ -8,23 +8,23 @@ import androidx.lifecycle.Lifecycle
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.android.material.floatingactionbutton.FloatingActionButton
import fr.free.nrw.commons.Media 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.TestCommonsApplication
import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.upload.WikidataPlace import fr.free.nrw.commons.upload.WikidataPlace
import org.junit.Assert import org.junit.Assert
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers.anyInt import org.mockito.ArgumentMatchers.anyInt
import org.mockito.Mockito.mock
import org.mockito.Mockito.verify import org.mockito.Mockito.verify
import org.mockito.Mockito.`when` import org.mockito.Mockito.`when`
import org.robolectric.Shadows import org.robolectric.Shadows
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.wikipedia.AppAdapter
import java.lang.reflect.Method import java.lang.reflect.Method
import fr.free.nrw.commons.R
import org.mockito.Mockito.mock
@RunWith(AndroidJUnit4::class) @RunWith(AndroidJUnit4::class)
@Config(sdk = [21], application = TestCommonsApplication::class) @Config(sdk = [21], application = TestCommonsApplication::class)
@ -41,7 +41,7 @@ class ContributionsListFragmentUnitTests {
@Before @Before
fun setUp() { fun setUp() {
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
scenario = launchFragmentInContainer( scenario = launchFragmentInContainer(
initialState = Lifecycle.State.RESUMED, initialState = Lifecycle.State.RESUMED,

View file

@ -10,9 +10,10 @@ import androidx.test.core.app.ApplicationProvider
import androidx.work.Configuration import androidx.work.Configuration
import androidx.work.testing.WorkManagerTestInitHelper import androidx.work.testing.WorkManagerTestInitHelper
import fr.free.nrw.commons.CommonsApplication import fr.free.nrw.commons.CommonsApplication
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.bookmarks.BookmarkFragment import fr.free.nrw.commons.bookmarks.BookmarkFragment
import fr.free.nrw.commons.contributions.MainActivity.ActiveFragment import fr.free.nrw.commons.contributions.MainActivity.ActiveFragment
import fr.free.nrw.commons.explore.ExploreFragment import fr.free.nrw.commons.explore.ExploreFragment
@ -36,7 +37,6 @@ import org.robolectric.Shadows
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.robolectric.fakes.RoboMenuItem import org.robolectric.fakes.RoboMenuItem
import org.wikipedia.AppAdapter
import java.lang.reflect.Field import java.lang.reflect.Field
import java.lang.reflect.Method import java.lang.reflect.Method
@ -85,7 +85,7 @@ class MainActivityUnitTests {
@Before @Before
fun setUp() { fun setUp() {
MockitoAnnotations.initMocks(this) MockitoAnnotations.initMocks(this)
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
activity = Robolectric.buildActivity(MainActivity::class.java).create().get() activity = Robolectric.buildActivity(MainActivity::class.java).create().get()
activity.applicationKvStore = applicationKvStore activity.applicationKvStore = applicationKvStore

View file

@ -6,8 +6,9 @@ import android.view.MotionEvent
import android.view.View import android.view.View
import androidx.test.core.app.ApplicationProvider import androidx.test.core.app.ApplicationProvider
import com.nhaarman.mockitokotlin2.whenever 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.TestCommonsApplication
import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.TestUtility.setFinalStatic import fr.free.nrw.commons.TestUtility.setFinalStatic
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
@ -15,12 +16,8 @@ import org.junit.runner.RunWith
import org.mockito.Mock import org.mockito.Mock
import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations
import org.powermock.core.classloader.annotations.PrepareForTest import org.powermock.core.classloader.annotations.PrepareForTest
import org.powermock.reflect.Whitebox
import org.robolectric.RobolectricTestRunner import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.wikipedia.AppAdapter
import java.lang.reflect.Field
import java.lang.reflect.Modifier
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@Config(sdk = [21], application = TestCommonsApplication::class) @Config(sdk = [21], application = TestCommonsApplication::class)
@ -46,8 +43,7 @@ internal class OnSwipeTouchListenerTest {
@Before @Before
fun setUp() { fun setUp() {
MockitoAnnotations.initMocks(this) MockitoAnnotations.initMocks(this)
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
// motionEvent1 = MotionEvent.obtain(200, 300, MotionEvent.ACTION_MOVE, 15.0f, 10.0f, 0);
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
onSwipeTouchListener = OnSwipeTouchListener(context) onSwipeTouchListener = OnSwipeTouchListener(context)

View file

@ -3,11 +3,11 @@ package fr.free.nrw.commons.customselector.ui.selector
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
import android.os.Bundle 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.TestCommonsApplication
import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.customselector.model.Image import fr.free.nrw.commons.customselector.model.Image
import fr.free.nrw.commons.customselector.ui.adapter.ImageAdapter 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.Before
import org.junit.Test import org.junit.Test
import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertEquals
@ -19,7 +19,6 @@ import org.powermock.reflect.Whitebox
import org.robolectric.Robolectric import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.wikipedia.AppAdapter
import java.lang.reflect.Field import java.lang.reflect.Field
import java.lang.reflect.Method import java.lang.reflect.Method
@ -46,7 +45,7 @@ class CustomSelectorActivityTest {
@Before @Before
fun setUp() { fun setUp() {
MockitoAnnotations.openMocks(this) MockitoAnnotations.openMocks(this)
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
activity = Robolectric.buildActivity(CustomSelectorActivity::class.java) activity = Robolectric.buildActivity(CustomSelectorActivity::class.java)
.get() .get()

View file

@ -5,7 +5,6 @@ import android.os.Bundle
import android.os.Looper import android.os.Looper
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import fr.free.nrw.commons.customselector.model.Result
import android.widget.ProgressBar import android.widget.ProgressBar
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentTransaction import androidx.fragment.app.FragmentTransaction
@ -13,10 +12,12 @@ import androidx.recyclerview.widget.RecyclerView
import androidx.test.core.app.ApplicationProvider import androidx.test.core.app.ApplicationProvider
import com.facebook.drawee.backends.pipeline.Fresco import com.facebook.drawee.backends.pipeline.Fresco
import com.facebook.soloader.SoLoader import com.facebook.soloader.SoLoader
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication 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.CallbackStatus
import fr.free.nrw.commons.customselector.model.Result
import fr.free.nrw.commons.customselector.ui.adapter.FolderAdapter import fr.free.nrw.commons.customselector.ui.adapter.FolderAdapter
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
@ -30,7 +31,6 @@ import org.robolectric.RobolectricTestRunner
import org.robolectric.Shadows import org.robolectric.Shadows
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.wikipedia.AppAdapter
import java.lang.reflect.Field import java.lang.reflect.Field
/** /**
@ -62,7 +62,7 @@ class FolderFragmentTest {
fun setUp() { fun setUp() {
MockitoAnnotations.initMocks(this) MockitoAnnotations.initMocks(this)
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
SoLoader.setInTestMode() SoLoader.setInTestMode()
Fresco.initialize(context) Fresco.initialize(context)
val activity = Robolectric.buildActivity(CustomSelectorActivity::class.java).create().get() val activity = Robolectric.buildActivity(CustomSelectorActivity::class.java).create().get()

View file

@ -15,9 +15,10 @@ import androidx.test.core.app.ApplicationProvider
import com.facebook.drawee.backends.pipeline.Fresco import com.facebook.drawee.backends.pipeline.Fresco
import com.facebook.soloader.SoLoader import com.facebook.soloader.SoLoader
import com.nhaarman.mockitokotlin2.whenever import com.nhaarman.mockitokotlin2.whenever
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication 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.CallbackStatus
import fr.free.nrw.commons.customselector.model.Image import fr.free.nrw.commons.customselector.model.Image
import fr.free.nrw.commons.customselector.model.Result import fr.free.nrw.commons.customselector.model.Result
@ -35,7 +36,6 @@ import org.robolectric.Shadows
import org.robolectric.Shadows.shadowOf import org.robolectric.Shadows.shadowOf
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.wikipedia.AppAdapter
import java.lang.reflect.Field import java.lang.reflect.Field
/** /**
@ -74,7 +74,7 @@ class ImageFragmentTest {
fun setUp(){ fun setUp(){
MockitoAnnotations.initMocks(this) MockitoAnnotations.initMocks(this)
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
SoLoader.setInTestMode() SoLoader.setInTestMode()
Fresco.initialize(context) Fresco.initialize(context)
activity = Robolectric.buildActivity(CustomSelectorActivity::class.java).create().get() activity = Robolectric.buildActivity(CustomSelectorActivity::class.java).create().get()

View file

@ -7,17 +7,18 @@ import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentTransaction import androidx.fragment.app.FragmentTransaction
import androidx.test.core.app.ApplicationProvider import androidx.test.core.app.ApplicationProvider
import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayout
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.contributions.MainActivity import fr.free.nrw.commons.contributions.MainActivity
import org.junit.Assert import org.junit.Assert
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mockito.Mock import org.mockito.Mock
import org.mockito.Mockito.`when`
import org.mockito.Mockito.verify import org.mockito.Mockito.verify
import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations
import org.powermock.reflect.Whitebox import org.powermock.reflect.Whitebox
import org.robolectric.Robolectric import org.robolectric.Robolectric
@ -27,7 +28,6 @@ import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.robolectric.fakes.RoboMenu import org.robolectric.fakes.RoboMenu
import org.robolectric.fakes.RoboMenuItem import org.robolectric.fakes.RoboMenuItem
import org.wikipedia.AppAdapter
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@Config(sdk = [21], application = TestCommonsApplication::class) @Config(sdk = [21], application = TestCommonsApplication::class)
@ -56,7 +56,7 @@ class ExploreFragmentUnitTest {
MockitoAnnotations.openMocks(this) MockitoAnnotations.openMocks(this)
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
activity = Robolectric.buildActivity(MainActivity::class.java).create().get() activity = Robolectric.buildActivity(MainActivity::class.java).create().get()
fragment = ExploreFragment() fragment = ExploreFragment()

View file

@ -11,9 +11,10 @@ import com.google.android.material.tabs.TabLayout
import com.nhaarman.mockitokotlin2.any import com.nhaarman.mockitokotlin2.any
import com.nhaarman.mockitokotlin2.times import com.nhaarman.mockitokotlin2.times
import fr.free.nrw.commons.Media import fr.free.nrw.commons.Media
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.contributions.MainActivity import fr.free.nrw.commons.contributions.MainActivity
import fr.free.nrw.commons.explore.categories.media.CategoriesMediaFragment import fr.free.nrw.commons.explore.categories.media.CategoriesMediaFragment
import fr.free.nrw.commons.media.MediaDetailPagerFragment import fr.free.nrw.commons.media.MediaDetailPagerFragment
@ -23,15 +24,14 @@ import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers.anyInt import org.mockito.ArgumentMatchers.anyInt
import org.mockito.Mock import org.mockito.Mock
import org.mockito.Mockito.`when`
import org.mockito.Mockito.verify import org.mockito.Mockito.verify
import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations
import org.powermock.reflect.Whitebox import org.powermock.reflect.Whitebox
import org.robolectric.Robolectric import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.wikipedia.AppAdapter
import java.lang.reflect.Field import java.lang.reflect.Field
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@ -76,7 +76,7 @@ class ExploreListRootFragmentUnitTest {
MockitoAnnotations.openMocks(this) MockitoAnnotations.openMocks(this)
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
activity = Robolectric.buildActivity(MainActivity::class.java).create().get() activity = Robolectric.buildActivity(MainActivity::class.java).create().get()
fragment = ExploreListRootFragment() fragment = ExploreListRootFragment()

View file

@ -8,9 +8,10 @@ import androidx.fragment.app.FragmentManager
import androidx.test.core.app.ApplicationProvider import androidx.test.core.app.ApplicationProvider
import androidx.viewpager.widget.ViewPager import androidx.viewpager.widget.ViewPager
import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayout
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication 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.explore.depictions.media.DepictedImagesFragment
import fr.free.nrw.commons.media.MediaDetailPagerFragment import fr.free.nrw.commons.media.MediaDetailPagerFragment
import fr.free.nrw.commons.upload.structure.depictions.DepictedItem 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.annotation.LooperMode
import org.robolectric.fakes.RoboMenu import org.robolectric.fakes.RoboMenu
import org.robolectric.fakes.RoboMenuItem import org.robolectric.fakes.RoboMenuItem
import org.wikipedia.AppAdapter
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@Config(sdk = [21], application = TestCommonsApplication::class) @Config(sdk = [21], application = TestCommonsApplication::class)
@ -65,7 +65,7 @@ class WikidataItemDetailsActivityUnitTests {
@Before @Before
fun setUp() { fun setUp() {
MockitoAnnotations.openMocks(this) MockitoAnnotations.openMocks(this)
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
val intent = Intent( val intent = Intent(
ApplicationProvider.getApplicationContext(), ApplicationProvider.getApplicationContext(),
WikidataItemDetailsActivity::class.java WikidataItemDetailsActivity::class.java

View file

@ -12,10 +12,11 @@ import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentTransaction import androidx.fragment.app.FragmentTransaction
import androidx.test.core.app.ApplicationProvider import androidx.test.core.app.ApplicationProvider
import com.nhaarman.mockitokotlin2.whenever import com.nhaarman.mockitokotlin2.whenever
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.contributions.MainActivity import fr.free.nrw.commons.contributions.MainActivity
import fr.free.nrw.commons.createTestClient
import org.junit.Assert import org.junit.Assert
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
@ -27,7 +28,6 @@ import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.wikipedia.AppAdapter
import java.lang.reflect.Method import java.lang.reflect.Method
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@ -67,7 +67,7 @@ class RecentSearchesFragmentUnitTest {
MockitoAnnotations.openMocks(this) MockitoAnnotations.openMocks(this)
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
val activity = Robolectric.buildActivity(MainActivity::class.java).create().get() val activity = Robolectric.buildActivity(MainActivity::class.java).create().get()
fragment = RecentSearchesFragment() fragment = RecentSearchesFragment()

View file

@ -3,20 +3,17 @@ package fr.free.nrw.commons.feedback
import android.content.Context import android.content.Context
import androidx.test.core.app.ApplicationProvider import androidx.test.core.app.ApplicationProvider
import fr.free.nrw.commons.FakeContextWrapper 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.TestCommonsApplication
import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.feedback.model.Feedback import fr.free.nrw.commons.feedback.model.Feedback
import org.junit.Assert import org.junit.Assert
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith 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.mockito.MockitoAnnotations
import org.robolectric.RobolectricTestRunner import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.wikipedia.AppAdapter
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@Config(sdk = [21], application = TestCommonsApplication::class) @Config(sdk = [21], application = TestCommonsApplication::class)
@ -29,7 +26,7 @@ class FeedbackContentCreatorUnitTests {
@Before @Before
fun setup() { fun setup() {
MockitoAnnotations.openMocks(this) MockitoAnnotations.openMocks(this)
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
context = FakeContextWrapper(ApplicationProvider.getApplicationContext()) context = FakeContextWrapper(ApplicationProvider.getApplicationContext())
} }

View file

@ -5,20 +5,20 @@ import android.os.Looper.getMainLooper
import android.text.Editable import android.text.Editable
import androidx.test.core.app.ApplicationProvider import androidx.test.core.app.ApplicationProvider
import com.nhaarman.mockitokotlin2.doReturn 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.TestCommonsApplication
import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.TestUtility.setFinalStatic import fr.free.nrw.commons.TestUtility.setFinalStatic
import fr.free.nrw.commons.contributions.MainActivity import fr.free.nrw.commons.contributions.MainActivity
import fr.free.nrw.commons.databinding.DialogFeedbackBinding import fr.free.nrw.commons.databinding.DialogFeedbackBinding
import fr.free.nrw.commons.ui.PasteSensitiveTextInputEditText import fr.free.nrw.commons.ui.PasteSensitiveTextInputEditText
import org.junit.Assert import org.junit.Assert
import org.junit.Before import org.junit.Before
import org.junit.Rule
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mockito.Mock import org.mockito.Mock
import org.mockito.Mockito.`when`
import org.mockito.Mockito.mock import org.mockito.Mockito.mock
import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations
import org.powermock.reflect.Whitebox import org.powermock.reflect.Whitebox
import org.robolectric.Robolectric import org.robolectric.Robolectric
@ -26,7 +26,6 @@ import org.robolectric.RobolectricTestRunner
import org.robolectric.Shadows.shadowOf import org.robolectric.Shadows.shadowOf
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.wikipedia.AppAdapter
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@Config(sdk = [21], application = TestCommonsApplication::class) @Config(sdk = [21], application = TestCommonsApplication::class)
@ -45,7 +44,7 @@ class FeedbackDialogTests {
MockitoAnnotations.openMocks(this) MockitoAnnotations.openMocks(this)
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
val activity = Robolectric.buildActivity(MainActivity::class.java).create().get() val activity = Robolectric.buildActivity(MainActivity::class.java).create().get()

View file

@ -13,9 +13,10 @@ import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentTransaction import androidx.fragment.app.FragmentTransaction
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.test.core.app.ApplicationProvider import androidx.test.core.app.ApplicationProvider
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.auth.SessionManager import fr.free.nrw.commons.auth.SessionManager
import fr.free.nrw.commons.profile.ProfileActivity import fr.free.nrw.commons.profile.ProfileActivity
import fr.free.nrw.commons.profile.leaderboard.LeaderboardFragment import fr.free.nrw.commons.profile.leaderboard.LeaderboardFragment
@ -28,17 +29,14 @@ import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mockito.Mock import org.mockito.Mock
import org.mockito.Mockito.`when` import org.mockito.Mockito.`when`
import org.mockito.Mockito.doReturn
import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations
import org.powermock.reflect.Whitebox import org.powermock.reflect.Whitebox
import org.robolectric.Robolectric import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner import org.robolectric.RobolectricTestRunner
import org.robolectric.Shadows
import org.robolectric.Shadows.shadowOf import org.robolectric.Shadows.shadowOf
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.robolectric.shadows.ShadowToast import org.robolectric.shadows.ShadowToast
import org.wikipedia.AppAdapter
import java.lang.reflect.Method import java.lang.reflect.Method
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@ -84,7 +82,7 @@ class LeaderboardFragmentUnitTests {
MockitoAnnotations.initMocks(this) MockitoAnnotations.initMocks(this)
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
val activity = Robolectric.buildActivity(ProfileActivity::class.java).create().get() val activity = Robolectric.buildActivity(ProfileActivity::class.java).create().get()
fragment = LeaderboardFragment() fragment = LeaderboardFragment()

View file

@ -6,9 +6,10 @@ import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.test.core.app.ApplicationProvider import androidx.test.core.app.ApplicationProvider
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.auth.LoginActivity import fr.free.nrw.commons.auth.LoginActivity
import org.junit.Assert import org.junit.Assert
import org.junit.Before import org.junit.Before
@ -20,7 +21,6 @@ import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.fakes.RoboMenuItem import org.robolectric.fakes.RoboMenuItem
import org.wikipedia.AppAdapter
import java.lang.reflect.Field import java.lang.reflect.Field
@ -49,7 +49,7 @@ class LoginActivityUnitTests {
MockitoAnnotations.openMocks(this) MockitoAnnotations.openMocks(this)
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
activity = Robolectric.buildActivity(LoginActivity::class.java).create().get() activity = Robolectric.buildActivity(LoginActivity::class.java).create().get()

View file

@ -20,13 +20,14 @@ import com.facebook.drawee.backends.pipeline.Fresco
import com.facebook.drawee.generic.GenericDraweeHierarchy import com.facebook.drawee.generic.GenericDraweeHierarchy
import com.facebook.drawee.view.SimpleDraweeView import com.facebook.drawee.view.SimpleDraweeView
import com.facebook.soloader.SoLoader import com.facebook.soloader.SoLoader
import com.nhaarman.mockitokotlin2.whenever
import com.nhaarman.mockitokotlin2.doReturn import com.nhaarman.mockitokotlin2.doReturn
import com.nhaarman.mockitokotlin2.whenever
import fr.free.nrw.commons.LocationPicker.LocationPickerActivity import fr.free.nrw.commons.LocationPicker.LocationPickerActivity
import fr.free.nrw.commons.Media import fr.free.nrw.commons.Media
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication 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.DeleteHelper
import fr.free.nrw.commons.delete.ReasonBuilder import fr.free.nrw.commons.delete.ReasonBuilder
import fr.free.nrw.commons.explore.SearchActivity import fr.free.nrw.commons.explore.SearchActivity
@ -50,7 +51,6 @@ import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.robolectric.shadows.ShadowActivity import org.robolectric.shadows.ShadowActivity
import org.robolectric.shadows.ShadowIntent import org.robolectric.shadows.ShadowIntent
import org.wikipedia.AppAdapter
import java.lang.reflect.Field import java.lang.reflect.Field
import java.lang.reflect.Method import java.lang.reflect.Method
import java.util.* import java.util.*
@ -154,7 +154,7 @@ class MediaDetailFragmentUnitTests {
MockitoAnnotations.openMocks(this) MockitoAnnotations.openMocks(this)
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
SoLoader.setInTestMode() SoLoader.setInTestMode()

View file

@ -17,8 +17,9 @@ import com.nhaarman.mockitokotlin2.never
import com.nhaarman.mockitokotlin2.times import com.nhaarman.mockitokotlin2.times
import com.nhaarman.mockitokotlin2.verify import com.nhaarman.mockitokotlin2.verify
import fr.free.nrw.commons.Media 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.TestCommonsApplication
import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.auth.SessionManager import fr.free.nrw.commons.auth.SessionManager
import fr.free.nrw.commons.explore.SearchActivity import fr.free.nrw.commons.explore.SearchActivity
import io.reactivex.android.plugins.RxAndroidPlugins import io.reactivex.android.plugins.RxAndroidPlugins
@ -37,7 +38,6 @@ import org.robolectric.RobolectricTestRunner
import org.robolectric.Shadows import org.robolectric.Shadows
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.wikipedia.AppAdapter
import java.lang.reflect.Field import java.lang.reflect.Field
import java.lang.reflect.Method import java.lang.reflect.Method
import java.util.concurrent.Callable import java.util.concurrent.Callable
@ -77,7 +77,7 @@ class MediaDetailPagerFragmentUnitTests {
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
SoLoader.setInTestMode() SoLoader.setInTestMode()

View file

@ -6,8 +6,9 @@ import android.net.Uri
import androidx.test.core.app.ApplicationProvider import androidx.test.core.app.ApplicationProvider
import com.facebook.drawee.backends.pipeline.Fresco import com.facebook.drawee.backends.pipeline.Fresco
import com.facebook.soloader.SoLoader 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.TestCommonsApplication
import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.customselector.model.CallbackStatus import fr.free.nrw.commons.customselector.model.CallbackStatus
import fr.free.nrw.commons.customselector.model.Image import fr.free.nrw.commons.customselector.model.Image
import fr.free.nrw.commons.customselector.model.Result import fr.free.nrw.commons.customselector.model.Result
@ -22,7 +23,6 @@ import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.wikipedia.AppAdapter
import java.lang.reflect.Field import java.lang.reflect.Field
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@ -44,7 +44,7 @@ class ZoomableActivityUnitTests {
@Before @Before
fun setUp() { fun setUp() {
MockitoAnnotations.openMocks(this) MockitoAnnotations.openMocks(this)
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
SoLoader.setInTestMode() SoLoader.setInTestMode()
Fresco.initialize(context) Fresco.initialize(context)

View file

@ -8,15 +8,15 @@ import android.os.Looper
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.widget.Button import android.widget.Button
import android.widget.TextView
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentTransaction import androidx.fragment.app.FragmentTransaction
import androidx.test.core.app.ApplicationProvider import androidx.test.core.app.ApplicationProvider
import fr.free.nrw.commons.CommonsApplication import fr.free.nrw.commons.CommonsApplication
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.actions.PageEditClient import fr.free.nrw.commons.actions.PageEditClient
import fr.free.nrw.commons.feedback.model.Feedback import fr.free.nrw.commons.feedback.model.Feedback
import fr.free.nrw.commons.kvstore.JsonKvStore 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.ShadowActivity
import org.robolectric.shadows.ShadowAlertDialog import org.robolectric.shadows.ShadowAlertDialog
import org.robolectric.shadows.ShadowDialog import org.robolectric.shadows.ShadowDialog
import org.wikipedia.AppAdapter
import java.lang.reflect.Method import java.lang.reflect.Method
@ -63,7 +62,7 @@ class MoreBottomSheetFragmentUnitTests {
fun setUp() { fun setUp() {
MockitoAnnotations.openMocks(this) MockitoAnnotations.openMocks(this)
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
activity = Robolectric.buildActivity(ProfileActivity::class.java).create().get() activity = Robolectric.buildActivity(ProfileActivity::class.java).create().get()
fragment = MoreBottomSheetFragment() fragment = MoreBottomSheetFragment()

View file

@ -8,10 +8,11 @@ import androidx.appcompat.widget.AppCompatButton
import androidx.appcompat.widget.AppCompatEditText import androidx.appcompat.widget.AppCompatEditText
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentTransaction import androidx.fragment.app.FragmentTransaction
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.contributions.MainActivity import fr.free.nrw.commons.contributions.MainActivity
import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.nearby.fragments.AdvanceQueryFragment import fr.free.nrw.commons.nearby.fragments.AdvanceQueryFragment
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull import org.junit.Assert.assertNotNull
@ -19,8 +20,8 @@ import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mockito.Mock import org.mockito.Mock
import org.mockito.Mockito.`when`
import org.mockito.Mockito.verify import org.mockito.Mockito.verify
import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations
import org.powermock.reflect.Whitebox import org.powermock.reflect.Whitebox
import org.robolectric.Robolectric import org.robolectric.Robolectric
@ -28,7 +29,6 @@ import org.robolectric.RobolectricTestRunner
import org.robolectric.Shadows import org.robolectric.Shadows
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.wikipedia.AppAdapter
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@Config(sdk = [21], application = TestCommonsApplication::class) @Config(sdk = [21], application = TestCommonsApplication::class)
@ -60,7 +60,7 @@ class AdvanceQueryFragmentUnitTests {
@Before @Before
fun setUp() { fun setUp() {
MockitoAnnotations.openMocks(this) MockitoAnnotations.openMocks(this)
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
activity = Robolectric.buildActivity(MainActivity::class.java).create().get() activity = Robolectric.buildActivity(MainActivity::class.java).create().get()
fragment = AdvanceQueryFragment() fragment = AdvanceQueryFragment()

View file

@ -21,13 +21,13 @@ import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.mapbox.mapboxsdk.camera.CameraPosition import com.mapbox.mapboxsdk.camera.CameraPosition
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory import com.mapbox.mapboxsdk.camera.CameraUpdateFactory
import com.mapbox.mapboxsdk.geometry.LatLng import com.mapbox.mapboxsdk.geometry.LatLng
import com.mapbox.mapboxsdk.maps.MapView
import com.mapbox.mapboxsdk.maps.MapboxMap import com.mapbox.mapboxsdk.maps.MapboxMap
import com.nhaarman.mockitokotlin2.verify import com.nhaarman.mockitokotlin2.verify
import com.nhaarman.mockitokotlin2.whenever import com.nhaarman.mockitokotlin2.whenever
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication 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.bookmarks.locations.BookmarkLocationsDao
import fr.free.nrw.commons.contributions.MainActivity import fr.free.nrw.commons.contributions.MainActivity
import fr.free.nrw.commons.kvstore.JsonKvStore import fr.free.nrw.commons.kvstore.JsonKvStore
@ -53,7 +53,6 @@ import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.robolectric.shadows.ShadowActivity import org.robolectric.shadows.ShadowActivity
import org.robolectric.shadows.ShadowAlertDialog import org.robolectric.shadows.ShadowAlertDialog
import org.wikipedia.AppAdapter
import java.lang.reflect.Method import java.lang.reflect.Method
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@ -132,7 +131,7 @@ class NearbyParentFragmentUnitTest {
MockitoAnnotations.openMocks(this) MockitoAnnotations.openMocks(this)
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
activity = Robolectric.buildActivity(MainActivity::class.java).create().get() activity = Robolectric.buildActivity(MainActivity::class.java).create().get()
fragment = NearbyParentFragment() fragment = NearbyParentFragment()

View file

@ -5,10 +5,11 @@ import android.content.Intent
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import androidx.test.core.app.ApplicationProvider import androidx.test.core.app.ApplicationProvider
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.ShadowActionBar import fr.free.nrw.commons.ShadowActionBar
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication 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.Notification
import fr.free.nrw.commons.notification.models.NotificationType import fr.free.nrw.commons.notification.models.NotificationType
import fr.free.nrw.commons.utils.NetworkUtils import fr.free.nrw.commons.utils.NetworkUtils
@ -17,15 +18,14 @@ import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mockito.Mock import org.mockito.Mock
import org.mockito.Mockito.`when`
import org.mockito.Mockito.mock import org.mockito.Mockito.mock
import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations
import org.robolectric.Robolectric import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.fakes.RoboMenu import org.robolectric.fakes.RoboMenu
import org.robolectric.fakes.RoboMenuItem import org.robolectric.fakes.RoboMenuItem
import org.wikipedia.AppAdapter
import java.lang.reflect.Field import java.lang.reflect.Field
import java.lang.reflect.Method import java.lang.reflect.Method
@ -58,7 +58,7 @@ class NotificationActivityUnitTests {
networkUtils = mock(NetworkUtils::class.java) networkUtils = mock(NetworkUtils::class.java)
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
val intent = Intent().putExtra("title", "read") val intent = Intent().putExtra("title", "read")

View file

@ -7,16 +7,13 @@ import android.view.LayoutInflater
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import android.view.ViewGroup 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.FragmentManager
import androidx.fragment.app.FragmentTransaction import androidx.fragment.app.FragmentTransaction
import androidx.test.core.app.ApplicationProvider 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.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.auth.SessionManager import fr.free.nrw.commons.auth.SessionManager
import fr.free.nrw.commons.profile.ProfileActivity import fr.free.nrw.commons.profile.ProfileActivity
import fr.free.nrw.commons.utils.ConfigUtils import fr.free.nrw.commons.utils.ConfigUtils
@ -35,7 +32,6 @@ import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.robolectric.fakes.RoboMenuItem import org.robolectric.fakes.RoboMenuItem
import org.robolectric.shadows.ShadowToast import org.robolectric.shadows.ShadowToast
import org.wikipedia.AppAdapter
import java.lang.reflect.Method import java.lang.reflect.Method
@ -76,7 +72,8 @@ class AchievementsFragmentUnitTests {
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
menuItem = RoboMenuItem(context) menuItem = RoboMenuItem(context)
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
val activity = Robolectric.buildActivity(ProfileActivity::class.java).create().get() val activity = Robolectric.buildActivity(ProfileActivity::class.java).create().get()
val fragmentManager: FragmentManager = activity.supportFragmentManager val fragmentManager: FragmentManager = activity.supportFragmentManager
val fragmentTransaction: FragmentTransaction = fragmentManager.beginTransaction() val fragmentTransaction: FragmentTransaction = fragmentManager.beginTransaction()

View file

@ -4,19 +4,15 @@ import android.content.Context
import android.os.Looper.getMainLooper import android.os.Looper.getMainLooper
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.widget.Button
import androidx.test.core.app.ApplicationProvider import androidx.test.core.app.ApplicationProvider
import butterknife.BindView
import com.facebook.drawee.backends.pipeline.Fresco import com.facebook.drawee.backends.pipeline.Fresco
import com.facebook.soloader.SoLoader import com.facebook.soloader.SoLoader
import com.nhaarman.mockitokotlin2.doNothing import com.nhaarman.mockitokotlin2.doNothing
import fr.free.nrw.commons.Media 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.TestCommonsApplication
import io.reactivex.Scheduler import fr.free.nrw.commons.createTestClient
import io.reactivex.Single import io.reactivex.Single
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
import org.junit.Assert import org.junit.Assert
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
@ -25,7 +21,6 @@ import org.mockito.ArgumentMatchers
import org.mockito.Mock import org.mockito.Mock
import org.mockito.Mockito.* import org.mockito.Mockito.*
import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations
import org.mockito.Spy
import org.powermock.reflect.Whitebox import org.powermock.reflect.Whitebox
import org.robolectric.Robolectric import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner import org.robolectric.RobolectricTestRunner
@ -34,7 +29,6 @@ import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.robolectric.fakes.RoboMenu import org.robolectric.fakes.RoboMenu
import org.robolectric.fakes.RoboMenuItem import org.robolectric.fakes.RoboMenuItem
import org.wikipedia.AppAdapter
import java.lang.reflect.Method import java.lang.reflect.Method
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@ -70,7 +64,7 @@ class ReviewActivityTest {
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
SoLoader.setInTestMode() SoLoader.setInTestMode()

View file

@ -9,12 +9,13 @@ import com.facebook.soloader.SoLoader
import com.nhaarman.mockitokotlin2.verify import com.nhaarman.mockitokotlin2.verify
import com.nhaarman.mockitokotlin2.whenever import com.nhaarman.mockitokotlin2.whenever
import fr.free.nrw.commons.Media import fr.free.nrw.commons.Media
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication 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.DeleteHelper
import org.junit.Assert.assertEquals
import media import media
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull import org.junit.Assert.assertNotNull
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
@ -29,7 +30,6 @@ import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.robolectric.shadows.ShadowNotificationManager import org.robolectric.shadows.ShadowNotificationManager
import org.robolectric.shadows.ShadowToast import org.robolectric.shadows.ShadowToast
import org.wikipedia.AppAdapter
import org.wikipedia.dataclient.mwapi.MwQueryPage import org.wikipedia.dataclient.mwapi.MwQueryPage
import java.lang.reflect.Method import java.lang.reflect.Method
import java.util.* import java.util.*
@ -58,7 +58,7 @@ class ReviewControllerTest {
fun setUp() { fun setUp() {
MockitoAnnotations.openMocks(this) MockitoAnnotations.openMocks(this)
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
SoLoader.setInTestMode() SoLoader.setInTestMode()
Fresco.initialize(context) Fresco.initialize(context)
activity = Robolectric.buildActivity(ReviewActivity::class.java).create().get() activity = Robolectric.buildActivity(ReviewActivity::class.java).create().get()

View file

@ -14,16 +14,16 @@ import com.facebook.drawee.backends.pipeline.Fresco
import com.facebook.soloader.SoLoader import com.facebook.soloader.SoLoader
import com.nhaarman.mockitokotlin2.doReturn import com.nhaarman.mockitokotlin2.doReturn
import fr.free.nrw.commons.Media import fr.free.nrw.commons.Media
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.createTestClient
import org.junit.Assert import org.junit.Assert
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mockito.Mock import org.mockito.Mock
import org.mockito.Mockito.`when`
import org.mockito.Mockito.mock import org.mockito.Mockito.mock
import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations
import org.powermock.reflect.Whitebox import org.powermock.reflect.Whitebox
@ -32,7 +32,6 @@ import org.robolectric.RobolectricTestRunner
import org.robolectric.Shadows.shadowOf import org.robolectric.Shadows.shadowOf
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.wikipedia.AppAdapter
import java.lang.reflect.Method import java.lang.reflect.Method
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@ -63,7 +62,7 @@ class ReviewImageFragmentTest {
MockitoAnnotations.openMocks(this) MockitoAnnotations.openMocks(this)
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
SoLoader.setInTestMode() SoLoader.setInTestMode()
Fresco.initialize(context) Fresco.initialize(context)

View file

@ -6,16 +6,16 @@ import androidx.test.core.app.ApplicationProvider
import androidx.work.Configuration import androidx.work.Configuration
import androidx.work.testing.WorkManagerTestInitHelper import androidx.work.testing.WorkManagerTestInitHelper
import fr.free.nrw.commons.CommonsApplication import fr.free.nrw.commons.CommonsApplication
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.contributions.ContributionController import fr.free.nrw.commons.contributions.ContributionController
import fr.free.nrw.commons.filepicker.UploadableFile import fr.free.nrw.commons.filepicker.UploadableFile
import fr.free.nrw.commons.upload.categories.UploadCategoriesFragment import fr.free.nrw.commons.upload.categories.UploadCategoriesFragment
import fr.free.nrw.commons.upload.license.MediaLicenseFragment import fr.free.nrw.commons.upload.license.MediaLicenseFragment
import org.junit.Assert import org.junit.Assert
import org.junit.Before import org.junit.Before
import org.junit.Ignore
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mockito.Mock import org.mockito.Mock
@ -26,7 +26,6 @@ import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.wikipedia.AppAdapter
import java.lang.reflect.Method import java.lang.reflect.Method
@ -53,7 +52,7 @@ class UploadActivityUnitTests {
@Before @Before
fun setUp() { fun setUp() {
MockitoAnnotations.openMocks(this) MockitoAnnotations.openMocks(this)
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
val intent = Intent() val intent = Intent()
val list = ArrayList<UploadableFile>() val list = ArrayList<UploadableFile>()
list.add(uploadableFile) list.add(uploadableFile)

View file

@ -17,11 +17,11 @@ import androidx.test.core.app.ApplicationProvider
import com.google.android.material.textfield.TextInputLayout import com.google.android.material.textfield.TextInputLayout
import com.nhaarman.mockitokotlin2.times import com.nhaarman.mockitokotlin2.times
import com.nhaarman.mockitokotlin2.verify import com.nhaarman.mockitokotlin2.verify
import com.nhaarman.mockitokotlin2.whenever
import fr.free.nrw.commons.Media import fr.free.nrw.commons.Media
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.ui.PasteSensitiveTextInputEditText import fr.free.nrw.commons.ui.PasteSensitiveTextInputEditText
import fr.free.nrw.commons.upload.UploadActivity import fr.free.nrw.commons.upload.UploadActivity
import fr.free.nrw.commons.upload.UploadBaseFragment import fr.free.nrw.commons.upload.UploadBaseFragment
@ -39,7 +39,6 @@ import org.robolectric.RobolectricTestRunner
import org.robolectric.Shadows import org.robolectric.Shadows
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.wikipedia.AppAdapter
import java.lang.reflect.Method import java.lang.reflect.Method
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@ -103,7 +102,7 @@ class UploadCategoriesFragmentUnitTests {
fun setUp() { fun setUp() {
MockitoAnnotations.openMocks(this) MockitoAnnotations.openMocks(this)
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
val activity = Robolectric.buildActivity(UploadActivity::class.java).create().get() val activity = Robolectric.buildActivity(UploadActivity::class.java).create().get()
fragment = UploadCategoriesFragment() fragment = UploadCategoriesFragment()
fragmentManager = activity.supportFragmentManager fragmentManager = activity.supportFragmentManager

View file

@ -17,9 +17,10 @@ import com.google.android.material.textfield.TextInputLayout
import com.nhaarman.mockitokotlin2.whenever import com.nhaarman.mockitokotlin2.whenever
import depictedItem import depictedItem
import fr.free.nrw.commons.Media import fr.free.nrw.commons.Media
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.kvstore.JsonKvStore import fr.free.nrw.commons.kvstore.JsonKvStore
import fr.free.nrw.commons.ui.PasteSensitiveTextInputEditText import fr.free.nrw.commons.ui.PasteSensitiveTextInputEditText
import fr.free.nrw.commons.upload.UploadActivity import fr.free.nrw.commons.upload.UploadActivity
@ -36,7 +37,6 @@ import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.wikipedia.AppAdapter
import java.lang.reflect.Method import java.lang.reflect.Method
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@ -96,7 +96,7 @@ class DepictsFragmentUnitTests {
fun setUp() { fun setUp() {
MockitoAnnotations.openMocks(this) MockitoAnnotations.openMocks(this)
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
val activity = Robolectric.buildActivity(UploadActivity::class.java).create().get() val activity = Robolectric.buildActivity(UploadActivity::class.java).create().get()
fragment = DepictsFragment() fragment = DepictsFragment()

View file

@ -23,9 +23,10 @@ import com.mapbox.mapboxsdk.geometry.LatLng
import com.nhaarman.mockitokotlin2.mock import com.nhaarman.mockitokotlin2.mock
import fr.free.nrw.commons.LocationPicker.LocationPicker import fr.free.nrw.commons.LocationPicker.LocationPicker
import fr.free.nrw.commons.LocationPicker.LocationPickerActivity import fr.free.nrw.commons.LocationPicker.LocationPickerActivity
import fr.free.nrw.commons.OkHttpConnectionFactory
import fr.free.nrw.commons.R import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.kvstore.JsonKvStore import fr.free.nrw.commons.kvstore.JsonKvStore
import fr.free.nrw.commons.nearby.Place import fr.free.nrw.commons.nearby.Place
import fr.free.nrw.commons.upload.ImageCoordinates import fr.free.nrw.commons.upload.ImageCoordinates
@ -50,7 +51,6 @@ import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode import org.robolectric.annotation.LooperMode
import org.robolectric.shadows.ShadowActivity import org.robolectric.shadows.ShadowActivity
import org.robolectric.shadows.ShadowIntent import org.robolectric.shadows.ShadowIntent
import org.wikipedia.AppAdapter
import java.lang.reflect.Method import java.lang.reflect.Method
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@ -115,7 +115,7 @@ class UploadMediaDetailFragmentUnitTest {
MockitoAnnotations.openMocks(this) MockitoAnnotations.openMocks(this)
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
activity = Robolectric.buildActivity(UploadActivity::class.java).create().get() activity = Robolectric.buildActivity(UploadActivity::class.java).create().get()
layoutInflater = LayoutInflater.from(activity) layoutInflater = LayoutInflater.from(activity)

View file

@ -7,8 +7,9 @@ import androidx.test.core.app.ApplicationProvider
import com.facebook.imagepipeline.core.ImagePipelineFactory import com.facebook.imagepipeline.core.ImagePipelineFactory
import com.facebook.soloader.SoLoader import com.facebook.soloader.SoLoader
import fr.free.nrw.commons.Media 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.TestCommonsApplication
import fr.free.nrw.commons.createTestClient
import fr.free.nrw.commons.media.MediaClient import fr.free.nrw.commons.media.MediaClient
import io.reactivex.Single import io.reactivex.Single
import io.reactivex.disposables.CompositeDisposable import io.reactivex.disposables.CompositeDisposable
@ -22,7 +23,6 @@ import org.mockito.MockitoAnnotations
import org.powermock.reflect.Whitebox import org.powermock.reflect.Whitebox
import org.robolectric.RobolectricTestRunner import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config import org.robolectric.annotation.Config
import org.wikipedia.AppAdapter
import java.lang.reflect.Method import java.lang.reflect.Method
@RunWith(RobolectricTestRunner::class) @RunWith(RobolectricTestRunner::class)
@ -46,7 +46,7 @@ class PicOfDayAppWidgetUnitTests {
@Before @Before
fun setUp() { fun setUp() {
AppAdapter.set(TestAppAdapter()) OkHttpConnectionFactory.CLIENT = createTestClient()
context = ApplicationProvider.getApplicationContext() context = ApplicationProvider.getApplicationContext()
SoLoader.setInTestMode() SoLoader.setInTestMode()
ImagePipelineFactory.initialize(context) ImagePipelineFactory.initialize(context)

View file

@ -7,20 +7,19 @@ import org.wikipedia.dataclient.SharedPreferenceCookieManager;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
public abstract class AppAdapter { 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 OkHttpClient getOkHttpClient();
public abstract int getDesiredLeadImageDp();
public abstract boolean isLoggedIn(); // Unused from commons app, implement here as a temporary step during refactoring
public abstract String getUserName(); public String getRestbaseUriFormat() {
public abstract String getPassword(); return "";
}
public abstract SharedPreferenceCookieManager getCookies(); // Unused from commons app, implement here as a temporary step during refactoring
public abstract void setCookies(@NonNull SharedPreferenceCookieManager cookies); public int getDesiredLeadImageDp() {
return DEFAULT_THUMB_SIZE;
public abstract boolean logErrorsInsteadOfCrashing(); }
private static AppAdapter INSTANCE; private static AppAdapter INSTANCE;
public static void set(AppAdapter instance) { public static void set(AppAdapter instance) {

View file

@ -28,13 +28,13 @@ public final class SharedPreferenceCookieManager implements CookieJar {
@NonNull @NonNull
public static SharedPreferenceCookieManager getInstance() { public static SharedPreferenceCookieManager getInstance() {
if (INSTANCE == null) { // if (INSTANCE == null) {
try { // try {
INSTANCE = AppAdapter.get().getCookies(); // INSTANCE = AppAdapter.get().getCookies();
} catch (Exception e) { // } catch (Exception e) {
L.logRemoteErrorIfProd(e); // L.logRemoteErrorIfProd(e);
} // }
} // }
if (INSTANCE == null) { if (INSTANCE == null) {
INSTANCE = new SharedPreferenceCookieManager(); INSTANCE = new SharedPreferenceCookieManager();
} }
@ -54,7 +54,7 @@ public final class SharedPreferenceCookieManager implements CookieJar {
} }
private void persistCookies() { private void persistCookies() {
AppAdapter.get().setCookies(this); // AppAdapter.get().setCookies(this);
} }
public synchronized void clearAllCookies() { public synchronized void clearAllCookies() {

View file

@ -30,24 +30,24 @@ public class CookieManagerTypeAdapter extends TypeAdapter<SharedPreferenceCookie
out.endObject(); out.endObject();
} }
@Override public SharedPreferenceCookieManager read(JsonReader in) throws IOException { @Override public SharedPreferenceCookieManager read(JsonReader input) throws IOException {
Map<String, List<Cookie>> map = new HashMap<>(); Map<String, List<Cookie>> map = new HashMap<>();
in.beginObject(); input.beginObject();
while (in.hasNext()) { while (input.hasNext()) {
String key = in.nextName(); String key = input.nextName();
List<Cookie> list = new ArrayList<>(); List<Cookie> list = new ArrayList<>();
map.put(key, list); map.put(key, list);
in.beginArray(); input.beginArray();
HttpUrl url = HttpUrl.parse(WikiSite.DEFAULT_SCHEME + "://" + key); HttpUrl url = HttpUrl.parse(WikiSite.DEFAULT_SCHEME + "://" + key);
while (in.hasNext()) { while (input.hasNext()) {
String str = in.nextString(); String str = input.nextString();
if (url != null) { if (url != null) {
list.add(Cookie.parse(url, str)); list.add(Cookie.parse(url, str));
} }
} }
in.endArray(); input.endArray();
} }
in.endObject(); input.endObject();
return new SharedPreferenceCookieManager(map); return new SharedPreferenceCookieManager(map);
} }
} }

View file

@ -107,11 +107,12 @@ public final class L {
} }
public static void logRemoteErrorIfProd(@NonNull Throwable t) { public static void logRemoteErrorIfProd(@NonNull Throwable t) {
if (AppAdapter.get().logErrorsInsteadOfCrashing()) { // Since "logErrorsInsteadOfCrashing()" only ever returns false...
logRemoteError(t); // if (AppAdapter.get().logErrorsInsteadOfCrashing()) {
} else { // logRemoteError(t);
// } else {
throw new RuntimeException(t); throw new RuntimeException(t);
} // }
} }
public static void setRemoteLogger(@Nullable RemoteExceptionLogger logger) { public static void setRemoteLogger(@Nullable RemoteExceptionLogger logger) {

View file

@ -1,27 +1,11 @@
package org.wikipedia; package org.wikipedia;
import androidx.annotation.NonNull; import okhttp3.OkHttpClient;
import org.wikipedia.dataclient.Service;
import org.wikipedia.dataclient.SharedPreferenceCookieManager;
import org.wikipedia.dataclient.okhttp.TestStubInterceptor; import org.wikipedia.dataclient.okhttp.TestStubInterceptor;
import org.wikipedia.dataclient.okhttp.UnsuccessfulResponseInterceptor; import org.wikipedia.dataclient.okhttp.UnsuccessfulResponseInterceptor;
import org.wikipedia.login.LoginResult;
import okhttp3.OkHttpClient;
public class TestAppAdapter extends AppAdapter { 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 @Override
public OkHttpClient getOkHttpClient() { public OkHttpClient getOkHttpClient() {
return new OkHttpClient.Builder() return new OkHttpClient.Builder()
@ -30,41 +14,4 @@ public class TestAppAdapter extends AppAdapter {
.build(); .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;
}
} }