Skip to content

Commit

Permalink
fix: throw exception on back button press without action
Browse files Browse the repository at this point in the history
  • Loading branch information
francelu committed Oct 13, 2024
1 parent c898ec1 commit e7a6982
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.android.periodpals.ui.navigation

import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.assertIsNotDisplayed
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.performClick
import org.junit.Assert.assertThrows
import org.junit.Rule
import org.junit.Test

Expand Down Expand Up @@ -49,4 +51,42 @@ class TopAppBarTest {
composeTestRule.onNodeWithTag("topBar").assertIsDisplayed()
composeTestRule.onNodeWithTag("goBackButton").assertDoesNotExist()
}

@Test
fun topAppBar_backButtonTrue_onBackButtonClickNull_throwsException() {
val exception =
assertThrows(IllegalArgumentException::class.java) {
composeTestRule.setContent {
TopAppBar(title = "Test Title", backButton = true, onBackButtonClick = null)
}
}
assert(exception.message == "onBackButtonClick must be provided when backButton is true")
}

@Test
fun topAppBar_backButtonTrue_onBackButtonClickNotNull_doesNotThrowException() {
composeTestRule.setContent {
TopAppBar(title = "Test Title", backButton = true, onBackButtonClick = { /* Do nothing */ })
}
composeTestRule.onNodeWithTag("topBar").assertIsDisplayed()
composeTestRule.onNodeWithTag("goBackButton").assertIsDisplayed()
}

@Test
fun topAppBar_backButtonFalse_onBackButtonClickNull_doesNotThrowException() {
composeTestRule.setContent {
TopAppBar(title = "Test Title", backButton = false, onBackButtonClick = null)
}
composeTestRule.onNodeWithTag("topBar").assertIsDisplayed()
composeTestRule.onNodeWithTag("goBackButton").assertIsNotDisplayed()
}

@Test
fun topAppBar_backButtonFalse_onBackButtonClickNotNull_doesNotThrowException() {
composeTestRule.setContent {
TopAppBar(title = "Test Title", backButton = false, onBackButtonClick = { /* Do nothing */ })
}
composeTestRule.onNodeWithTag("topBar").assertIsDisplayed()
composeTestRule.onNodeWithTag("goBackButton").assertIsNotDisplayed()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,10 @@ import com.android.periodpals.ui.theme.PurpleGrey80
*/
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun TopAppBar(title: String, backButton: Boolean = false, onBackButtonClick: () -> Unit = {}) {
fun TopAppBar(title: String, backButton: Boolean = false, onBackButtonClick: (() -> Unit)? = {}) {
require(!backButton || onBackButtonClick != null) {
"onBackButtonClick must be provided when backButton is true"
}
CenterAlignedTopAppBar(
modifier = Modifier.fillMaxWidth().height(48.dp).testTag("topBar"),
title = {
Expand All @@ -60,7 +63,7 @@ fun TopAppBar(title: String, backButton: Boolean = false, onBackButtonClick: ()
},
navigationIcon = {
if (backButton) {
IconButton(onClick = onBackButtonClick, modifier = Modifier.testTag("goBackButton")) {
IconButton(onClick = onBackButtonClick!!, modifier = Modifier.testTag("goBackButton")) {
Icon(
imageVector = Icons.AutoMirrored.Outlined.ArrowBack,
contentDescription = "Back",
Expand Down

0 comments on commit e7a6982

Please sign in to comment.