From acff4b95bf105230dac77004ab2e631147544b6d Mon Sep 17 00:00:00 2001 From: Naomi Plasterer Date: Wed, 16 Oct 2024 11:16:46 -0700 Subject: [PATCH] more tests --- .../java/org/xmtp/android/library/DmTest.kt | 92 +++++++++---------- .../org/xmtp/android/library/V3ClientTest.kt | 84 ++++++++++++++++- 2 files changed, 125 insertions(+), 51 deletions(-) diff --git a/library/src/androidTest/java/org/xmtp/android/library/DmTest.kt b/library/src/androidTest/java/org/xmtp/android/library/DmTest.kt index 6db98d20..7c2090f7 100644 --- a/library/src/androidTest/java/org/xmtp/android/library/DmTest.kt +++ b/library/src/androidTest/java/org/xmtp/android/library/DmTest.kt @@ -31,79 +31,95 @@ import java.security.SecureRandom class DmTest { private lateinit var alixWallet: PrivateKeyBuilder private lateinit var boWallet: PrivateKeyBuilder + private lateinit var caroWallet: PrivateKeyBuilder private lateinit var alix: PrivateKey private lateinit var alixClient: Client private lateinit var bo: PrivateKey private lateinit var boClient: Client - private lateinit var caroWallet: PrivateKeyBuilder private lateinit var caro: PrivateKey private lateinit var caroClient: Client - private lateinit var fixtures: Fixtures @Before fun setUp() { val key = SecureRandom().generateSeed(32) val context = InstrumentationRegistry.getInstrumentation().targetContext - fixtures = - fixtures( - clientOptions = ClientOptions( + alixWallet = PrivateKeyBuilder() + alix = alixWallet.getPrivateKey() + alixClient = runBlocking { + Client().createOrBuild( + account = alixWallet, + address = alixWallet.address, + options = ClientOptions( + ClientOptions.Api(XMTPEnvironment.LOCAL, false), + enableV3 = true, + appContext = context, + dbEncryptionKey = key + ) + ) + } + boWallet = PrivateKeyBuilder() + bo = boWallet.getPrivateKey() + boClient = runBlocking { + Client().createOrBuild( + account = boWallet, + address = boWallet.address, + options = ClientOptions( + ClientOptions.Api(XMTPEnvironment.LOCAL, false), + enableV3 = true, + appContext = context, + dbEncryptionKey = key + ) + ) + } + + caroWallet = PrivateKeyBuilder() + caro = caroWallet.getPrivateKey() + caroClient = runBlocking { + Client().createOrBuild( + account = caroWallet, + address = caroWallet.address, + options = ClientOptions( ClientOptions.Api(XMTPEnvironment.LOCAL, false), enableV3 = true, appContext = context, dbEncryptionKey = key ) ) - alixWallet = fixtures.aliceAccount - alix = fixtures.alice - boWallet = fixtures.bobAccount - bo = fixtures.bob - caroWallet = fixtures.caroAccount - caro = fixtures.caro - - alixClient = fixtures.aliceClient - boClient = fixtures.bobClient - caroClient = fixtures.caroClient + } + } @Test fun testCanCreateADm() { val dm = runBlocking { - boClient.conversations.newConversation(alix.walletAddress) + boClient.conversations.findOrCreateDm(alix.walletAddress) } } @Test fun testCanListDmMembers() { val group = runBlocking { - boClient.conversations.newGroup( - listOf( + boClient.conversations.findOrCreateDm( alix.walletAddress, - caro.walletAddress - ) ) } assertEquals( runBlocking { group.members().map { it.inboxId }.sorted() }, listOf( - caroClient.inboxId, alixClient.inboxId, boClient.inboxId ).sorted() ) assertEquals( - Conversation.Group(group).peerAddresses.sorted(), + Conversation.Dm(group).peerAddresses.sorted(), listOf( - caroClient.inboxId, alixClient.inboxId, ).sorted() ) assertEquals( - runBlocking { group.peerInboxIds().sorted() }, - listOf( - caroClient.inboxId, + runBlocking { group.peerInboxId() }, alixClient.inboxId, - ).sorted() ) } @@ -132,30 +148,10 @@ class DmTest { assertEquals("thisisanewurl.com", alixGroup.imageUrlSquare) } - @Test - fun testCanRemoveGroupMembers() { - val group = runBlocking { - boClient.conversations.newGroup( - listOf( - alixClient.address, - caroClient.address - ) - ) - } - runBlocking { group.removeMembers(listOf(caro.walletAddress)) } - assertEquals( - runBlocking { group.members().map { it.inboxId }.sorted() }, - listOf( - alixClient.inboxId, - boClient.inboxId - ).sorted() - ) - } - @Test fun testCanListDms() { runBlocking { - boClient.conversations.newGroup(listOf(alix.walletAddress)) + boClient.conversations.findOrCreateDm(alix.walletAddress) boClient.conversations.newGroup(listOf(caro.walletAddress)) } val groups = runBlocking { boClient.conversations.listGroups() } diff --git a/library/src/androidTest/java/org/xmtp/android/library/V3ClientTest.kt b/library/src/androidTest/java/org/xmtp/android/library/V3ClientTest.kt index 6cae62bc..be31c2c2 100644 --- a/library/src/androidTest/java/org/xmtp/android/library/V3ClientTest.kt +++ b/library/src/androidTest/java/org/xmtp/android/library/V3ClientTest.kt @@ -113,6 +113,25 @@ class V3ClientTest { } } + @Test + fun testsCanListConversations() { + val dm = runBlocking { boV3Client.conversations.findOrCreateDm(caroV2V3.walletAddress) } + val group = + runBlocking { boV3Client.conversations.newGroup(listOf(caroV2V3.walletAddress)) } + assertEquals(runBlocking { boV3Client.conversations.listConversations().size }, 2) + assertEquals(runBlocking { boV3Client.conversations.list(includeGroups = true).size }, 2) + assertEquals(runBlocking { boV3Client.conversations.listDms().size }, 1) + assertEquals(runBlocking { boV3Client.conversations.listGroups().size }, 1) + + runBlocking { caroV2V3Client.conversations.syncConversations() } + assertEquals( + runBlocking { caroV2V3Client.conversations.list(includeGroups = true).size }, + 2 + ) + assertEquals(runBlocking { caroV2V3Client.conversations.listDms().size }, 1) + assertEquals(runBlocking { caroV2V3Client.conversations.listGroups().size }, 1) + } + @Test fun testsCanSendMessagesToGroup() { val group = @@ -217,13 +236,70 @@ class V3ClientTest { } } + @Test + fun testCanStreamAllMessagesFromV3Users() { + val group = + runBlocking { caroV2V3Client.conversations.newGroup(listOf(boV3.walletAddress)) } + val conversation = + runBlocking { caroV2V3Client.conversations.newConversation(boV3.walletAddress) } + runBlocking { boV3Client.conversations.syncConversations() } + + val allMessages = mutableListOf() + + val job = CoroutineScope(Dispatchers.IO).launch { + try { + boV3Client.conversations.streamAllMessages(includeGroups = true) + .collect { message -> + allMessages.add(message) + } + } catch (e: Exception) { + } + } + Thread.sleep(1000) + runBlocking { + group.send("hi") + conversation.send("hi") + } + Thread.sleep(1000) + assertEquals(2, allMessages.size) + job.cancel() + } + + @Test + fun testCanStreamGroupsAndConversationsFromV3Users() { + val allMessages = mutableListOf() + + val job = CoroutineScope(Dispatchers.IO).launch { + try { + boV3Client.conversations.streamAll() + .collect { message -> + allMessages.add(message.topic) + } + } catch (e: Exception) { + } + } + Thread.sleep(1000) + + runBlocking { + caroV2V3Client.conversations.newConversation(boV3.walletAddress) + Thread.sleep(1000) + caroV2V3Client.conversations.newGroup(listOf(boV3.walletAddress)) + } + + Thread.sleep(2000) + assertEquals(2, allMessages.size) + job.cancel() + } + @Test fun testCanStreamAllMessagesFromV2andV3Users() { val group = runBlocking { boV3Client.conversations.newGroup(listOf(caroV2V3.walletAddress)) } val conversation = runBlocking { alixV2Client.conversations.newConversation(caroV2V3.walletAddress) } - runBlocking { caroV2V3Client.conversations.syncGroups() } + val dm = + runBlocking { boV3Client.conversations.newConversation(caroV2V3.walletAddress) } + runBlocking { caroV2V3Client.conversations.syncConversations() } val allMessages = mutableListOf() @@ -240,9 +316,10 @@ class V3ClientTest { runBlocking { group.send("hi") conversation.send("hi") + dm.send("hi") } Thread.sleep(1000) - assertEquals(2, allMessages.size) + assertEquals(3, allMessages.size) job.cancel() } @@ -265,10 +342,11 @@ class V3ClientTest { alixV2Client.conversations.newConversation(caroV2V3.walletAddress) Thread.sleep(1000) boV3Client.conversations.newGroup(listOf(caroV2V3.walletAddress)) + boV3Client.conversations.newConversation(caroV2V3.walletAddress) } Thread.sleep(2000) - assertEquals(2, allMessages.size) + assertEquals(3, allMessages.size) job.cancel() } }