|
|
|
@ -10,36 +10,39 @@ import io.mockk.mockk
|
|
|
|
|
import io.mockk.spyk
|
|
|
|
|
import io.mockk.verify
|
|
|
|
|
import mozilla.components.support.test.robolectric.testContext
|
|
|
|
|
import mozilla.telemetry.glean.testing.GleanTestRule
|
|
|
|
|
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.junit.runner.RunWith
|
|
|
|
|
import org.mozilla.fenix.BuildConfig
|
|
|
|
|
import org.mozilla.fenix.GleanMetrics.Messaging
|
|
|
|
|
import org.mozilla.fenix.HomeActivity
|
|
|
|
|
import org.mozilla.fenix.components.AppStore
|
|
|
|
|
import org.mozilla.fenix.components.appstate.AppAction
|
|
|
|
|
import org.mozilla.fenix.components.appstate.AppAction.MessagingAction.MessageClicked
|
|
|
|
|
import org.mozilla.fenix.components.appstate.AppAction.MessagingAction.MessageDisplayed
|
|
|
|
|
import org.mozilla.fenix.components.metrics.Event
|
|
|
|
|
import org.mozilla.fenix.components.metrics.MetricController
|
|
|
|
|
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
|
|
|
|
|
import org.mozilla.fenix.nimbus.MessageData
|
|
|
|
|
|
|
|
|
|
@RunWith(FenixRobolectricTestRunner::class)
|
|
|
|
|
class DefaultMessageControllerTest {
|
|
|
|
|
|
|
|
|
|
@get:Rule
|
|
|
|
|
val gleanTestRule = GleanTestRule(testContext)
|
|
|
|
|
|
|
|
|
|
private val activity: HomeActivity = mockk(relaxed = true)
|
|
|
|
|
private val storageNimbus: NimbusMessagingStorage = mockk(relaxed = true)
|
|
|
|
|
private lateinit var controller: DefaultMessageController
|
|
|
|
|
private lateinit var metrics: MetricController
|
|
|
|
|
private val store: AppStore = mockk(relaxed = true)
|
|
|
|
|
|
|
|
|
|
@Before
|
|
|
|
|
fun setup() {
|
|
|
|
|
metrics = mockk(relaxed = true)
|
|
|
|
|
controller = DefaultMessageController(
|
|
|
|
|
messagingStorage = storageNimbus,
|
|
|
|
|
metrics = metrics,
|
|
|
|
|
appStore = store,
|
|
|
|
|
homeActivity = activity
|
|
|
|
|
)
|
|
|
|
@ -51,10 +54,15 @@ class DefaultMessageControllerTest {
|
|
|
|
|
val message = mockMessage()
|
|
|
|
|
every { customController.handleAction(any()) } returns mockk()
|
|
|
|
|
every { storageNimbus.getMessageAction(message) } returns Pair("uuid", message.id)
|
|
|
|
|
assertFalse(Messaging.messageClicked.testHasValue())
|
|
|
|
|
|
|
|
|
|
customController.onMessagePressed(message)
|
|
|
|
|
|
|
|
|
|
verify { metrics.track(Event.Messaging.MessageClicked(message.id, "uuid")) }
|
|
|
|
|
assertTrue(Messaging.messageClicked.testHasValue())
|
|
|
|
|
val event = Messaging.messageClicked.testGetValue()
|
|
|
|
|
assertEquals(1, event.size)
|
|
|
|
|
assertEquals(message.id, event.single().extra!!["message_key"])
|
|
|
|
|
assertEquals("uuid", event.single().extra!!["action_uuid"])
|
|
|
|
|
verify { customController.handleAction(any()) }
|
|
|
|
|
verify { store.dispatch(MessageClicked(message)) }
|
|
|
|
|
}
|
|
|
|
@ -84,10 +92,14 @@ class DefaultMessageControllerTest {
|
|
|
|
|
@Test
|
|
|
|
|
fun `WHEN calling onMessageDismissed THEN report to the messageManager`() {
|
|
|
|
|
val message = mockMessage()
|
|
|
|
|
assertFalse(Messaging.messageDismissed.testHasValue())
|
|
|
|
|
|
|
|
|
|
controller.onMessageDismissed(message)
|
|
|
|
|
|
|
|
|
|
verify { metrics.track(Event.Messaging.MessageDismissed(message.id)) }
|
|
|
|
|
assertTrue(Messaging.messageDismissed.testHasValue())
|
|
|
|
|
val event = Messaging.messageDismissed.testGetValue()
|
|
|
|
|
assertEquals(1, event.size)
|
|
|
|
|
assertEquals(message.id, event.single().extra!!["message_key"])
|
|
|
|
|
verify { store.dispatch(AppAction.MessagingAction.MessageDismissed(message)) }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -95,11 +107,21 @@ class DefaultMessageControllerTest {
|
|
|
|
|
fun `WHEN calling onMessageDisplayed THEN report to the messageManager`() {
|
|
|
|
|
val data = MessageData(_context = testContext)
|
|
|
|
|
val message = mockMessage(data)
|
|
|
|
|
assertFalse(Messaging.messageExpired.testHasValue())
|
|
|
|
|
assertFalse(Messaging.messageShown.testHasValue())
|
|
|
|
|
|
|
|
|
|
controller.onMessageDisplayed(message)
|
|
|
|
|
|
|
|
|
|
verify { metrics.track(Event.Messaging.MessageExpired(message.id)) }
|
|
|
|
|
verify { metrics.track(Event.Messaging.MessageShown(message.id)) }
|
|
|
|
|
assertTrue(Messaging.messageExpired.testHasValue())
|
|
|
|
|
val messageExpiredEvent = Messaging.messageExpired.testGetValue()
|
|
|
|
|
assertEquals(1, messageExpiredEvent.size)
|
|
|
|
|
assertEquals(message.id, messageExpiredEvent.single().extra!!["message_key"])
|
|
|
|
|
|
|
|
|
|
assertTrue(Messaging.messageShown.testHasValue())
|
|
|
|
|
val event = Messaging.messageShown.testGetValue()
|
|
|
|
|
assertEquals(1, event.size)
|
|
|
|
|
assertEquals(message.id, event.single().extra!!["message_key"])
|
|
|
|
|
|
|
|
|
|
verify { store.dispatch(MessageDisplayed(message)) }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|