Skip to content

Commit 0e83f7d

Browse files
authored
Merge pull request #1084 from synonymdev/codex/paykit-watch-only-accounts
feat: add Paykit server accounts
2 parents 709ebf7 + eb0de14 commit 0e83f7d

88 files changed

Lines changed: 6235 additions & 1936 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package to.bitkit.ui.components
2+
3+
import androidx.compose.ui.test.assertHasClickAction
4+
import androidx.compose.ui.test.junit4.createComposeRule
5+
import androidx.compose.ui.test.onNodeWithContentDescription
6+
import androidx.compose.ui.test.onNodeWithTag
7+
import dagger.hilt.android.testing.HiltAndroidRule
8+
import dagger.hilt.android.testing.HiltAndroidTest
9+
import org.junit.Before
10+
import org.junit.Rule
11+
import org.junit.Test
12+
import to.bitkit.test.annotations.ComposeUi
13+
import to.bitkit.ui.theme.AppThemeSurface
14+
15+
@HiltAndroidTest
16+
@ComposeUi
17+
class TagButtonTest {
18+
@get:Rule
19+
val hiltRule = HiltAndroidRule(this)
20+
21+
@get:Rule
22+
val composeTestRule = createComposeRule()
23+
24+
@Before
25+
fun setup() {
26+
hiltRule.inject()
27+
}
28+
29+
@Test
30+
fun removableTagExposesItsAction() {
31+
composeTestRule.setContent {
32+
AppThemeSurface {
33+
TagButton(
34+
text = "Founder",
35+
onClick = {},
36+
accessibilityLabel = "Remove Founder tag",
37+
displayIconClose = true,
38+
)
39+
}
40+
}
41+
42+
composeTestRule.onNodeWithContentDescription("Remove Founder tag")
43+
.assertHasClickAction()
44+
composeTestRule.onNodeWithTag("Tag-Founder")
45+
.assertHasClickAction()
46+
}
47+
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package to.bitkit.ui.components.settings
2+
3+
import androidx.compose.ui.semantics.Role
4+
import androidx.compose.ui.semantics.SemanticsProperties
5+
import androidx.compose.ui.test.SemanticsMatcher
6+
import androidx.compose.ui.test.assert
7+
import androidx.compose.ui.test.assertHasClickAction
8+
import androidx.compose.ui.test.assertIsEnabled
9+
import androidx.compose.ui.test.assertIsNotEnabled
10+
import androidx.compose.ui.test.assertIsOff
11+
import androidx.compose.ui.test.assertIsOn
12+
import androidx.compose.ui.test.junit4.createComposeRule
13+
import androidx.compose.ui.test.onNodeWithTag
14+
import dagger.hilt.android.testing.HiltAndroidRule
15+
import dagger.hilt.android.testing.HiltAndroidTest
16+
import org.junit.Before
17+
import org.junit.Rule
18+
import org.junit.Test
19+
import to.bitkit.test.annotations.ComposeUi
20+
import to.bitkit.ui.theme.AppThemeSurface
21+
22+
@HiltAndroidTest
23+
@ComposeUi
24+
class SettingsSwitchRowTest {
25+
@get:Rule
26+
val hiltRule = HiltAndroidRule(this)
27+
28+
@get:Rule
29+
val composeTestRule = createComposeRule()
30+
31+
@Before
32+
fun setup() {
33+
hiltRule.inject()
34+
}
35+
36+
@Test
37+
fun switchSemanticsReflectCheckedState() {
38+
composeTestRule.setContent {
39+
AppThemeSurface {
40+
SettingsSwitchRow(
41+
title = "Contact payments",
42+
isChecked = true,
43+
onClick = {},
44+
switchTestTag = "ContactPaymentsSwitch",
45+
)
46+
}
47+
}
48+
49+
composeTestRule.onNodeWithTag("ContactPaymentsSwitch")
50+
.assertIsOn()
51+
.assertIsEnabled()
52+
.assertHasClickAction()
53+
.assert(SemanticsMatcher.expectValue(SemanticsProperties.Role, Role.Switch))
54+
}
55+
56+
@Test
57+
fun switchSemanticsReflectUncheckedState() {
58+
composeTestRule.setContent {
59+
AppThemeSurface {
60+
SettingsSwitchRow(
61+
title = "Contact payments",
62+
isChecked = false,
63+
onClick = {},
64+
switchTestTag = "ContactPaymentsSwitch",
65+
)
66+
}
67+
}
68+
69+
composeTestRule.onNodeWithTag("ContactPaymentsSwitch").assertIsOff()
70+
}
71+
72+
@Test
73+
fun switchSemanticsReflectDisabledState() {
74+
composeTestRule.setContent {
75+
AppThemeSurface {
76+
SettingsSwitchRow(
77+
title = "Contact payments",
78+
isChecked = false,
79+
onClick = {},
80+
enabled = false,
81+
switchTestTag = "ContactPaymentsSwitch",
82+
)
83+
}
84+
}
85+
86+
composeTestRule.onNodeWithTag("ContactPaymentsSwitch")
87+
.assertIsOff()
88+
.assertIsNotEnabled()
89+
}
90+
}

app/src/main/java/to/bitkit/data/SettingsStore.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class SettingsStore @Inject constructor(
4747

4848
suspend fun restoreFromBackup(payload: SettingsBackupV1) =
4949
runCatching {
50-
val data = payload.settings.resetPin()
50+
val data = payload.settings.resetPin().withDefaultPaykitPaymentMethods()
5151
store.updateData { data }
5252

5353
val monitored = data.addressTypesToMonitor
@@ -165,6 +165,14 @@ fun SettingsData.resetPin() = this.copy(
165165
isBiometricEnabled = false,
166166
)
167167

168+
fun SettingsData.areContactPaymentsEnabled(): Boolean =
169+
sharesPublicPaykitEndpoints || sharesPrivatePaykitEndpoints
170+
171+
fun SettingsData.withDefaultPaykitPaymentMethods() = copy(
172+
publicPaykitLightningEnabled = true,
173+
publicPaykitOnchainEnabled = true,
174+
)
175+
168176
fun SettingsData.hasPublicPaykitPublicationState(): Boolean =
169177
hasConfirmedPublicPaykitEndpoints ||
170178
sharesPublicPaykitEndpoints ||

0 commit comments

Comments
 (0)