kopia lustrzana https://github.com/ryukoposting/Signal-Android
Add unit testing for pinned last message deletion fix.
rodzic
dc66583ef1
commit
ee4f3abf22
|
@ -0,0 +1,74 @@
|
||||||
|
package org.thoughtcrime.securesms.database
|
||||||
|
|
||||||
|
import org.junit.Assert.assertEquals
|
||||||
|
import org.junit.Assert.assertTrue
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.Rule
|
||||||
|
import org.junit.Test
|
||||||
|
import org.signal.core.util.CursorUtil
|
||||||
|
import org.thoughtcrime.securesms.recipients.Recipient
|
||||||
|
import org.thoughtcrime.securesms.testing.SignalDatabaseRule
|
||||||
|
import org.whispersystems.signalservice.api.push.ServiceId
|
||||||
|
import java.util.UUID
|
||||||
|
|
||||||
|
@Suppress("ClassName")
|
||||||
|
class ThreadDatabaseTest_pinned {
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
@JvmField
|
||||||
|
val databaseRule = SignalDatabaseRule()
|
||||||
|
|
||||||
|
private lateinit var recipient: Recipient
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun setUp() {
|
||||||
|
recipient = Recipient.resolved(SignalDatabase.recipients.getOrInsertFromServiceId(ServiceId.from(UUID.randomUUID())))
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenAPinnedThread_whenIDeleteTheLastMessage_thenIDoNotDeleteOrUnpinTheThread() {
|
||||||
|
// GIVEN
|
||||||
|
val threadId = SignalDatabase.threads.getOrCreateThreadIdFor(recipient)
|
||||||
|
val messageId = MmsHelper.insert(recipient = recipient, threadId = threadId)
|
||||||
|
SignalDatabase.threads.pinConversations(listOf(threadId))
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
SignalDatabase.mms.deleteMessage(messageId)
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
val pinned = SignalDatabase.threads.pinnedThreadIds
|
||||||
|
assertTrue(threadId in pinned)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenAPinnedThread_whenIDeleteTheLastMessage_thenIExpectTheThreadInUnarchivedCount() {
|
||||||
|
// GIVEN
|
||||||
|
val threadId = SignalDatabase.threads.getOrCreateThreadIdFor(recipient)
|
||||||
|
val messageId = MmsHelper.insert(recipient = recipient, threadId = threadId)
|
||||||
|
SignalDatabase.threads.pinConversations(listOf(threadId))
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
SignalDatabase.mms.deleteMessage(messageId)
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
val unarchivedCount = SignalDatabase.threads.unarchivedConversationListCount
|
||||||
|
assertEquals(1, unarchivedCount)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun givenAPinnedThread_whenIDeleteTheLastMessage_thenIExpectPinnedThreadInUnarchivedList() {
|
||||||
|
// GIVEN
|
||||||
|
val threadId = SignalDatabase.threads.getOrCreateThreadIdFor(recipient)
|
||||||
|
val messageId = MmsHelper.insert(recipient = recipient, threadId = threadId)
|
||||||
|
SignalDatabase.threads.pinConversations(listOf(threadId))
|
||||||
|
|
||||||
|
// WHEN
|
||||||
|
SignalDatabase.mms.deleteMessage(messageId)
|
||||||
|
|
||||||
|
// THEN
|
||||||
|
SignalDatabase.threads.getUnarchivedConversationList(true, 0, 1).use {
|
||||||
|
it.moveToFirst()
|
||||||
|
assertEquals(threadId, CursorUtil.requireLong(it, ThreadDatabase.ID))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
package org.thoughtcrime.securesms.testing
|
||||||
|
|
||||||
|
import org.junit.rules.TestWatcher
|
||||||
|
import org.junit.runner.Description
|
||||||
|
import org.thoughtcrime.securesms.database.SignalDatabase
|
||||||
|
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||||
|
import org.whispersystems.signalservice.api.push.ACI
|
||||||
|
import org.whispersystems.signalservice.api.push.PNI
|
||||||
|
import java.util.UUID
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets up bare-minimum to allow writing unit tests against the database,
|
||||||
|
* including setting up the local ACI and PNI pair.
|
||||||
|
*
|
||||||
|
* @param deleteAllThreadsOnEachRun Run deleteAllThreads between each unit test
|
||||||
|
*/
|
||||||
|
class SignalDatabaseRule(
|
||||||
|
private val deleteAllThreadsOnEachRun: Boolean = true
|
||||||
|
) : TestWatcher() {
|
||||||
|
|
||||||
|
val localAci: ACI = ACI.from(UUID.randomUUID())
|
||||||
|
val localPni: PNI = PNI.from(UUID.randomUUID())
|
||||||
|
|
||||||
|
override fun starting(description: Description?) {
|
||||||
|
deleteAllThreads()
|
||||||
|
|
||||||
|
SignalStore.account().setAci(localAci)
|
||||||
|
SignalStore.account().setPni(localPni)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun finished(description: Description?) {
|
||||||
|
deleteAllThreads()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun deleteAllThreads() {
|
||||||
|
if (deleteAllThreadsOnEachRun) {
|
||||||
|
SignalDatabase.mms.deleteAllThreads()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Ładowanie…
Reference in New Issue