Skip to content

Commit

Permalink
Merge pull request #67 from leandroBorgesFerreira/PersistanceRefactor
Browse files Browse the repository at this point in the history
Refactoring persistance and doing some work in the screen code
  • Loading branch information
leandroBorgesFerreira authored Jul 14, 2023
2 parents 78120c8 + 1921ff7 commit 0ee2418
Show file tree
Hide file tree
Showing 19 changed files with 521 additions and 306 deletions.
26 changes: 26 additions & 0 deletions .idea/androidTestResultsUserPreferences.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/deploymentTargetDropDown.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -1,27 +1,56 @@
package br.com.leandroferreira.app_sample

import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.platform.LocalContext
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 br.com.leandroferreira.app_sample.robots.DocumentEditRobot
import br.com.leandroferreira.app_sample.robots.DocumentsMenuRobot
import com.github.leandroborgesferreira.storyteller.persistence.database.StoryTellerDatabase
import org.junit.Rule
import org.junit.Test
import java.lang.Thread.sleep

class NoteMenuAndroidTest {

@get:Rule
val composeTestRule = createComposeRule()

@Test
fun myTest() {
fun itShouldBePossibleToAddNote() {
composeTestRule.setContent {
NavigationGraph()
NavigationGraph(
database = StoryTellerDatabase.database(
LocalContext.current,
inMemory = true
)
)
}

composeTestRule.onNodeWithTag("addNote").performClick()
DocumentsMenuRobot(composeTestRule).goToAddNote()
DocumentEditRobot(composeTestRule).verifyItIsInEdition()
}

@Test
fun itShouldBePossibleToSaveNoteWithTitle() {
composeTestRule.setContent {
NavigationGraph(
database = StoryTellerDatabase.database(
LocalContext.current,
inMemory = true
)
)
}

val noteTitle = "Note1"

val documentsMenuRobot = DocumentsMenuRobot(composeTestRule)
documentsMenuRobot.goToAddNote()

DocumentEditRobot(composeTestRule).run {
verifyItIsInEdition()
writeTitle(noteTitle)
goBack()
}

composeTestRule.onNodeWithTag("noteEditionScreenTitle").assertIsDisplayed()
documentsMenuRobot.assertNoteWithTitle(noteTitle)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package br.com.leandroferreira.app_sample.robots

import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.junit4.ComposeTestRule
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.performTextInput
import br.com.leandroferreira.editor.NAVIGATE_BACK_TEST_TAG
import br.com.leandroferreira.editor.NOTE_EDITION_SCREEN_TITLE_TEST_TAG
import com.github.leandroborgesferreira.storyteller.drawer.content.TITLE_DRAWER_TEST_TAG

class DocumentEditRobot(private val composeTestRule: ComposeTestRule) {

fun verifyItIsInEdition() {
composeTestRule.onNodeWithTag(NOTE_EDITION_SCREEN_TITLE_TEST_TAG).assertIsDisplayed()
}

fun writeTitle(text: String) {
composeTestRule.onNodeWithTag(TITLE_DRAWER_TEST_TAG).performTextInput(text)
}

fun goBack() {
composeTestRule.onNodeWithTag(NAVIGATE_BACK_TEST_TAG).performClick()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package br.com.leandroferreira.app_sample.robots

import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.junit4.ComposeTestRule
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.performClick
import br.com.leandroferreira.note_menu.ui.screen.menu.ADD_NOTE_TEST_TAG
import br.com.leandroferreira.note_menu.ui.screen.menu.DOCUMENT_ITEM_TEST_TAG

class DocumentsMenuRobot(private val composeTestRule: ComposeTestRule) {

fun assertNoteWithTitle(title: String) {
composeTestRule.onNodeWithTag("$DOCUMENT_ITEM_TEST_TAG$title").assertIsDisplayed()
}

fun goToAddNote() {
composeTestRule.onNodeWithTag(ADD_NOTE_TEST_TAG).performClick()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package br.com.leandroferreira.app_sample.di

import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import br.com.leandroferreira.editor.NoteDetailsViewModel
import br.com.leandroferreira.editor.NoteEditorViewModel
import br.com.leandroferreira.note_menu.data.usecase.NotesConfigurationRepository
import br.com.leandroferreira.note_menu.data.usecase.NotesUseCase
import br.com.leandroferreira.note_menu.viewmodel.ChooseNoteViewModel
Expand All @@ -15,8 +15,8 @@ class NoteDetailsViewModelFactory(
) : ViewModelProvider.Factory {

override fun <T : ViewModel> create(modelClass: Class<T>): T {
if (modelClass.isAssignableFrom(NoteDetailsViewModel::class.java)) {
return NoteDetailsViewModel(storyTellerManager, documentRepository) as T
if (modelClass.isAssignableFrom(NoteEditorViewModel::class.java)) {
return NoteEditorViewModel(storyTellerManager, documentRepository) as T
}
throw IllegalArgumentException("Unknown ViewModel class")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package br.com.leandroferreira.app_sample.di
import android.content.SharedPreferences
import androidx.compose.runtime.Composable
import androidx.lifecycle.viewmodel.compose.viewModel
import br.com.leandroferreira.editor.NoteDetailsViewModel
import br.com.leandroferreira.editor.NoteEditorViewModel
import br.com.leandroferreira.note_menu.data.usecase.NotesConfigurationRepository
import br.com.leandroferreira.note_menu.data.usecase.NotesUseCase
import br.com.leandroferreira.note_menu.viewmodel.ChooseNoteViewModel
Expand Down Expand Up @@ -48,9 +48,9 @@ class NotesInjection(
internal fun provideNoteDetailsViewModel(
documentRepository: DocumentRepository = provideDocumentRepository(),
storyTellerManager: StoryTellerManager = provideStoryTellerManager()
): NoteDetailsViewModel {
): NoteEditorViewModel {
return viewModel(initializer = {
NoteDetailsViewModel(storyTellerManager, documentRepository)
NoteEditorViewModel(storyTellerManager, documentRepository)
})
}
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,23 @@
package br.com.leandroferreira.app_sample.navigation

import android.content.Context
import android.content.SharedPreferences
import android.os.Bundle
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.NavHostController
import androidx.navigation.NavType
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import androidx.navigation.navArgument
import br.com.leandroferreira.app_sample.di.NotesInjection
import br.com.leandroferreira.app_sample.theme.ApplicationComposeTheme
import br.com.leandroferreira.editor.NoteDetailsScreen
import br.com.leandroferreira.note_menu.ui.screen.ChooseNoteScreen
import br.com.leandroferreira.editor.NoteEditorScreen
import br.com.leandroferreira.note_menu.ui.screen.menu.ChooseNoteScreen
import com.github.leandroborgesferreira.storyteller.persistence.database.StoryTellerDatabase
import com.github.leandroborgesferreira.storyteller.video.VideoFrameConfig

Expand All @@ -32,20 +34,20 @@ class NavigationActivity : AppCompatActivity() {
}

@Composable
fun NavigationGraph() {
val navController = rememberNavController()
val context = LocalContext.current
val database = StoryTellerDatabase.database(context)
val sharedPreferences = context.getSharedPreferences(
fun NavigationGraph(
context: Context = LocalContext.current,
navController: NavHostController = rememberNavController(),
database: StoryTellerDatabase = StoryTellerDatabase.database(context),
sharedPreferences: SharedPreferences = context.getSharedPreferences(
"br.com.leandroferreira.storyteller.preferences",
Context.MODE_PRIVATE
)

val notesInjection = NotesInjection(database, sharedPreferences)
),
notesInjection: NotesInjection = NotesInjection(database, sharedPreferences)
) {

ApplicationComposeTheme {
NavHost(navController = navController, startDestination = Destinations.CHOOSE_NOTE.id) {
composable(Destinations.CHOOSE_NOTE.id) { backEntry ->
composable(Destinations.CHOOSE_NOTE.id) {
val chooseNoteViewModel = notesInjection.provideChooseNoteViewModel()

ChooseNoteScreen(
Expand All @@ -66,7 +68,7 @@ fun NavigationGraph() {
if (noteId != null && noteTitle != null) {
val noteDetailsViewModel = notesInjection.provideNoteDetailsViewModel()

NoteDetailsScreen(
NoteEditorScreen(
noteId.takeIf { it != "null" },
noteTitle.takeIf { it != "null" },
noteDetailsViewModel,
Expand All @@ -78,10 +80,10 @@ fun NavigationGraph() {
}

composable(route = Destinations.NOTE_DETAILS.id) {
NoteDetailsScreen(
NoteEditorScreen(
documentId = null,
title = null,
noteDetailsViewModel = notesInjection.provideNoteDetailsViewModel(),
noteEditorViewModel = notesInjection.provideNoteDetailsViewModel(),
navigateBack = navController::navigateToNoteMenu
)
}
Expand Down
Loading

0 comments on commit 0ee2418

Please sign in to comment.