Move login client out of the data-client (#5476)

This commit is contained in:
Paul Hawke 2024-01-26 08:11:44 -06:00 committed by GitHub
parent 8789879f10
commit 0541aacdff
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
23 changed files with 195 additions and 234 deletions

View file

@ -11,7 +11,7 @@ import org.mockito.Mock
import org.mockito.MockitoAnnotations
import org.wikipedia.dataclient.SharedPreferenceCookieManager
import org.wikipedia.json.GsonMarshaller
import org.wikipedia.login.LoginResult
import fr.free.nrw.commons.auth.login.LoginResult
class CommonsAppAdapterUnitTest {
@ -80,13 +80,6 @@ class CommonsAppAdapterUnitTest {
Assert.assertEquals(adapter.password, "test")
}
@Test
@Throws(Exception::class)
fun testUpdateAccount() {
adapter.updateAccount(result)
verify(sessionManager).updateAccount(result)
}
@Test
@Throws(Exception::class)
fun testSetCookies() {

View file

@ -8,7 +8,6 @@ import org.wikipedia.dataclient.SharedPreferenceCookieManager;
import org.wikipedia.dataclient.WikiSite;
import org.wikipedia.dataclient.okhttp.TestStubInterceptor;
import org.wikipedia.dataclient.okhttp.UnsuccessfulResponseInterceptor;
import org.wikipedia.login.LoginResult;
public class TestAppAdapter extends AppAdapter {
@ -50,10 +49,6 @@ public class TestAppAdapter extends AppAdapter {
return null;
}
@Override
public void updateAccount(@NonNull LoginResult result) {
}
@Override
public SharedPreferenceCookieManager getCookies() {
return null;

View file

@ -8,13 +8,12 @@ import android.view.KeyEvent
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.view.inputmethod.EditorInfo
import android.widget.Button
import android.widget.TextView
import androidx.test.core.app.ApplicationProvider
import fr.free.nrw.commons.R
import fr.free.nrw.commons.TestAppAdapter
import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.auth.login.LoginResult
import fr.free.nrw.commons.kvstore.JsonKvStore
import org.junit.Assert
import org.junit.Before
@ -29,7 +28,6 @@ import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config
import org.robolectric.fakes.RoboMenuItem
import org.wikipedia.AppAdapter
import org.wikipedia.login.LoginResult
import java.lang.reflect.Method

View file

@ -1,45 +0,0 @@
package fr.free.nrw.commons.auth
import com.nhaarman.mockitokotlin2.verify
import io.reactivex.Observable
import org.junit.Before
import org.junit.Test
import org.mockito.ArgumentMatchers.anyString
import org.mockito.InjectMocks
import org.mockito.Mock
import org.mockito.Mockito.*
import org.mockito.MockitoAnnotations
import org.wikipedia.dataclient.Service
import org.wikipedia.dataclient.mwapi.MwPostResponse
import org.wikipedia.dataclient.mwapi.MwQueryResponse
import org.wikipedia.dataclient.mwapi.MwQueryResult
import javax.inject.Inject
import javax.inject.Named
class LogoutClientTest {
@Mock @field:[Inject Named("commons-service")]
lateinit var service: Service
@InjectMocks
var logoutClient: LogoutClient? = null
@Before
@Throws(Exception::class)
fun setUp() {
MockitoAnnotations.openMocks(this)
val mwQueryResponse = mock(MwQueryResponse::class.java)
val mwQueryResult = mock(MwQueryResult::class.java)
`when`(mwQueryResult!!.csrfToken()).thenReturn("test_token")
`when`(mwQueryResponse.query()).thenReturn(mwQueryResult)
`when`(service!!.csrfToken)
.thenReturn(Observable.just(mwQueryResponse))
}
@Test
fun postLogout() {
`when`(service!!.postLogout(anyString())).thenReturn(Observable.just(mock(MwPostResponse::class.java)))
logoutClient!!.postLogout()
verify(service, times(1))!!.csrfToken
}
}

View file

@ -5,6 +5,7 @@ import android.accounts.AccountManager
import android.content.Context
import androidx.test.core.app.ApplicationProvider
import fr.free.nrw.commons.TestCommonsApplication
import fr.free.nrw.commons.auth.login.LoginResult
import fr.free.nrw.commons.kvstore.JsonKvStore
import org.junit.Assert
import org.junit.Before
@ -17,7 +18,6 @@ import org.robolectric.RobolectricTestRunner
import org.robolectric.Shadows.shadowOf
import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode
import org.wikipedia.login.LoginResult
import java.lang.reflect.Method

View file

@ -2,6 +2,7 @@ package fr.free.nrw.commons.auth.csrf
import com.google.gson.stream.MalformedJsonException
import fr.free.nrw.commons.MockWebServerTest
import fr.free.nrw.commons.auth.SessionManager
import org.junit.Test
import org.mockito.ArgumentMatchers.any
import org.mockito.ArgumentMatchers.eq
@ -16,8 +17,9 @@ import org.wikipedia.dataclient.okhttp.HttpStatusException
class CsrfTokenClientTest : MockWebServerTest() {
private val wikiSite = WikiSite("test.wikipedia.org")
private val subject = CsrfTokenClient(wikiSite)
private val cb = mock(CsrfTokenClient.Callback::class.java)
private val sessionManager = mock(SessionManager::class.java)
private val subject = CsrfTokenClient(wikiSite, sessionManager)
@Test
@Throws(Throwable::class)

View file

@ -0,0 +1,84 @@
package fr.free.nrw.commons.login;
import android.net.Uri;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.stream.MalformedJsonException;
import fr.free.nrw.commons.MockWebServerTest;
import fr.free.nrw.commons.auth.login.LoginInterface;
import io.reactivex.observers.TestObserver;
import org.junit.Before;
import org.junit.Test;
import org.wikipedia.dataclient.WikiSite;
import org.wikipedia.dataclient.mwapi.MwQueryResponse;
import org.wikipedia.json.NamespaceTypeAdapter;
import org.wikipedia.json.PostProcessingTypeAdapter;
import org.wikipedia.json.UriTypeAdapter;
import org.wikipedia.json.WikiSiteTypeAdapter;
import org.wikipedia.page.Namespace;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
public class UserExtendedInfoClientTest extends MockWebServerTest {
private LoginInterface apiService;
@Override
@Before
public void setUp() throws Throwable {
super.setUp();
apiService = new Retrofit.Builder()
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(getGson()))
.baseUrl(server().getUrl())
.build()
.create(LoginInterface.class);
}
@Test
public void testRequestSuccess() throws Throwable {
enqueueFromFile("user_extended_info.json");
TestObserver<MwQueryResponse> observer = new TestObserver<>();
apiService.getUserInfo("USER").subscribe(observer);
observer
.assertComplete()
.assertNoErrors()
.assertValue(
result -> result.query().userInfo().id() == 24531888
&& result.query().getUserResponse("USER").name().equals("USER")
);
}
@Test
public void testRequestResponse404() {
enqueue404();
TestObserver<MwQueryResponse> observer = new TestObserver<>();
apiService.getUserInfo("USER").subscribe(observer);
observer.assertError(Exception.class);
}
@Test
public void testRequestResponseMalformed() {
enqueueMalformed();
TestObserver<MwQueryResponse> observer = new TestObserver<>();
apiService.getUserInfo("USER").subscribe(observer);
observer.assertError(MalformedJsonException.class);
}
private Gson getGson() {
return new GsonBuilder()
.registerTypeHierarchyAdapter(Uri.class, new UriTypeAdapter().nullSafe())
.registerTypeHierarchyAdapter(Namespace.class, new NamespaceTypeAdapter().nullSafe())
.registerTypeAdapter(WikiSite.class, new WikiSiteTypeAdapter().nullSafe())
.registerTypeAdapterFactory(new PostProcessingTypeAdapter())
.create();
}
}