diff --git a/app/src/androidTest/java/com/complycube/testandroidapp/MainScreenTest.kt b/app/src/androidTest/java/com/complycube/testandroidapp/MainScreenTest.kt new file mode 100644 index 0000000..f1120fc --- /dev/null +++ b/app/src/androidTest/java/com/complycube/testandroidapp/MainScreenTest.kt @@ -0,0 +1,45 @@ +package com.complycube.testandroidapp + +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.onNodeWithTag +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick +import androidx.test.ext.junit.runners.AndroidJUnit4 +import org.junit.Assert.assertTrue +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class MainScreenTest { + + @get:Rule + val composeTestRule = createComposeRule() + + @Test + fun button_isDisplayed() { + composeTestRule.setContent { + MainScreen() + } + composeTestRule.onNodeWithTag("agents_button").assertIsDisplayed() + } + + @Test + fun button_hasCorrectLabel() { + composeTestRule.setContent { + MainScreen() + } + composeTestRule.onNodeWithText("Click me").assertIsDisplayed() + } + + @Test + fun button_click_triggersCallback() { + var clicked = false + composeTestRule.setContent { + MainScreen(onButtonClick = { clicked = true }) + } + composeTestRule.onNodeWithTag("agents_button").performClick() + assertTrue(clicked) + } +} diff --git a/app/src/main/java/com/complycube/testandroidapp/MainActivity.kt b/app/src/main/java/com/complycube/testandroidapp/MainActivity.kt index a5edc2d..a08c3f6 100644 --- a/app/src/main/java/com/complycube/testandroidapp/MainActivity.kt +++ b/app/src/main/java/com/complycube/testandroidapp/MainActivity.kt @@ -1,15 +1,21 @@ package com.complycube.testandroidapp import android.os.Bundle +import android.widget.Toast import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Button import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import com.complycube.testandroidapp.ui.theme.TestAndroidAppTheme @@ -19,10 +25,17 @@ class MainActivity : ComponentActivity() { enableEdgeToEdge() setContent { TestAndroidAppTheme { + val context = LocalContext.current Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> - Greeting( - name = "Android", - modifier = Modifier.padding(innerPadding) + MainScreen( + modifier = Modifier.padding(innerPadding), + onButtonClick = { + Toast.makeText( + context, + context.getString(R.string.agents_did_this), + Toast.LENGTH_SHORT + ).show() + } ) } } @@ -30,6 +43,19 @@ class MainActivity : ComponentActivity() { } } +@Composable +fun MainScreen(modifier: Modifier = Modifier, onButtonClick: () -> Unit = {}) { + Column(modifier = modifier) { + Greeting(name = "Android") + Button( + onClick = onButtonClick, + modifier = Modifier.testTag("agents_button") + ) { + Text(text = stringResource(R.string.click_me)) + } + } +} + @Composable fun Greeting(name: String, modifier: Modifier = Modifier) { Text( @@ -42,6 +68,6 @@ fun Greeting(name: String, modifier: Modifier = Modifier) { @Composable fun GreetingPreview() { TestAndroidAppTheme { - Greeting("Android") + MainScreen() } -} \ No newline at end of file +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0811901..0f03128 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,5 @@ TestAndroidApp + Click me + Agents did this \ No newline at end of file