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

97 lines
3.5 KiB
Kotlin
Raw Normal View History

2019-09-13 19:06:03 +02:00
/* 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
2019-09-13 19:06:03 +02:00
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()
2019-09-13 19:06:03 +02:00
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()
2019-09-13 19:06:03 +02:00
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
)
}
2019-09-13 19:06:03 +02:00
}
@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()
2019-09-13 19:06:03 +02:00
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()
2019-09-13 19:06:03 +02:00
verify { components.analytics.crashReporter.submitReport(crash) }
verify { components.analytics.metrics.track(Event.CrashReporterClosed(true)) }
}
}