BIT-662: Adding UI for random word generator (#313)

This commit is contained in:
joshua-livefront
2023-12-04 13:21:16 -05:00
committed by GitHub
parent c8d5f1633a
commit 633bd443cc
4 changed files with 338 additions and 7 deletions

View File

@@ -993,6 +993,10 @@ class GeneratorScreenTest : BaseComposeTest() {
}
}
//endregion Username Plus Addressed Email Tests
//region Catch-All Email Tests
@Suppress("MaxLineLength")
@Test
fun `in Username_CatchAllEmail state, updating text in email field should send EmailTextChange action`() {
@@ -1028,7 +1032,69 @@ class GeneratorScreenTest : BaseComposeTest() {
}
}
//endregion Username Plus Addressed Email Tests
//endregion Catch-All Email Tests
//region Random Word Tests
@Suppress("MaxLineLength")
@Test
fun `in Username_RandomWord state, toggling capitalize should send ToggleCapitalizeChange action`() {
updateState(
GeneratorState(
generatedText = "Placeholder",
selectedType = GeneratorState.MainType.Username(
GeneratorState.MainType.Username.UsernameType.RandomWord(),
),
),
)
composeTestRule.setContent {
GeneratorScreen(viewModel = viewModel)
}
composeTestRule.onNodeWithText("Capitalize")
.performScrollTo()
.performClick()
verify {
viewModel.trySendAction(
GeneratorAction.MainType.Username.UsernameType.RandomWord.ToggleCapitalizeChange(
capitalize = true,
),
)
}
}
@Suppress("MaxLineLength")
@Test
fun `in Username_RandomWord state, toggling the include number toggle should send ToggleIncludeNumberChange action`() {
updateState(
GeneratorState(
generatedText = "Placeholder",
selectedType = GeneratorState.MainType.Username(
GeneratorState.MainType.Username.UsernameType.RandomWord(),
),
),
)
composeTestRule.setContent {
GeneratorScreen(viewModel = viewModel)
}
composeTestRule.onNodeWithText("Include number")
.performScrollTo()
.performClick()
verify {
viewModel.trySendAction(
GeneratorAction.MainType.Username.UsernameType.RandomWord.ToggleIncludeNumberChange(
includeNumber = true,
),
)
}
}
//endregion Random Word Tests
private fun updateState(state: GeneratorState) {
mutableStateFlow.value = state

View File

@@ -31,6 +31,9 @@ class GeneratorViewModelTest : BaseViewModelTest() {
private val catchAllEmailSavedStateHandle =
createSavedStateHandleWithState(initialCatchAllEmailState)
private val initialRandomWordState = createRandomWordState()
private val randomWordSavedStateHandle = createSavedStateHandleWithState(initialRandomWordState)
private val fakeGeneratorRepository = FakeGeneratorRepository().apply {
setMockGeneratePasswordResult(
GeneratedPasswordResult.Success("defaultPassword"),
@@ -872,6 +875,67 @@ class GeneratorViewModelTest : BaseViewModelTest() {
assertEquals(expectedState, viewModel.stateFlow.value)
}
}
@Nested
inner class RandomWordActions {
private val defaultRandomWordState = createRandomWordState()
private lateinit var viewModel: GeneratorViewModel
@BeforeEach
fun setup() {
viewModel = GeneratorViewModel(randomWordSavedStateHandle, fakeGeneratorRepository)
}
@Suppress("MaxLineLength")
@Test
fun `ToggleCapitalizeChange should update the capitalize property correctly`() = runTest {
viewModel.actionChannel.trySend(
GeneratorAction
.MainType
.Username
.UsernameType
.RandomWord
.ToggleCapitalizeChange(
capitalize = true,
),
)
val expectedState = defaultRandomWordState.copy(
selectedType = GeneratorState.MainType.Username(
GeneratorState.MainType.Username.UsernameType.RandomWord(
capitalize = true,
),
),
)
assertEquals(expectedState, viewModel.stateFlow.value)
}
@Suppress("MaxLineLength")
@Test
fun `ToggleIncludeNumberChange should update the includeNumber property correctly`() = runTest {
viewModel.actionChannel.trySend(
GeneratorAction
.MainType
.Username
.UsernameType
.RandomWord
.ToggleIncludeNumberChange(
includeNumber = true,
),
)
val expectedState = defaultRandomWordState.copy(
selectedType = GeneratorState.MainType.Username(
GeneratorState.MainType.Username.UsernameType.RandomWord(
includeNumber = true,
),
),
)
assertEquals(expectedState, viewModel.stateFlow.value)
}
}
//region Helper Functions
@Suppress("LongParameterList")
@@ -947,6 +1011,21 @@ class GeneratorViewModelTest : BaseViewModelTest() {
),
)
private fun createRandomWordState(
generatedText: String = "defaultRandomWord",
capitalize: Boolean = false,
includeNumber: Boolean = false,
): GeneratorState =
GeneratorState(
generatedText = generatedText,
selectedType = GeneratorState.MainType.Username(
GeneratorState.MainType.Username.UsernameType.RandomWord(
capitalize = capitalize,
includeNumber = includeNumber,
),
),
)
private fun createSavedStateHandleWithState(state: GeneratorState) =
SavedStateHandle().apply {
set("state", state)