Convert the LoginClient to kotlin (#5479)

* Convert the result classes to kotlin

* Convert response and callback to kotlin

* Cleanup code-quality warnings before converting

* Converted the LoginClient to kotlin

* Updated the UserExtendedInfoClientTest to be kotlin, and live in the correct spot
This commit is contained in:
Paul Hawke 2024-01-26 21:39:00 -06:00 committed by GitHub
parent 0541aacdff
commit 02ce017c98
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
14 changed files with 370 additions and 450 deletions

View file

@ -0,0 +1,78 @@
package fr.free.nrw.commons.auth.login
import android.net.Uri
import com.google.gson.GsonBuilder
import com.google.gson.stream.MalformedJsonException
import fr.free.nrw.commons.MockWebServerTest
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
class UserExtendedInfoClientTest : MockWebServerTest() {
private var apiService: LoginInterface? = null
private val observer = TestObserver<MwQueryResponse>()
private val gson = GsonBuilder()
.registerTypeHierarchyAdapter(Uri::class.java, UriTypeAdapter().nullSafe())
.registerTypeHierarchyAdapter(Namespace::class.java, NamespaceTypeAdapter().nullSafe())
.registerTypeAdapter(WikiSite::class.java, WikiSiteTypeAdapter().nullSafe())
.registerTypeAdapterFactory(PostProcessingTypeAdapter())
.create()
@Before
@Throws(Throwable::class)
override fun setUp() {
super.setUp()
apiService = Retrofit.Builder()
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create(gson))
.baseUrl(server().url)
.build()
.create(LoginInterface::class.java)
}
@Test
@Throws(Throwable::class)
fun testRequestSuccess() {
enqueueFromFile("user_extended_info.json")
apiService!!.getUserInfo("USER").subscribe(observer)
observer
.assertComplete()
.assertNoErrors()
.assertValue { result: MwQueryResponse ->
result.query()!!
.userInfo()!!.id() == 24531888 && result.query()!!.getUserResponse("USER")!!
.name() == "USER"
}
}
@Test
fun testRequestResponse404() {
enqueue404()
apiService!!.getUserInfo("USER").subscribe(observer)
observer.assertError(Exception::class.java)
}
@Test
fun testRequestResponseMalformed() {
enqueueMalformed()
apiService!!.getUserInfo("USER").subscribe(observer)
observer.assertError(MalformedJsonException::class.java)
}
}

View file

@ -1,84 +0,0 @@
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();
}
}