pull/2109/merge
Noah Statton 2 weeks ago committed by GitHub
commit c63afdf7c2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -16,4 +16,5 @@
-->
<resources>
<string name="feature_topic_api_loading">Loading topic</string>
<string name="feature_topic_api_error_header">Couldn\'t load topic</string>
</resources>

@ -42,11 +42,13 @@ class TopicScreenTest {
val composeTestRule = createAndroidComposeRule<ComponentActivity>()
private lateinit var topicLoading: String
private lateinit var topicErrorHeader: String
@Before
fun setup() {
composeTestRule.activity.apply {
topicLoading = getString(R.string.feature_topic_api_loading)
topicErrorHeader = getString(R.string.feature_topic_api_error_header)
}
}
@ -97,6 +99,26 @@ class TopicScreenTest {
.assertExists()
}
@Test
fun errorMessage_whenTopicIsError_isShown() {
composeTestRule.setContent {
TopicScreen(
topicUiState = TopicUiState.Error,
newsUiState = NewsUiState.Loading,
showBackButton = true,
onBackClick = {},
onFollowClick = {},
onTopicClick = {},
onBookmarkChanged = { _, _ -> },
onNewsResourceViewed = {},
)
}
composeTestRule
.onNodeWithText(topicErrorHeader)
.assertExists()
}
@Test
fun news_whenTopicIsLoading_isNotShown() {
composeTestRule.setContent {

@ -129,7 +129,9 @@ internal fun TopicScreen(
)
}
TopicUiState.Error -> TODO()
TopicUiState.Error -> item {
TopicErrorBody()
}
is TopicUiState.Success -> {
item {
TopicToolbar(
@ -177,7 +179,7 @@ private fun topicItemsSize(
topicUiState: TopicUiState,
newsUiState: NewsUiState,
) = when (topicUiState) {
TopicUiState.Error -> 0 // Nothing
TopicUiState.Error -> 1 // Error message
TopicUiState.Loading -> 1 // Loading bar
is TopicUiState.Success -> when (newsUiState) {
NewsUiState.Error -> 0 // Nothing
@ -203,6 +205,22 @@ private fun LazyListScope.topicBody(
userNewsResourceCards(news, onBookmarkChanged, onNewsResourceViewed, onTopicClick)
}
@Composable
private fun TopicErrorBody(modifier: Modifier = Modifier) {
Column(
horizontalAlignment = Alignment.CenterHorizontally,
modifier = modifier
.fillMaxWidth()
.padding(horizontal = 48.dp),
) {
Text(
text = stringResource(id = TopicR.string.feature_topic_api_error_header),
style = MaterialTheme.typography.bodyLarge,
modifier = Modifier.padding(vertical = 24.dp),
)
}
}
@Composable
private fun TopicHeader(name: String, description: String, imageUrl: String) {
Column(

Loading…
Cancel
Save