Fix infinite loading circular progress bar after nominating for deletion (#6324)

* fix: infinite loading progress bar after nominating for deletion

* add logs for testing

* refactor: use globalFileUsage instead of achievement to append in reason

Fetching achievements is a time consuming operation and globalFileUsage gives the similar result in optimal time

* test(ReasonBuilder): fix tests according to new behavior

* refactor: remove logs added for testing

* test: await for async getReason method call

---------

Co-authored-by: Neel Doshi <neeldoshi147@gmail.com>
Co-authored-by: Nicolas Raoul <nicolas.raoul@gmail.com>
This commit is contained in:
Rohit Verma 2025-06-25 08:54:03 +05:30 committed by GitHub
parent 5d7f42d127
commit ad7dddaac4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 88 additions and 66 deletions

View file

@ -5,13 +5,14 @@ import android.content.res.Resources
import fr.free.nrw.commons.Media
import fr.free.nrw.commons.R
import fr.free.nrw.commons.auth.SessionManager
import fr.free.nrw.commons.fileusages.GlobalFileUsagesResponse
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.ViewUtilWrapper
import io.reactivex.Observable
import io.reactivex.Single
import kotlinx.coroutines.test.runTest
import media
import org.junit.Before
import org.junit.Test
@ -58,16 +59,16 @@ class ReasonBuilderTest {
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")
reasonBuilder!!.getReason(mock(Media::class.java), "test").test().await()
verify(sessionManager, times(1))!!.forceLogin(any(Context::class.java))
}
@Test
fun getReason() {
fun getReason() = runTest {
`when`(sessionManager?.userName).thenReturn("Testuser")
`when`(sessionManager?.doesAccountExist()).thenReturn(true)
`when`(okHttpJsonApiClient!!.getAchievements(anyString()))
.thenReturn(Single.just(mock(FeedbackResponse::class.java)))
`when`(okHttpJsonApiClient!!.getGlobalFileUsages(anyString(), anyInt()))
.thenReturn(mock(GlobalFileUsagesResponse::class.java))
`when`(okHttpJsonApiClient!!.getLeaderboard(anyString(), anyString(), anyString(), anyString(), anyString()))
.thenReturn(Observable.just(mock(LeaderboardResponse::class.java)))
`when`(okHttpJsonApiClient!!.setAvatar(anyString(), anyString()))
@ -75,8 +76,8 @@ class ReasonBuilderTest {
val media = media(filename = "test_file", dateUploaded = Date())
reasonBuilder!!.getReason(media, "test")
reasonBuilder!!.getReason(media, "test").test().await()
verify(sessionManager, times(0))!!.forceLogin(any(Context::class.java))
verify(okHttpJsonApiClient, times(1))!!.getAchievements(anyString())
verify(okHttpJsonApiClient, times(1))!!.getGlobalFileUsages(anyString(), anyInt())
}
}