diff options
author | Stefan Niedermann <info@niedermann.it> | 2020-12-27 00:48:13 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2020-12-27 00:48:13 +0300 |
commit | 39cad88b6029b466300d8c3c9e41be1db0f8ed54 (patch) | |
tree | d6933d5d7919ddcadee046622fd27f6359fe9692 /app/src | |
parent | 264d34940cb5e26673111c55b0bf976572bfba46 (diff) |
Add DataBaseAdapterTest
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src')
2 files changed, 91 insertions, 11 deletions
diff --git a/app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapterTest.java b/app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapterTest.java new file mode 100644 index 000000000..0ea8d0f7e --- /dev/null +++ b/app/src/androidTest/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapterTest.java @@ -0,0 +1,81 @@ +package it.niedermann.nextcloud.deck.persistence.sync.adapters.db; + +import android.content.Context; + +import androidx.room.Room; +import androidx.test.core.app.ApplicationProvider; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.List; + +import it.niedermann.nextcloud.deck.model.Account; +import it.niedermann.nextcloud.deck.model.Board; +import it.niedermann.nextcloud.deck.model.User; +import it.niedermann.nextcloud.deck.model.full.FullBoard; +import it.niedermann.nextcloud.deck.model.interfaces.AbstractRemoteEntity; + +import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.DeckDatabaseTestUtil.createAccount; +import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.DeckDatabaseTestUtil.createBoard; +import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.DeckDatabaseTestUtil.createUser; +import static org.junit.Assert.assertEquals; + +@RunWith(AndroidJUnit4.class) +public class DataBaseAdapterTest { + + private DeckDatabase db; + private DataBaseAdapter adapter; + + @Before + public void createAdapter() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { + final Constructor<DataBaseAdapter> constructor = DataBaseAdapter.class.getDeclaredConstructor(Context.class, DeckDatabase.class); + if (Modifier.isPrivate(constructor.getModifiers())) { + constructor.setAccessible(true); + db = Room.inMemoryDatabaseBuilder(ApplicationProvider.getApplicationContext(), DeckDatabase.class).build(); + adapter = constructor.newInstance(ApplicationProvider.getApplicationContext(), db); + } + } + + @After + public void closeDb() { + if (db != null) { + db.close(); + } + } + + @Test + public void testCreate() { + final Account account = createAccount(db.getAccountDao()); + final User user = createUser(db.getUserDao(), account); + final Board board = createBoard(db.getBoardDao(), account, user); + final FullBoard fetchedBoard = adapter.getFullBoardByLocalIdDirectly(account.getId(), board.getLocalId()); + + assertEquals(board.getTitle(), fetchedBoard.getBoard().getTitle()); + } + + @Test + public void testFillSqlWithListValues() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { + final User user1 = createUser(db.getUserDao(), createAccount(db.getAccountDao())); + final StringBuilder builder = new StringBuilder(); + final List<Object> args = new ArrayList<>(1); + final List<? extends AbstractRemoteEntity> entities = new ArrayList<AbstractRemoteEntity>(1) {{ + add(user1); + }}; + + Method m = DataBaseAdapter.class.getDeclaredMethod("fillSqlWithListValues", StringBuilder.class, List.class, List.class); + m.setAccessible(true); + m.invoke(adapter, builder, args, entities); + assertEquals("?", builder.toString()); + assertEquals(user1.getLocalId(), args.get(0)); + } + +} diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java index 982844f06..c08c15cc6 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/adapters/db/DataBaseAdapter.java @@ -60,8 +60,12 @@ public class DataBaseAdapter { private Context context; public DataBaseAdapter(@NonNull Context applicationContext) { + this(applicationContext, DeckDatabase.getInstance(applicationContext)); + } + + private DataBaseAdapter(@NonNull Context applicationContext, @NonNull DeckDatabase db) { this.context = applicationContext; - this.db = DeckDatabase.getInstance(applicationContext); + this.db = db; } @NonNull @@ -202,20 +206,15 @@ public class DataBaseAdapter { } @WorkerThread - public List<FullCard> getFullCardsForStackDirectly(long accountId, long localStackId, FilterInformation filter) { - if (filter == null) { - return db.getCardDao().getFullCardsForStackDirectly(accountId, localStackId); - } - List<Object> args = new ArrayList<>(); - args.add(accountId); - args.add(localStackId); - - return db.getCardDao().getFilteredFullCardsForStackDirectly(getQueryForFilter(filter, accountId, localStackId)); + public List<FullCard> getFullCardsForStackDirectly(long accountId, long localStackId, @Nullable FilterInformation filter) { + return filter == null + ? db.getCardDao().getFullCardsForStackDirectly(accountId, localStackId) + : db.getCardDao().getFilteredFullCardsForStackDirectly(getQueryForFilter(filter, accountId, localStackId)); } @AnyThread private SimpleSQLiteQuery getQueryForFilter(FilterInformation filter, long accountId, long localStackId) { - List<Object> args = new ArrayList<>(); + final List<Object> args = new ArrayList<>(2); args.add(accountId); args.add(localStackId); StringBuilder query = new StringBuilder("SELECT * FROM card c " + |