mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-09-23 10:12:07 +01:00
Add numberless account setting screen placeholders.
This commit is contained in:
committed by
Cody Henthorne
parent
e935981db3
commit
8954e55e0e
+21
@@ -289,6 +289,25 @@ class AccountSettingsScreenTest {
|
||||
.assertIsNotEnabled()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun givenNoSignalLogin_whenScreenDisplayed_thenTwoFactorSectionIsAbsent() {
|
||||
setContent(createState())
|
||||
|
||||
composeTestRule.onNodeWithTag(AccountSettingsTestTags.CARD_SIGNAL_LOGIN).assertDoesNotExist()
|
||||
composeTestRule.onNodeWithTag(AccountSettingsTestTags.ROW_AUTHENTICATOR_APP).assertDoesNotExist()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun givenASignalLogin_whenIClickAuthenticatorApp_thenIExpectAuthenticatorAppEvent() {
|
||||
setContent(createState(signalLogin = AccountSettingsState.SignalLogin(keyCount = 2, hasAuthenticatorApp = false)))
|
||||
|
||||
composeTestRule.onNodeWithTag(AccountSettingsTestTags.CARD_SIGNAL_LOGIN).assertIsDisplayed()
|
||||
|
||||
composeTestRule.onNodeWithTag(AccountSettingsTestTags.ROW_AUTHENTICATOR_APP).performClick()
|
||||
|
||||
assertThat(events).contains(AccountSettingsEvent.AuthenticatorAppClicked)
|
||||
}
|
||||
|
||||
private fun setContent(state: AccountSettingsState) {
|
||||
composeTestRule.setContent {
|
||||
AccountSettingsScreen(
|
||||
@@ -311,6 +330,7 @@ class AccountSettingsScreenTest {
|
||||
userUnregistered: Boolean = false,
|
||||
clientDeprecated: Boolean = false,
|
||||
canTransferWhileUnregistered: Boolean = true,
|
||||
signalLogin: AccountSettingsState.SignalLogin? = null,
|
||||
dialog: Dialog = Dialog.None
|
||||
): AccountSettingsState {
|
||||
return AccountSettingsState(
|
||||
@@ -321,6 +341,7 @@ class AccountSettingsScreenTest {
|
||||
userUnregistered = userUnregistered,
|
||||
clientDeprecated = clientDeprecated,
|
||||
canTransferWhileUnregistered = canTransferWhileUnregistered,
|
||||
signalLogin = signalLogin,
|
||||
dialog = dialog
|
||||
)
|
||||
}
|
||||
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
/*
|
||||
* Copyright 2026 Signal Messenger, LLC
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
package org.signal.appsettings.authenticatorcodeentry
|
||||
|
||||
import android.app.Application
|
||||
import androidx.compose.ui.test.assertIsEnabled
|
||||
import androidx.compose.ui.test.assertIsNotEnabled
|
||||
import androidx.compose.ui.test.junit4.createComposeRule
|
||||
import androidx.compose.ui.test.onNodeWithTag
|
||||
import androidx.compose.ui.test.performClick
|
||||
import androidx.compose.ui.test.performTextInput
|
||||
import assertk.assertThat
|
||||
import assertk.assertions.contains
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.robolectric.RobolectricTestRunner
|
||||
import org.robolectric.annotation.Config
|
||||
|
||||
@RunWith(RobolectricTestRunner::class)
|
||||
@Config(application = Application::class)
|
||||
class AuthenticatorCodeEntryScreenTest {
|
||||
|
||||
@get:Rule
|
||||
val composeTestRule = createComposeRule()
|
||||
|
||||
private val events = mutableListOf<AuthenticatorCodeEntryEvent>()
|
||||
|
||||
@Test
|
||||
fun givenAPartialCode_whenScreenDisplayed_thenDoneIsDisabled() {
|
||||
setContent(AuthenticatorCodeEntryState(code = "123"))
|
||||
|
||||
composeTestRule.onNodeWithTag(AuthenticatorCodeEntryTestTags.BUTTON_DONE).assertIsNotEnabled()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun givenAFullCode_whenIClickDone_thenIExpectDoneEvent() {
|
||||
setContent(AuthenticatorCodeEntryState(code = "123456"))
|
||||
|
||||
composeTestRule.onNodeWithTag(AuthenticatorCodeEntryTestTags.BUTTON_DONE)
|
||||
.assertIsEnabled()
|
||||
.performClick()
|
||||
|
||||
assertThat(events).contains(AuthenticatorCodeEntryEvent.DoneClicked)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun whenITypeInTheCodeField_thenIExpectCodeChangedEvent() {
|
||||
setContent(AuthenticatorCodeEntryState())
|
||||
|
||||
composeTestRule.onNodeWithTag(AuthenticatorCodeEntryTestTags.CODE_INPUT).performTextInput("123456")
|
||||
|
||||
assertThat(events).contains(AuthenticatorCodeEntryEvent.CodeChanged("123456"))
|
||||
}
|
||||
|
||||
private fun setContent(state: AuthenticatorCodeEntryState) {
|
||||
composeTestRule.setContent {
|
||||
AuthenticatorCodeEntryScreen(
|
||||
state = state,
|
||||
onEvent = { events += it }
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
+82
@@ -0,0 +1,82 @@
|
||||
/*
|
||||
* Copyright 2026 Signal Messenger, LLC
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
package org.signal.appsettings.authenticatorsetup
|
||||
|
||||
import android.app.Application
|
||||
import androidx.compose.ui.test.assertIsDisplayed
|
||||
import androidx.compose.ui.test.hasTestTag
|
||||
import androidx.compose.ui.test.junit4.createComposeRule
|
||||
import androidx.compose.ui.test.onNodeWithTag
|
||||
import androidx.compose.ui.test.performClick
|
||||
import androidx.compose.ui.test.performScrollToNode
|
||||
import assertk.assertThat
|
||||
import assertk.assertions.contains
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.robolectric.RobolectricTestRunner
|
||||
import org.robolectric.annotation.Config
|
||||
|
||||
@RunWith(RobolectricTestRunner::class)
|
||||
@Config(application = Application::class)
|
||||
class AuthenticatorSetupScreenTest {
|
||||
|
||||
companion object {
|
||||
private const val SETUP_KEY = "KVZ7WL3FDDWJZMTOB7PLZPKVRFD4LYSX"
|
||||
}
|
||||
|
||||
@get:Rule
|
||||
val composeTestRule = createComposeRule()
|
||||
|
||||
private val events = mutableListOf<AuthenticatorSetupEvent>()
|
||||
|
||||
@Test
|
||||
fun whenIClickOpen_thenIExpectOpenAuthenticatorAppEvent() {
|
||||
setContent()
|
||||
|
||||
scrollTo(AuthenticatorSetupTestTags.BUTTON_OPEN)
|
||||
|
||||
composeTestRule.onNodeWithTag(AuthenticatorSetupTestTags.BUTTON_OPEN).performClick()
|
||||
|
||||
assertThat(events).contains(AuthenticatorSetupEvent.OpenAuthenticatorAppClicked)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun whenIClickCopy_thenIExpectCopyKeyEvent() {
|
||||
setContent()
|
||||
|
||||
scrollTo(AuthenticatorSetupTestTags.BUTTON_COPY)
|
||||
|
||||
composeTestRule.onNodeWithTag(AuthenticatorSetupTestTags.BUTTON_COPY).performClick()
|
||||
|
||||
assertThat(events).contains(AuthenticatorSetupEvent.CopyKeyClicked)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun whenIClickContinue_thenIExpectContinueEvent() {
|
||||
setContent()
|
||||
|
||||
composeTestRule.onNodeWithTag(AuthenticatorSetupTestTags.BUTTON_CONTINUE)
|
||||
.assertIsDisplayed()
|
||||
.performClick()
|
||||
|
||||
assertThat(events).contains(AuthenticatorSetupEvent.ContinueClicked)
|
||||
}
|
||||
|
||||
private fun setContent() {
|
||||
composeTestRule.setContent {
|
||||
AuthenticatorSetupScreen(
|
||||
state = AuthenticatorSetupState(setupKey = SETUP_KEY),
|
||||
onEvent = { events += it }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun scrollTo(testTag: String) {
|
||||
composeTestRule.onNodeWithTag(AuthenticatorSetupTestTags.SCROLLER)
|
||||
.performScrollToNode(hasTestTag(testTag))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user