tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 61617ef6966cba6f24070b026f38866f27c49706
parent 2c518d40a8da389566b749fb397430f43b54eb58
Author: mcarare <48995920+mcarare@users.noreply.github.com>
Date:   Mon, 29 Dec 2025 16:55:14 +0000

Bug 2007521 - Update MessagingMiddlewareTest to use modern coroutine testing APIs. r=android-reviewers,rebecatudor273

Differential Revision: https://phabricator.services.mozilla.com/D277421

Diffstat:
Mmobile/android/fenix/app/src/test/java/org/mozilla/fenix/messaging/state/MessagingMiddlewareTest.kt | 98++++++++++++++++++++++++++++++++++++++++---------------------------------------
1 file changed, 50 insertions(+), 48 deletions(-)

diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/messaging/state/MessagingMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/messaging/state/MessagingMiddlewareTest.kt @@ -9,19 +9,15 @@ import io.mockk.coVerify import io.mockk.every import io.mockk.mockk import io.mockk.verify -import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.test.advanceUntilIdle +import kotlinx.coroutines.test.runTest import mozilla.components.service.nimbus.messaging.Message import mozilla.components.service.nimbus.messaging.MessageData import mozilla.components.service.nimbus.messaging.NimbusMessagingController import mozilla.components.service.nimbus.messaging.StyleData -import mozilla.components.support.test.rule.MainCoroutineRule -import mozilla.components.support.test.rule.runTestOnMain import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.Before -import org.junit.Rule import org.junit.Test import org.mozilla.fenix.components.AppStore import org.mozilla.fenix.components.appstate.AppAction @@ -37,9 +33,6 @@ import org.mozilla.fenix.messaging.MessagingState import org.mozilla.fenix.utils.Settings class MessagingMiddlewareTest { - @get:Rule - val coroutinesTestRule = MainCoroutineRule() - private val coroutineScope = coroutinesTestRule.scope private lateinit var controller: NimbusMessagingController private lateinit var settings: Settings @@ -49,9 +42,8 @@ class MessagingMiddlewareTest { settings = mockk(relaxed = true) } - @OptIn(ExperimentalCoroutinesApi::class) // advanceUntilIdle @Test - fun `WHEN restored THEN get messages from the storage`() = runTestOnMain { + fun `WHEN restored THEN get messages from the storage`() = runTest { val store = AppStore( AppState( messaging = MessagingState( @@ -59,7 +51,7 @@ class MessagingMiddlewareTest { ), ), listOf( - MessagingMiddleware(controller, settings, coroutineScope), + MessagingMiddleware(controller, settings, this), ), ) val message = createMessage() @@ -67,13 +59,13 @@ class MessagingMiddlewareTest { coEvery { controller.getMessages() } returns listOf(message) store.dispatch(Restore) - coroutineScope.advanceUntilIdle() + testScheduler.advanceUntilIdle() assertEquals(listOf(message), store.state.messaging.messages) } @Test - fun `WHEN Evaluate THEN getNextMessage from the storage and UpdateMessageToShow`() = runTestOnMain { + fun `WHEN Evaluate THEN getNextMessage from the storage and UpdateMessageToShow`() = runTest { val message = createMessage() val store = AppStore( AppState( @@ -84,7 +76,7 @@ class MessagingMiddlewareTest { ), ), listOf( - MessagingMiddleware(controller, settings, coroutineScope), + MessagingMiddleware(controller, settings, this), ), ) @@ -104,7 +96,7 @@ class MessagingMiddlewareTest { } @Test - fun `WHEN MessageClicked THEN update storage`() = runTestOnMain { + fun `WHEN MessageClicked THEN update storage`() = runTest { val message = createMessage() val store = AppStore( AppState( @@ -113,13 +105,14 @@ class MessagingMiddlewareTest { ), ), listOf( - MessagingMiddleware(controller, settings, coroutineScope), + MessagingMiddleware(controller, settings, this), ), ) assertEquals(message, store.state.messaging.messages.first()) store.dispatch(MessageClicked(message)) + testScheduler.advanceUntilIdle() assertTrue(store.state.messaging.messages.isEmpty()) coVerify { controller.onMessageClicked(message = message) } @@ -127,7 +120,7 @@ class MessagingMiddlewareTest { @Test fun `GVIEN a microsurvey WHEN Started THEN only notify the controller`() = - runTestOnMain { + runTest { val message = createMessage(data = mockk<MessageData>(relaxed = true)) val store = AppStore( AppState( @@ -137,20 +130,21 @@ class MessagingMiddlewareTest { ), ), listOf( - MessagingMiddleware(controller, settings, coroutineScope), + MessagingMiddleware(controller, settings, this), ), ) assertEquals(message, store.state.messaging.messages.first()) store.dispatch(MicrosurveyAction.Started(message.id)) + testScheduler.advanceUntilIdle() assertFalse(store.state.messaging.messages.isEmpty()) coVerify { controller.onMicrosurveyStarted(id = message.id) } } @Test - fun `WHEN MessageDismissed THEN update storage`() = runTestOnMain { + fun `WHEN MessageDismissed THEN update storage`() = runTest { val metadata = createMetadata(displayCount = 1, "same-id") val message = createMessage(metadata) val store = AppStore( @@ -160,17 +154,18 @@ class MessagingMiddlewareTest { ), ), listOf( - MessagingMiddleware(controller, settings, coroutineScope), + MessagingMiddleware(controller, settings, this), ), ) store.dispatch(MessageDismissed(message)) + testScheduler.advanceUntilIdle() assertTrue(store.state.messaging.messages.isEmpty()) coVerify { controller.onMessageDismissed(message = message) } } @Test - fun `WHEN onMicrosurveyDismissed THEN update storage`() = runTestOnMain { + fun `WHEN onMicrosurveyDismissed THEN update storage`() = runTest { val metadata = createMetadata(displayCount = 1, "same-id") val message = createMessage(metadata) val store = AppStore( @@ -180,10 +175,11 @@ class MessagingMiddlewareTest { ), ), listOf( - MessagingMiddleware(controller, settings, coroutineScope), + MessagingMiddleware(controller, settings, this), ), ) store.dispatch(Dismissed(message.id)) + testScheduler.advanceUntilIdle() assertTrue(store.state.messaging.messages.isEmpty()) coVerify { controller.onMicrosurveyDismissed(message = message) } @@ -191,7 +187,7 @@ class MessagingMiddlewareTest { @Test fun `GIVEN a microsurvey WHEN onMicrosurveyShown THEN only notify the controller`() = - runTestOnMain { + runTest { val message = createMessage() val store = AppStore( AppState( @@ -201,13 +197,14 @@ class MessagingMiddlewareTest { ), ), listOf( - MessagingMiddleware(controller, settings, coroutineScope), + MessagingMiddleware(controller, settings, this), ), ) assertEquals(message, store.state.messaging.messages.first()) store.dispatch(AppAction.MessagingAction.MicrosurveyAction.Shown(message.id)) + testScheduler.advanceUntilIdle() assertFalse(store.state.messaging.messages.isEmpty()) coVerify { controller.onMicrosurveyShown(id = message.id) } @@ -215,7 +212,7 @@ class MessagingMiddlewareTest { @Test fun `GVIEN a microsurvey WHEN onMicrosurveyConfirmationShown THEN only notify the controller`() = - runTestOnMain { + runTest { val message = createMessage() val store = AppStore( AppState( @@ -225,13 +222,14 @@ class MessagingMiddlewareTest { ), ), listOf( - MessagingMiddleware(controller, settings, coroutineScope), + MessagingMiddleware(controller, settings, this), ), ) assertEquals(message, store.state.messaging.messages.first()) store.dispatch(AppAction.MessagingAction.MicrosurveyAction.SentConfirmationShown(message.id)) + testScheduler.advanceUntilIdle() assertFalse(store.state.messaging.messages.isEmpty()) coVerify { controller.onMicrosurveySentConfirmationShown(id = message.id) } @@ -239,7 +237,7 @@ class MessagingMiddlewareTest { @Test fun `GVIEN a microsurvey WHEN onPrivacyNoticeTapped THEN only notify the controller`() = - runTestOnMain { + runTest { val message = createMessage() val store = AppStore( AppState( @@ -249,20 +247,21 @@ class MessagingMiddlewareTest { ), ), listOf( - MessagingMiddleware(controller, settings, coroutineScope), + MessagingMiddleware(controller, settings, this), ), ) assertEquals(message, store.state.messaging.messages.first()) store.dispatch(AppAction.MessagingAction.MicrosurveyAction.OnPrivacyNoticeTapped(message.id)) + testScheduler.advanceUntilIdle() assertFalse(store.state.messaging.messages.isEmpty()) coVerify { controller.onMicrosurveyPrivacyNoticeTapped(id = message.id) } } @Test - fun `WHEN onMessageDismissed THEN remove the message from storage and state`() = runTestOnMain { + fun `WHEN onMessageDismissed THEN remove the message from storage and state`() = runTest { val message = createMessage(createMetadata(displayCount = 1)) val store = AppStore( AppState( @@ -274,7 +273,7 @@ class MessagingMiddlewareTest { ), ), listOf( - MessagingMiddleware(controller, settings, coroutineScope), + MessagingMiddleware(controller, settings, this), ), ) @@ -287,7 +286,7 @@ class MessagingMiddlewareTest { } @Test - fun `WHEN onMicrosurveyDismissed THEN remove the message from storage and state`() = runTestOnMain { + fun `WHEN onMicrosurveyDismissed THEN remove the message from storage and state`() = runTest { val message = createMessage(createMetadata(displayCount = 1)) val store = AppStore( AppState( @@ -299,7 +298,7 @@ class MessagingMiddlewareTest { ), ), listOf( - MessagingMiddleware(controller, settings, coroutineScope), + MessagingMiddleware(controller, settings, this), ), ) @@ -312,7 +311,7 @@ class MessagingMiddlewareTest { } @Test - fun `WHEN consumeMessageToShowIfNeeded THEN consume the message`() = runTestOnMain { + fun `WHEN consumeMessageToShowIfNeeded THEN consume the message`() = runTest { val message = createMessage() val store = AppStore( AppState( @@ -324,7 +323,7 @@ class MessagingMiddlewareTest { ), ), listOf( - MessagingMiddleware(controller, settings, coroutineScope), + MessagingMiddleware(controller, settings, this), ), ) @@ -335,7 +334,7 @@ class MessagingMiddlewareTest { } @Test - fun `WHEN updateMessage THEN update available messages`() = runTestOnMain { + fun `WHEN updateMessage THEN update available messages`() = runTest { val message = createMessage() val messageDisplayed = message.copy(metadata = createMetadata(displayCount = 1)) val store = AppStore( @@ -347,7 +346,7 @@ class MessagingMiddlewareTest { ), ), listOf( - MessagingMiddleware(controller, settings, coroutineScope), + MessagingMiddleware(controller, settings, this), ), ) @@ -363,13 +362,14 @@ class MessagingMiddlewareTest { } returns messageDisplayed store.dispatch(Evaluate(FenixMessageSurfaceId.HOMESCREEN)) + testScheduler.advanceUntilIdle() assertEquals(1, store.state.messaging.messages.count()) assertEquals(1, store.state.messaging.messages.first().displayCount) } @Test - fun `WHEN evaluate THEN update displayCount without altering message order`() = runTestOnMain { + fun `WHEN evaluate THEN update displayCount without altering message order`() = runTest { val message1 = createMessage() val message2 = message1.copy(id = "message2", action = "action2") // An updated message1 that has been displayed once. @@ -384,7 +384,7 @@ class MessagingMiddlewareTest { ), ), listOf( - MessagingMiddleware(controller, settings, coroutineScope), + MessagingMiddleware(controller, settings, this), ), ) @@ -403,13 +403,14 @@ class MessagingMiddlewareTest { } returns messageDisplayed1 store.dispatch(Evaluate(FenixMessageSurfaceId.HOMESCREEN)) + testScheduler.advanceUntilIdle() assertEquals(messageDisplayed1, store.state.messaging.messages[0]) assertEquals(message2, store.state.messaging.messages[1]) } @Test - fun `GIVEN a message has not surpassed the maxDisplayCount WHEN evaluate THEN update the message displayCount`() = runTestOnMain { + fun `GIVEN a message has not surpassed the maxDisplayCount WHEN evaluate THEN update the message displayCount`() = runTest { val message = createMessage() // An updated message that has been displayed once. val messageDisplayed = incrementDisplayCount(message) @@ -422,7 +423,7 @@ class MessagingMiddlewareTest { ), ), listOf( - MessagingMiddleware(controller, settings, coroutineScope), + MessagingMiddleware(controller, settings, this), ), ) @@ -441,6 +442,7 @@ class MessagingMiddlewareTest { } returns messageDisplayed store.dispatch(Evaluate(FenixMessageSurfaceId.HOMESCREEN)) + testScheduler.advanceUntilIdle() assertEquals(messageDisplayed.displayCount, store.state.messaging.messages[0].displayCount) assertEquals(1, store.state.messaging.messages.size) @@ -448,7 +450,7 @@ class MessagingMiddlewareTest { } @Test - fun `GIVEN a message has reached the maxDisplayCount WHEN onMessagedDisplayed THEN remove the message`() = runTestOnMain { + fun `GIVEN a message has reached the maxDisplayCount WHEN onMessagedDisplayed THEN remove the message`() = runTest { val message = createMessage(createMetadata(displayCount = 4)) val messageDisplayed = createMessage(createMetadata(displayCount = 5)) assertFalse(message.isExpired) @@ -464,7 +466,7 @@ class MessagingMiddlewareTest { ), ), listOf( - MessagingMiddleware(controller, settings, coroutineScope), + MessagingMiddleware(controller, settings, this), ), ) @@ -483,20 +485,19 @@ class MessagingMiddlewareTest { } returns messageDisplayed store.dispatch(Evaluate(FenixMessageSurfaceId.HOMESCREEN)) + testScheduler.advanceUntilIdle() assertEquals(0, store.state.messaging.messages.size) assertEquals(1, store.state.messaging.messageToShow.size) } @Test - fun `GIVEN a microsurvey message that surpassed the maxDisplayCount WHEN onMessagedDisplayed THEN remove the message, consume it & reset the pref`() = runTestOnMain { + fun `GIVEN a microsurvey message that surpassed the maxDisplayCount WHEN onMessagedDisplayed THEN remove the message, consume it & reset the pref`() = runTest { val message = createMessage(metadata = createMetadata(displayCount = 4), data = MessageData(surface = "microsurvey")) val messageDisplayed = createMessage(createMetadata(displayCount = 5), data = MessageData(surface = "microsurvey")) assertFalse(message.isExpired) assertTrue(messageDisplayed.isExpired) - settings.shouldShowMicrosurveyPrompt = true - verify { settings.shouldShowMicrosurveyPrompt = true } val store = AppStore( AppState( @@ -505,7 +506,7 @@ class MessagingMiddlewareTest { messageToShow = mapOf(message.surface to message), ), ), - listOf(MessagingMiddleware(controller, settings, coroutineScope)), + listOf(MessagingMiddleware(controller, settings, this)), ) every { controller.getNextMessage(FenixMessageSurfaceId.MICROSURVEY, any()) } returns message @@ -515,6 +516,7 @@ class MessagingMiddlewareTest { coEvery { controller.onMessageDisplayed(eq(message), any()) } returns messageDisplayed store.dispatch(Evaluate(FenixMessageSurfaceId.MICROSURVEY)) + testScheduler.advanceUntilIdle() verify { settings.shouldShowMicrosurveyPrompt = false } assertEquals(0, store.state.messaging.messages.size) @@ -522,7 +524,7 @@ class MessagingMiddlewareTest { } @Test - fun `GIVEN message is not found WHEN updateMessage THEN do not update the message list`() = runTestOnMain { + fun `GIVEN message is not found WHEN updateMessage THEN do not update the message list`() = runTest { val message = createMessage(messageId = "1") val message2 = createMessage(messageId = "2") val store = AppStore( @@ -534,7 +536,7 @@ class MessagingMiddlewareTest { ), ), listOf( - MessagingMiddleware(controller, settings, coroutineScope), + MessagingMiddleware(controller, settings, this), ), )