package org.mercury_im.messenger.persistence.room; import android.util.Log; import androidx.test.ext.junit.runners.AndroidJUnit4; import org.junit.Test; import org.junit.runner.RunWith; import org.mercury_im.messenger.persistence.room.model.RoomAccountModel; import org.mercury_im.messenger.persistence.room.model.RoomChatModel; import org.mercury_im.messenger.persistence.room.model.RoomContactModel; import org.mercury_im.messenger.persistence.room.model.RoomEntityModel; import io.reactivex.Observable; import io.reactivex.disposables.Disposable; /** * Instrumented test, which will execute on an Android device. * * @see Testing documentation */ @RunWith(AndroidJUnit4.class) public class ExampleInstrumentedTest extends AbstractDatabaseTest { @Test public void testUpsertContact1() { RoomAccountModel accountModel = new RoomAccountModel(); accountModel.setJid(TEST_JID_JULIET); accountRepository.insertAccount(accountModel).test().assertValue(1L).dispose(); RoomContactModel contactModel = new RoomContactModel(); RoomEntityModel entityModel = new RoomEntityModel(); entityModel.setAccountId(1); entityModel.setJid(TEST_JID_ROMEO); contactModel.setEntity(entityModel); rosterRepository.upsertContact(contactModel).test().assertValue(1L).dispose(); rosterRepository.maybeGetContact(1L).subscribe(contact -> { System.out.println(contact.getEntity().getAccountId() + " " + contact.getEntity().getJid().toString()); }).dispose(); rosterRepository.upsertContact(contactModel).test().assertValue(1L).dispose(); rosterRepository.maybeGetContact(1L).subscribe(contact -> { System.out.println(contact.getEntity().getAccountId() + " " + contact.getEntity().getJid().toString()); }).dispose(); } @Test public void testGetOrCreateEntity() { RoomAccountModel accountModel = new RoomAccountModel(); accountModel.setJid(TEST_JID_JULIET); accountRepository.insertAccount(accountModel).test().assertValue(1L).dispose(); RoomEntityModel romeo = rosterRepository.getOrCreateEntityForAccountAndJid(accountModel, TEST_JID_ROMEO).blockingGet(); RoomEntityModel mercu = rosterRepository.getOrCreateEntityForAccountAndJid(accountModel, TEST_JID_MERCUTIO).blockingGet(); } @Test public void testObservabilityOfChat() throws InterruptedException { RoomAccountModel accountModel = new RoomAccountModel(); accountModel.setJid(TEST_JID_JULIET); accountRepository.insertAccount(accountModel).test().assertValue(1L).dispose(); Observable chat = chatRepository.getOrCreateChatWith(accountModel.getId(), TEST_JID_ROMEO); Disposable disposable = chat.subscribe(chatModel -> Log.d(AppDatabase.TAG, "onNext: " + chatModel)); RoomChatModel chatModel = chatRepository.newChatModel(); chatModel.setId(1L); chatModel.setPeerEntityId(1L); chatModel.setActive(true); chatRepository.updateChat(chatModel).blockingAwait(); chatModel.setActive(false); chatRepository.updateChat(chatModel).blockingAwait(); chatModel.setActive(true); chatRepository.updateChat(chatModel).blockingAwait(); Thread.sleep(100); disposable.dispose(); Thread.sleep(100); } @Test public void testUpsertContact() throws InterruptedException { RoomAccountModel accountModel = new RoomAccountModel(); accountModel.setJid(TEST_JID_ROMEO); accountRepository.insertAccount(accountModel).test().assertValue(1L).dispose(); RoomContactModel contact = new RoomContactModel(); contact.setRosterName("A"); RoomEntityModel entity = new RoomEntityModel(); entity.setJid(TEST_JID_JULIET); entity.setAccountId(1L); contact.setEntity(entity); rosterRepository.upsertContact(contact).test().assertValue(1L).dispose(); Thread.sleep(100); contact.setId(0); contact.setRosterName("B"); contact.getEntity().setId(0); contact.setEntityId(0); rosterRepository.upsertContact(contact).test().assertValue(1L).dispose(); rosterRepository.getAllContacts().subscribe(System.out::println); Thread.sleep(200); } }