diff --git a/.idea/androidTestResultsUserPreferences.xml b/.idea/androidTestResultsUserPreferences.xml
index 3a4bccc0b..cb934fbf4 100644
--- a/.idea/androidTestResultsUserPreferences.xml
+++ b/.idea/androidTestResultsUserPreferences.xml
@@ -42,6 +42,20 @@
+
+
+
+
+
+
+
diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
index 115d0114f..9eb52cf80 100644
--- a/.idea/deploymentTargetDropDown.xml
+++ b/.idea/deploymentTargetDropDown.xml
@@ -3,7 +3,20 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -21,6 +34,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 72ef01fd1..f72eb60d7 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -20,8 +20,6 @@ androidx-espresso-core = { module = "androidx.test.espresso:espresso-core", vers
androidx-junit = { module = "androidx.test.ext:junit", version.ref = "junit" }
androidx-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "ktx" }
androidx-material-icons-extended = { module = "androidx.compose.material:material-icons-extended", version.ref = "materialIconsExtended" }
-androidx-ui-test-junit4 = { module = "androidx.compose.ui:ui-test-junit4", version.ref = "junit4-compose" }
-androidx-ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest", version.ref = "junit4-compose" }
appCompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appCompat" }
coil-compose = { module = "io.coil-kt:coil-compose", version.ref = "coilVersion" }
coil-video = { module = "io.coil-kt:coil-video", version.ref = "coilVersion" }
@@ -36,5 +34,7 @@ room-testing = { group = "androidx.room", name = "room-testing", version.ref = "
viewmodel-compose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "compose" }
runtime-compose = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "compose" }
navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigation-compose" }
+androidx-ui-test-junit4 = { module = "androidx.compose.ui:ui-test-junit4", version.ref = "junit4-compose" }
+androidx-ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest", version.ref = "junit4-compose" }
[plugins]
diff --git a/sample/app_sample/build.gradle.kts b/sample/app_sample/build.gradle.kts
index 27b2c893d..f61f8ca78 100644
--- a/sample/app_sample/build.gradle.kts
+++ b/sample/app_sample/build.gradle.kts
@@ -89,6 +89,9 @@ dependencies {
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
- androidTestImplementation(libs.androidx.ui.test.junit4)
- debugImplementation(libs.androidx.ui.test.manifest)
+// androidTestImplementation(libs.androidx.ui.test.junit4)
+// debugImplementation(libs.androidx.ui.test.manifest)
+
+ androidTestImplementation("androidx.compose.ui:ui-test-junit4:1.4.3")
+ debugImplementation("androidx.compose.ui:ui-test-manifest:1.4.3")
}
diff --git a/sample/app_sample/src/androidTest/java/br/com/leandroferreira/app_sample/NoteMenuAndroidTest.kt b/sample/app_sample/src/androidTest/java/br/com/leandroferreira/app_sample/NoteMenuAndroidTest.kt
index fd33c929d..1cd1f404c 100644
--- a/sample/app_sample/src/androidTest/java/br/com/leandroferreira/app_sample/NoteMenuAndroidTest.kt
+++ b/sample/app_sample/src/androidTest/java/br/com/leandroferreira/app_sample/NoteMenuAndroidTest.kt
@@ -1,17 +1,27 @@
package br.com.leandroferreira.app_sample
+import androidx.compose.ui.test.assertIsDisplayed
+import androidx.compose.ui.test.junit4.createComposeRule
+import androidx.compose.ui.test.onNodeWithTag
+import androidx.compose.ui.test.performClick
+import br.com.leandroferreira.app_sample.navigation.NavigationGraph
import org.junit.Rule
import org.junit.Test
-import androidx.compose.ui.test.junit4.createAndroidComposeRule
-import androidx.test.espresso.Espresso
-import br.com.leandroferreira.app_sample.navigation.NavigationActivity
+import java.lang.Thread.sleep
class NoteMenuAndroidTest {
@get:Rule
- val composeTestRule = createAndroidComposeRule()
+ val composeTestRule = createComposeRule()
@Test
fun myTest() {
+ composeTestRule.setContent {
+ NavigationGraph()
+ }
+
+ composeTestRule.onNodeWithTag("addNote").performClick()
+
+ composeTestRule.onNodeWithTag("noteEditionScreenTitle").assertIsDisplayed()
}
}
\ No newline at end of file
diff --git a/sample/app_sample/src/main/java/br/com/leandroferreira/app_sample/navigation/NavigationActivity.kt b/sample/app_sample/src/main/java/br/com/leandroferreira/app_sample/navigation/NavigationActivity.kt
index 8e0a17de3..8b3bd69b6 100644
--- a/sample/app_sample/src/main/java/br/com/leandroferreira/app_sample/navigation/NavigationActivity.kt
+++ b/sample/app_sample/src/main/java/br/com/leandroferreira/app_sample/navigation/NavigationActivity.kt
@@ -6,6 +6,7 @@ import androidx.activity.compose.setContent
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext
+import androidx.navigation.NavController
import androidx.navigation.NavType
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
@@ -32,7 +33,6 @@ class NavigationActivity : AppCompatActivity() {
@Composable
fun NavigationGraph() {
-
val navController = rememberNavController()
val context = LocalContext.current
val database = StoryTellerDatabase.database(context)
@@ -48,11 +48,11 @@ fun NavigationGraph() {
composable(Destinations.CHOOSE_NOTE.id) {
val chooseNoteViewModel = notesInjection.provideChooseNoteViewModel()
- ChooseNoteScreen(chooseNoteViewModel = chooseNoteViewModel) { noteId, noteTitle ->
- navController.navigate(
- "${Destinations.NOTE_DETAILS.id}/$noteId/$noteTitle"
- )
- }
+ ChooseNoteScreen(
+ chooseNoteViewModel = chooseNoteViewModel,
+ navigateToNote = navController::navigateToNote,
+ newNote = navController::navigateToNewNote
+ )
}
composable(
@@ -74,13 +74,36 @@ fun NavigationGraph() {
}
)
} else {
- throw IllegalArgumentException("Wrong route!")
+ throw IllegalArgumentException("The arguments for this route are wrong!")
}
}
+
+ composable(route = Destinations.NOTE_DETAILS.id) {
+ NoteDetailsScreen(
+ documentId = null,
+ title = null,
+ noteDetailsViewModel = notesInjection.provideNoteDetailsViewModel(),
+ navigateBack = {
+ navController.navigateUp()
+ }
+ )
+ }
}
}
}
+private fun NavController.navigateToNote(id: String, title: String) {
+ navigate(
+ "${Destinations.NOTE_DETAILS.id}/$id/$title"
+ )
+}
+
+private fun NavController.navigateToNewNote() {
+ navigate(
+ Destinations.NOTE_DETAILS.id
+ )
+}
+
enum class Destinations(val id: String) {
NOTE_DETAILS("note_details"),
CHOOSE_NOTE("choose_note"),
diff --git a/sample/editor/src/main/java/br/com/leandroferreira/editor/NoteDetailsScreen.kt b/sample/editor/src/main/java/br/com/leandroferreira/editor/NoteDetailsScreen.kt
index 648049e35..38019e472 100644
--- a/sample/editor/src/main/java/br/com/leandroferreira/editor/NoteDetailsScreen.kt
+++ b/sample/editor/src/main/java/br/com/leandroferreira/editor/NoteDetailsScreen.kt
@@ -37,6 +37,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.semantics.semantics
+import androidx.compose.ui.semantics.testTag
import androidx.compose.ui.unit.dp
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
@@ -72,6 +74,9 @@ fun NoteDetailsScreen(
TopAppBar(
title = {
Text(
+ modifier = Modifier.semantics {
+ testTag = "noteEditionScreenTitle"
+ },
text = title?.takeIf { it.isNotBlank() }
?: stringResource(id = R.string.note),
color = MaterialTheme.colorScheme.onPrimary
diff --git a/sample/note_menu/src/main/java/br/com/leandroferreira/note_menu/ui/screen/ChooseNoteScreen.kt b/sample/note_menu/src/main/java/br/com/leandroferreira/note_menu/ui/screen/ChooseNoteScreen.kt
index 552fce603..28deeb433 100644
--- a/sample/note_menu/src/main/java/br/com/leandroferreira/note_menu/ui/screen/ChooseNoteScreen.kt
+++ b/sample/note_menu/src/main/java/br/com/leandroferreira/note_menu/ui/screen/ChooseNoteScreen.kt
@@ -35,10 +35,14 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.semantics.semantics
+import androidx.compose.ui.semantics.testTag
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
+import br.com.leandroferreira.resourcers.R
import br.com.leandroferreira.utils.ResultData
import br.com.leandroferreira.note_menu.ui.dto.DocumentCard
import br.com.leandroferreira.note_menu.viewmodel.ChooseNoteViewModel
@@ -59,7 +63,8 @@ private fun previewDrawers(): Map =
@Composable
fun ChooseNoteScreen(
chooseNoteViewModel: ChooseNoteViewModel,
- navigateToNote: (String?, String?) -> Unit
+ navigateToNote: (String, String) -> Unit,
+ newNote: () -> Unit
) {
chooseNoteViewModel.requestDocuments()
@@ -80,7 +85,7 @@ fun ChooseNoteScreen(
.clickable(onClick = chooseNoteViewModel::editMenu)
.padding(10.dp),
imageVector = Icons.Default.MoreVert,
- contentDescription = "",// stringResource(R.string.more_options),
+ contentDescription = stringResource(R.string.more_options),
tint = MaterialTheme.colorScheme.onPrimary
)
}
@@ -88,12 +93,15 @@ fun ChooseNoteScreen(
},
floatingActionButton = {
FloatingActionButton(
+ modifier = Modifier.semantics {
+ testTag = "addNote"
+ },
containerColor = MaterialTheme.colorScheme.primary,
- onClick = { navigateToNote(null, null) },
+ onClick = newNote,
content = {
Icon(
imageVector = Icons.Default.Add,
- contentDescription = ""// stringResource(R.string.add_note)
+ contentDescription = stringResource(R.string.add_note)
)
}
)
@@ -141,7 +149,7 @@ private fun Notes(
) {
when (val documents =
chooseNoteViewModel.documentsState.collectAsStateWithLifecycle().value) {
- is br.com.leandroferreira.utils.ResultData.Complete -> {
+ is ResultData.Complete -> {
Column(modifier = Modifier.fillMaxWidth()) {
val data = documents.data
@@ -168,7 +176,7 @@ private fun Notes(
}
}
- is br.com.leandroferreira.utils.ResultData.Error -> {
+ is ResultData.Error -> {
Box(modifier = Modifier.fillMaxSize()) {
Text(
modifier = Modifier.align(Alignment.Center),
@@ -177,7 +185,7 @@ private fun Notes(
}
}
- is br.com.leandroferreira.utils.ResultData.Loading, is br.com.leandroferreira.utils.ResultData.Idle -> {
+ is ResultData.Loading, is ResultData.Idle -> {
Box(modifier = Modifier.fillMaxSize()) {
CircularProgressIndicator(modifier = Modifier.align(Alignment.Center))
}
@@ -265,12 +273,12 @@ private fun MockDataScreen(chooseNoteViewModel: ChooseNoteViewModel) {
) {
Text(
modifier = Modifier.padding(8.dp),
- text = ""// stringResource(R.string.you_dont_have_notes)
+ text = stringResource(R.string.you_dont_have_notes)
)
Button(onClick = {
chooseNoteViewModel.addMockData(context)
}) {
- Text(text = "")// stringResource(R.string.add_sample_notes))
+ Text(text = stringResource(R.string.add_sample_notes))
}
}
}