Skip to content

Commit f27749f

Browse files
maskaravivekmisaochan
authored andcommitted
With more unit test cases (commons-app#3269)
1 parent d2fb3b3 commit f27749f

File tree

7 files changed

+139
-30
lines changed

7 files changed

+139
-30
lines changed

app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.java

-8
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,4 @@ public Observable<Boolean> prependEdit(String pageTitle, String prependText, Str
4747
}
4848
}
4949

50-
public Observable<Integer> addEditTag(long revisionId, String tagName, String reason) {
51-
try {
52-
return service.addEditTag(String.valueOf(revisionId), tagName, reason, csrfTokenClient.getTokenBlocking())
53-
.map(mwPostResponse -> mwPostResponse.getSuccessVal());
54-
} catch (Throwable throwable) {
55-
return Observable.just(-1);
56-
}
57-
}
5850
}

app/src/main/java/fr/free/nrw/commons/auth/LogoutClient.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
package fr.free.nrw.commons.auth;
22

33

4-
import io.reactivex.Observable;
4+
import org.wikipedia.dataclient.Service;
5+
import org.wikipedia.dataclient.mwapi.MwPostResponse;
6+
57
import java.util.Objects;
8+
69
import javax.inject.Inject;
710
import javax.inject.Named;
811
import javax.inject.Singleton;
9-
import org.wikipedia.dataclient.Service;
10-
import org.wikipedia.dataclient.ServiceFactory;
11-
import org.wikipedia.dataclient.WikiSite;
12-
import org.wikipedia.dataclient.mwapi.MwPostResponse;
12+
13+
import io.reactivex.Observable;
1314

