Mercury-IM/app/src/androidTest/java/org/mercury_im/messenger/RequeryDatabaseTest.java

150 lines
5.7 KiB
Java

package org.mercury_im.messenger;
import android.content.Context;
import androidx.test.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.jxmpp.jid.impl.JidCreate;
import org.mercury_im.messenger.xmpp.requery.entity.AccountModel;
import org.mercury_im.messenger.xmpp.requery.entity.ChatModel;
import org.mercury_im.messenger.xmpp.requery.entity.ContactModel;
import org.mercury_im.messenger.xmpp.requery.entity.EntityModel;
import org.mercury_im.messenger.xmpp.requery.entity.LastReadChatMessageRelation;
import org.mercury_im.messenger.xmpp.requery.entity.MessageModel;
import org.mercury_im.messenger.xmpp.requery.entity.Models;
import org.mercury_im.messenger.core.requery.enums.SubscriptionDirection;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import io.requery.Persistable;
import io.requery.android.sqlite.DatabaseSource;
import io.requery.reactivex.ReactiveEntityStore;
import io.requery.reactivex.ReactiveSupport;
import io.requery.sql.Configuration;
import io.requery.sql.EntityDataStore;
import io.requery.sql.TableCreationMode;
@RunWith(AndroidJUnit4.class)
public class RequeryDatabaseTest {
static ReactiveEntityStore<Persistable> dataStore;
@BeforeClass
public static void setup() {
Context appContext = InstrumentationRegistry.getTargetContext();
DatabaseSource source = new DatabaseSource(appContext, Models.DEFAULT,
"mercury_test_db", 1);
// use this in development mode to drop and recreate the tables on every upgrade
source.setTableCreationMode(TableCreationMode.DROP_CREATE);
source.setLoggingEnabled(true);
Configuration configuration = source.getConfiguration();
dataStore = ReactiveSupport.toReactiveStore(
new EntityDataStore<>(configuration));
}
@Test
public void databaseTest() throws InterruptedException {
AccountModel accountModel = new AccountModel();
accountModel.setJid(JidCreate.entityBareFromOrThrowUnchecked("juliet@capulet.lit"));
accountModel.setPassword("romeo0romeo");
accountModel.setRosterVersion(null);
accountModel.setEnabled(true);
Disposable accounts = dataStore.select(AccountModel.class).get().observableResult().subscribe(
accountModels -> accountModels.forEach(System.out::println));
Disposable entities = dataStore.select(EntityModel.class).get().observableResult()
.subscribeOn(Schedulers.io())
.subscribe(entityModels -> entityModels.forEach(System.out::println));
Disposable contacts = dataStore.select(ContactModel.class).get()
.observableResult().subscribeOn(Schedulers.io()).subscribe(
contactModels -> contactModels.forEach(System.out::println));
Thread.sleep(100);
dataStore.upsert(accountModel).subscribeOn(Schedulers.io())
.subscribe();
ContactModel contactModel = new ContactModel();
EntityModel entityModel = new EntityModel();
entityModel.setAccount(accountModel);
entityModel.setJid(JidCreate.entityBareFromOrThrowUnchecked("romeo@capulet.lit"));
contactModel.setEntity(entityModel);
contactModel.setRostername("Romeo");
contactModel.setSub_direction(SubscriptionDirection.both);
dataStore.insert(contactModel).blockingGet();
dataStore.select(AccountModel.ENABLED, ContactModel.ROSTERNAME)
.from(AccountModel.class)
.join(EntityModel.class).on(AccountModel.ID.eq(EntityModel.ACCOUNT_ID))
.join(ContactModel.class).on(EntityModel.ID.eq(ContactModel.ENTITY_ID))
.get().observableResult().blockingForEach(e -> e.forEach(System.out::println));
Thread.sleep(10000);
accounts.dispose();
entities.dispose();
contacts.dispose();
}
public static class ContactDetail {
private boolean enabled;
private String rostername;
}
@Test
public void test2() {
AccountModel account = new AccountModel();
account.setJid(JidCreate.entityBareFromOrThrowUnchecked("omemouser@jabberhead.tk"));
account.setEnabled(true);
account.setPassword("nöö");
EntityModel entity = new EntityModel();
entity.setJid(JidCreate.entityBareFromOrThrowUnchecked("jabbertest@test.test"));
entity.setAccount(account);
ContactModel contact = new ContactModel();
contact.setEntity(entity);
contact.setRostername("Olaf");
contact.setSub_direction(SubscriptionDirection.both);
contact.setSub_approved(false);
contact.setSub_pending(true);
dataStore.upsert(contact).blockingGet();
ChatModel chat = new ChatModel();
chat.setPeer(entity);
chat.setDisplayed(true);
dataStore.upsert(chat).blockingGet();
MessageModel message = new MessageModel();
message.setBody("Hallo Welt!");
message.setChat(chat);
dataStore.upsert(message).blockingGet();
LastReadChatMessageRelation lastRead = new LastReadChatMessageRelation();
lastRead.setChat(chat);
lastRead.setMessage(message);
dataStore.upsert(lastRead).blockingGet();
MessageModel message2 = new MessageModel();
message2.setChat(chat);
message2.setBody("How are you?");
dataStore.upsert(message2).blockingGet();
LastReadChatMessageRelation lastRead2 = new LastReadChatMessageRelation();
lastRead2.setChat(chat);
lastRead2.setMessage(message2);
dataStore.upsert(lastRead2).blockingGet();
}
}