Skip to content

Commit d271c0a

Browse files
committed
Increase test coverage
1 parent 3f80a9f commit d271c0a

File tree

3 files changed

+169
-12
lines changed

3 files changed

+169
-12
lines changed

app/src/test/java/com/x8bit/bitwarden/ui/tools/feature/generator/GeneratorScreenTest.kt

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import androidx.compose.ui.semantics.SemanticsProperties
55
import androidx.compose.ui.test.SemanticsMatcher.Companion.expectValue
66
import androidx.compose.ui.test.assert
77
import androidx.compose.ui.test.assertIsDisplayed
8+
import androidx.compose.ui.test.assertIsNotDisplayed
89
import androidx.compose.ui.test.assertIsOff
910
import androidx.compose.ui.test.assertIsOn
1011
import androidx.compose.ui.test.assertTextEquals
@@ -1124,6 +1125,84 @@ class GeneratorScreenTest : BaseComposeTest() {
11241125
}
11251126
}
11261127

1128+
@Suppress("MaxLineLength")
1129+
@Test
1130+
fun `in Username_ForwardedEmailAlias_AddyIo state, updating self host server url text input should send SelfHostServerUrlChange action`() {
1131+
updateState(
1132+
DEFAULT_STATE.copy(
1133+
selectedType = GeneratorState.MainType.Username(
1134+
GeneratorState.MainType.Username.UsernameType.ForwardedEmailAlias(
1135+
selectedServiceType = GeneratorState
1136+
.MainType
1137+
.Username
1138+
.UsernameType
1139+
.ForwardedEmailAlias
1140+
.ServiceType
1141+
.AddyIo(),
1142+
),
1143+
),
1144+
),
1145+
)
1146+
1147+
val newServerUrl = "https://addyio.local"
1148+
1149+
composeTestRule
1150+
.onNodeWithText("Self-host server URL")
1151+
.performScrollTo()
1152+
.performTextInput(newServerUrl)
1153+
1154+
verify {
1155+
viewModel.trySendAction(
1156+
GeneratorAction
1157+
.MainType
1158+
.Username
1159+
.UsernameType
1160+
.ForwardedEmailAlias
1161+
.AddyIo
1162+
.SelfHostServerUrlChange(
1163+
url = newServerUrl,
1164+
),
1165+
)
1166+
}
1167+
}
1168+
1169+
@Suppress("MaxLineLength")
1170+
@Test
1171+
fun `in Username_ForwardedEmailAlias_AddyIo state, self host server url field should show based on state`() {
1172+
updateState(
1173+
DEFAULT_STATE.copy(
1174+
shouldShowAnonAddySelfHostServerUrlField = true,
1175+
selectedType = GeneratorState.MainType.Username(
1176+
GeneratorState.MainType.Username.UsernameType.ForwardedEmailAlias(
1177+
selectedServiceType = GeneratorState
1178+
.MainType
1179+
.Username
1180+
.UsernameType
1181+
.ForwardedEmailAlias
1182+
.ServiceType
1183+
.AddyIo(),
1184+
),
1185+
),
1186+
),
1187+
)
1188+
1189+
composeTestRule
1190+
.onNodeWithText("Self-host server URL")
1191+
.performScrollTo()
1192+
.assertIsDisplayed()
1193+
1194+
// Simulate Disabling the feature flag
1195+
updateState(
1196+
DEFAULT_STATE.copy(
1197+
shouldShowAnonAddySelfHostServerUrlField = false,
1198+
),
1199+
)
1200+
1201+
composeTestRule
1202+
.onNodeWithText("Self-host server URL")
1203+
.assertIsNotDisplayed()
1204+
}
1205+
11271206
//endregion Addy.Io Service Type Tests
11281207

11291208
//region DuckDuckGo Service Type Tests

app/src/test/java/com/x8bit/bitwarden/ui/tools/feature/generator/util/ForwardedEmailServiceTypeExtensionsTest.kt

