From 8790eeea916ab5e4064594938b06824b7b642574 Mon Sep 17 00:00:00 2001 From: Stefan Niedermann Date: Sun, 16 May 2021 12:49:07 +0200 Subject: [PATCH] Adds Unit test for deleting an Account --- .../notes/persistence/NotesDaoTest.java | 36 +++++++++---------- .../persistence/NotesRepositoryTest.java | 17 ++++++++- ...aseTestUtil.java => NotesTestingUtil.java} | 36 ++++++++++--------- 3 files changed, 54 insertions(+), 35 deletions(-) rename app/src/test/java/it/niedermann/owncloud/notes/persistence/{NotesDatabaseTestUtil.java => NotesTestingUtil.java} (54%) diff --git a/app/src/test/java/it/niedermann/owncloud/notes/persistence/NotesDaoTest.java b/app/src/test/java/it/niedermann/owncloud/notes/persistence/NotesDaoTest.java index 89279c33..3f8d0634 100644 --- a/app/src/test/java/it/niedermann/owncloud/notes/persistence/NotesDaoTest.java +++ b/app/src/test/java/it/niedermann/owncloud/notes/persistence/NotesDaoTest.java @@ -65,12 +65,12 @@ public class NotesDaoTest { db.getNoteDao().addNote(new Note(1, 1L, Calendar.getInstance(), "T", "C", "", false, "1", LOCAL_DELETED, account.getId(), "", 0)); db.getNoteDao().deleteByNoteId(1, LOCAL_DELETED); assertNull(db.getNoteDao().getNoteById(1)); - assertNull(NotesDatabaseTestUtil.getOrAwaitValue(db.getNoteDao().getNoteById$(1))); + assertNull(NotesTestingUtil.getOrAwaitValue(db.getNoteDao().getNoteById$(1))); db.getNoteDao().addNote(new Note(1, 1L, Calendar.getInstance(), "T", "C", "", false, "1", LOCAL_DELETED, account.getId(), "", 0)); db.getNoteDao().deleteByNoteId(1, VOID); assertEquals(1, db.getNoteDao().getNoteById(1).getId()); - assertEquals(1, NotesDatabaseTestUtil.getOrAwaitValue(db.getNoteDao().getNoteById$(1)).getId()); + assertEquals(1, NotesTestingUtil.getOrAwaitValue(db.getNoteDao().getNoteById$(1)).getId()); } @Test @@ -154,8 +154,8 @@ public class NotesDaoTest { assertEquals(Integer.valueOf(1), db.getNoteDao().countFavorites(account.getId())); assertEquals(Integer.valueOf(1), db.getNoteDao().countFavorites(secondAccount.getId())); - assertEquals(Integer.valueOf(1), NotesDatabaseTestUtil.getOrAwaitValue(db.getNoteDao().countFavorites$(account.getId()))); - assertEquals(Integer.valueOf(1), NotesDatabaseTestUtil.getOrAwaitValue(db.getNoteDao().countFavorites$(secondAccount.getId()))); + assertEquals(Integer.valueOf(1), NotesTestingUtil.getOrAwaitValue(db.getNoteDao().countFavorites$(account.getId()))); + assertEquals(Integer.valueOf(1), NotesTestingUtil.getOrAwaitValue(db.getNoteDao().countFavorites$(secondAccount.getId()))); } @Test @@ -165,8 +165,8 @@ public class NotesDaoTest { assertEquals(Integer.valueOf(7), db.getNoteDao().count(account.getId())); assertEquals(Integer.valueOf(5), db.getNoteDao().count(secondAccount.getId())); - assertEquals(Integer.valueOf(7), NotesDatabaseTestUtil.getOrAwaitValue(db.getNoteDao().count$(account.getId()))); - assertEquals(Integer.valueOf(5), NotesDatabaseTestUtil.getOrAwaitValue(db.getNoteDao().count$(secondAccount.getId()))); + assertEquals(Integer.valueOf(7), NotesTestingUtil.getOrAwaitValue(db.getNoteDao().count$(account.getId()))); + assertEquals(Integer.valueOf(5), NotesTestingUtil.getOrAwaitValue(db.getNoteDao().count$(secondAccount.getId()))); } @Test @@ -341,16 +341,16 @@ public class NotesDaoTest { final Note note = new Note(1, 1L, Calendar.getInstance(), "My-Title", "My-Content", "", false, "1", LOCAL_DELETED, account.getId(), "", 0); db.getNoteDao().addNote(note); assertEquals("My-Content", db.getNoteDao().getContent(note.getId())); - assertEquals("My-Content", NotesDatabaseTestUtil.getOrAwaitValue(db.getNoteDao().getContent$(note.getId()))); + assertEquals("My-Content", NotesTestingUtil.getOrAwaitValue(db.getNoteDao().getContent$(note.getId()))); assertNull(db.getNoteDao().getContent(note.getId() + 1)); - assertNull(NotesDatabaseTestUtil.getOrAwaitValue(db.getNoteDao().getContent$(note.getId() + 1))); + assertNull(NotesTestingUtil.getOrAwaitValue(db.getNoteDao().getContent$(note.getId() + 1))); } @Test public void getCategoriesLiveData() throws InterruptedException { final Account secondAccount = setupSecondAccountAndTestNotes(); - final List accountCategories = NotesDatabaseTestUtil.getOrAwaitValue(db.getNoteDao().getCategories$(account.getId())); + final List accountCategories = NotesTestingUtil.getOrAwaitValue(db.getNoteDao().getCategories$(account.getId())); assertEquals(4, accountCategories.size()); for (CategoryWithNotesCount category : accountCategories) { assertEquals(account.getId(), category.getAccountId()); @@ -361,7 +361,7 @@ public class NotesDaoTest { assertTrue(accountCategories.stream().anyMatch(cat -> "ToDo".equals(cat.getCategory()) && Integer.valueOf(1).equals(cat.getTotalNotes()))); assertTrue(accountCategories.stream().anyMatch(cat -> "日记".equals(cat.getCategory()) && Integer.valueOf(1).equals(cat.getTotalNotes()))); - final List secondAccountCategories = NotesDatabaseTestUtil.getOrAwaitValue(db.getNoteDao().getCategories$(secondAccount.getId())); + final List secondAccountCategories = NotesTestingUtil.getOrAwaitValue(db.getNoteDao().getCategories$(secondAccount.getId())); assertEquals(2, secondAccountCategories.size()); for (CategoryWithNotesCount category : secondAccountCategories) { assertEquals(secondAccount.getId(), category.getAccountId()); @@ -376,14 +376,14 @@ public class NotesDaoTest { public void searchCategories() throws InterruptedException { final Account secondAccount = setupSecondAccountAndTestNotes(); - assertEquals(2, NotesDatabaseTestUtil.getOrAwaitValue(db.getNoteDao().searchCategories$(account.getId(), "M%")).size()); - assertEquals(1, NotesDatabaseTestUtil.getOrAwaitValue(db.getNoteDao().searchCategories$(account.getId(), "Mo%")).size()); - assertEquals(1, NotesDatabaseTestUtil.getOrAwaitValue(db.getNoteDao().searchCategories$(account.getId(), "MO%")).size()); - assertEquals(1, NotesDatabaseTestUtil.getOrAwaitValue(db.getNoteDao().searchCategories$(account.getId(), "movie%")).size()); - assertEquals(1, NotesDatabaseTestUtil.getOrAwaitValue(db.getNoteDao().searchCategories$(account.getId(), "T%")).size()); - assertEquals(1, NotesDatabaseTestUtil.getOrAwaitValue(db.getNoteDao().searchCategories$(account.getId(), "日记")).size()); - assertEquals(2, NotesDatabaseTestUtil.getOrAwaitValue(db.getNoteDao().searchCategories$(secondAccount.getId(), "M%")).size()); - assertEquals(0, NotesDatabaseTestUtil.getOrAwaitValue(db.getNoteDao().searchCategories$(secondAccount.getId(), "T%")).size()); + assertEquals(2, NotesTestingUtil.getOrAwaitValue(db.getNoteDao().searchCategories$(account.getId(), "M%")).size()); + assertEquals(1, NotesTestingUtil.getOrAwaitValue(db.getNoteDao().searchCategories$(account.getId(), "Mo%")).size()); + assertEquals(1, NotesTestingUtil.getOrAwaitValue(db.getNoteDao().searchCategories$(account.getId(), "MO%")).size()); + assertEquals(1, NotesTestingUtil.getOrAwaitValue(db.getNoteDao().searchCategories$(account.getId(), "movie%")).size()); + assertEquals(1, NotesTestingUtil.getOrAwaitValue(db.getNoteDao().searchCategories$(account.getId(), "T%")).size()); + assertEquals(1, NotesTestingUtil.getOrAwaitValue(db.getNoteDao().searchCategories$(account.getId(), "日记")).size()); + assertEquals(2, NotesTestingUtil.getOrAwaitValue(db.getNoteDao().searchCategories$(secondAccount.getId(), "M%")).size()); + assertEquals(0, NotesTestingUtil.getOrAwaitValue(db.getNoteDao().searchCategories$(secondAccount.getId(), "T%")).size()); } @Test diff --git a/app/src/test/java/it/niedermann/owncloud/notes/persistence/NotesRepositoryTest.java b/app/src/test/java/it/niedermann/owncloud/notes/persistence/NotesRepositoryTest.java index 5aaf5cc6..a58948d4 100644 --- a/app/src/test/java/it/niedermann/owncloud/notes/persistence/NotesRepositoryTest.java +++ b/app/src/test/java/it/niedermann/owncloud/notes/persistence/NotesRepositoryTest.java @@ -1,6 +1,7 @@ package it.niedermann.owncloud.notes.persistence; import android.content.Context; +import android.content.SharedPreferences; import android.os.Build; import androidx.annotation.NonNull; @@ -9,6 +10,8 @@ import androidx.room.Room; import androidx.test.core.app.ApplicationProvider; import com.google.common.util.concurrent.MoreExecutors; +import com.nextcloud.android.sso.AccountImporter; +import com.nextcloud.android.sso.model.SingleSignOnAccount; import org.json.JSONException; import org.junit.After; @@ -20,6 +23,7 @@ import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; +import java.io.IOException; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.Arrays; @@ -32,7 +36,7 @@ import it.niedermann.owncloud.notes.persistence.entity.Note; import it.niedermann.owncloud.notes.shared.model.Capabilities; import it.niedermann.owncloud.notes.shared.model.IResponseCallback; -import static it.niedermann.owncloud.notes.persistence.NotesDatabaseTestUtil.getOrAwaitValue; +import static it.niedermann.owncloud.notes.persistence.NotesTestingUtil.getOrAwaitValue; import static it.niedermann.owncloud.notes.shared.model.DBStatus.LOCAL_DELETED; import static it.niedermann.owncloud.notes.shared.model.DBStatus.LOCAL_EDITED; import static it.niedermann.owncloud.notes.shared.model.DBStatus.VOID; @@ -147,6 +151,17 @@ public class NotesRepositoryTest { }); } + @Test + public void testDeleteAccount() throws IOException { + NotesTestingUtil.mockSingleSignOn(new SingleSignOnAccount(account.getAccountName(), account.getUserName(), "1337", account.getUrl(), "")); + + assertNotNull(repo.getAccountById(account.getId())); + + repo.deleteAccount(account); + + assertNull(repo.getAccountById(account.getId())); + } + @Test public void testAddNote() { final Note localNote = new Note(null, Calendar.getInstance(), "Fancy Title", "MyContent", "Samples", false, "123"); diff --git a/app/src/test/java/it/niedermann/owncloud/notes/persistence/NotesDatabaseTestUtil.java b/app/src/test/java/it/niedermann/owncloud/notes/persistence/NotesTestingUtil.java similarity index 54% rename from app/src/test/java/it/niedermann/owncloud/notes/persistence/NotesDatabaseTestUtil.java rename to app/src/test/java/it/niedermann/owncloud/notes/persistence/NotesTestingUtil.java index 26ec47c3..9ec8caa3 100644 --- a/app/src/test/java/it/niedermann/owncloud/notes/persistence/NotesDatabaseTestUtil.java +++ b/app/src/test/java/it/niedermann/owncloud/notes/persistence/NotesTestingUtil.java @@ -1,18 +1,26 @@ package it.niedermann.owncloud.notes.persistence; +import android.content.Context; +import android.content.SharedPreferences; + +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.lifecycle.LiveData; import androidx.lifecycle.Observer; +import androidx.test.core.app.ApplicationProvider; -import java.util.Random; +import com.nextcloud.android.sso.AccountImporter; +import com.nextcloud.android.sso.model.SingleSignOnAccount; + +import java.io.IOException; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -public class NotesDatabaseTestUtil { +public class NotesTestingUtil { private static long currentLong = 1; - private NotesDatabaseTestUtil() { + private NotesTestingUtil() { // Util class } @@ -39,18 +47,14 @@ public class NotesDatabaseTestUtil { return (T) data[0]; } - public static String randomString(int length) { - final int leftLimit = 48; // numeral '0' - final int rightLimit = 122; // letter 'z' - - return new Random().ints(leftLimit, rightLimit + 1) - .filter(i -> (i <= 57 || i >= 65) && (i <= 90 || i >= 97)) - .limit(length) - .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append) - .toString(); - } - - public static long uniqueLong() { - return currentLong++; + /** + * Pretends managing {@link SingleSignOnAccount}s by using own private {@link SharedPreferences}. + * + * @param ssoAccount this account will be added + */ + public static void mockSingleSignOn(@NonNull SingleSignOnAccount ssoAccount) throws IOException { + final SharedPreferences sharedPrefs = ApplicationProvider.getApplicationContext().getSharedPreferences("TEMP_SHARED_PREFS_" + currentLong++, Context.MODE_PRIVATE); + sharedPrefs.edit().putString("PREF_ACCOUNT_STRING" + ssoAccount.name, SingleSignOnAccount.toString(ssoAccount)).commit(); + AccountImporter.setSharedPreferences(sharedPrefs); } }