From 955b2fce9b0db4f83b4f058f3cd19e4938863a83 Mon Sep 17 00:00:00 2001 From: parneet-guraya Date: Tue, 18 Feb 2025 19:14:06 +0530 Subject: [PATCH 1/3] do not fetch achievements in beta variant Signed-off-by: parneet-guraya --- .../java/fr/free/nrw/commons/delete/ReasonBuilder.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/delete/ReasonBuilder.kt b/app/src/main/java/fr/free/nrw/commons/delete/ReasonBuilder.kt index 09018c249b..9703e74e55 100644 --- a/app/src/main/java/fr/free/nrw/commons/delete/ReasonBuilder.kt +++ b/app/src/main/java/fr/free/nrw/commons/delete/ReasonBuilder.kt @@ -14,6 +14,7 @@ import fr.free.nrw.commons.R import fr.free.nrw.commons.profile.achievements.FeedbackResponse import fr.free.nrw.commons.auth.SessionManager import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient +import fr.free.nrw.commons.utils.ConfigUtils import fr.free.nrw.commons.utils.ViewUtilWrapper import io.reactivex.Single import timber.log.Timber @@ -55,6 +56,10 @@ class ReasonBuilder @Inject constructor( } private fun fetchArticleNumber(media: Media, reason: String): Single { + if (ConfigUtils.isBetaFlavour) { + return Single.just(appendArticlesUsed(null, media, reason)) + } + return if (checkAccount()) { okHttpJsonApiClient .getAchievements(sessionManager.userName) @@ -72,9 +77,9 @@ class ReasonBuilder @Inject constructor( * @param reason */ @SuppressLint("StringFormatInvalid") - private fun appendArticlesUsed(feedBack: FeedbackResponse, media: Media, reason: String): String { + private fun appendArticlesUsed(feedBack: FeedbackResponse?, media: Media, reason: String): String { val reason1Template = context.getString(R.string.uploaded_by_myself) - return reason + String.format(Locale.getDefault(), reason1Template, prettyUploadedDate(media), feedBack.articlesUsingImages) + return reason + String.format(Locale.getDefault(), reason1Template, prettyUploadedDate(media), feedBack?.articlesUsingImages ?: 0) .also { Timber.i("New Reason %s", it) } } From 52e6d4158aeba750ff84f1b9fec910638bb939eb Mon Sep 17 00:00:00 2001 From: parneet-guraya Date: Tue, 18 Feb 2025 19:15:13 +0530 Subject: [PATCH 2/3] trigger refresh when operation finishes Signed-off-by: parneet-guraya --- .../java/fr/free/nrw/commons/media/MediaDetailFragment.kt | 6 ++++-- .../fr/free/nrw/commons/media/MediaDetailPagerFragment.java | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.kt b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.kt index 77ff1df0cc..a5ff1b05d0 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.kt +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.kt @@ -141,7 +141,7 @@ class MediaDetailFragment : CommonsDaggerSupportFragment(), CategoryEditHelper.C private var index: Int = 0 private var isDeleted: Boolean = false private var isWikipediaButtonDisplayed: Boolean = false - private val callback: Callback? = null + private var callback: Callback? = null @Inject lateinit var mediaDetailViewModelFactory: MediaDetailViewModel.MediaDetailViewModelProviderFactory @@ -2078,7 +2078,8 @@ class MediaDetailFragment : CommonsDaggerSupportFragment(), CategoryEditHelper.C index: Int, editable: Boolean, isCategoryImage: Boolean, - isWikipediaButtonDisplayed: Boolean + isWikipediaButtonDisplayed: Boolean, + callback: Callback ): MediaDetailFragment { val mf = MediaDetailFragment() val state = Bundle() @@ -2089,6 +2090,7 @@ class MediaDetailFragment : CommonsDaggerSupportFragment(), CategoryEditHelper.C state.putInt("listTop", 0) state.putBoolean("isWikipediaButtonDisplayed", isWikipediaButtonDisplayed) mf.arguments = state + mf.callback = callback return mf } diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java index cba582a35a..e7d806ddfd 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java @@ -623,9 +623,9 @@ public Fragment getItem(int i) { binding.mediaDetailsPager.postDelayed(() -> getActivity().invalidateOptionsMenu(), 5); } if (isFromFeaturedRootFragment) { - return MediaDetailFragment.forMedia(position+i, editable, isFeaturedImage, isWikipediaButtonDisplayed); + return MediaDetailFragment.forMedia(position+i, editable, isFeaturedImage, isWikipediaButtonDisplayed, MediaDetailPagerFragment.this); } else { - return MediaDetailFragment.forMedia(i, editable, isFeaturedImage, isWikipediaButtonDisplayed); + return MediaDetailFragment.forMedia(i, editable, isFeaturedImage, isWikipediaButtonDisplayed, MediaDetailPagerFragment.this); } } From 93b3e239d730a4a6210992651daada6d27616377 Mon Sep 17 00:00:00 2001 From: parneet-guraya Date: Tue, 18 Feb 2025 22:25:27 +0530 Subject: [PATCH 3/3] fix-tests Signed-off-by: parneet-guraya --- .../nrw/commons/delete/ReasonBuilderTest.kt | 47 ++++++++++++------- .../media/MediaDetailFragmentUnitTests.kt | 5 +- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/app/src/test/kotlin/fr/free/nrw/commons/delete/ReasonBuilderTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/delete/ReasonBuilderTest.kt index e89a02dece..f8acaf75e0 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/delete/ReasonBuilderTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/delete/ReasonBuilderTest.kt @@ -9,6 +9,7 @@ import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient import fr.free.nrw.commons.profile.achievements.FeedbackResponse import fr.free.nrw.commons.profile.leaderboard.LeaderboardResponse import fr.free.nrw.commons.profile.leaderboard.UpdateAvatarResponse +import fr.free.nrw.commons.utils.ConfigUtils import fr.free.nrw.commons.utils.ViewUtilWrapper import io.reactivex.Observable import io.reactivex.Single @@ -55,28 +56,38 @@ class ReasonBuilderTest { @Test fun forceLoginWhenAccountIsNull() { - PowerMockito.`when`(context?.getString(R.string.user_not_logged_in)) - .thenReturn("Log-in expired. Please log in again.") - - reasonBuilder!!.getReason(mock(Media::class.java), "test") - verify(sessionManager, times(1))!!.forceLogin(any(Context::class.java)) + if (!ConfigUtils.isBetaFlavour) { + PowerMockito.`when`(context?.getString(R.string.user_not_logged_in)) + .thenReturn("Log-in expired. Please log in again.") + reasonBuilder!!.getReason(mock(Media::class.java), "test") + verify(sessionManager, times(1))!!.forceLogin(any(Context::class.java)) + } } @Test fun getReason() { - `when`(sessionManager?.userName).thenReturn("Testuser") - `when`(sessionManager?.doesAccountExist()).thenReturn(true) - `when`(okHttpJsonApiClient!!.getAchievements(anyString())) - .thenReturn(Single.just(mock(FeedbackResponse::class.java))) - `when`(okHttpJsonApiClient!!.getLeaderboard(anyString(), anyString(), anyString(), anyString(), anyString())) - .thenReturn(Observable.just(mock(LeaderboardResponse::class.java))) - `when`(okHttpJsonApiClient!!.setAvatar(anyString(), anyString())) - .thenReturn(Single.just(mock(UpdateAvatarResponse::class.java))) - - val media = media(filename = "test_file", dateUploaded = Date()) + if (!ConfigUtils.isBetaFlavour) { + `when`(sessionManager?.userName).thenReturn("Testuser") + `when`(sessionManager?.doesAccountExist()).thenReturn(true) + `when`(okHttpJsonApiClient!!.getAchievements(anyString())) + .thenReturn(Single.just(mock(FeedbackResponse::class.java))) + `when`( + okHttpJsonApiClient!!.getLeaderboard( + anyString(), + anyString(), + anyString(), + anyString(), + anyString() + ) + ) + .thenReturn(Observable.just(mock(LeaderboardResponse::class.java))) + `when`(okHttpJsonApiClient!!.setAvatar(anyString(), anyString())) + .thenReturn(Single.just(mock(UpdateAvatarResponse::class.java))) - reasonBuilder!!.getReason(media, "test") - verify(sessionManager, times(0))!!.forceLogin(any(Context::class.java)) - verify(okHttpJsonApiClient, times(1))!!.getAchievements(anyString()) + val media = media(filename = "test_file", dateUploaded = Date()) + reasonBuilder!!.getReason(media, "test") + verify(sessionManager, times(0))!!.forceLogin(any(Context::class.java)) + verify(okHttpJsonApiClient, times(1))!!.getAchievements(anyString()) + } } } diff --git a/app/src/test/kotlin/fr/free/nrw/commons/media/MediaDetailFragmentUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/media/MediaDetailFragmentUnitTests.kt index b6d3c6e282..b3b0b0bfe6 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/media/MediaDetailFragmentUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/media/MediaDetailFragmentUnitTests.kt @@ -162,6 +162,9 @@ class MediaDetailFragmentUnitTests { private lateinit var _binding: FragmentMediaDetailBinding + @Mock + private lateinit var callback: MediaDetailFragment.Callback + @Before fun setUp() { MockitoAnnotations.openMocks(this) @@ -789,7 +792,7 @@ class MediaDetailFragmentUnitTests { @Test @Throws(Exception::class) fun testForMedia() { - MediaDetailFragment.forMedia(0, true, true, true) + MediaDetailFragment.forMedia(0, true, true, true, callback) } @Test