1
0
Fork 0
fenix/app/src/test/java/org/mozilla/fenix/crashes/CrashReporterControllerTest.kt

97 lines
3.5 KiB
Kotlin

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.fenix.crashes
import androidx.navigation.NavController
import androidx.navigation.NavDestination
import io.mockk.every
import io.mockk.mockk
import io.mockk.verify
import mozilla.components.browser.session.Session
import mozilla.components.lib.crash.Crash
import mozilla.components.support.test.ext.joinBlocking
import org.junit.Before
import org.junit.Test
import org.mozilla.fenix.R
import org.mozilla.fenix.components.Components
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.utils.Settings
class CrashReporterControllerTest {
private lateinit var components: Components
private lateinit var crash: Crash
private lateinit var session: Session
private lateinit var navContoller: NavController
private lateinit var settings: Settings
@Before
fun setup() {
components = mockk(relaxed = true)
crash = mockk()
session = mockk()
navContoller = mockk(relaxed = true)
settings = mockk()
val currentDest: NavDestination = mockk()
every { navContoller.currentDestination } returns currentDest
every { currentDest.id } returns R.id.crashReporterFragment
}
@Test
fun `reports crash reporter opened`() {
CrashReporterController(crash, session, navContoller, components, settings)
verify { components.analytics.metrics.track(Event.CrashReporterOpened) }
}
@Test
fun `handle close and restore tab`() {
val controller = CrashReporterController(crash, session, navContoller, components, settings)
controller.handleCloseAndRestore(sendCrash = false)?.joinBlocking()
verify { components.analytics.metrics.track(Event.CrashReporterClosed(false)) }
verify { components.useCases.sessionUseCases.crashRecovery.invoke() }
verify { navContoller.popBackStack() }
}
@Test
fun `handle close and remove tab`() {
val controller = CrashReporterController(crash, session, navContoller, components, settings)
controller.handleCloseAndRemove(sendCrash = false)?.joinBlocking()
verify { components.analytics.metrics.track(Event.CrashReporterClosed(false)) }
verify { components.useCases.tabsUseCases.removeTab(session) }
verify { components.useCases.sessionUseCases.crashRecovery.invoke() }
verify {
navContoller.navigate(
CrashReporterFragmentDirections.actionCrashReporterFragmentToHomeFragment(),
null
)
}
}
@Test
fun `don't submit report if setting is turned off`() {
every { settings.isCrashReportingEnabled } returns false
val controller = CrashReporterController(crash, session, navContoller, components, settings)
controller.handleCloseAndRestore(sendCrash = true)?.joinBlocking()
verify { components.analytics.metrics.track(Event.CrashReporterClosed(false)) }
}
@Test
fun `submit report if setting is turned on`() {
every { settings.isCrashReportingEnabled } returns true
val controller = CrashReporterController(crash, session, navContoller, components, settings)
controller.handleCloseAndRestore(sendCrash = true)?.joinBlocking()
verify { components.analytics.crashReporter.submitReport(crash) }
verify { components.analytics.metrics.track(Event.CrashReporterClosed(true)) }
}
}