Skip to content

Commit 3765cb4

Browse files
authored
Merge pull request #177 from synonymdev/feat/widget-bitcoin-facts
Widgets - Bitcoin facts
2 parents 16114bb + f2568e0 commit 3765cb4

File tree

18 files changed

+1750
-167
lines changed

18 files changed

+1750
-167
lines changed
Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
package to.bitkit.ui.screens.widgets.facts
2+
3+
import androidx.compose.ui.test.assertTextEquals
4+
import androidx.compose.ui.test.junit4.createComposeRule
5+
import androidx.compose.ui.test.onNodeWithTag
6+
import org.junit.Rule
7+
import org.junit.Test
8+
import to.bitkit.ui.theme.AppThemeSurface
9+
10+
class FactsCardTest {
11+
12+
@get:Rule
13+
val composeTestRule = createComposeRule()
14+
15+
private val testHeadline = "Priced in Bitcoin, products can become cheaper over time."
16+
17+
@Test
18+
fun testFactsCardWithAllElements() {
19+
// Arrange & Act
20+
composeTestRule.setContent {
21+
AppThemeSurface {
22+
FactsCard(
23+
showWidgetTitle = true,
24+
showSource = true,
25+
headline = testHeadline
26+
)
27+
}
28+
}
29+
30+
// Assert all elements exist
31+
composeTestRule.onNodeWithTag("widget_title_row", useUnmergedTree = true).assertExists()
32+
composeTestRule.onNodeWithTag("widget_title_icon", useUnmergedTree = true).assertExists()
33+
composeTestRule.onNodeWithTag("widget_title_text", useUnmergedTree = true).assertExists()
34+
composeTestRule.onNodeWithTag("headline_text", useUnmergedTree = true).assertExists()
35+
composeTestRule.onNodeWithTag("source_row", useUnmergedTree = true).assertExists()
36+
composeTestRule.onNodeWithTag("source_label", useUnmergedTree = true).assertExists()
37+
composeTestRule.onNodeWithTag("source_text", useUnmergedTree = true).assertExists()
38+
39+
// Verify text content
40+
composeTestRule.onNodeWithTag("headline_text", useUnmergedTree = true).assertTextEquals(testHeadline)
41+
composeTestRule.onNodeWithTag("source_text", useUnmergedTree = true).assertTextEquals("synonym.to")
42+
}
43+
44+
@Test
45+
fun testFactsCardWithoutWidgetTitle() {
46+
// Arrange & Act
47+
composeTestRule.setContent {
48+
AppThemeSurface {
49+
FactsCard(
50+
showWidgetTitle = false,
51+
showSource = true,
52+
headline = testHeadline
53+
)
54+
}
55+
}
56+
57+
// Assert main elements exist
58+
composeTestRule.onNodeWithTag("headline_text", useUnmergedTree = true).assertExists()
59+
composeTestRule.onNodeWithTag("source_row", useUnmergedTree = true).assertExists()
60+
61+
// Assert widget title elements do not exist
62+
composeTestRule.onNodeWithTag("widget_title_row", useUnmergedTree = true).assertDoesNotExist()
63+
composeTestRule.onNodeWithTag("widget_title_icon", useUnmergedTree = true).assertDoesNotExist()
64+
composeTestRule.onNodeWithTag("widget_title_text", useUnmergedTree = true).assertDoesNotExist()
65+
}
66+
67+
@Test
68+
fun testFactsCardWithoutSource() {
69+
// Arrange & Act
70+
composeTestRule.setContent {
71+
AppThemeSurface {
72+
FactsCard(
73+
showWidgetTitle = true,
74+
showSource = false,
75+
headline = testHeadline
76+
)
77+
}
78+
}
79+
80+
// Assert main elements exist
81+
composeTestRule.onNodeWithTag("widget_title_row", useUnmergedTree = true).assertExists()
82+
composeTestRule.onNodeWithTag("headline_text", useUnmergedTree = true).assertExists()
83+
84+
// Assert source elements do not exist
85+
composeTestRule.onNodeWithTag("source_row", useUnmergedTree = true).assertDoesNotExist()
86+
composeTestRule.onNodeWithTag("source_label", useUnmergedTree = true).assertDoesNotExist()
87+
composeTestRule.onNodeWithTag("source_text", useUnmergedTree = true).assertDoesNotExist()
88+
}
89+
90+
@Test
91+
fun testFactsCardMinimal() {
92+
// Arrange & Act - Only headline shown
93+
composeTestRule.setContent {
94+
AppThemeSurface {
95+
FactsCard(
96+
showWidgetTitle = false,
97+
showSource = false,
98+
headline = testHeadline
99+
)
100+
}
101+
}
102+
103+
// Assert only essential elements exist
104+
composeTestRule.onNodeWithTag("headline_text", useUnmergedTree = true).assertExists()
105+
106+
// Assert optional elements do not exist
107+
composeTestRule.onNodeWithTag("widget_title_row", useUnmergedTree = true).assertDoesNotExist()
108+
composeTestRule.onNodeWithTag("source_row", useUnmergedTree = true).assertDoesNotExist()
109+
110+
// Verify headline text
111+
composeTestRule.onNodeWithTag("headline_text", useUnmergedTree = true).assertTextEquals(testHeadline)
112+
}
113+
114+
@Test
115+
fun testFactsCardWithLongHeadline() {
116+
// Arrange
117+
val longHeadline = "This is a very long fact that should be truncated because it exceeds " +
118+
"the maximum number of lines allowed in the facts card component and should show ellipsis"
119+
120+
// Act
121+
composeTestRule.setContent {
122+
AppThemeSurface {
123+
FactsCard(
124+
showWidgetTitle = true,
125+
showSource = true,
126+
headline = longHeadline
127+
)
128+
}
129+
}
130+
131+
// Assert headline exists and contains the text (may be truncated)
132+
composeTestRule.onNodeWithTag("headline_text", useUnmergedTree = true).assertExists()
133+
}
134+
135+
@Test
136+
fun testAllElementsExistInFullConfiguration() {
137+
// Arrange & Act
138+
composeTestRule.setContent {
139+
AppThemeSurface {
140+
FactsCard(
141+
showWidgetTitle = true,
142+
showSource = true,
143+
headline = testHeadline
144+
)
145+
}
146+
}
147+
148+
// Assert all tagged elements exist
149+
composeTestRule.onNodeWithTag("widget_title_row", useUnmergedTree = true).assertExists()
150+
composeTestRule.onNodeWithTag("widget_title_icon", useUnmergedTree = true).assertExists()
151+
composeTestRule.onNodeWithTag("widget_title_text", useUnmergedTree = true).assertExists()
152+
composeTestRule.onNodeWithTag("headline_text", useUnmergedTree = true).assertExists()
153+
composeTestRule.onNodeWithTag("source_row", useUnmergedTree = true).assertExists()
154+
composeTestRule.onNodeWithTag("source_label", useUnmergedTree = true).assertExists()
155+
composeTestRule.onNodeWithTag("source_text", useUnmergedTree = true).assertExists()
156+
}
157+
}

0 commit comments

Comments
 (0)