mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-02-26 12:44:38 +00:00
Add instrumented tests for RecipientDatabase.
This commit is contained in:
@@ -38,37 +38,37 @@ class MmsDatabaseTest {
|
||||
|
||||
@Test
|
||||
fun `isGroupQuitMessage when normal message, return false`() {
|
||||
val id = TestMms.insertMmsMessage(db, type = Types.BASE_SENDING_TYPE or Types.SECURE_MESSAGE_BIT or Types.PUSH_MESSAGE_BIT)
|
||||
val id = TestMms.insert(db, type = Types.BASE_SENDING_TYPE or Types.SECURE_MESSAGE_BIT or Types.PUSH_MESSAGE_BIT)
|
||||
assertFalse(mmsDatabase.isGroupQuitMessage(id))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `isGroupQuitMessage when legacy quit message, return true`() {
|
||||
val id = TestMms.insertMmsMessage(db, type = Types.BASE_SENDING_TYPE or Types.SECURE_MESSAGE_BIT or Types.PUSH_MESSAGE_BIT or Types.GROUP_LEAVE_BIT)
|
||||
val id = TestMms.insert(db, type = Types.BASE_SENDING_TYPE or Types.SECURE_MESSAGE_BIT or Types.PUSH_MESSAGE_BIT or Types.GROUP_LEAVE_BIT)
|
||||
assertTrue(mmsDatabase.isGroupQuitMessage(id))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `isGroupQuitMessage when GV2 leave update, return false`() {
|
||||
val id = TestMms.insertMmsMessage(db, type = Types.BASE_SENDING_TYPE or Types.SECURE_MESSAGE_BIT or Types.PUSH_MESSAGE_BIT or Types.GROUP_LEAVE_BIT or Types.GROUP_V2_BIT or Types.GROUP_UPDATE_BIT)
|
||||
val id = TestMms.insert(db, type = Types.BASE_SENDING_TYPE or Types.SECURE_MESSAGE_BIT or Types.PUSH_MESSAGE_BIT or Types.GROUP_LEAVE_BIT or Types.GROUP_V2_BIT or Types.GROUP_UPDATE_BIT)
|
||||
assertFalse(mmsDatabase.isGroupQuitMessage(id))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `getLatestGroupQuitTimestamp when only normal message, return -1`() {
|
||||
TestMms.insertMmsMessage(db, threadId = 1, sentTimeMillis = 1, type = Types.BASE_SENDING_TYPE or Types.SECURE_MESSAGE_BIT or Types.PUSH_MESSAGE_BIT)
|
||||
TestMms.insert(db, threadId = 1, sentTimeMillis = 1, type = Types.BASE_SENDING_TYPE or Types.SECURE_MESSAGE_BIT or Types.PUSH_MESSAGE_BIT)
|
||||
assertEquals(-1, mmsDatabase.getLatestGroupQuitTimestamp(1, 4))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `getLatestGroupQuitTimestamp when legacy quit, return message timestamp`() {
|
||||
TestMms.insertMmsMessage(db, threadId = 1, sentTimeMillis = 2, type = Types.BASE_SENDING_TYPE or Types.SECURE_MESSAGE_BIT or Types.PUSH_MESSAGE_BIT or Types.GROUP_LEAVE_BIT)
|
||||
TestMms.insert(db, threadId = 1, sentTimeMillis = 2, type = Types.BASE_SENDING_TYPE or Types.SECURE_MESSAGE_BIT or Types.PUSH_MESSAGE_BIT or Types.GROUP_LEAVE_BIT)
|
||||
assertEquals(2, mmsDatabase.getLatestGroupQuitTimestamp(1, 4))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `getLatestGroupQuitTimestamp when GV2 leave update message, return -1`() {
|
||||
TestMms.insertMmsMessage(db, threadId = 1, sentTimeMillis = 3, type = Types.BASE_SENDING_TYPE or Types.SECURE_MESSAGE_BIT or Types.PUSH_MESSAGE_BIT or Types.GROUP_LEAVE_BIT or Types.GROUP_V2_BIT or Types.GROUP_UPDATE_BIT)
|
||||
TestMms.insert(db, threadId = 1, sentTimeMillis = 3, type = Types.BASE_SENDING_TYPE or Types.SECURE_MESSAGE_BIT or Types.PUSH_MESSAGE_BIT or Types.GROUP_LEAVE_BIT or Types.GROUP_V2_BIT or Types.GROUP_UPDATE_BIT)
|
||||
assertEquals(-1, mmsDatabase.getLatestGroupQuitTimestamp(1, 4))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ class MmsSmsDatabaseTest {
|
||||
|
||||
@Test
|
||||
fun `getConversationSnippet when single normal SMS, return SMS message id and transport as false`() {
|
||||
TestSms.insertSmsMessage(db)
|
||||
TestSms.insert(db)
|
||||
mmsSmsDatabase.getConversationSnippetCursor(1).use { cursor ->
|
||||
cursor.moveToFirst()
|
||||
assertEquals(1, CursorUtil.requireLong(cursor, MmsSmsColumns.ID))
|
||||
@@ -50,7 +50,7 @@ class MmsSmsDatabaseTest {
|
||||
|
||||
@Test
|
||||
fun `getConversationSnippet when single normal MMS, return MMS message id and transport as true`() {
|
||||
TestMms.insertMmsMessage(db)
|
||||
TestMms.insert(db)
|
||||
mmsSmsDatabase.getConversationSnippetCursor(1).use { cursor ->
|
||||
cursor.moveToFirst()
|
||||
assertEquals(1, CursorUtil.requireLong(cursor, MmsSmsColumns.ID))
|
||||
@@ -62,14 +62,14 @@ class MmsSmsDatabaseTest {
|
||||
fun `getConversationSnippet when single normal MMS then GV2 leave update message, return MMS message id and transport as true both times`() {
|
||||
val timestamp = System.currentTimeMillis()
|
||||
|
||||
TestMms.insertMmsMessage(db, receivedTimestampMillis = timestamp + 2)
|
||||
TestMms.insert(db, receivedTimestampMillis = timestamp + 2)
|
||||
mmsSmsDatabase.getConversationSnippetCursor(1).use { cursor ->
|
||||
cursor.moveToFirst()
|
||||
assertEquals(1, CursorUtil.requireLong(cursor, MmsSmsColumns.ID))
|
||||
assertTrue(CursorUtil.requireBoolean(cursor, MmsSmsDatabase.TRANSPORT))
|
||||
}
|
||||
|
||||
TestSms.insertSmsMessage(db, receivedTimestampMillis = timestamp + 3, type = MmsSmsColumns.Types.BASE_SENDING_TYPE or MmsSmsColumns.Types.SECURE_MESSAGE_BIT or MmsSmsColumns.Types.PUSH_MESSAGE_BIT or MmsSmsColumns.Types.GROUP_V2_LEAVE_BITS)
|
||||
TestSms.insert(db, receivedTimestampMillis = timestamp + 3, type = MmsSmsColumns.Types.BASE_SENDING_TYPE or MmsSmsColumns.Types.SECURE_MESSAGE_BIT or MmsSmsColumns.Types.PUSH_MESSAGE_BIT or MmsSmsColumns.Types.GROUP_V2_LEAVE_BITS)
|
||||
mmsSmsDatabase.getConversationSnippetCursor(1).use { cursor ->
|
||||
cursor.moveToFirst()
|
||||
assertEquals(1, CursorUtil.requireLong(cursor, MmsSmsColumns.ID))
|
||||
|
||||
@@ -44,7 +44,7 @@ class SmsDatabaseTest {
|
||||
|
||||
@Test
|
||||
fun `getThreadIdForMessage when message present for id, return thread id`() {
|
||||
TestSms.insertSmsMessage(db)
|
||||
TestSms.insert(db)
|
||||
assertThat(smsDatabase.getThreadIdForMessage(1), isEqual(1))
|
||||
}
|
||||
|
||||
@@ -55,13 +55,13 @@ class SmsDatabaseTest {
|
||||
|
||||
@Test
|
||||
fun `hasMeaningfulMessage when normal message, return true`() {
|
||||
TestSms.insertSmsMessage(db)
|
||||
TestSms.insert(db)
|
||||
assertTrue(smsDatabase.hasMeaningfulMessage(1))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `hasMeaningfulMessage when GV2 create message only, return true`() {
|
||||
TestSms.insertSmsMessage(db, type = MmsSmsColumns.Types.BASE_INBOX_TYPE or MmsSmsColumns.Types.SECURE_MESSAGE_BIT or MmsSmsColumns.Types.GROUP_V2_BIT or MmsSmsColumns.Types.GROUP_UPDATE_BIT)
|
||||
TestSms.insert(db, type = MmsSmsColumns.Types.BASE_INBOX_TYPE or MmsSmsColumns.Types.SECURE_MESSAGE_BIT or MmsSmsColumns.Types.GROUP_V2_BIT or MmsSmsColumns.Types.GROUP_UPDATE_BIT)
|
||||
assertTrue(smsDatabase.hasMeaningfulMessage(1))
|
||||
}
|
||||
|
||||
@@ -69,16 +69,16 @@ class SmsDatabaseTest {
|
||||
fun `hasMeaningfulMessage when empty and then with ignored types, always return false`() {
|
||||
assertFalse(smsDatabase.hasMeaningfulMessage(1))
|
||||
|
||||
TestSms.insertSmsMessage(db, type = SmsDatabase.IGNORABLE_TYPESMASK_WHEN_COUNTING)
|
||||
TestSms.insert(db, type = SmsDatabase.IGNORABLE_TYPESMASK_WHEN_COUNTING)
|
||||
assertFalse(smsDatabase.hasMeaningfulMessage(1))
|
||||
|
||||
TestSms.insertSmsMessage(db, type = MmsSmsColumns.Types.PROFILE_CHANGE_TYPE)
|
||||
TestSms.insert(db, type = MmsSmsColumns.Types.PROFILE_CHANGE_TYPE)
|
||||
assertFalse(smsDatabase.hasMeaningfulMessage(1))
|
||||
|
||||
TestSms.insertSmsMessage(db, type = MmsSmsColumns.Types.CHANGE_NUMBER_TYPE)
|
||||
TestSms.insert(db, type = MmsSmsColumns.Types.CHANGE_NUMBER_TYPE)
|
||||
assertFalse(smsDatabase.hasMeaningfulMessage(1))
|
||||
|
||||
TestSms.insertSmsMessage(db, type = MmsSmsColumns.Types.BASE_INBOX_TYPE or MmsSmsColumns.Types.GROUP_V2_LEAVE_BITS)
|
||||
TestSms.insert(db, type = MmsSmsColumns.Types.BASE_INBOX_TYPE or MmsSmsColumns.Types.GROUP_V2_LEAVE_BITS)
|
||||
assertFalse(smsDatabase.hasMeaningfulMessage(1))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ import org.thoughtcrime.securesms.recipients.Recipient
|
||||
*/
|
||||
object TestMms {
|
||||
|
||||
fun insertMmsMessage(
|
||||
fun insert(
|
||||
db: SQLiteDatabase,
|
||||
recipient: Recipient = Recipient.UNKNOWN,
|
||||
body: String = "body",
|
||||
@@ -42,7 +42,7 @@ object TestMms {
|
||||
emptySet()
|
||||
)
|
||||
|
||||
return insertMmsMessage(
|
||||
return insert(
|
||||
db = db,
|
||||
message = message,
|
||||
body = body,
|
||||
@@ -53,7 +53,7 @@ object TestMms {
|
||||
)
|
||||
}
|
||||
|
||||
fun insertMmsMessage(
|
||||
fun insert(
|
||||
db: SQLiteDatabase,
|
||||
message: OutgoingMediaMessage,
|
||||
body: String = message.body,
|
||||
@@ -62,24 +62,25 @@ object TestMms {
|
||||
threadId: Long = 1,
|
||||
receivedTimestampMillis: Long = System.currentTimeMillis(),
|
||||
): Long {
|
||||
val contentValues = ContentValues()
|
||||
contentValues.put(MmsDatabase.DATE_SENT, message.sentTimeMillis)
|
||||
contentValues.put(MmsDatabase.MESSAGE_TYPE, PduHeaders.MESSAGE_TYPE_SEND_REQ)
|
||||
val contentValues = ContentValues().apply {
|
||||
put(MmsDatabase.DATE_SENT, message.sentTimeMillis)
|
||||
put(MmsDatabase.MESSAGE_TYPE, PduHeaders.MESSAGE_TYPE_SEND_REQ)
|
||||
|
||||
contentValues.put(MmsDatabase.MESSAGE_BOX, type)
|
||||
contentValues.put(MmsSmsColumns.THREAD_ID, threadId)
|
||||
contentValues.put(MmsSmsColumns.READ, if (unread) 0 else 1)
|
||||
contentValues.put(MmsDatabase.DATE_RECEIVED, receivedTimestampMillis)
|
||||
contentValues.put(MmsSmsColumns.SUBSCRIPTION_ID, message.subscriptionId)
|
||||
contentValues.put(MmsSmsColumns.EXPIRES_IN, message.expiresIn)
|
||||
contentValues.put(MmsDatabase.VIEW_ONCE, message.isViewOnce)
|
||||
contentValues.put(MmsSmsColumns.RECIPIENT_ID, message.recipient.id.serialize())
|
||||
contentValues.put(MmsSmsColumns.DELIVERY_RECEIPT_COUNT, 0)
|
||||
contentValues.put(MmsSmsColumns.RECEIPT_TIMESTAMP, 0)
|
||||
put(MmsDatabase.MESSAGE_BOX, type)
|
||||
put(MmsSmsColumns.THREAD_ID, threadId)
|
||||
put(MmsSmsColumns.READ, if (unread) 0 else 1)
|
||||
put(MmsDatabase.DATE_RECEIVED, receivedTimestampMillis)
|
||||
put(MmsSmsColumns.SUBSCRIPTION_ID, message.subscriptionId)
|
||||
put(MmsSmsColumns.EXPIRES_IN, message.expiresIn)
|
||||
put(MmsDatabase.VIEW_ONCE, message.isViewOnce)
|
||||
put(MmsSmsColumns.RECIPIENT_ID, message.recipient.id.serialize())
|
||||
put(MmsSmsColumns.DELIVERY_RECEIPT_COUNT, 0)
|
||||
put(MmsSmsColumns.RECEIPT_TIMESTAMP, 0)
|
||||
|
||||
contentValues.put(MmsSmsColumns.BODY, body)
|
||||
contentValues.put(MmsDatabase.PART_COUNT, 0)
|
||||
contentValues.put(MmsDatabase.MENTIONS_SELF, 0)
|
||||
put(MmsSmsColumns.BODY, body)
|
||||
put(MmsDatabase.PART_COUNT, 0)
|
||||
put(MmsDatabase.MENTIONS_SELF, 0)
|
||||
}
|
||||
|
||||
return db.insert(MmsDatabase.TABLE_NAME, null, contentValues)
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ import android.database.sqlite.SQLiteDatabase as AndroidSQLiteDatabase
|
||||
*/
|
||||
object TestSms {
|
||||
|
||||
fun insertSmsMessage(
|
||||
fun insert(
|
||||
db: AndroidSQLiteDatabase,
|
||||
sender: RecipientId = RecipientId.from(1),
|
||||
senderDeviceId: Int = 1,
|
||||
@@ -43,7 +43,7 @@ object TestSms {
|
||||
serverGuid
|
||||
)
|
||||
|
||||
return insertSmsMessage(
|
||||
return insert(
|
||||
db = db,
|
||||
message = message,
|
||||
type = type,
|
||||
@@ -52,33 +52,36 @@ object TestSms {
|
||||
)
|
||||
}
|
||||
|
||||
fun insertSmsMessage(
|
||||
fun insert(
|
||||
db: AndroidSQLiteDatabase,
|
||||
message: IncomingTextMessage,
|
||||
type: Long = MmsSmsColumns.Types.BASE_INBOX_TYPE,
|
||||
unread: Boolean = false,
|
||||
threadId: Long = 1
|
||||
): Long {
|
||||
val values = ContentValues()
|
||||
values.put(MmsSmsColumns.RECIPIENT_ID, message.sender.serialize())
|
||||
values.put(MmsSmsColumns.ADDRESS_DEVICE_ID, message.senderDeviceId)
|
||||
values.put(SmsDatabase.DATE_RECEIVED, message.receivedTimestampMillis)
|
||||
values.put(SmsDatabase.DATE_SENT, message.sentTimestampMillis)
|
||||
values.put(MmsSmsColumns.DATE_SERVER, message.serverTimestampMillis)
|
||||
values.put(SmsDatabase.PROTOCOL, message.protocol)
|
||||
values.put(MmsSmsColumns.READ, if (unread) 0 else 1)
|
||||
values.put(MmsSmsColumns.SUBSCRIPTION_ID, message.subscriptionId)
|
||||
values.put(MmsSmsColumns.EXPIRES_IN, message.expiresIn)
|
||||
values.put(MmsSmsColumns.UNIDENTIFIED, message.isUnidentified)
|
||||
val values = ContentValues().apply {
|
||||
put(MmsSmsColumns.RECIPIENT_ID, message.sender.serialize())
|
||||
put(MmsSmsColumns.ADDRESS_DEVICE_ID, message.senderDeviceId)
|
||||
put(SmsDatabase.DATE_RECEIVED, message.receivedTimestampMillis)
|
||||
put(SmsDatabase.DATE_SENT, message.sentTimestampMillis)
|
||||
put(MmsSmsColumns.DATE_SERVER, message.serverTimestampMillis)
|
||||
put(SmsDatabase.PROTOCOL, message.protocol)
|
||||
put(MmsSmsColumns.READ, if (unread) 0 else 1)
|
||||
put(MmsSmsColumns.SUBSCRIPTION_ID, message.subscriptionId)
|
||||
put(MmsSmsColumns.EXPIRES_IN, message.expiresIn)
|
||||
put(MmsSmsColumns.UNIDENTIFIED, message.isUnidentified)
|
||||
|
||||
if (!TextUtils.isEmpty(message.pseudoSubject)) values.put(SmsDatabase.SUBJECT, message.pseudoSubject)
|
||||
if (!TextUtils.isEmpty(message.pseudoSubject)) {
|
||||
put(SmsDatabase.SUBJECT, message.pseudoSubject)
|
||||
}
|
||||
|
||||
values.put(SmsDatabase.REPLY_PATH_PRESENT, message.isReplyPathPresent)
|
||||
values.put(SmsDatabase.SERVICE_CENTER, message.serviceCenterAddress)
|
||||
values.put(MmsSmsColumns.BODY, message.messageBody)
|
||||
values.put(SmsDatabase.TYPE, type)
|
||||
values.put(MmsSmsColumns.THREAD_ID, threadId)
|
||||
values.put(MmsSmsColumns.SERVER_GUID, message.serverGuid)
|
||||
put(SmsDatabase.REPLY_PATH_PRESENT, message.isReplyPathPresent)
|
||||
put(SmsDatabase.SERVICE_CENTER, message.serviceCenterAddress)
|
||||
put(MmsSmsColumns.BODY, message.messageBody)
|
||||
put(SmsDatabase.TYPE, type)
|
||||
put(MmsSmsColumns.THREAD_ID, threadId)
|
||||
put(MmsSmsColumns.SERVER_GUID, message.serverGuid)
|
||||
}
|
||||
|
||||
return db.insert(SmsDatabase.TABLE_NAME, null, values)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user