Update ordering query to display content in expected order.

This commit is contained in:
Alex Hart 2022-04-07 12:39:51 -03:00 committed by Cody Henthorne
parent 8d6beb92cb
commit 6354cb194c
2 changed files with 58 additions and 3 deletions

View file

@ -138,4 +138,57 @@ class MmsDatabaseTest_stories {
// THEN
assertEquals(randomizedOrderedIds.reversed(), resultOrderedIds)
}
@Test
fun given15Stories_whenIGetOrderedStoryRecipientsAndIds_thenIExpectUnviewedThenInterspersedViewedAndSelfSendsAllDescending() {
val myStoryThread = SignalDatabase.threads.getOrCreateThreadIdFor(myStory)
val unviewedIds: List<Long> = (0 until 5).map {
Thread.sleep(5)
MmsHelper.insert(
IncomingMediaMessage(
from = recipients[it],
sentTimeMillis = System.currentTimeMillis(),
serverTimeMillis = 2,
receivedTimeMillis = 2,
storyType = StoryType.STORY_WITH_REPLIES,
),
-1L
).get().messageId
}
val viewedIds: List<Long> = (0 until 5).map {
Thread.sleep(5)
MmsHelper.insert(
IncomingMediaMessage(
from = recipients[it],
sentTimeMillis = System.currentTimeMillis(),
serverTimeMillis = 2,
receivedTimeMillis = 2,
storyType = StoryType.STORY_WITH_REPLIES,
),
-1L
).get().messageId
}
val interspersedIds: List<Long> = (0 until 10).map {
Thread.sleep(5)
if (it % 2 == 0) {
SignalDatabase.mms.setIncomingMessageViewed(viewedIds[it / 2])
viewedIds[it / 2]
} else {
MmsHelper.insert(
recipient = myStory,
sentTimeMillis = System.currentTimeMillis(),
storyType = StoryType.STORY_WITH_REPLIES,
threadId = myStoryThread
)
}
}
val result = SignalDatabase.mms.orderedStoryRecipientsAndIds
val resultOrderedIds = result.map { it.messageId }
assertEquals(unviewedIds.reversed() + interspersedIds.reversed(), resultOrderedIds)
}
}

View file

@ -691,9 +691,11 @@ public class MmsDatabase extends MessageDatabase {
+ "WHERE is_story > 0 AND remote_deleted = 0\n"
+ "ORDER BY\n"
+ "is_unread DESC,\n"
+ "CASE WHEN is_outgoing = 0 AND viewed_receipt_count = 0 THEN mms.date END DESC,\n"
+ "CASE WHEN is_outgoing = 0 AND viewed_receipt_count > 0 THEN receipt_timestamp END DESC,\n"
+ "CASE WHEN is_outgoing = 1 THEN mms.date END DESC";
+ "CASE\n"
+ "WHEN is_outgoing = 0 AND viewed_receipt_count = 0 THEN mms.date\n"
+ "WHEN is_outgoing = 0 AND viewed_receipt_count > 0 THEN receipt_timestamp\n"
+ "WHEN is_outgoing = 1 THEN mms.date\n"
+ "END DESC";
List<StoryResult> results;
try (Cursor cursor = db.rawQuery(query, null)) {