Lines changed: 47 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,53 +22,90 @@ class ForwardedEmailServiceTypeExtensionsTest {
2222
fastMailApiKey = "api_key_fast_mail",
2323
anonAddyApiAccessToken = "access_token_anon_addy",
2424
anonAddyDomainName = "anonaddy.com",
25+
anonAddySelfHostServerUrl = "anonaddy.local",
2526
forwardEmailApiAccessToken = "access_token_forward_email",
2627
forwardEmailDomainName = "forwardemail.net",
2728
emailWebsite = "email.example.com",
2829
)
2930
UsernameGenerationOptions.ForwardedEmailServiceType.entries
3031
.forEach {
31-
val expected = createMockForwardedEmailAliasServiceType(it)
32+
val expected = createMockForwardedEmailAliasServiceType(it, true)
33+
assertEquals(
34+
expected,
35+
it.toServiceType(options),
36+
)
37+
}
38+
}
39+
40+
@Test
41+
fun `toServiceType should map to correct service type with empty values`() {
42+
val options = UsernameGenerationOptions(
43+
type = UsernameGenerationOptions.UsernameType.RANDOM_WORD,
44+
serviceType = UsernameGenerationOptions.ForwardedEmailServiceType.NONE,
45+
capitalizeRandomWordUsername = true,
46+
includeNumberRandomWordUsername = false,
47+
plusAddressedEmail = null,
48+
catchAllEmailDomain = null,
49+
firefoxRelayApiAccessToken = null,
50+
simpleLoginApiKey = null,
51+
duckDuckGoApiKey = null,
52+
fastMailApiKey = null,
53+
anonAddyApiAccessToken = null,
54+
anonAddyDomainName = null,
55+
anonAddySelfHostServerUrl = null,
56+
forwardEmailApiAccessToken = null,
57+
forwardEmailDomainName = null,
58+
emailWebsite = null,
59+
)
60+
UsernameGenerationOptions.ForwardedEmailServiceType.entries
61+
.forEach {
62+
val expected =
63+
createMockForwardedEmailAliasServiceType(serviceTypeOption = it, empty = true)
3264
assertEquals(
3365
expected,
3466
it.toServiceType(options),
3567
)
3668
}
3769
}
3870

39-
@Suppress("MaxLineLength")
4071
private fun createMockForwardedEmailAliasServiceType(
4172
serviceTypeOption: UsernameGenerationOptions.ForwardedEmailServiceType,
73+
empty: Boolean = false,
4274
): ServiceType? = when (serviceTypeOption) {
4375
UsernameGenerationOptions.ForwardedEmailServiceType.NONE -> null
4476

4577
UsernameGenerationOptions.ForwardedEmailServiceType.ANON_ADDY -> {
4678
ServiceType.AddyIo(
47-
apiAccessToken = "access_token_anon_addy",
48-
domainName = "anonaddy.com",
79+
apiAccessToken = "access_token_anon_addy".takeUnless { empty }.orEmpty(),
80+
domainName = "anonaddy.com".takeUnless { empty }.orEmpty(),
81+
selfHostServerUrl = "anonaddy.local".takeUnless { empty }.orEmpty(),
4982
)
5083
}
5184

5285
UsernameGenerationOptions.ForwardedEmailServiceType.FIREFOX_RELAY -> {
53-
ServiceType.FirefoxRelay(apiAccessToken = "access_token_firefox_relay")
86+
ServiceType.FirefoxRelay(
87+
apiAccessToken = "access_token_firefox_relay"
88+
.takeUnless { empty }
89+
.orEmpty(),
90+
)
5491
}
5592

5693
UsernameGenerationOptions.ForwardedEmailServiceType.SIMPLE_LOGIN -> {
57-
ServiceType.SimpleLogin(apiKey = "api_key_simple_login")
94+
ServiceType.SimpleLogin(apiKey = "api_key_simple_login".takeUnless { empty }.orEmpty())
5895
}
5996

6097
UsernameGenerationOptions.ForwardedEmailServiceType.DUCK_DUCK_GO -> {
61-
ServiceType.DuckDuckGo(apiKey = "api_key_duck_duck_go")
98+
ServiceType.DuckDuckGo(apiKey = "api_key_duck_duck_go".takeUnless { empty }.orEmpty())
6299
}
63100

64101
UsernameGenerationOptions.ForwardedEmailServiceType.FASTMAIL -> {
65-
ServiceType.FastMail(apiKey = "api_key_fast_mail")
102+
ServiceType.FastMail(apiKey = "api_key_fast_mail".takeUnless { empty }.orEmpty())
66103
}
67104

68105
UsernameGenerationOptions.ForwardedEmailServiceType.FORWARD_EMAIL -> {
69106
ServiceType.ForwardEmail(
70-
apiKey = "access_token_forward_email",
71-
domainName = "forwardemail.net",
107+
apiKey = "access_token_forward_email".takeUnless { empty }.orEmpty(),
108+
domainName = "forwardemail.net".takeUnless { empty }.orEmpty(),
72109
)
73110
}
74111
}

