Implement story ring support.

This commit is contained in:
Alex Hart
2022-02-25 15:06:12 -04:00
parent fe088c39c7
commit 2d7655a6bb
20 changed files with 244 additions and 13 deletions

View File

@@ -13,6 +13,7 @@ import org.junit.runner.RunWith
import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config
import org.thoughtcrime.securesms.database.MmsSmsColumns.Types
import org.thoughtcrime.securesms.database.model.StoryViewState
import org.thoughtcrime.securesms.testing.TestDatabaseUtil
@RunWith(RobolectricTestRunner::class)
@@ -71,4 +72,43 @@ class MmsDatabaseTest {
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))
}
@Test
fun `Given no stories in database, when I getStoryViewState, then I expect NONE`() {
assertEquals(StoryViewState.NONE, mmsDatabase.getStoryViewState(1))
}
@Test
fun `Given stories in database not in thread 1, when I getStoryViewState for thread 1, then I expect NONE`() {
TestMms.insert(db, threadId = 2, isStory = true)
TestMms.insert(db, threadId = 2, isStory = true)
assertEquals(StoryViewState.NONE, mmsDatabase.getStoryViewState(1))
}
@Test
fun `Given viewed incoming stories in database, when I getStoryViewState, then I expect VIEWED`() {
TestMms.insert(db, threadId = 1, isStory = true, viewed = true)
TestMms.insert(db, threadId = 1, isStory = true, viewed = true)
assertEquals(StoryViewState.VIEWED, mmsDatabase.getStoryViewState(1))
}
@Test
fun `Given unviewed incoming stories in database, when I getStoryViewState, then I expect UNVIEWED`() {
TestMms.insert(db, threadId = 1, isStory = true, viewed = false)
TestMms.insert(db, threadId = 1, isStory = true, viewed = false)
assertEquals(StoryViewState.UNVIEWED, mmsDatabase.getStoryViewState(1))
}
@Test
fun `Given mix of viewed and unviewed incoming stories in database, when I getStoryViewState, then I expect UNVIEWED`() {
TestMms.insert(db, threadId = 1, isStory = true, viewed = true)
TestMms.insert(db, threadId = 1, isStory = true, viewed = false)
assertEquals(StoryViewState.UNVIEWED, mmsDatabase.getStoryViewState(1))
}
@Test
fun `Given only outgoing story in database, when I getStoryViewState, then I expect VIEWED`() {
TestMms.insert(db, threadId = 1, isStory = true, type = Types.BASE_OUTBOX_TYPE)
assertEquals(StoryViewState.VIEWED, mmsDatabase.getStoryViewState(1))
}
}

View File

@@ -23,7 +23,9 @@ object TestMms {
distributionType: Int = ThreadDatabase.DistributionTypes.DEFAULT,
type: Long = MmsSmsColumns.Types.BASE_INBOX_TYPE,
unread: Boolean = false,
threadId: Long = 1
viewed: Boolean = false,
threadId: Long = 1,
isStory: Boolean = false
): Long {
val message = OutgoingMediaMessage(
recipient,
@@ -34,7 +36,7 @@ object TestMms {
expiresIn,
viewOnce,
distributionType,
false,
isStory,
null,
null,
emptyList(),
@@ -50,6 +52,7 @@ object TestMms {
body = body,
type = type,
unread = unread,
viewed = viewed,
threadId = threadId,
receivedTimestampMillis = receivedTimestampMillis
)
@@ -61,6 +64,7 @@ object TestMms {
body: String = message.body,
type: Long = MmsSmsColumns.Types.BASE_INBOX_TYPE,
unread: Boolean = false,
viewed: Boolean = false,
threadId: Long = 1,
receivedTimestampMillis: Long = System.currentTimeMillis(),
): Long {
@@ -78,6 +82,8 @@ object TestMms {
put(MmsSmsColumns.RECIPIENT_ID, message.recipient.id.serialize())
put(MmsSmsColumns.DELIVERY_RECEIPT_COUNT, 0)
put(MmsSmsColumns.RECEIPT_TIMESTAMP, 0)
put(MmsSmsColumns.VIEWED_RECEIPT_COUNT, if (viewed) 1 else 0)
put(MmsDatabase.IS_STORY, if (message.isStory) 1 else 0)
put(MmsSmsColumns.BODY, body)
put(MmsDatabase.PART_COUNT, 0)