commit 2f72415280e6cdc67f591a2d369c8b5eb4122ff0 parent af2bd28ba7e3749f154af36ff4e98ac8ffa5525a Author: mcarare <48995920+mcarare@users.noreply.github.com> Date: Mon, 15 Dec 2025 13:21:15 +0000 Bug 2006045 - Refactor Pocket worker tests to use runTest. r=android-reviewers,avirvara This patch replaces the usage of `MainCoroutineRule` and `runTestOnMain` with `runTest` in the Pocket service update worker tests. Differential Revision: https://phabricator.services.mozilla.com/D276443 Diffstat:
6 files changed, 18 insertions(+), 47 deletions(-)
diff --git a/mobile/android/android-components/components/service/pocket/src/test/java/mozilla/components/service/pocket/update/ContentRecommendationsRefreshWorkerTest.kt b/mobile/android/android-components/components/service/pocket/src/test/java/mozilla/components/service/pocket/update/ContentRecommendationsRefreshWorkerTest.kt @@ -8,14 +8,12 @@ import androidx.concurrent.futures.await import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.work.ListenableWorker import androidx.work.testing.TestListenableWorkerBuilder +import kotlinx.coroutines.test.runTest import mozilla.components.service.pocket.GlobalDependencyProvider import mozilla.components.service.pocket.recommendations.ContentRecommendationsUseCases import mozilla.components.support.test.mock import mozilla.components.support.test.robolectric.testContext -import mozilla.components.support.test.rule.MainCoroutineRule -import mozilla.components.support.test.rule.runTestOnMain import org.junit.Assert.assertEquals -import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mockito.doReturn @@ -23,11 +21,8 @@ import org.mockito.Mockito.doReturn @RunWith(AndroidJUnit4::class) class ContentRecommendationsRefreshWorkerTest { - @get:Rule - val mainCoroutineRule = MainCoroutineRule() - @Test - fun `WHEN content recommendations are refreshed successfully THEN return success`() = runTestOnMain { + fun `WHEN content recommendations are refreshed successfully THEN return success`() = runTest { val useCases: ContentRecommendationsUseCases = mock() val fetchContentRecommendations: ContentRecommendationsUseCases.FetchContentRecommendations = mock() doReturn(true).`when`(fetchContentRecommendations).invoke() @@ -41,7 +36,7 @@ class ContentRecommendationsRefreshWorkerTest { } @Test - fun `WHEN content recommendations are refreshed unsuccessfully THEN worker should retry`() = runTestOnMain { + fun `WHEN content recommendations are refreshed unsuccessfully THEN worker should retry`() = runTest { val useCases: ContentRecommendationsUseCases = mock() val fetchContentRecommendations: ContentRecommendationsUseCases.FetchContentRecommendations = mock() doReturn(false).`when`(fetchContentRecommendations).invoke() diff --git a/mobile/android/android-components/components/service/pocket/src/test/java/mozilla/components/service/pocket/update/DeleteSpocsProfileWorkerTest.kt b/mobile/android/android-components/components/service/pocket/src/test/java/mozilla/components/service/pocket/update/DeleteSpocsProfileWorkerTest.kt @@ -8,16 +8,14 @@ import androidx.concurrent.futures.await import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.work.ListenableWorker.Result import androidx.work.testing.TestListenableWorkerBuilder +import kotlinx.coroutines.test.runTest import mozilla.components.service.pocket.GlobalDependencyProvider import mozilla.components.service.pocket.helpers.assertClassVisibility import mozilla.components.service.pocket.spocs.SpocsUseCases import mozilla.components.service.pocket.spocs.SpocsUseCases.DeleteProfile import mozilla.components.support.test.mock import mozilla.components.support.test.robolectric.testContext -import mozilla.components.support.test.rule.MainCoroutineRule -import mozilla.components.support.test.rule.runTestOnMain import org.junit.Assert.assertEquals -import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mockito.doReturn @@ -25,8 +23,6 @@ import kotlin.reflect.KVisibility.INTERNAL @RunWith(AndroidJUnit4::class) class DeleteSpocsProfileWorkerTest { - @get:Rule - val mainCoroutineRule = MainCoroutineRule() @Test fun `GIVEN a DeleteSpocsProfileWorker THEN its visibility is internal`() { @@ -34,7 +30,7 @@ class DeleteSpocsProfileWorkerTest { } @Test - fun `GIVEN a DeleteSpocsProfileWorker WHEN profile deletion is successful THEN return success`() = runTestOnMain { + fun `GIVEN a DeleteSpocsProfileWorker WHEN profile deletion is successful THEN return success`() = runTest { val useCases: SpocsUseCases = mock() val deleteProfileUseCase: DeleteProfile = mock() doReturn(true).`when`(deleteProfileUseCase).invoke() @@ -48,7 +44,7 @@ class DeleteSpocsProfileWorkerTest { } @Test - fun `GIVEN a DeleteSpocsProfileWorker WHEN profile deletion fails THEN work should be retried`() = runTestOnMain { + fun `GIVEN a DeleteSpocsProfileWorker WHEN profile deletion fails THEN work should be retried`() = runTest { val useCases: SpocsUseCases = mock() val deleteProfileUseCase: DeleteProfile = mock() doReturn(false).`when`(deleteProfileUseCase).invoke() diff --git a/mobile/android/android-components/components/service/pocket/src/test/java/mozilla/components/service/pocket/update/DeleteUserWorkerTest.kt b/mobile/android/android-components/components/service/pocket/src/test/java/mozilla/components/service/pocket/update/DeleteUserWorkerTest.kt @@ -8,14 +8,12 @@ import androidx.concurrent.futures.await import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.work.ListenableWorker import androidx.work.testing.TestListenableWorkerBuilder +import kotlinx.coroutines.test.runTest import mozilla.components.service.pocket.GlobalDependencyProvider import mozilla.components.service.pocket.mars.SponsoredContentsUseCases import mozilla.components.support.test.mock import mozilla.components.support.test.robolectric.testContext -import mozilla.components.support.test.rule.MainCoroutineRule -import mozilla.components.support.test.rule.runTestOnMain import org.junit.Assert.assertEquals -import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mockito.doReturn @@ -23,11 +21,8 @@ import org.mockito.Mockito.doReturn @RunWith(AndroidJUnit4::class) class DeleteUserWorkerTest { - @get:Rule - val mainCoroutineRule = MainCoroutineRule() - @Test - fun `WHEN user profile deletion is successful THEN return success`() = runTestOnMain { + fun `WHEN user profile deletion is successful THEN return success`() = runTest { val useCases: SponsoredContentsUseCases = mock() val deleteUser: SponsoredContentsUseCases.DeleteUser = mock() @@ -43,7 +38,7 @@ class DeleteUserWorkerTest { } @Test - fun `WHEN user profile deletion fails THEN worker should retry`() = runTestOnMain { + fun `WHEN user profile deletion fails THEN worker should retry`() = runTest { val useCases: SponsoredContentsUseCases = mock() val deleteUser: SponsoredContentsUseCases.DeleteUser = mock() diff --git a/mobile/android/android-components/components/service/pocket/src/test/java/mozilla/components/service/pocket/update/RefreshPocketWorkerTest.kt b/mobile/android/android-components/components/service/pocket/src/test/java/mozilla/components/service/pocket/update/RefreshPocketWorkerTest.kt @@ -8,16 +8,14 @@ import androidx.concurrent.futures.await import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.work.ListenableWorker import androidx.work.testing.TestListenableWorkerBuilder +import kotlinx.coroutines.test.runTest import mozilla.components.service.pocket.GlobalDependencyProvider import mozilla.components.service.pocket.helpers.assertClassVisibility import mozilla.components.service.pocket.stories.PocketStoriesUseCases import mozilla.components.service.pocket.stories.PocketStoriesUseCases.RefreshPocketStories import mozilla.components.support.test.mock import mozilla.components.support.test.robolectric.testContext -import mozilla.components.support.test.rule.MainCoroutineRule -import mozilla.components.support.test.rule.runTestOnMain import org.junit.Assert.assertEquals -import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mockito.doReturn @@ -26,16 +24,13 @@ import kotlin.reflect.KVisibility @RunWith(AndroidJUnit4::class) class RefreshPocketWorkerTest { - @get:Rule - val mainCoroutineRule = MainCoroutineRule() - @Test fun `GIVEN a RefreshPocketWorker THEN its visibility is internal`() { assertClassVisibility(RefreshPocketWorker::class, KVisibility.INTERNAL) } @Test - fun `GIVEN a RefreshPocketWorker WHEN stories are refreshed successfully THEN return success`() = runTestOnMain { + fun `GIVEN a RefreshPocketWorker WHEN stories are refreshed successfully THEN return success`() = runTest { val useCases: PocketStoriesUseCases = mock() val refreshStoriesUseCase: RefreshPocketStories = mock() doReturn(true).`when`(refreshStoriesUseCase).invoke() @@ -48,7 +43,7 @@ class RefreshPocketWorkerTest { } @Test - fun `GIVEN a RefreshPocketWorker WHEN stories are could not be refreshed THEN work should be retried`() = runTestOnMain { + fun `GIVEN a RefreshPocketWorker WHEN stories are could not be refreshed THEN work should be retried`() = runTest { val useCases: PocketStoriesUseCases = mock() val refreshStoriesUseCase: RefreshPocketStories = mock() doReturn(false).`when`(refreshStoriesUseCase).invoke() diff --git a/mobile/android/android-components/components/service/pocket/src/test/java/mozilla/components/service/pocket/update/RefreshSpocsWorkerTest.kt b/mobile/android/android-components/components/service/pocket/src/test/java/mozilla/components/service/pocket/update/RefreshSpocsWorkerTest.kt @@ -8,16 +8,14 @@ import androidx.concurrent.futures.await import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.work.ListenableWorker import androidx.work.testing.TestListenableWorkerBuilder +import kotlinx.coroutines.test.runTest import mozilla.components.service.pocket.GlobalDependencyProvider import mozilla.components.service.pocket.helpers.assertClassVisibility import mozilla.components.service.pocket.spocs.SpocsUseCases import mozilla.components.service.pocket.spocs.SpocsUseCases.RefreshSponsoredStories import mozilla.components.support.test.mock import mozilla.components.support.test.robolectric.testContext -import mozilla.components.support.test.rule.MainCoroutineRule -import mozilla.components.support.test.rule.runTestOnMain import org.junit.Assert.assertEquals -import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mockito.doReturn @@ -26,16 +24,13 @@ import kotlin.reflect.KVisibility.INTERNAL @RunWith(AndroidJUnit4::class) class RefreshSpocsWorkerTest { - @get:Rule - val mainCoroutineRule = MainCoroutineRule() - @Test fun `GIVEN a RefreshSpocsWorker THEN its visibility is internal`() { assertClassVisibility(RefreshSpocsWorker::class, INTERNAL) } @Test - fun `GIVEN a RefreshSpocsWorker WHEN stories are refreshed successfully THEN return success`() = runTestOnMain { + fun `GIVEN a RefreshSpocsWorker WHEN stories are refreshed successfully THEN return success`() = runTest { val useCases: SpocsUseCases = mock() val refreshStoriesUseCase: RefreshSponsoredStories = mock() doReturn(true).`when`(refreshStoriesUseCase).invoke() @@ -48,7 +43,7 @@ class RefreshSpocsWorkerTest { } @Test - fun `GIVEN a RefreshSpocsWorker WHEN stories are could not be refreshed THEN work should be retried`() = runTestOnMain { + fun `GIVEN a RefreshSpocsWorker WHEN stories are could not be refreshed THEN work should be retried`() = runTest { val useCases: SpocsUseCases = mock() val refreshStoriesUseCase: RefreshSponsoredStories = mock() doReturn(false).`when`(refreshStoriesUseCase).invoke() diff --git a/mobile/android/android-components/components/service/pocket/src/test/java/mozilla/components/service/pocket/update/SponsoredContentsRefreshWorkerTest.kt b/mobile/android/android-components/components/service/pocket/src/test/java/mozilla/components/service/pocket/update/SponsoredContentsRefreshWorkerTest.kt @@ -8,14 +8,12 @@ import androidx.concurrent.futures.await import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.work.ListenableWorker import androidx.work.testing.TestListenableWorkerBuilder +import kotlinx.coroutines.test.runTest import mozilla.components.service.pocket.GlobalDependencyProvider import mozilla.components.service.pocket.mars.SponsoredContentsUseCases import mozilla.components.support.test.mock import mozilla.components.support.test.robolectric.testContext -import mozilla.components.support.test.rule.MainCoroutineRule -import mozilla.components.support.test.rule.runTestOnMain import org.junit.Assert.assertEquals -import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mockito.doReturn @@ -23,11 +21,8 @@ import org.mockito.Mockito.doReturn @RunWith(AndroidJUnit4::class) class SponsoredContentsRefreshWorkerTest { - @get:Rule - val mainCoroutineRule = MainCoroutineRule() - @Test - fun `WHEN sponsored contents are refreshed successfully THEN return success`() = runTestOnMain { + fun `WHEN sponsored contents are refreshed successfully THEN return success`() = runTest { val useCases: SponsoredContentsUseCases = mock() val refreshSponsoredContents: SponsoredContentsUseCases.RefreshSponsoredContents = mock() @@ -43,7 +38,7 @@ class SponsoredContentsRefreshWorkerTest { } @Test - fun `WHEN sponsored contents are refreshed unsuccessfully THEN worker should retry`() = runTestOnMain { + fun `WHEN sponsored contents are refreshed unsuccessfully THEN worker should retry`() = runTest { val useCases: SponsoredContentsUseCases = mock() val refreshSponsoredContents: SponsoredContentsUseCases.RefreshSponsoredContents = mock()