Implement support for 'allows replies' toggle.

This commit is contained in:
Alex Hart
2022-03-01 12:41:45 -04:00
parent ee176cbe3d
commit 35cd36e9fe
40 changed files with 374 additions and 148 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.StoryType
import org.thoughtcrime.securesms.database.model.StoryViewState
import org.thoughtcrime.securesms.testing.TestDatabaseUtil
@@ -80,35 +81,35 @@ class MmsDatabaseTest {
@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)
TestMms.insert(db, threadId = 2, storyType = StoryType.STORY_WITH_REPLIES)
TestMms.insert(db, threadId = 2, storyType = StoryType.STORY_WITH_REPLIES)
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)
TestMms.insert(db, threadId = 1, storyType = StoryType.STORY_WITH_REPLIES, viewed = true)
TestMms.insert(db, threadId = 1, storyType = StoryType.STORY_WITH_REPLIES, 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)
TestMms.insert(db, threadId = 1, storyType = StoryType.STORY_WITH_REPLIES, viewed = false)
TestMms.insert(db, threadId = 1, storyType = StoryType.STORY_WITH_REPLIES, 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)
TestMms.insert(db, threadId = 1, storyType = StoryType.STORY_WITH_REPLIES, viewed = true)
TestMms.insert(db, threadId = 1, storyType = StoryType.STORY_WITH_REPLIES, 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)
TestMms.insert(db, threadId = 1, storyType = StoryType.STORY_WITH_REPLIES, type = Types.BASE_OUTBOX_TYPE)
assertEquals(StoryViewState.VIEWED, mmsDatabase.getStoryViewState(1))
}
}

View File

@@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.database
import android.content.ContentValues
import android.database.sqlite.SQLiteDatabase
import com.google.android.mms.pdu_alt.PduHeaders
import org.thoughtcrime.securesms.database.model.StoryType
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage
import org.thoughtcrime.securesms.recipients.Recipient
@@ -25,7 +26,7 @@ object TestMms {
unread: Boolean = false,
viewed: Boolean = false,
threadId: Long = 1,
isStory: Boolean = false
storyType: StoryType = StoryType.NONE
): Long {
val message = OutgoingMediaMessage(
recipient,
@@ -36,7 +37,7 @@ object TestMms {
expiresIn,
viewOnce,
distributionType,
isStory,
storyType,
null,
null,
emptyList(),
@@ -83,7 +84,7 @@ object TestMms {
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(MmsDatabase.STORY_TYPE, message.storyType.code)
put(MmsSmsColumns.BODY, body)
put(MmsDatabase.PART_COUNT, 0)