Skip to content

Commit

Permalink
update the test
Browse files Browse the repository at this point in the history
  • Loading branch information
nplasterer committed Feb 8, 2025
1 parent dfaaca7 commit 94f458f
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 59 deletions.
97 changes: 60 additions & 37 deletions library/src/androidTest/java/org/xmtp/android/library/GroupTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertNull
import org.junit.Assert.assertThrows
import org.junit.Before
import org.junit.Test
Expand Down Expand Up @@ -57,6 +60,7 @@ class GroupTest {

alixClient = fixtures.alixClient
boClient = fixtures.boClient
Thread.sleep(5000)
caroClient = fixtures.caroClient
}

Expand Down Expand Up @@ -940,7 +944,6 @@ class GroupTest {
val alixGroup: Group = alixClient.findGroup(boGroup.id)!!
runBlocking { assertEquals(alixGroup.consentState(), ConsentState.UNKNOWN) }
val preparedMessageId = runBlocking { alixGroup.prepareMessage("Test text") }
runBlocking { assertEquals(alixGroup.consentState(), ConsentState.ALLOWED) }
assertEquals(runBlocking { alixGroup.messages() }.size, 1)
assertEquals(
runBlocking { alixGroup.messages(deliveryStatus = MessageDeliveryStatus.PUBLISHED) }.size,
Expand All @@ -955,7 +958,7 @@ class GroupTest {
alixGroup.publishMessages()
alixGroup.sync()
}

runBlocking { assertEquals(alixGroup.consentState(), ConsentState.ALLOWED) }
assertEquals(
runBlocking { alixGroup.messages(deliveryStatus = MessageDeliveryStatus.PUBLISHED) }.size,
1
Expand Down Expand Up @@ -1029,58 +1032,78 @@ class GroupTest {

@Test
fun testGroupDisappearingMessages() = runBlocking {
// Can enable message expiration on create
// val setting = MessageDisappearingSettings(0L, 1L)
val initialSettings = MessageDisappearingSettings(
System.nanoTime() - 1_000_000_000,
2_000_000_000 // 2s duration
)

// Create group with disappearing messages enabled
val boGroup = boClient.conversations.newGroup(
listOf(alix.walletAddress),
// messageDisappearingSettings = setting
messageDisappearingSettings = initialSettings
)

val messageId = boGroup.send("howdy")
boGroup.send("howdy")
alixClient.conversations.syncAllConversations()

val message = boClient.findMessage(messageId)
val alixGroup = alixClient.findGroup(boGroup.id)

// assertEquals(boGroup.messageDisappearingSettings()?.disappearDurationInNs, setting.disappearDurationInNs)

assertEquals(boGroup.messages().size, 2)
assertEquals(alixGroup?.messages()?.size, 1)
// Validate messages exist and settings are applied
assertEquals(boGroup.messages().size, 4) // memberAdd, disappearing settings 1, disappearing settings 2, howdy
assertEquals(alixGroup?.messages()?.size, 1) // howdy
assertNotNull(boGroup.messageDisappearingSettings)
Thread.sleep(2000)
// Validate messages are deleted
assertEquals(boGroup.messages().size, 3) // memberAdd, disappearing settings 1, disappearing settings 2
assertEquals(alixGroup?.messages()?.size, 0)

boGroup.updateMessageDisappearingSettings(MessageDisappearingSettings(message!!.sentAtNs, 1L))
// Set message disappearing settings to null
boGroup.updateMessageDisappearingSettings(null)
boGroup.sync()
alixGroup!!.sync()
boGroup.send("howdy2")
alixGroup.send("howdy howdy")

boGroup.sync()
alixGroup.sync()
assertNull(boGroup.messageDisappearingSettings)
assertNull(alixGroup.messageDisappearingSettings)

// Send messages after disabling disappearing settings
boGroup.send("message after disabling disappearing")
alixGroup.send("another message after disabling")

Thread.sleep(2000)

boGroup.messages()
assertEquals(3, boGroup.messages().size)
// update group membership 1
// howdy
// update start ns <- group membership
// updated duration ns <- group membership
// howdy2
// howdy howdy
assertEquals(2, alixGroup.messages().size)

// Can disable message expiration
alixGroup.updateMessageDisappearingSettings(null)
// Ensure messages persist
assertEquals(boGroup.messages().size, 7) // memberAdd, disappearing settings 1, disappearing settings 2, disappearing settings 1, disappearing settings 2, boMessage, alixMessage
assertEquals(alixGroup.messages().size, 4) // disappearing settings 1, disappearing settings 2, boMessage, alixMessage

// Re-enable disappearing messages
val updatedSettings = MessageDisappearingSettings(
System.nanoTime() + 1_000_000_000, // 1s from now
2_000_000_000 // 2s duration
)
boGroup.updateMessageDisappearingSettings(updatedSettings)
boGroup.sync()
alixGroup.sync()
boGroup.send("howdy")
alixGroup.send("hi")

assertEquals(boGroup.messageDisappearingSettings, updatedSettings)
assertEquals(alixGroup.messageDisappearingSettings, updatedSettings)

// Send new messages
boGroup.send("this will disappear soon")
alixGroup.send("so will this")
boGroup.sync()
alixGroup.sync()

Thread.sleep(2000)
Thread.sleep(1000)

assertEquals(boGroup.messages().size, 11) // memberAdd, disappearing settings 1, disappearing settings 2, disappearing settings 3, disappearing settings 4, boMessage, alixMessage, disappearing settings 5, disappearing settings 6, boMessage2, alixMessage2
assertEquals(alixGroup.messages().size, 8) // disappearing settings 3, disappearing settings 4, boMessage, alixMessage, disappearing settings 5, disappearing settings 6, boMessage2, alixMessage2

Thread.sleep(2000) // Wait for messages to disappear

// Validate messages were deleted
assertEquals(boGroup.messages().size, 3) // memberAdd, disappearing settings 1, disappearing settings 2, disappearing settings 3, disappearing settings 4, disappearing settings 5, disappearing settings 6
assertEquals(alixGroup.messages().size, 4) // disappearing settings 3, disappearing settings 4, disappearing settings 5, disappearing settings 6

assertEquals(boGroup.messages().size, 4)
assertEquals(alixGroup.messages().size, 4)
assertEquals(boGroup.messageDisappearingSettings(), null)
assertEquals(alixGroup.messageDisappearingSettings(), null)
// Final validation that settings persist
assertEquals(boGroup.messageDisappearingSettings, updatedSettings)
assertEquals(alixGroup.messageDisappearingSettings, updatedSettings)
}
}
11 changes: 6 additions & 5 deletions library/src/main/java/org/xmtp/android/library/Conversation.kt
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,13 @@ sealed class Conversation {
}
}

fun messageDisappearingSettings(): MessageDisappearingSettings? {
return when (this) {
is Group -> group.messageDisappearingSettings()
is Dm -> dm.messageDisappearingSettings()
val messageDisappearingSettings: MessageDisappearingSettings?
get() {
return when (this) {
is Group -> group.messageDisappearingSettings
is Dm -> dm.messageDisappearingSettings
}
}
}

suspend fun lastMessage(): Message? {
return when (this) {
Expand Down
12 changes: 4 additions & 8 deletions library/src/main/java/org/xmtp/android/library/Dm.kt
Original file line number Diff line number Diff line change
Expand Up @@ -41,14 +41,10 @@ class Dm(
val peerInboxId: String
get() = libXMTPGroup.dmPeerInboxId()

fun messageDisappearingSettings(): MessageDisappearingSettings? {
val settings = libXMTPGroup.conversationMessageDisappearingSettings()
return if (settings.fromNs > 0 && settings.inNs > 0) {
MessageDisappearingSettings.createFromFfi(settings)
} else {
null
}
}
val messageDisappearingSettings: MessageDisappearingSettings? = runCatching {
libXMTPGroup.takeIf { it.isConversationMessageDisappearingEnabled() }
?.let { MessageDisappearingSettings.createFromFfi(it.conversationMessageDisappearingSettings()) }
}.getOrNull()

private suspend fun metadata(): FfiConversationMetadata {
return libXMTPGroup.groupMetadata()
Expand Down
16 changes: 7 additions & 9 deletions library/src/main/java/org/xmtp/android/library/Group.kt
Original file line number Diff line number Diff line change
Expand Up @@ -60,15 +60,12 @@ class Group(
val description: String
get() = libXMTPGroup.groupDescription()

fun messageDisappearingSettings(): MessageDisappearingSettings? {
val settings = libXMTPGroup.conversationMessageDisappearingSettings()
return if (settings.fromNs <= 0 && settings.inNs <= 0) {
null
} else {
MessageDisappearingSettings.createFromFfi(settings)

}
}
val messageDisappearingSettings: MessageDisappearingSettings? get() = runCatching {
Log.d("LOPI", libXMTPGroup.isConversationMessageDisappearingEnabled().toString())
Log.d("LOPI", libXMTPGroup.conversationMessageDisappearingSettings().toString())
libXMTPGroup.takeIf { it.isConversationMessageDisappearingEnabled() }
?.let { MessageDisappearingSettings.createFromFfi(it.conversationMessageDisappearingSettings()) }
}.getOrNull()

suspend fun send(text: String): String {
return send(encodeContent(content = text, options = null))
Expand Down Expand Up @@ -296,6 +293,7 @@ class Group(
suspend fun updateMessageDisappearingSettings(messageDisappearingSettings: MessageDisappearingSettings?) {
try {
if (messageDisappearingSettings == null) {
Log.d("LOPI", "is this getting hit?")
libXMTPGroup.removeConversationMessageDisappearingSettings()
} else {
libXMTPGroup.updateConversationMessageDisappearingSettings(
Expand Down

0 comments on commit 94f458f

Please sign in to comment.