mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-27 21:03:54 +01:00
Refactor CSRF token API to move it into the main commons code base (#5472)
* Remove redundent constructor parameter * Converted the CsrfTokenClient and test to kotlin * Moved getCsrfTokenCall() out of the data client
This commit is contained in:
parent
e8e87b1d1c
commit
97a208dcfa
14 changed files with 263 additions and 348 deletions
|
|
@ -41,7 +41,7 @@ class PageEditClientTest {
|
|||
*/
|
||||
@Test
|
||||
fun testEdit() {
|
||||
Mockito.`when`(csrfTokenClient.tokenBlocking).thenReturn("test")
|
||||
Mockito.`when`(csrfTokenClient.getTokenBlocking()).thenReturn("test")
|
||||
pageEditClient.edit("test", "test", "test")
|
||||
verify(pageEditInterface).postEdit(eq("test"), eq("test"), eq("test"), eq("test"))
|
||||
}
|
||||
|
|
@ -51,7 +51,7 @@ class PageEditClientTest {
|
|||
*/
|
||||
@Test
|
||||
fun testAppendEdit() {
|
||||
Mockito.`when`(csrfTokenClient.tokenBlocking).thenReturn("test")
|
||||
Mockito.`when`(csrfTokenClient.getTokenBlocking()).thenReturn("test")
|
||||
Mockito.`when`(
|
||||
pageEditInterface.postAppendEdit(
|
||||
ArgumentMatchers.anyString(),
|
||||
|
|
@ -65,7 +65,7 @@ class PageEditClientTest {
|
|||
Mockito.`when`(edit.edit()).thenReturn(editResult)
|
||||
Mockito.`when`(editResult.editSucceeded()).thenReturn(true)
|
||||
pageEditClient.appendEdit("test", "test", "test").test()
|
||||
verify(csrfTokenClient).tokenBlocking
|
||||
verify(csrfTokenClient).getTokenBlocking()
|
||||
verify(pageEditInterface).postAppendEdit(eq("test"), eq("test"), eq("test"), eq("test"))
|
||||
verify(edit).edit()
|
||||
verify(editResult).editSucceeded()
|
||||
|
|
@ -76,7 +76,7 @@ class PageEditClientTest {
|
|||
*/
|
||||
@Test
|
||||
fun testPrependEdit() {
|
||||
Mockito.`when`(csrfTokenClient.tokenBlocking).thenReturn("test")
|
||||
Mockito.`when`(csrfTokenClient.getTokenBlocking()).thenReturn("test")
|
||||
pageEditClient.prependEdit("test", "test", "test")
|
||||
verify(pageEditInterface).postPrependEdit(eq("test"), eq("test"), eq("test"), eq("test"))
|
||||
}
|
||||
|
|
@ -86,7 +86,7 @@ class PageEditClientTest {
|
|||
*/
|
||||
@Test
|
||||
fun testSetCaptions() {
|
||||
Mockito.`when`(csrfTokenClient.tokenBlocking).thenReturn("test")
|
||||
Mockito.`when`(csrfTokenClient.getTokenBlocking()).thenReturn("test")
|
||||
pageEditClient.setCaptions("test", "test", "en", "test")
|
||||
verify(pageEditInterface).postCaptions(eq("test"), eq("test"), eq("en"),
|
||||
eq("test"), eq("test"))
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ class ThanksClientTest {
|
|||
*/
|
||||
@Test
|
||||
fun testThanks() {
|
||||
`when`(csrfTokenClient.tokenBlocking).thenReturn("test")
|
||||
`when`(csrfTokenClient.getTokenBlocking()).thenReturn("test")
|
||||
`when`(commonsApplication.userAgent).thenReturn("test")
|
||||
thanksClient.thank(1L)
|
||||
verify(service).thank(ArgumentMatchers.anyString(), ArgumentMatchers.any(), eq("test"), eq("test"))
|
||||
|
|
|
|||
|
|
@ -1,82 +0,0 @@
|
|||
package fr.free.nrw.commons.auth.csrf;
|
||||
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import com.google.gson.stream.MalformedJsonException;
|
||||
import fr.free.nrw.commons.MockWebServerTest;
|
||||
import fr.free.nrw.commons.auth.csrf.CsrfTokenClient.Callback;
|
||||
import org.junit.Test;
|
||||
import org.mockito.ArgumentMatchers;
|
||||
import org.mockito.Mockito;
|
||||
import org.wikipedia.dataclient.Service;
|
||||
import org.wikipedia.dataclient.WikiSite;
|
||||
import org.wikipedia.dataclient.mwapi.MwException;
|
||||
import org.wikipedia.dataclient.mwapi.MwQueryResponse;
|
||||
import org.wikipedia.dataclient.okhttp.HttpStatusException;
|
||||
import retrofit2.Call;
|
||||
|
||||
public class CsrfTokenClientTest extends MockWebServerTest {
|
||||
private static final WikiSite TEST_WIKI = new WikiSite("test.wikipedia.org");
|
||||
@NonNull private final CsrfTokenClient subject = new CsrfTokenClient(TEST_WIKI, TEST_WIKI);
|
||||
|
||||
@Test public void testRequestSuccess() throws Throwable {
|
||||
String expected = "b6f7bd58c013ab30735cb19ecc0aa08258122cba+\\";
|
||||
enqueueFromFile("csrf_token.json");
|
||||
|
||||
Callback cb = Mockito.mock(Callback.class);
|
||||
request(cb);
|
||||
|
||||
server().takeRequest();
|
||||
assertCallbackSuccess(cb, expected);
|
||||
}
|
||||
|
||||
@Test public void testRequestResponseApiError() throws Throwable {
|
||||
enqueueFromFile("api_error.json");
|
||||
|
||||
Callback cb = Mockito.mock(Callback.class);
|
||||
request(cb);
|
||||
|
||||
server().takeRequest();
|
||||
assertCallbackFailure(cb, MwException.class);
|
||||
}
|
||||
|
||||
@Test public void testRequestResponseFailure() throws Throwable {
|
||||
enqueue404();
|
||||
|
||||
Callback cb = Mockito.mock(Callback.class);
|
||||
request(cb);
|
||||
|
||||
server().takeRequest();
|
||||
assertCallbackFailure(cb, HttpStatusException.class);
|
||||
}
|
||||
|
||||
@Test public void testRequestResponseMalformed() throws Throwable {
|
||||
enqueueMalformed();
|
||||
|
||||
Callback cb = Mockito.mock(Callback.class);
|
||||
request(cb);
|
||||
|
||||
server().takeRequest();
|
||||
assertCallbackFailure(cb, MalformedJsonException.class);
|
||||
}
|
||||
|
||||
private void assertCallbackSuccess(@NonNull Callback cb,
|
||||
@NonNull String expected) {
|
||||
verify(cb).success(ArgumentMatchers.eq(expected));
|
||||
//noinspection unchecked
|
||||
verify(cb, never()).failure(ArgumentMatchers.any(Throwable.class));
|
||||
}
|
||||
|
||||
private void assertCallbackFailure(@NonNull Callback cb,
|
||||
@NonNull Class<? extends Throwable> throwable) {
|
||||
//noinspection unchecked
|
||||
verify(cb, never()).success(ArgumentMatchers.any(String.class));
|
||||
verify(cb).failure(ArgumentMatchers.isA(throwable));
|
||||
}
|
||||
|
||||
private Call<MwQueryResponse> request(@NonNull Callback cb) {
|
||||
return subject.request(service(Service.class), cb);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,71 @@
|
|||
package fr.free.nrw.commons.auth.csrf
|
||||
|
||||
import com.google.gson.stream.MalformedJsonException
|
||||
import fr.free.nrw.commons.MockWebServerTest
|
||||
import org.junit.Test
|
||||
import org.mockito.ArgumentMatchers.any
|
||||
import org.mockito.ArgumentMatchers.eq
|
||||
import org.mockito.ArgumentMatchers.isA
|
||||
import org.mockito.Mockito.mock
|
||||
import org.mockito.Mockito.never
|
||||
import org.mockito.Mockito.verify
|
||||
import org.wikipedia.dataclient.Service
|
||||
import org.wikipedia.dataclient.WikiSite
|
||||
import org.wikipedia.dataclient.mwapi.MwException
|
||||
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)
|
||||
|
||||
@Test
|
||||
@Throws(Throwable::class)
|
||||
fun testRequestSuccess() {
|
||||
val expected = "b6f7bd58c013ab30735cb19ecc0aa08258122cba+\\"
|
||||
enqueueFromFile("csrf_token.json")
|
||||
|
||||
performRequest()
|
||||
|
||||
verify(cb).success(eq(expected))
|
||||
verify(cb, never()).failure(any(Throwable::class.java))
|
||||
}
|
||||
|
||||
@Test
|
||||
@Throws(Throwable::class)
|
||||
fun testRequestResponseApiError() {
|
||||
enqueueFromFile("api_error.json")
|
||||
|
||||
performRequest()
|
||||
|
||||
verify(cb, never()).success(any(String::class.java))
|
||||
verify(cb).failure(isA(MwException::class.java))
|
||||
}
|
||||
|
||||
@Test
|
||||
@Throws(Throwable::class)
|
||||
fun testRequestResponseFailure() {
|
||||
enqueue404()
|
||||
|
||||
performRequest()
|
||||
|
||||
verify(cb, never()).success(any(String::class.java))
|
||||
verify(cb).failure(isA(HttpStatusException::class.java))
|
||||
}
|
||||
|
||||
@Test
|
||||
@Throws(Throwable::class)
|
||||
fun testRequestResponseMalformed() {
|
||||
enqueueMalformed()
|
||||
|
||||
performRequest()
|
||||
|
||||
verify(cb, never()).success(any(String::class.java))
|
||||
verify(cb).failure(isA(MalformedJsonException::class.java))
|
||||
}
|
||||
|
||||
private fun performRequest() {
|
||||
subject.request(service(CsrfTokenInterface::class.java), cb)
|
||||
server().takeRequest()
|
||||
}
|
||||
}
|
||||
|
|
@ -102,7 +102,7 @@ class NotificationClientTest {
|
|||
*/
|
||||
@Test
|
||||
fun markNotificationAsReadTest() {
|
||||
Mockito.`when`(csrfTokenClient.tokenBlocking).thenReturn("test")
|
||||
Mockito.`when`(csrfTokenClient.getTokenBlocking()).thenReturn("test")
|
||||
Mockito.`when`(service.markRead(anyString(), anyString(), anyString()))
|
||||
.thenReturn(Observable.just(mQueryResponse))
|
||||
Mockito.`when`(mQueryResponse.success()).thenReturn(true)
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ class WikiBaseClientUnitTest {
|
|||
@Throws(Exception::class)
|
||||
fun setUp() {
|
||||
MockitoAnnotations.openMocks(this)
|
||||
Mockito.`when`(csrfTokenClient!!.tokenBlocking)
|
||||
Mockito.`when`(csrfTokenClient!!.getTokenBlocking())
|
||||
.thenReturn("test")
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue