From f377b6e64176089cd7a2d043814938c8a8451af5 Mon Sep 17 00:00:00 2001 From: Ovi Trif Date: Thu, 25 May 2023 19:54:13 +0200 Subject: [PATCH] Add: unit test simulating the crash in resume onCancellation handler --- .../android/ui/uploads/UploadStarterTest.kt | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/WordPress/src/test/java/org/wordpress/android/ui/uploads/UploadStarterTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/uploads/UploadStarterTest.kt index f37572bf71da..1689d28c2d29 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/uploads/UploadStarterTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/uploads/UploadStarterTest.kt @@ -5,7 +5,10 @@ import androidx.lifecycle.LifecycleRegistry import androidx.lifecycle.LiveData import kotlinx.coroutines.CancellationException import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.launch +import kotlinx.coroutines.sync.Mutex import org.assertj.core.api.Assertions +import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.junit.MockitoJUnitRunner @@ -123,6 +126,13 @@ class UploadStarterTest : BaseUnitTest() { } } + private lateinit var mutex: Mutex + + @Before + fun setUp() { + mutex = Mutex() + } + @Test fun `when the internet connection is restored and the app is in foreground, it uploads changed posts & pages`() { // Given @@ -227,6 +237,23 @@ class UploadStarterTest : BaseUnitTest() { ) } + @Test + fun `given an unexpected mutex unlock, when uploading, then all other sites are uploaded`() = test { + val starter = createUploadStarter() + val unlockPoint = draftPosts.first() + whenever(uploadServiceFacade.uploadPost(any(), eq(unlockPoint), any())).thenAnswer { mutex.unlock() } + + launch { + starter.queueUploadFromSite(sites[0]) + starter.queueUploadFromSite(sites[1]) + starter.queueUploadFromAllSites() + } + + val expectedInvocations = (draftPosts.size + draftPages.size) * 2 + verify(uploadServiceFacade, times(expectedInvocations)).uploadPost(any(), any(), any()) + } + + @Test fun `when uploading a single site, only posts & pages of that site are uploaded`() { // Given @@ -547,7 +574,7 @@ class UploadStarterTest : BaseUnitTest() { uploadActionUseCase = UploadActionUseCase(uploadStore, postUtilsWrapper, uploadServiceFacade), tracker = mock(), dispatcher = dispatcher, - mutex = mock(), + mutex = mutex, ) } }