app/src/test/java/com/x8bit/bitwarden/ui/tools/feature/generator/util/ServiceTypeExtensionsTest.kt

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,54 @@ internal class ServiceTypeExtensionsTest {
3838
}
3939

4040
@Test
41-
fun `toUsernameGeneratorRequest for AddyIo returns correct request`() {
41+
fun `toUsernameGeneratorRequest for AddyIo with selfHostServerUrl returns correct request`() {
4242
val addyIoServiceType = ServiceType.AddyIo(
4343
apiAccessToken = "testToken",
4444
domainName = "test.com",
4545
selfHostServerUrl = "http://test.com",
4646
)
4747
val website = "bitwarden.com"
48+
49+
assertEquals(
50+
UsernameGeneratorRequest.Forwarded(
51+
service = ForwarderServiceType.AddyIo(
52+
apiToken = "testToken",
53+
domain = "test.com",
54+
baseUrl = "http://test.com",
55+
),
56+
website = website,
57+
),
58+
addyIoServiceType.toUsernameGeneratorRequest(
59+
website = website,
60+
allowAddyIoSelfHostUrl = true,
61+
),
62+
)
63+
64+
// Verify the correct request is returned when allowAddyIoSelfHostUrl is false
65+
assertEquals(
66+
UsernameGeneratorRequest.Forwarded(
67+
service = ForwarderServiceType.AddyIo(
68+
apiToken = "testToken",
69+
domain = "test.com",
70+
baseUrl = ServiceType.AddyIo.DEFAULT_ADDY_IO_URL,
71+
),
72+
website = website,
73+
),
74+
addyIoServiceType.toUsernameGeneratorRequest(
75+
website = website,
76+
allowAddyIoSelfHostUrl = false,
77+
),
78+
)
79+
}
80+
81+
@Suppress("MaxLineLength")
82+
@Test
83+
fun `toUsernameGeneratorRequest for AddyIo without selfHostServerUrl returns correct request`() {
84+
val addyIoServiceType = ServiceType.AddyIo(
85+
apiAccessToken = "testToken",
86+
domainName = "test.com",
87+
)
88+
val website = "bitwarden.com"
4889
val request = addyIoServiceType.toUsernameGeneratorRequest(
4990
website = website,
5091
allowAddyIoSelfHostUrl = true,
@@ -55,7 +96,7 @@ internal class ServiceTypeExtensionsTest {
5596
service = ForwarderServiceType.AddyIo(
5697
apiToken = "testToken",
5798
domain = "test.com",
58-
baseUrl = "http://test.com",
99+
baseUrl = ServiceType.AddyIo.DEFAULT_ADDY_IO_URL,
59100
),
60101
website = website,
61102
),

0 commit comments

Comments
 (0)