diff --git a/app/src/main/java/fr/free/nrw/commons/Media.java b/app/src/main/java/fr/free/nrw/commons/Media.java index 62a11a90a..f7e1baa7f 100644 --- a/app/src/main/java/fr/free/nrw/commons/Media.java +++ b/app/src/main/java/fr/free/nrw/commons/Media.java @@ -29,6 +29,7 @@ import fr.free.nrw.commons.utils.MediaDataExtractorUtil; public class Media implements Parcelable { + public static final Media EMPTY = new Media(""); public static Creator CREATOR = new Creator() { @Override public Media createFromParcel(Parcel parcel) { diff --git a/app/src/main/java/fr/free/nrw/commons/MediaDataExtractor.java b/app/src/main/java/fr/free/nrw/commons/MediaDataExtractor.java index 4e63bdf7d..c2e301826 100644 --- a/app/src/main/java/fr/free/nrw/commons/MediaDataExtractor.java +++ b/app/src/main/java/fr/free/nrw/commons/MediaDataExtractor.java @@ -57,7 +57,7 @@ public class MediaDataExtractor { * @return return data rich Media object */ public Single getMediaFromFileName(String filename) { - return okHttpJsonApiClient.getMedia(filename, false); + return mediaClient.getMedia(filename); } /** diff --git a/app/src/main/java/fr/free/nrw/commons/auth/SessionManager.java b/app/src/main/java/fr/free/nrw/commons/auth/SessionManager.java index 1da8332ed..04519e128 100644 --- a/app/src/main/java/fr/free/nrw/commons/auth/SessionManager.java +++ b/app/src/main/java/fr/free/nrw/commons/auth/SessionManager.java @@ -20,6 +20,7 @@ import fr.free.nrw.commons.kvstore.JsonKvStore; import fr.free.nrw.commons.mwapi.MediaWikiApi; import io.reactivex.Completable; import io.reactivex.Observable; +import timber.log.Timber; /** * Manage the current logged in user session. diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesController.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesController.java index be6ffb7f5..695da9cfd 100644 --- a/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesController.java +++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesController.java @@ -10,6 +10,7 @@ import javax.inject.Singleton; import fr.free.nrw.commons.Media; import fr.free.nrw.commons.bookmarks.Bookmark; +import fr.free.nrw.commons.media.MediaClient; import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient; import io.reactivex.Observable; import io.reactivex.ObservableSource; @@ -19,15 +20,14 @@ import io.reactivex.functions.Function; @Singleton public class BookmarkPicturesController { - private final OkHttpJsonApiClient okHttpJsonApiClient; + private final MediaClient mediaClient; private final BookmarkPicturesDao bookmarkDao; private List currentBookmarks; @Inject - public BookmarkPicturesController(OkHttpJsonApiClient okHttpJsonApiClient, - BookmarkPicturesDao bookmarkDao) { - this.okHttpJsonApiClient = okHttpJsonApiClient; + public BookmarkPicturesController(MediaClient mediaClient, BookmarkPicturesDao bookmarkDao) { + this.mediaClient = mediaClient; this.bookmarkDao = bookmarkDao; currentBookmarks = new ArrayList<>(); } @@ -47,7 +47,7 @@ public class BookmarkPicturesController { private Observable getMediaFromBookmark(Bookmark bookmark) { Media dummyMedia = new Media(""); - return okHttpJsonApiClient.getMedia(bookmark.getMediaName(), false) + return mediaClient.getMedia(bookmark.getMediaName()) .map(media -> media == null ? dummyMedia : media) .onErrorReturn(throwable -> dummyMedia) .toObservable(); diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaClient.java b/app/src/main/java/fr/free/nrw/commons/media/MediaClient.java index 38e778db7..58e014d42 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaClient.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaClient.java @@ -1,6 +1,14 @@ package fr.free.nrw.commons.media; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import org.wikipedia.dataclient.mwapi.MwQueryPage; +import org.wikipedia.dataclient.mwapi.MwQueryResponse; +import org.wikipedia.dataclient.mwapi.MwQueryResult; + +import java.util.Date; import org.wikipedia.dataclient.mwapi.MwQueryResponse; import java.util.ArrayList; @@ -13,6 +21,13 @@ import javax.inject.Inject; import javax.inject.Singleton; import fr.free.nrw.commons.Media; +import fr.free.nrw.commons.utils.CommonsDateUtil; +import io.reactivex.Observable; +import io.reactivex.Single; +import okhttp3.HttpUrl; +import okhttp3.Request; +import okhttp3.Response; +import timber.log.Timber; import io.reactivex.Observable; import io.reactivex.Single; @@ -103,5 +118,47 @@ public class MediaClient { .map(Media::from) .collect(ArrayList::new, List::add); } + + /** + * Fetches Media object from the imageInfo API + * + * @param titles the tiles to be searched for. Can be filename or template name + * @return + */ + public Single getMedia(String titles) { + return mediaInterface.getMedia(titles) + .flatMap(mwQueryResponse -> { + if (null == mwQueryResponse + || null == mwQueryResponse.query() + || null == mwQueryResponse.query().firstPage()) { + return Observable.empty(); + } + return Observable.just(mwQueryResponse.query().firstPage()); + }) + .map(Media::from) + .single(Media.EMPTY); + } + /** + * The method returns the picture of the day + * + * @return Media object corresponding to the picture of the day + */ + @NonNull + public Single getPictureOfTheDay() { + String date = CommonsDateUtil.getIso8601DateFormatShort().format(new Date()); + Timber.d("Current date is %s", date); + String template = "Template:Potd/" + date; + return mediaInterface.getMediaWithGenerator(template) + .flatMap(mwQueryResponse -> { + if (null == mwQueryResponse + || null == mwQueryResponse.query() + || null == mwQueryResponse.query().firstPage()) { + return Observable.empty(); + } + return Observable.just(mwQueryResponse.query().firstPage()); + }) + .map(Media::from) + .single(Media.EMPTY); + } } diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaInterface.java b/app/src/main/java/fr/free/nrw/commons/media/MediaInterface.java index 94604e6f4..c54e33e62 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaInterface.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaInterface.java @@ -32,7 +32,6 @@ public interface MediaInterface { @GET("w/api.php?action=query&format=json&formatversion=2&list=allimages") Observable checkFileExistsUsingSha(@Query("aisha1") String aisha1); - /** * This method retrieves a list of Media objects filtered using image generator query * @@ -63,4 +62,28 @@ public interface MediaInterface { "|Artist|LicenseShortName|LicenseUrl") Observable getMediaListFromSearch(@Query("gsrsearch") String keyword, @Query("gsrlimit") int itemLimit, @QueryMap Map continuation); + /** + * Fetches Media object from the imageInfo API + * + * @param title the tiles to be searched for. Can be filename or template name + * @return + */ + @GET("w/api.php?action=query&format=json&formatversion=2" + + "&prop=imageinfo&iiprop=url|extmetadata&iiurlwidth=640" + + "&iiextmetadatafilter=DateTime|Categories|GPSLatitude|GPSLongitude|ImageDescription|DateTimeOriginal" + + "|Artist|LicenseShortName|LicenseUrl") + Observable getMedia(@Query("titles") String title); + + /** + * Fetches Media object from the imageInfo API + * Passes an image generator parameter + * + * @param title the tiles to be searched for. Can be filename or template name + * @return + */ + @GET("w/api.php?action=query&format=json&formatversion=2&generator=images" + + "&prop=imageinfo&iiprop=url|extmetadata&iiurlwidth=640" + + "&iiextmetadatafilter=DateTime|Categories|GPSLatitude|GPSLongitude|ImageDescription|DateTimeOriginal" + + "|Artist|LicenseShortName|LicenseUrl") + Observable getMediaWithGenerator(@Query("titles") String title); } diff --git a/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java b/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java index b88764e93..b356184d8 100644 --- a/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java +++ b/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java @@ -4,6 +4,7 @@ import android.text.TextUtils; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.google.gson.Gson; import org.apache.http.conn.ClientConnectionManager; import org.apache.http.conn.scheme.PlainSocketFactory; @@ -24,6 +25,10 @@ import java.util.Date; import fr.free.nrw.commons.BuildConfig; import fr.free.nrw.commons.CommonsApplication; + +import fr.free.nrw.commons.BuildConfig; +import fr.free.nrw.commons.CommonsApplication; + import io.reactivex.Single; import timber.log.Timber; diff --git a/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.java b/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.java index 7ed0916b0..631452569 100644 --- a/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.java +++ b/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.java @@ -228,58 +228,6 @@ public class OkHttpJsonApiClient { }); } - /** - * The method returns the picture of the day - * - * @return Media object corresponding to the picture of the day - */ - @Nullable - public Single getPictureOfTheDay() { - String date = CommonsDateUtil.getIso8601DateFormatShort().format(new Date()); - Timber.d("Current date is %s", date); - String template = "Template:Potd/" + date; - return getMedia(template, true); - } - - /** - * Fetches Media object from the imageInfo API - * - * @param titles the tiles to be searched for. Can be filename or template name - * @param useGenerator specifies if a image generator parameter needs to be passed or not - * @return - */ - public Single getMedia(String titles, boolean useGenerator) { - HttpUrl.Builder urlBuilder = HttpUrl - .parse(commonsBaseUrl) - .newBuilder() - .addQueryParameter("action", "query") - .addQueryParameter("format", "json") - .addQueryParameter("formatversion", "2") - .addQueryParameter("titles", titles); - - if (useGenerator) { - urlBuilder.addQueryParameter("generator", "images"); - } - - Request request = new Request.Builder() - .url(appendMediaProperties(urlBuilder).build()) - .build(); - - return Single.fromCallable(() -> { - Response response = okHttpClient.newCall(request).execute(); - if (response.body() != null && response.isSuccessful()) { - String json = response.body().string(); - MwQueryResponse mwQueryPage = gson.fromJson(json, MwQueryResponse.class); - if (mwQueryPage.success() && mwQueryPage.query().firstPage() != null) { - return Media.from(mwQueryPage.query().firstPage()); - } - } - return null; - }); - } - - - /** * Whenever imageInfo is fetched, these common properties can be specified for the API call * https://www.mediawiki.org/wiki/API:Imageinfo diff --git a/app/src/main/java/fr/free/nrw/commons/review/ReviewHelper.java b/app/src/main/java/fr/free/nrw/commons/review/ReviewHelper.java index 76256c6a5..45880a160 100644 --- a/app/src/main/java/fr/free/nrw/commons/review/ReviewHelper.java +++ b/app/src/main/java/fr/free/nrw/commons/review/ReviewHelper.java @@ -25,26 +25,21 @@ public class ReviewHelper { private static final String[] imageExtensions = new String[]{".jpg", ".jpeg", ".png"}; - private final OkHttpJsonApiClient okHttpJsonApiClient; - private final MediaWikiApi mediaWikiApi; private final MediaClient mediaClient; private final ReviewInterface reviewInterface; @Inject - public ReviewHelper(OkHttpJsonApiClient okHttpJsonApiClient, - MediaWikiApi mediaWikiApi, - MediaClient mediaClient, ReviewInterface reviewInterface) { - this.okHttpJsonApiClient = okHttpJsonApiClient; - this.mediaWikiApi = mediaWikiApi; + public ReviewHelper(MediaClient mediaClient, ReviewInterface reviewInterface) { this.mediaClient = mediaClient; this.reviewInterface = reviewInterface; } /** - * Fetches recent changes from MediaWiki API + * Fetches recent changes from MediaWiki AP * Calls the API to get 10 changes in the last 1 hour * Earlier we were getting changes for the last 30 days but as the API returns just 10 results * its best to fetch for just last 1 hour. + * * @return */ private Observable getRecentChanges() { @@ -84,6 +79,7 @@ public class ReviewHelper { /** * Returns a proper Media object if the file is not already nominated for deletion * Else it returns an empty Media object + * * @param recentChange * @return */ @@ -94,13 +90,14 @@ public class ReviewHelper { if (isDeleted) { return Single.just(new Media("")); } - return okHttpJsonApiClient.getMedia(recentChange.getTitle(), false); + return mediaClient.getMedia(recentChange.getTitle()); }); } /** * Gets the first revision of the file from filename + * * @param filename * @return */ @@ -113,6 +110,7 @@ public class ReviewHelper { * Checks if the change is reviewable or not. * - checks the type and revisionId of the change * - checks supported image extensions + * * @param recentChange * @return */ diff --git a/app/src/main/java/fr/free/nrw/commons/widget/PicOfDayAppWidget.java b/app/src/main/java/fr/free/nrw/commons/widget/PicOfDayAppWidget.java index 4174fa68b..719e226cf 100644 --- a/app/src/main/java/fr/free/nrw/commons/widget/PicOfDayAppWidget.java +++ b/app/src/main/java/fr/free/nrw/commons/widget/PicOfDayAppWidget.java @@ -27,6 +27,7 @@ import androidx.annotation.Nullable; import fr.free.nrw.commons.R; import fr.free.nrw.commons.contributions.MainActivity; import fr.free.nrw.commons.di.ApplicationlessInjection; +import fr.free.nrw.commons.media.MediaClient; import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; @@ -42,7 +43,7 @@ public class PicOfDayAppWidget extends AppWidgetProvider { private CompositeDisposable compositeDisposable = new CompositeDisposable(); - @Inject OkHttpJsonApiClient okHttpJsonApiClient; + @Inject MediaClient mediaClient; void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) { RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.pic_of_day_app_widget); @@ -67,7 +68,7 @@ public class PicOfDayAppWidget extends AppWidgetProvider { RemoteViews views, AppWidgetManager appWidgetManager, int appWidgetId) { - compositeDisposable.add(okHttpJsonApiClient.getPictureOfTheDay() + compositeDisposable.add(mediaClient.getPictureOfTheDay() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe( diff --git a/app/src/test/kotlin/fr/free/nrw/commons/MediaDataExtractorTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/MediaDataExtractorTest.kt index 5f224f7a8..497eba46a 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/MediaDataExtractorTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/MediaDataExtractorTest.kt @@ -24,7 +24,13 @@ class MediaDataExtractorTest { internal var mwApi: MediaWikiApi? = null @Mock - internal var okHttpJsonApiClient: OkHttpJsonApiClient? = null + internal var mediaClient: MediaClient? = null + + @Mock + internal var mediaClient: MediaClient? = null + + @Mock + internal var mediaClient: MediaClient? = null @Mock internal var mediaClient: MediaClient? = null @@ -46,7 +52,7 @@ class MediaDataExtractorTest { */ @Test fun fetchMediaDetails() { - `when`(okHttpJsonApiClient?.getMedia(ArgumentMatchers.anyString(), ArgumentMatchers.anyBoolean())) + `when`(mediaClient?.getMedia(ArgumentMatchers.anyString())) .thenReturn(Single.just(mock(Media::class.java))) `when`(mediaClient?.checkPageExistsUsingTitle(ArgumentMatchers.anyString())) diff --git a/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesControllerTest.java b/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesControllerTest.java index 6e0e95fa1..468eff1d1 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesControllerTest.java +++ b/app/src/test/kotlin/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesControllerTest.java @@ -13,6 +13,7 @@ import java.util.List; import fr.free.nrw.commons.Media; import fr.free.nrw.commons.bookmarks.Bookmark; +import fr.free.nrw.commons.media.MediaClient; import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient; import io.reactivex.Single; @@ -29,7 +30,7 @@ import static org.mockito.Mockito.when; public class BookmarkPicturesControllerTest { @Mock - OkHttpJsonApiClient okHttpJsonApiClient; + MediaClient mediaClient; @Mock BookmarkPicturesDao bookmarkDao; @@ -46,7 +47,7 @@ public class BookmarkPicturesControllerTest { Media mockMedia = getMockMedia(); when(bookmarkDao.getAllBookmarks()) .thenReturn(getMockBookmarkList()); - when(okHttpJsonApiClient.getMedia(anyString(), anyBoolean())) + when(mediaClient.getMedia(anyString())) .thenReturn(Single.just(mockMedia)); } @@ -75,9 +76,9 @@ public class BookmarkPicturesControllerTest { */ @Test public void loadBookmarkedPicturesForNullMedia() { - when(okHttpJsonApiClient.getMedia("File:Test1.jpg", false)) + when(mediaClient.getMedia("File:Test1.jpg")) .thenReturn(Single.error(new NullPointerException("Error occurred"))); - when(okHttpJsonApiClient.getMedia("File:Test2.jpg", false)) + when(mediaClient.getMedia("File:Test2.jpg")) .thenReturn(Single.just(getMockMedia())); List bookmarkedPictures = bookmarkPicturesController.loadBookmarkedPictures().blockingGet(); assertEquals(1, bookmarkedPictures.size()); diff --git a/app/src/test/kotlin/fr/free/nrw/commons/media/MediaClientTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/media/MediaClientTest.kt index e7d7fd9c7..7403ae99a 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/media/MediaClientTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/media/MediaClientTest.kt @@ -1,6 +1,7 @@ package fr.free.nrw.commons.media import fr.free.nrw.commons.Media +import fr.free.nrw.commons.utils.CommonsDateUtil import io.reactivex.Observable import junit.framework.Assert.* import org.junit.Before @@ -102,6 +103,68 @@ class MediaClientTest { assertFalse(checkFileExistsUsingSha) } + @Test + fun getMedia() { + val imageInfo = ImageInfo() + + val mwQueryPage = mock(MwQueryPage::class.java) + `when`(mwQueryPage.title()).thenReturn("Test") + `when`(mwQueryPage.imageInfo()).thenReturn(imageInfo) + + val mwQueryResult = mock(MwQueryResult::class.java) + `when`(mwQueryResult.firstPage()).thenReturn(mwQueryPage) + val mockResponse = mock(MwQueryResponse::class.java) + `when`(mockResponse.query()).thenReturn(mwQueryResult) + + `when`(mediaInterface!!.getMedia(ArgumentMatchers.anyString())) + .thenReturn(Observable.just(mockResponse)) + + assertEquals("Test", mediaClient!!.getMedia("abcde").blockingGet().filename) + } + + @Test + fun getMediaNull() { + val imageInfo = ImageInfo() + + val mwQueryPage = mock(MwQueryPage::class.java) + `when`(mwQueryPage.title()).thenReturn("Test") + `when`(mwQueryPage.imageInfo()).thenReturn(imageInfo) + + val mwQueryResult = mock(MwQueryResult::class.java) + `when`(mwQueryResult.firstPage()).thenReturn(null) + val mockResponse = mock(MwQueryResponse::class.java) + `when`(mockResponse.query()).thenReturn(mwQueryResult) + + `when`(mediaInterface!!.getMedia(ArgumentMatchers.anyString())) + .thenReturn(Observable.just(mockResponse)) + + assertEquals(Media.EMPTY, mediaClient!!.getMedia("abcde").blockingGet()) + } + @Captor + private val filenameCaptor: ArgumentCaptor? = null + + @Test + fun getPictureOfTheDay() { + val template = "Template:Potd/" + CommonsDateUtil.getIso8601DateFormatShort().format(Date()) + + val imageInfo = ImageInfo() + + val mwQueryPage = mock(MwQueryPage::class.java) + `when`(mwQueryPage.title()).thenReturn("Test") + `when`(mwQueryPage.imageInfo()).thenReturn(imageInfo) + + val mwQueryResult = mock(MwQueryResult::class.java) + `when`(mwQueryResult.firstPage()).thenReturn(mwQueryPage) + val mockResponse = mock(MwQueryResponse::class.java) + `when`(mockResponse.query()).thenReturn(mwQueryResult) + + `when`(mediaInterface!!.getMediaWithGenerator(filenameCaptor!!.capture())) + .thenReturn(Observable.just(mockResponse)) + + assertEquals("Test", mediaClient!!.getPictureOfTheDay().blockingGet().filename) + assertEquals(template, filenameCaptor.value); + } + @Captor private val continuationCaptor: ArgumentCaptor>? = null diff --git a/app/src/test/kotlin/fr/free/nrw/commons/mwapi/OkHttpJsonApiClientTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/mwapi/OkHttpJsonApiClientTest.kt index fdbb79e2d..b257d6b2f 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/mwapi/OkHttpJsonApiClientTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/mwapi/OkHttpJsonApiClientTest.kt @@ -5,7 +5,6 @@ import fr.free.nrw.commons.Media import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.kvstore.JsonKvStore import fr.free.nrw.commons.utils.CommonsDateUtil -import junit.framework.Assert.assertEquals import okhttp3.HttpUrl import okhttp3.OkHttpClient import okhttp3.mockwebserver.MockResponse @@ -67,83 +66,6 @@ class OkHttpJsonApiClientTest { campaignsServer.shutdown() } - /** - * Test response for getting media without generator - */ - @Test - fun getMedia() { - server.enqueue(getMediaList("", "", "", 1)) - - val media = testObject.getMedia("Test.jpg", false)!!.blockingGet() - - assertBasicRequestParameters(server, "GET").let { request -> - parseQueryParams(request).let { body -> - Assert.assertEquals("json", body["format"]) - Assert.assertEquals("2", body["formatversion"]) - Assert.assertEquals("query", body["action"]) - Assert.assertEquals("Test.jpg", body["titles"]) - Assert.assertEquals("imageinfo", body["prop"]) - Assert.assertEquals("url|extmetadata", body["iiprop"]) - Assert.assertEquals("DateTime|Categories|GPSLatitude|GPSLongitude|ImageDescription|DateTimeOriginal|Artist|LicenseShortName|LicenseUrl", body["iiextmetadatafilter"]) - } - } - - assert(media is Media) - } - - /** - * Test response for getting media with generator - * Equivalent of testing POTD - */ - @Test - fun getImageWithGenerator() { - val template = "Template:Potd/" + CommonsDateUtil.getIso8601DateFormatShort().format(Date()) - server.enqueue(getMediaList("", "", "", 1)) - - val media = testObject.getMedia(template, true)!!.blockingGet() - - assertBasicRequestParameters(server, "GET").let { request -> - parseQueryParams(request).let { body -> - Assert.assertEquals("json", body["format"]) - Assert.assertEquals("2", body["formatversion"]) - Assert.assertEquals("query", body["action"]) - Assert.assertEquals(template, body["titles"]) - Assert.assertEquals("images", body["generator"]) - Assert.assertEquals("imageinfo", body["prop"]) - Assert.assertEquals("url|extmetadata", body["iiprop"]) - Assert.assertEquals("DateTime|Categories|GPSLatitude|GPSLongitude|ImageDescription|DateTimeOriginal|Artist|LicenseShortName|LicenseUrl", body["iiextmetadatafilter"]) - } - } - - assert(media is Media) - } - - /** - * Test response for getting picture of the day - */ - @Test - fun getPictureOfTheDay() { - val template = "Template:Potd/" + CommonsDateUtil.getIso8601DateFormatShort().format(Date()) - server.enqueue(getMediaList("", "", "", 1)) - - val media = testObject.pictureOfTheDay?.blockingGet() - - assertBasicRequestParameters(server, "GET").let { request -> - parseQueryParams(request).let { body -> - Assert.assertEquals("json", body["format"]) - Assert.assertEquals("2", body["formatversion"]) - Assert.assertEquals("query", body["action"]) - Assert.assertEquals(template, body["titles"]) - Assert.assertEquals("images", body["generator"]) - Assert.assertEquals("imageinfo", body["prop"]) - Assert.assertEquals("url|extmetadata", body["iiprop"]) - Assert.assertEquals("DateTime|Categories|GPSLatitude|GPSLongitude|ImageDescription|DateTimeOriginal|Artist|LicenseShortName|LicenseUrl", body["iiextmetadatafilter"]) - } - } - - assert(media is Media) - } - /** * Generate a MockResponse object which contains a list of media pages */ diff --git a/app/src/test/kotlin/fr/free/nrw/commons/review/ReviewHelperTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/review/ReviewHelperTest.kt index 2fcce9347..f796e2cff 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/review/ReviewHelperTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/review/ReviewHelperTest.kt @@ -29,10 +29,6 @@ class ReviewHelperTest { @Mock internal var reviewInterface: ReviewInterface? = null @Mock - internal var okHttpJsonApiClient: OkHttpJsonApiClient? = null - @Mock - internal var mediaWikiApi: MediaWikiApi? = null - @Mock internal var mediaClient: MediaClient? = null @InjectMocks @@ -68,7 +64,7 @@ class ReviewHelperTest { val media = mock(Media::class.java) `when`(media.filename).thenReturn("File:Test.jpg") - `when`(okHttpJsonApiClient?.getMedia(ArgumentMatchers.anyString(), ArgumentMatchers.anyBoolean())) + `when`(mediaClient?.getMedia(ArgumentMatchers.anyString())) .thenReturn(Single.just(media)) }