mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-26 03:40:56 +01:00
Add chat filter support behind a flag.
This commit is contained in:
@@ -13,6 +13,7 @@ import org.mockito.junit.MockitoJUnit;
|
||||
import org.mockito.junit.MockitoRule;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.annotation.Config;
|
||||
import org.thoughtcrime.securesms.conversationlist.model.ConversationFilter;
|
||||
import org.thoughtcrime.securesms.conversationlist.model.ConversationReader;
|
||||
import org.thoughtcrime.securesms.database.DatabaseObserver;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
@@ -22,6 +23,7 @@ import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyLong;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.mock;
|
||||
@@ -52,7 +54,7 @@ public class UnarchivedConversationListDataSourceTest {
|
||||
when(SignalDatabase.threads()).thenReturn(threadDatabase);
|
||||
when(ApplicationDependencies.getDatabaseObserver()).thenReturn(mock(DatabaseObserver.class));
|
||||
|
||||
testSubject = new ConversationListDataSource.UnarchivedConversationListDataSource(mock(Application.class));
|
||||
testSubject = new ConversationListDataSource.UnarchivedConversationListDataSource(ConversationFilter.OFF);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -65,13 +67,14 @@ public class UnarchivedConversationListDataSourceTest {
|
||||
assertEquals(0, testSubject.getHeaderOffset());
|
||||
assertFalse(testSubject.hasPinnedHeader());
|
||||
assertFalse(testSubject.hasUnpinnedHeader());
|
||||
assertFalse(testSubject.hasConversationFilterFooter());
|
||||
assertFalse(testSubject.hasArchivedFooter());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenArchivedConversations_whenIGetTotalCount_thenIExpectOne() {
|
||||
// GIVEN
|
||||
when(threadDatabase.getArchivedConversationListCount()).thenReturn(12);
|
||||
when(threadDatabase.getArchivedConversationListCount(ConversationFilter.OFF)).thenReturn(12);
|
||||
|
||||
// WHEN
|
||||
int result = testSubject.getTotalCount();
|
||||
@@ -81,15 +84,16 @@ public class UnarchivedConversationListDataSourceTest {
|
||||
assertEquals(0, testSubject.getHeaderOffset());
|
||||
assertFalse(testSubject.hasPinnedHeader());
|
||||
assertFalse(testSubject.hasUnpinnedHeader());
|
||||
assertFalse(testSubject.hasConversationFilterFooter());
|
||||
assertTrue(testSubject.hasArchivedFooter());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenSinglePinnedAndArchivedConversations_whenIGetTotalCount_thenIExpectThree() {
|
||||
// GIVEN
|
||||
when(threadDatabase.getPinnedConversationListCount()).thenReturn(1);
|
||||
when(threadDatabase.getUnarchivedConversationListCount()).thenReturn(1);
|
||||
when(threadDatabase.getArchivedConversationListCount()).thenReturn(12);
|
||||
when(threadDatabase.getPinnedConversationListCount(ConversationFilter.OFF)).thenReturn(1);
|
||||
when(threadDatabase.getUnarchivedConversationListCount(ConversationFilter.OFF)).thenReturn(1);
|
||||
when(threadDatabase.getArchivedConversationListCount(ConversationFilter.OFF)).thenReturn(12);
|
||||
|
||||
// WHEN
|
||||
int result = testSubject.getTotalCount();
|
||||
@@ -99,14 +103,15 @@ public class UnarchivedConversationListDataSourceTest {
|
||||
assertEquals(1, testSubject.getHeaderOffset());
|
||||
assertTrue(testSubject.hasPinnedHeader());
|
||||
assertFalse(testSubject.hasUnpinnedHeader());
|
||||
assertFalse(testSubject.hasConversationFilterFooter());
|
||||
assertTrue(testSubject.hasArchivedFooter());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenSingleUnpinnedAndArchivedConversations_whenIGetTotalCount_thenIExpectTwo() {
|
||||
// GIVEN
|
||||
when(threadDatabase.getUnarchivedConversationListCount()).thenReturn(1);
|
||||
when(threadDatabase.getArchivedConversationListCount()).thenReturn(12);
|
||||
when(threadDatabase.getUnarchivedConversationListCount(ConversationFilter.OFF)).thenReturn(1);
|
||||
when(threadDatabase.getArchivedConversationListCount(ConversationFilter.OFF)).thenReturn(12);
|
||||
|
||||
// WHEN
|
||||
int result = testSubject.getTotalCount();
|
||||
@@ -116,14 +121,15 @@ public class UnarchivedConversationListDataSourceTest {
|
||||
assertEquals(0, testSubject.getHeaderOffset());
|
||||
assertFalse(testSubject.hasPinnedHeader());
|
||||
assertFalse(testSubject.hasUnpinnedHeader());
|
||||
assertFalse(testSubject.hasConversationFilterFooter());
|
||||
assertTrue(testSubject.hasArchivedFooter());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenSinglePinnedAndSingleUnpinned_whenIGetTotalCount_thenIExpectFour() {
|
||||
// GIVEN
|
||||
when(threadDatabase.getPinnedConversationListCount()).thenReturn(1);
|
||||
when(threadDatabase.getUnarchivedConversationListCount()).thenReturn(2);
|
||||
when(threadDatabase.getPinnedConversationListCount(ConversationFilter.OFF)).thenReturn(1);
|
||||
when(threadDatabase.getUnarchivedConversationListCount(ConversationFilter.OFF)).thenReturn(2);
|
||||
|
||||
// WHEN
|
||||
int result = testSubject.getTotalCount();
|
||||
@@ -133,6 +139,7 @@ public class UnarchivedConversationListDataSourceTest {
|
||||
assertEquals(2, testSubject.getHeaderOffset());
|
||||
assertTrue(testSubject.hasPinnedHeader());
|
||||
assertTrue(testSubject.hasUnpinnedHeader());
|
||||
assertFalse(testSubject.hasConversationFilterFooter());
|
||||
assertFalse(testSubject.hasArchivedFooter());
|
||||
}
|
||||
|
||||
@@ -145,8 +152,8 @@ public class UnarchivedConversationListDataSourceTest {
|
||||
Cursor cursor = testSubject.getCursor(0, 100);
|
||||
|
||||
// THEN
|
||||
verify(threadDatabase).getUnarchivedConversationList(true, 0, 100);
|
||||
verify(threadDatabase).getUnarchivedConversationList(false, 0, 100);
|
||||
verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, true, 0, 100);
|
||||
verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, false, 0, 100);
|
||||
assertEquals(0, cursor.getCount());
|
||||
}
|
||||
|
||||
@@ -154,15 +161,15 @@ public class UnarchivedConversationListDataSourceTest {
|
||||
public void givenArchivedConversations_whenIGetCursor_thenIExpectOne() {
|
||||
// GIVEN
|
||||
setupThreadDatabaseCursors(0, 0);
|
||||
when(threadDatabase.getArchivedConversationListCount()).thenReturn(12);
|
||||
when(threadDatabase.getArchivedConversationListCount(ConversationFilter.OFF)).thenReturn(12);
|
||||
testSubject.getTotalCount();
|
||||
|
||||
// WHEN
|
||||
Cursor cursor = testSubject.getCursor(0, 100);
|
||||
|
||||
// THEN
|
||||
verify(threadDatabase).getUnarchivedConversationList(true, 0, 100);
|
||||
verify(threadDatabase).getUnarchivedConversationList(false, 0, 100);
|
||||
verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, true, 0, 100);
|
||||
verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, false, 0, 100);
|
||||
assertEquals(1, cursor.getCount());
|
||||
}
|
||||
|
||||
@@ -170,17 +177,17 @@ public class UnarchivedConversationListDataSourceTest {
|
||||
public void givenSinglePinnedAndArchivedConversations_whenIGetCursor_thenIExpectThree() {
|
||||
// GIVEN
|
||||
setupThreadDatabaseCursors(1, 0);
|
||||
when(threadDatabase.getPinnedConversationListCount()).thenReturn(1);
|
||||
when(threadDatabase.getUnarchivedConversationListCount()).thenReturn(1);
|
||||
when(threadDatabase.getArchivedConversationListCount()).thenReturn(12);
|
||||
when(threadDatabase.getPinnedConversationListCount(ConversationFilter.OFF)).thenReturn(1);
|
||||
when(threadDatabase.getUnarchivedConversationListCount(ConversationFilter.OFF)).thenReturn(1);
|
||||
when(threadDatabase.getArchivedConversationListCount(ConversationFilter.OFF)).thenReturn(12);
|
||||
testSubject.getTotalCount();
|
||||
|
||||
// WHEN
|
||||
Cursor cursor = testSubject.getCursor(0, 100);
|
||||
|
||||
// THEN
|
||||
verify(threadDatabase).getUnarchivedConversationList(true, 0, 99);
|
||||
verify(threadDatabase).getUnarchivedConversationList(false, 0, 98);
|
||||
verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, true, 0, 99);
|
||||
verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, false, 0, 98);
|
||||
assertEquals(3, cursor.getCount());
|
||||
}
|
||||
|
||||
@@ -188,16 +195,16 @@ public class UnarchivedConversationListDataSourceTest {
|
||||
public void givenSingleUnpinnedAndArchivedConversations_whenIGetCursor_thenIExpectTwo() {
|
||||
// GIVEN
|
||||
setupThreadDatabaseCursors(0, 1);
|
||||
when(threadDatabase.getUnarchivedConversationListCount()).thenReturn(1);
|
||||
when(threadDatabase.getArchivedConversationListCount()).thenReturn(12);
|
||||
when(threadDatabase.getUnarchivedConversationListCount(ConversationFilter.OFF)).thenReturn(1);
|
||||
when(threadDatabase.getArchivedConversationListCount(ConversationFilter.OFF)).thenReturn(12);
|
||||
testSubject.getTotalCount();
|
||||
|
||||
// WHEN
|
||||
Cursor cursor = testSubject.getCursor(0, 100);
|
||||
|
||||
// THEN
|
||||
verify(threadDatabase).getUnarchivedConversationList(true, 0, 100);
|
||||
verify(threadDatabase).getUnarchivedConversationList(false, 0, 100);
|
||||
verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, true, 0, 100);
|
||||
verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, false, 0, 100);
|
||||
assertEquals(2, cursor.getCount());
|
||||
}
|
||||
|
||||
@@ -205,16 +212,16 @@ public class UnarchivedConversationListDataSourceTest {
|
||||
public void givenSinglePinnedAndSingleUnpinned_whenIGetCursor_thenIExpectFour() {
|
||||
// GIVEN
|
||||
setupThreadDatabaseCursors(1, 1);
|
||||
when(threadDatabase.getPinnedConversationListCount()).thenReturn(1);
|
||||
when(threadDatabase.getUnarchivedConversationListCount()).thenReturn(2);
|
||||
when(threadDatabase.getPinnedConversationListCount(ConversationFilter.OFF)).thenReturn(1);
|
||||
when(threadDatabase.getUnarchivedConversationListCount(ConversationFilter.OFF)).thenReturn(2);
|
||||
testSubject.getTotalCount();
|
||||
|
||||
// WHEN
|
||||
Cursor cursor = testSubject.getCursor(0, 100);
|
||||
|
||||
// THEN
|
||||
verify(threadDatabase).getUnarchivedConversationList(true, 0, 99);
|
||||
verify(threadDatabase).getUnarchivedConversationList(false, 0, 97);
|
||||
verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, true, 0, 99);
|
||||
verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, false, 0, 97);
|
||||
assertEquals(4, cursor.getCount());
|
||||
}
|
||||
|
||||
@@ -222,16 +229,16 @@ public class UnarchivedConversationListDataSourceTest {
|
||||
public void givenLoadingSecondPage_whenIGetCursor_thenIExpectProperOffsetAndCursorCount() {
|
||||
// GIVEN
|
||||
setupThreadDatabaseCursors(0, 100);
|
||||
when(threadDatabase.getPinnedConversationListCount()).thenReturn(4);
|
||||
when(threadDatabase.getUnarchivedConversationListCount()).thenReturn(104);
|
||||
when(threadDatabase.getPinnedConversationListCount(ConversationFilter.OFF)).thenReturn(4);
|
||||
when(threadDatabase.getUnarchivedConversationListCount(ConversationFilter.OFF)).thenReturn(104);
|
||||
testSubject.getTotalCount();
|
||||
|
||||
// WHEN
|
||||
Cursor cursor = testSubject.getCursor(50, 100);
|
||||
|
||||
// THEN
|
||||
verify(threadDatabase).getUnarchivedConversationList(true, 50, 100);
|
||||
verify(threadDatabase).getUnarchivedConversationList(false, 44, 100);
|
||||
verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, true, 50, 100);
|
||||
verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, false, 44, 100);
|
||||
assertEquals(100, cursor.getCount());
|
||||
}
|
||||
|
||||
@@ -239,23 +246,44 @@ public class UnarchivedConversationListDataSourceTest {
|
||||
public void givenHasArchivedAndLoadingLastPage_whenIGetCursor_thenIExpectProperOffsetAndCursorCount() {
|
||||
// GIVEN
|
||||
setupThreadDatabaseCursors(0, 99);
|
||||
when(threadDatabase.getPinnedConversationListCount()).thenReturn(4);
|
||||
when(threadDatabase.getUnarchivedConversationListCount()).thenReturn(103);
|
||||
when(threadDatabase.getArchivedConversationListCount()).thenReturn(12);
|
||||
when(threadDatabase.getPinnedConversationListCount(ConversationFilter.OFF)).thenReturn(4);
|
||||
when(threadDatabase.getUnarchivedConversationListCount(ConversationFilter.OFF)).thenReturn(103);
|
||||
when(threadDatabase.getArchivedConversationListCount(ConversationFilter.OFF)).thenReturn(12);
|
||||
testSubject.getTotalCount();
|
||||
|
||||
// WHEN
|
||||
Cursor cursor = testSubject.getCursor(50, 100);
|
||||
|
||||
// THEN
|
||||
verify(threadDatabase).getUnarchivedConversationList(true, 50, 100);
|
||||
verify(threadDatabase).getUnarchivedConversationList(false, 44, 100);
|
||||
verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, true, 50, 100);
|
||||
verify(threadDatabase).getUnarchivedConversationList(ConversationFilter.OFF, false, 44, 100);
|
||||
assertEquals(100, cursor.getCount());
|
||||
|
||||
cursor.moveToLast();
|
||||
assertEquals(0, cursor.getColumnIndex(ConversationReader.HEADER_COLUMN[0]));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenHasNoArchivedAndIsFiltered_whenIGetCursor_thenIExpectConversationFilterFooter() {
|
||||
// GIVEN
|
||||
ConversationListDataSource.UnarchivedConversationListDataSource testSubject = new ConversationListDataSource.UnarchivedConversationListDataSource(ConversationFilter.UNREAD);
|
||||
setupThreadDatabaseCursors(0, 3);
|
||||
when(threadDatabase.getPinnedConversationListCount(ConversationFilter.UNREAD)).thenReturn(0);
|
||||
when(threadDatabase.getUnarchivedConversationListCount(ConversationFilter.UNREAD)).thenReturn(3);
|
||||
when(threadDatabase.getArchivedConversationListCount(ConversationFilter.UNREAD)).thenReturn(0);
|
||||
testSubject.getTotalCount();
|
||||
|
||||
// WHEN
|
||||
Cursor cursor = testSubject.getCursor(0, 5);
|
||||
|
||||
// THEN
|
||||
assertEquals(4, cursor.getCount());
|
||||
assertTrue(testSubject.hasConversationFilterFooter());
|
||||
|
||||
cursor.moveToLast();
|
||||
assertEquals(0, cursor.getColumnIndex(ConversationReader.HEADER_COLUMN[0]));
|
||||
}
|
||||
|
||||
|
||||
private void setupThreadDatabaseCursors(int pinned, int unpinned) {
|
||||
Cursor pinnedCursor = mock(Cursor.class);
|
||||
@@ -264,7 +292,7 @@ public class UnarchivedConversationListDataSourceTest {
|
||||
Cursor unpinnedCursor = mock(Cursor.class);
|
||||
when(unpinnedCursor.getCount()).thenReturn(unpinned);
|
||||
|
||||
when(threadDatabase.getUnarchivedConversationList(eq(true), anyLong(), anyLong())).thenReturn(pinnedCursor);
|
||||
when(threadDatabase.getUnarchivedConversationList(eq(false), anyLong(), anyLong())).thenReturn(unpinnedCursor);
|
||||
when(threadDatabase.getUnarchivedConversationList(any(), eq(true), anyLong(), anyLong())).thenReturn(pinnedCursor);
|
||||
when(threadDatabase.getUnarchivedConversationList(any(), eq(false), anyLong(), anyLong())).thenReturn(unpinnedCursor);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user