diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/note/NoteFragmentTest.kt b/app/src/androidTest/java/org/kiwix/kiwixmobile/note/NoteFragmentTest.kt index 4ee3c042a..f7ce9e36b 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/note/NoteFragmentTest.kt +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/note/NoteFragmentTest.kt @@ -129,17 +129,7 @@ class NoteFragmentTest : BaseActivityTest() { @Test fun testUserCanSeeNotesForDeletedFiles() { - // delete the notes if any saved to properly run the test scenario - note { - openNoteFragment() - assertToolbarExist() - assertNoteRecyclerViewExist() - clickOnTrashIcon() - assertDeleteNoteDialogDisplayed() - clickOnDeleteButton() - assertNoNotesTextDisplayed() - pressBack() - } + deletePreviouslySavedNotes() loadZimFileInReader("testzim.zim") StandardActions.closeDrawer() // close the drawer if open before running the test cases. note { @@ -188,17 +178,7 @@ class NoteFragmentTest : BaseActivityTest() { @Test fun testZimFileOpenedAfterOpeningNoteOnNotesScreen() { - // delete the notes if any saved to properly run the test scenario - note { - openNoteFragment() - assertToolbarExist() - assertNoteRecyclerViewExist() - clickOnTrashIcon() - assertDeleteNoteDialogDisplayed() - clickOnDeleteButton() - assertNoNotesTextDisplayed() - pressBack() - } + deletePreviouslySavedNotes() loadZimFileInReader("testzim.zim") note { assertHomePageIsLoadedOfTestZimFile() @@ -220,6 +200,65 @@ class NoteFragmentTest : BaseActivityTest() { } } + @Test + fun testNoteEntryIsRemovedFromDatabaseWhenDeletedInAddNoteDialog() { + deletePreviouslySavedNotes() + loadZimFileInReader("testzim.zim") + note { + clickOnNoteMenuItem(context) + assertNoteDialogDisplayed() + writeDemoNote() + saveNote() + pressBack() + openNoteFragment() + assertToolbarExist() + assertNoteRecyclerViewExist() + clickOnSavedNote() + clickOnOpenNote() + assertNoteSaved() + clickOnDeleteIcon() + pressBack() + assertNoNotesTextDisplayed() + } + } + + @Test + fun testNoteFileIsDeletedWhenNoteIsRemovedFromNotesScreen() { + deletePreviouslySavedNotes() + loadZimFileInReader("testzim.zim") + // Save a note. + note { + clickOnNoteMenuItem(context) + assertNoteDialogDisplayed() + writeDemoNote() + saveNote() + pressBack() + } + // Delete that note from "Note" screen. + deletePreviouslySavedNotes() + // Test the note file is deleted or not. + note { + clickOnNoteMenuItem(context) + assertNoteDialogDisplayed() + assertNotDoesNotExist() + pressBack() + } + } + + private fun deletePreviouslySavedNotes() { + // delete the notes if any saved to properly run the test scenario + note { + openNoteFragment() + assertToolbarExist() + assertNoteRecyclerViewExist() + clickOnTrashIcon() + assertDeleteNoteDialogDisplayed() + clickOnDeleteButton() + assertNoNotesTextDisplayed() + pressBack() + } + } + private fun loadZimFileInReader(zimFileName: String) { activityScenario.onActivity { kiwixMainActivity = it diff --git a/app/src/androidTest/java/org/kiwix/kiwixmobile/note/NoteRobot.kt b/app/src/androidTest/java/org/kiwix/kiwixmobile/note/NoteRobot.kt index 9131edba5..9a5659c5c 100644 --- a/app/src/androidTest/java/org/kiwix/kiwixmobile/note/NoteRobot.kt +++ b/app/src/androidTest/java/org/kiwix/kiwixmobile/note/NoteRobot.kt @@ -26,6 +26,7 @@ import androidx.test.espresso.Espresso.openActionBarOverflowOrOptionsMenu import androidx.test.espresso.action.ViewActions.clearText import androidx.test.espresso.action.ViewActions.click import androidx.test.espresso.action.ViewActions.typeText +import androidx.test.espresso.assertion.ViewAssertions.doesNotExist import androidx.test.espresso.contrib.RecyclerViewActions.actionOnItemAtPosition import androidx.test.espresso.matcher.ViewMatchers import androidx.test.espresso.matcher.ViewMatchers.withContentDescription @@ -111,6 +112,15 @@ class NoteRobot : BaseRobot() { testFlakyView({ isVisible(Text(noteText)) }) } + fun assertNotDoesNotExist() { + testFlakyView({ onView(withText(noteText)).check(doesNotExist()) }) + } + + fun clickOnDeleteIcon() { + pauseForBetterTestPerformance() + testFlakyView({ clickOn(ViewId(R.id.delete_note)) }) + } + fun clickOnTrashIcon() { testFlakyView({ onView(withContentDescription(R.string.pref_clear_notes)).perform(click()) }) } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/dao/NotesRoomDao.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/dao/NotesRoomDao.kt index f772d242b..6d4f5c622 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/dao/NotesRoomDao.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/dao/NotesRoomDao.kt @@ -23,10 +23,16 @@ import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query import io.reactivex.Flowable +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch import org.kiwix.kiwixmobile.core.dao.entities.NotesRoomEntity +import org.kiwix.kiwixmobile.core.extensions.deleteFile +import org.kiwix.kiwixmobile.core.extensions.isFileExist import org.kiwix.kiwixmobile.core.page.adapter.Page import org.kiwix.kiwixmobile.core.page.notes.adapter.NoteListItem import org.kiwix.kiwixmobile.core.reader.ZimReaderSource.Companion.fromDatabaseValue +import java.io.File @Dao abstract class NotesRoomDao : PageDao { @@ -71,6 +77,22 @@ abstract class NotesRoomDao : PageDao { notesList.forEachIndexed { _, note -> val notesRoomEntity = NotesRoomEntity(note) deleteNote(noteTitle = notesRoomEntity.noteTitle) + removeNoteFileFromStorage(notesRoomEntity.noteFilePath) + } + } + + /** + * Deletes the saved file from storage. + * When the user deletes a note from the "Notes" screen, + * the associated file should also be removed from storage, + * as it is no longer needed. + */ + private fun removeNoteFileFromStorage(noteFilePath: String) { + CoroutineScope(Dispatchers.IO).launch { + val noteFile = File(noteFilePath) + if (noteFile.isFileExist()) { + noteFile.deleteFile() + } } } } diff --git a/core/src/main/java/org/kiwix/kiwixmobile/core/main/AddNoteDialog.kt b/core/src/main/java/org/kiwix/kiwixmobile/core/main/AddNoteDialog.kt index 2068d4156..97eff86d4 100644 --- a/core/src/main/java/org/kiwix/kiwixmobile/core/main/AddNoteDialog.kt +++ b/core/src/main/java/org/kiwix/kiwixmobile/core/main/AddNoteDialog.kt @@ -436,7 +436,7 @@ class AddNoteDialog : DialogFragment() { val noteText = dialogNoteAddNoteBinding?.addNoteEditText?.text.toString() if (noteDeleted) { dialogNoteAddNoteBinding?.addNoteEditText?.text?.clear() - mainRepositoryActions.deleteNote(articleNoteFileName) + mainRepositoryActions.deleteNote(getNoteTitle()) disableMenuItems() view?.snack( stringId = R.string.note_delete_successful,