1415
/**
1516
* Handler for logout
@@ -20,9 +21,8 @@ public class LogoutClient {
2021
private final Service service;
2122

2223
@Inject
23-
public LogoutClient(@Named("commons-wikisite")
24-
WikiSite commonsWikiSite) {
25-
service = ServiceFactory.get(commonsWikiSite);
24+
public LogoutClient(@Named("commons-service") Service service) {
25+
this.service = service;
2626
}
2727

2828
/**

app/src/main/java/fr/free/nrw/commons/auth/SessionManager.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
import androidx.annotation.NonNull;
1010
import androidx.annotation.Nullable;
1111

12-
import com.facebook.drawee.backends.pipeline.Fresco;
13-
import com.facebook.imagepipeline.core.ImagePipeline;
1412
import org.wikipedia.login.LoginResult;
1513

1614
import javax.inject.Inject;
@@ -91,6 +89,10 @@ public Account getCurrentAccount() {
9189
return currentAccount;
9290
}
9391

92+
public boolean doesAccountExist() {
93+
return getCurrentAccount() != null;
94+
}
95+
9496
@Nullable
9597
public String getUserName() {
9698
Account account = getCurrentAccount();

app/src/main/java/fr/free/nrw/commons/delete/ReasonBuilder.java

+12-12
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package fr.free.nrw.commons.delete;
22

3-
import android.accounts.Account;
43
import android.content.Context;
54

65
import org.wikipedia.util.DateUtil;
@@ -16,7 +15,7 @@
1615
import fr.free.nrw.commons.achievements.FeedbackResponse;
1716
import fr.free.nrw.commons.auth.SessionManager;
1817
import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient;
19-
import fr.free.nrw.commons.utils.ViewUtil;
18+
import fr.free.nrw.commons.utils.ViewUtilWrapper;
2019
import io.reactivex.Single;
2120
import timber.log.Timber;
2221

@@ -26,14 +25,21 @@ public class ReasonBuilder {
2625
private SessionManager sessionManager;
2726
private OkHttpJsonApiClient okHttpJsonApiClient;
2827
private Context context;
28+
private ViewUtilWrapper viewUtilWrapper;
2929

3030
@Inject
3131
public ReasonBuilder(Context context,
3232
SessionManager sessionManager,
33-
OkHttpJsonApiClient okHttpJsonApiClient) {
33+
OkHttpJsonApiClient okHttpJsonApiClient,
34+
ViewUtilWrapper viewUtilWrapper) {
3435
this.context = context;
3536
this.sessionManager = sessionManager;
3637
this.okHttpJsonApiClient = okHttpJsonApiClient;
38+
this.viewUtilWrapper = viewUtilWrapper;
39+
}
40+
41+
public Single<String> getReason(Media media, String reason) {
42+
return fetchArticleNumber(media, reason);
3743
}
3844

3945
private String prettyUploadedDate(Media media) {
@@ -47,7 +53,7 @@ private String prettyUploadedDate(Media media) {
4753
private Single<String> fetchArticleNumber(Media media, String reason) {
4854
if (checkAccount()) {
4955
return okHttpJsonApiClient
50-
.getAchievements(sessionManager.getCurrentAccount().name)
56+
.getAchievements(sessionManager.getUserName())
5157
.map(feedbackResponse -> appendArticlesUsed(feedbackResponse, media, reason));
5258
}
5359
return Single.just("");
@@ -60,20 +66,14 @@ private String appendArticlesUsed(FeedbackResponse object, Media media, String r
6066
return reason;
6167
}
6268

63-
64-
public Single<String> getReason(Media media, String reason) {
65-
return fetchArticleNumber(media, reason);
66-
}
67-
6869
/**
6970
* check to ensure that user is logged in
7071
* @return
7172
*/
7273
private boolean checkAccount(){
73-
Account currentAccount = sessionManager.getCurrentAccount();
74-
if(currentAccount == null) {
74+
if (!sessionManager.doesAccountExist()) {
7575
Timber.d("Current account is null");
76-
ViewUtil.showLongToast(context, context.getResources().getString(R.string.user_not_logged_in));
76+
viewUtilWrapper.showLongToast(context, context.getResources().getString(R.string.user_not_logged_in));
7777
sessionManager.forceLogin(context);
7878
return false;
7979
}

app/src/main/java/fr/free/nrw/commons/utils/ViewUtilWrapper.java

+4
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,8 @@ public ViewUtilWrapper() {
1616
public void showShortToast(Context context, String text) {
1717
ViewUtil.showShortToast(context, text);
1818
}
19+
20+
public void showLongToast(Context context, String text) {
21+
ViewUtil.showLongToast(context, text);
22+
}
1923
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package fr.free.nrw.commons.auth
2+
3+
import com.nhaarman.mockito_kotlin.verify
4+
import io.reactivex.Observable
5+
import org.junit.Before
6+
import org.junit.Test
7+
import org.mockito.ArgumentMatchers.anyString
8+
import org.mockito.InjectMocks
9+
import org.mockito.Mock
10+
import org.mockito.Mockito
11+
import org.mockito.Mockito.*
12+
import org.mockito.MockitoAnnotations
13+
import org.wikipedia.dataclient.Service
14+
import org.wikipedia.dataclient.mwapi.MwPostResponse
15+
import org.wikipedia.dataclient.mwapi.MwQueryResponse
16+
import org.wikipedia.dataclient.mwapi.MwQueryResult
17+
import javax.inject.Inject
18+
import javax.inject.Named
19+
20+
class LogoutClientTest {
21+
22+
@Mock @field:[Inject Named("commons-service")]
23+
internal var service: Service? = null
24+
25+
@InjectMocks
26+
var logoutClient: LogoutClient? = null
27+
28+
@Before
29+
@Throws(Exception::class)
30+
fun setUp() {
31+
MockitoAnnotations.initMocks(this)
32+
val mwQueryResponse = Mockito.mock(MwQueryResponse::class.java)
33+
val mwQueryResult = Mockito.mock(MwQueryResult::class.java)
34+
`when`(mwQueryResult!!.csrfToken()).thenReturn("test_token")
35+
`when`(mwQueryResponse.query()).thenReturn(mwQueryResult)
36+
`when`(service!!.csrfToken)
37+
.thenReturn(Observable.just(mwQueryResponse))
38+
}
39+
40+
@Test
41+
fun postLogout() {
42+
`when`(service!!.postLogout(anyString())).thenReturn(Observable.just(mock(MwPostResponse::class.java)))
43+
logoutClient!!.postLogout()
44+
verify(service, times(1))!!.csrfToken
45+
}
46+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package fr.free.nrw.commons.delete
2+
3+
import android.content.Context
4+
import android.content.res.Resources
5+
import com.nhaarman.mockito_kotlin.verify
6+
import fr.free.nrw.commons.Media
7+
import fr.free.nrw.commons.achievements.FeedbackResponse
8+
import fr.free.nrw.commons.auth.SessionManager
9+
import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient
10+
import fr.free.nrw.commons.utils.ViewUtilWrapper
11+
import io.reactivex.Single
12+
import org.junit.Before
13+
import org.junit.Test
14+
import org.mockito.ArgumentMatchers.anyInt
15+
import org.mockito.InjectMocks
16+
import org.mockito.Mock
17+
import org.mockito.Mockito.*
18+
import org.mockito.MockitoAnnotations
19+
import java.util.*
20+
21+
22+
class ReasonBuilderTest {
23+
24+
@Mock
25+
internal var sessionManager: SessionManager? = null
26+
@Mock
27+
internal var okHttpJsonApiClient: OkHttpJsonApiClient? = null
28+
@Mock
29+
internal var context: Context? = null
30+
@Mock
31+
internal var viewUtilWrapper: ViewUtilWrapper? = null
32+
33+
@InjectMocks
34+
var reasonBuilder: ReasonBuilder? = null
35+
36+
@Before
37+
@Throws(Exception::class)
38+
fun setUp() {
39+
MockitoAnnotations.initMocks(this)
40+
val resources = mock(Resources::class.java)
41+
`when`(resources!!.getString(anyInt())).thenReturn("test")
42+
`when`(context!!.resources).thenReturn(resources)
43+
}
44+
45+
@Test
46+
fun forceLoginWhenAccountIsNull() {
47+
reasonBuilder!!.getReason(mock(Media::class.java), "test")
48+
verify(sessionManager, times(1))!!.forceLogin(any(Context::class.java))
49+
}
50+
51+
@Test
52+
fun getReason() {
53+
`when`(sessionManager?.userName).thenReturn("Testuser")
54+
`when`(sessionManager?.doesAccountExist()).thenReturn(true)
55+
`when`(okHttpJsonApiClient!!.getAchievements(anyString()))
56+
.thenReturn(Single.just(mock(FeedbackResponse::class.java)))
57+
58+
val media = mock(Media::class.java)
59+
`when`(media!!.dateUploaded).thenReturn(Date())
60+
61+
reasonBuilder!!.getReason(media, "test")
62+
verify(sessionManager, times(0))!!.forceLogin(any(Context::class.java))
63+
verify(okHttpJsonApiClient, times(1))!!.getAchievements(anyString())
64+
}
65+
}

0 commit comments

Comments
 (0)