BIT-871: Adding UI for forwarded email alias (#440)

This commit is contained in:
joshua-livefront
2023-12-28 11:46:34 -05:00
committed by GitHub
parent 297fc5319f
commit 1323a75f22
5 changed files with 326 additions and 9 deletions

View File

@@ -874,6 +874,59 @@ class GeneratorScreenTest : BaseComposeTest() {
//endregion Passcode Passphrase Tests
//region Forwarded Email Alias Tests
@Suppress("MaxLineLength")
@Test
fun `in Username_ForwardedEmailAlias state, updating the service type should send ServiceTypeOptionSelect action`() {
updateState(
GeneratorState(
generatedText = "Placeholder",
selectedType = GeneratorState.MainType.Username(
GeneratorState.MainType.Username.UsernameType.ForwardedEmailAlias(
selectedServiceType = null,
),
),
),
)
val newServiceType = GeneratorState
.MainType
.Username
.UsernameType
.ForwardedEmailAlias
.ServiceTypeOption
.ANON_ADDY
// Opens the menu
composeTestRule
.onNodeWithContentDescription(label = "Service, null")
.performScrollTo()
.performClick()
// Choose the option from the menu
composeTestRule
.onAllNodesWithText(text = "addy.io")
.onLast()
.assert(hasAnyAncestor(isDialog()))
.performClick()
verify {
viewModel.trySendAction(
GeneratorAction.MainType.Username.UsernameType.ForwardedEmailAlias.ServiceTypeOptionSelect(
newServiceType,
),
)
}
// Make sure dialog is hidden:
composeTestRule
.onNode(isDialog())
.assertDoesNotExist()
}
//endregion Forwarded Email Alias Tests
//region Username Plus Addressed Email Tests
@Suppress("MaxLineLength")

View File

@@ -27,6 +27,10 @@ class GeneratorViewModelTest : BaseViewModelTest() {
private val initialUsernameState = createPlusAddressedEmailState()
private val usernameSavedStateHandle = createSavedStateHandleWithState(initialUsernameState)
private val initialForwardedEmailAliasState = createForwardedEmailAliasState()
private val forwardedEmailAliasSavedStateHandle =
createSavedStateHandleWithState(initialForwardedEmailAliasState)
private val initialCatchAllEmailState = createCatchAllEmailState()
private val catchAllEmailSavedStateHandle =
createSavedStateHandleWithState(initialCatchAllEmailState)
@@ -895,6 +899,58 @@ class GeneratorViewModelTest : BaseViewModelTest() {
}
}
@Nested
inner class ForwardedEmailAliasActions {
private val defaultForwardedEmailAliasState = createForwardedEmailAliasState()
private lateinit var viewModel: GeneratorViewModel
@BeforeEach
fun setup() {
viewModel =
GeneratorViewModel(forwardedEmailAliasSavedStateHandle, fakeGeneratorRepository)
}
@Test
fun `ServiceTypeOptionSelect should update service type correctly`() = runTest {
val action = GeneratorAction
.MainType
.Username
.UsernameType
.ForwardedEmailAlias
.ServiceTypeOptionSelect(
serviceTypeOption = GeneratorState
.MainType
.Username
.UsernameType
.ForwardedEmailAlias
.ServiceTypeOption
.ANON_ADDY,
)
viewModel.actionChannel.trySend(action)
val expectedState = defaultForwardedEmailAliasState.copy(
selectedType = GeneratorState.MainType.Username(
selectedType = GeneratorState
.MainType
.Username
.UsernameType
.ForwardedEmailAlias(
selectedServiceType = GeneratorState
.MainType
.Username
.UsernameType
.ForwardedEmailAlias
.ServiceType
.AnonAddy(),
),
),
)
assertEquals(expectedState, viewModel.stateFlow.value)
}
}
@Nested
inner class PlusAddressedEmailActions {
private val defaultPlusAddressedEmailState = createPlusAddressedEmailState()
@@ -1088,6 +1144,20 @@ class GeneratorViewModelTest : BaseViewModelTest() {
),
)
private fun createForwardedEmailAliasState(
generatedText: String = "defaultForwardedEmailAlias",
obfuscatedText: String = "defaultObfuscatedText",
): GeneratorState =
GeneratorState(
generatedText = generatedText,
selectedType = GeneratorState.MainType.Username(
GeneratorState.MainType.Username.UsernameType.ForwardedEmailAlias(
selectedServiceType = null,
obfuscatedText = obfuscatedText,
),
),
)
private fun createPlusAddressedEmailState(
generatedText: String = "defaultPlusAddressedEmail",
email: String = "defaultEmail",