|
|
@ -12,8 +12,6 @@ import assertk.assertAll
|
|
|
|
import assertk.assertThat
|
|
|
|
import assertk.assertThat
|
|
|
|
import assertk.assertions.isEqualTo
|
|
|
|
import assertk.assertions.isEqualTo
|
|
|
|
import assertk.assertions.isNotEqualTo
|
|
|
|
import assertk.assertions.isNotEqualTo
|
|
|
|
import assertk.assertions.isSameAs
|
|
|
|
|
|
|
|
import assertk.assertions.isSuccess
|
|
|
|
|
|
|
|
import assertk.assertions.isTrue
|
|
|
|
import assertk.assertions.isTrue
|
|
|
|
import com.google.android.material.snackbar.Snackbar
|
|
|
|
import com.google.android.material.snackbar.Snackbar
|
|
|
|
import io.mockk.Runs
|
|
|
|
import io.mockk.Runs
|
|
|
@ -35,7 +33,7 @@ import org.junit.Test
|
|
|
|
import org.junit.runner.RunWith
|
|
|
|
import org.junit.runner.RunWith
|
|
|
|
import org.mozilla.fenix.R
|
|
|
|
import org.mozilla.fenix.R
|
|
|
|
import org.mozilla.fenix.TestApplication
|
|
|
|
import org.mozilla.fenix.TestApplication
|
|
|
|
import org.mozilla.fenix.components.BrowserSnackbarPresenter
|
|
|
|
import org.mozilla.fenix.components.FenixSnackbar
|
|
|
|
import org.mozilla.fenix.components.metrics.Event
|
|
|
|
import org.mozilla.fenix.components.metrics.Event
|
|
|
|
import org.mozilla.fenix.components.metrics.MetricController
|
|
|
|
import org.mozilla.fenix.components.metrics.MetricController
|
|
|
|
import org.mozilla.fenix.ext.metrics
|
|
|
|
import org.mozilla.fenix.ext.metrics
|
|
|
@ -61,11 +59,11 @@ class ShareControllerTest {
|
|
|
|
)
|
|
|
|
)
|
|
|
|
private val textToShare = "${shareData[0].url}\n${shareData[1].url}"
|
|
|
|
private val textToShare = "${shareData[0].url}\n${shareData[1].url}"
|
|
|
|
private val sendTabUseCases = mockk<SendTabUseCases>(relaxed = true)
|
|
|
|
private val sendTabUseCases = mockk<SendTabUseCases>(relaxed = true)
|
|
|
|
private val snackbarPresenter = mockk<BrowserSnackbarPresenter>(relaxed = true)
|
|
|
|
private val snackbar = mockk<FenixSnackbar>(relaxed = true)
|
|
|
|
private val navController = mockk<NavController>(relaxed = true)
|
|
|
|
private val navController = mockk<NavController>(relaxed = true)
|
|
|
|
private val dismiss = mockk<(ShareController.Result) -> Unit>(relaxed = true)
|
|
|
|
private val dismiss = mockk<(ShareController.Result) -> Unit>(relaxed = true)
|
|
|
|
private val controller = DefaultShareController(
|
|
|
|
private val controller = DefaultShareController(
|
|
|
|
context, shareData, sendTabUseCases, snackbarPresenter, navController, dismiss
|
|
|
|
context, shareData, sendTabUseCases, snackbar, navController, dismiss
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
@Before
|
|
|
|
@Before
|
|
|
@ -121,7 +119,7 @@ class ShareControllerTest {
|
|
|
|
// needed for capturing the actual Intent used the `slot` one doesn't have this flag so we
|
|
|
|
// needed for capturing the actual Intent used the `slot` one doesn't have this flag so we
|
|
|
|
// need to use an Activity Context.
|
|
|
|
// need to use an Activity Context.
|
|
|
|
val activityContext: Context = mockk<Activity>()
|
|
|
|
val activityContext: Context = mockk<Activity>()
|
|
|
|
val testController = DefaultShareController(activityContext, shareData, mockk(), snackbarPresenter, mockk(), dismiss)
|
|
|
|
val testController = DefaultShareController(activityContext, shareData, mockk(), snackbar, mockk(), dismiss)
|
|
|
|
every { activityContext.startActivity(capture(shareIntent)) } throws SecurityException()
|
|
|
|
every { activityContext.startActivity(capture(shareIntent)) } throws SecurityException()
|
|
|
|
every { activityContext.getString(R.string.share_error_snackbar) } returns "Cannot share to this app"
|
|
|
|
every { activityContext.getString(R.string.share_error_snackbar) } returns "Cannot share to this app"
|
|
|
|
|
|
|
|
|
|
|
@ -129,7 +127,8 @@ class ShareControllerTest {
|
|
|
|
|
|
|
|
|
|
|
|
verifyOrder {
|
|
|
|
verifyOrder {
|
|
|
|
activityContext.startActivity(shareIntent.captured)
|
|
|
|
activityContext.startActivity(shareIntent.captured)
|
|
|
|
snackbarPresenter.present("Cannot share to this app")
|
|
|
|
snackbar.setText("Cannot share to this app")
|
|
|
|
|
|
|
|
snackbar.show()
|
|
|
|
dismiss(ShareController.Result.SHARE_ERROR)
|
|
|
|
dismiss(ShareController.Result.SHARE_ERROR)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -211,18 +210,12 @@ class ShareControllerTest {
|
|
|
|
fun `showSuccess should show a snackbar with a success message`() {
|
|
|
|
fun `showSuccess should show a snackbar with a success message`() {
|
|
|
|
val expectedMessage = controller.getSuccessMessage()
|
|
|
|
val expectedMessage = controller.getSuccessMessage()
|
|
|
|
val expectedTimeout = Snackbar.LENGTH_SHORT
|
|
|
|
val expectedTimeout = Snackbar.LENGTH_SHORT
|
|
|
|
val messageSlot = slot<String>()
|
|
|
|
|
|
|
|
val timeoutSlot = slot<Int>()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
controller.showSuccess()
|
|
|
|
controller.showSuccess()
|
|
|
|
|
|
|
|
|
|
|
|
verify { snackbarPresenter.present(capture(messageSlot), capture(timeoutSlot)) }
|
|
|
|
verify {
|
|
|
|
assertAll {
|
|
|
|
snackbar.setText(expectedMessage)
|
|
|
|
assertThat(messageSlot.isCaptured).isTrue()
|
|
|
|
snackbar.setLength(expectedTimeout)
|
|
|
|
assertThat(timeoutSlot.isCaptured).isTrue()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assertThat(messageSlot.captured).isEqualTo(expectedMessage)
|
|
|
|
|
|
|
|
assertThat(timeoutSlot.captured).isEqualTo(expectedTimeout)
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -233,35 +226,16 @@ class ShareControllerTest {
|
|
|
|
val operation: () -> Unit = { println("Hello World") }
|
|
|
|
val operation: () -> Unit = { println("Hello World") }
|
|
|
|
val expectedRetryMessage =
|
|
|
|
val expectedRetryMessage =
|
|
|
|
context.getString(R.string.sync_sent_tab_error_snackbar_action)
|
|
|
|
context.getString(R.string.sync_sent_tab_error_snackbar_action)
|
|
|
|
val messageSlot = slot<String>()
|
|
|
|
|
|
|
|
val timeoutSlot = slot<Int>()
|
|
|
|
|
|
|
|
val operationSlot = slot<() -> Unit>()
|
|
|
|
|
|
|
|
val retryMesageSlot = slot<String>()
|
|
|
|
|
|
|
|
val isFailureSlot = slot<Boolean>()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
controller.showFailureWithRetryOption(operation)
|
|
|
|
controller.showFailureWithRetryOption(operation)
|
|
|
|
|
|
|
|
|
|
|
|
verify {
|
|
|
|
verify {
|
|
|
|
snackbarPresenter.present(
|
|
|
|
snackbar.apply {
|
|
|
|
capture(messageSlot),
|
|
|
|
setText(expectedMessage)
|
|
|
|
capture(timeoutSlot),
|
|
|
|
setLength(expectedTimeout)
|
|
|
|
capture(operationSlot),
|
|
|
|
setAction(expectedRetryMessage, operation)
|
|
|
|
capture(retryMesageSlot),
|
|
|
|
setAppropriateBackground(true)
|
|
|
|
capture(isFailureSlot)
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
assertAll {
|
|
|
|
|
|
|
|
assertThat(messageSlot.isCaptured).isTrue()
|
|
|
|
|
|
|
|
assertThat(timeoutSlot.isCaptured).isTrue()
|
|
|
|
|
|
|
|
assertThat(operationSlot.isCaptured).isTrue()
|
|
|
|
|
|
|
|
assertThat(retryMesageSlot.isCaptured).isTrue()
|
|
|
|
|
|
|
|
assertThat(isFailureSlot.isCaptured).isTrue()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assertThat(messageSlot.captured).isEqualTo(expectedMessage)
|
|
|
|
|
|
|
|
assertThat(timeoutSlot.captured).isEqualTo(expectedTimeout)
|
|
|
|
|
|
|
|
assertThat { operationSlot.captured }.isSuccess().isSameAs(operation)
|
|
|
|
|
|
|
|
assertThat(retryMesageSlot.captured).isEqualTo(expectedRetryMessage)
|
|
|
|
|
|
|
|
assertThat(isFailureSlot.captured).isEqualTo(true)
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|