Add support for arbitrary rows in contact search.

This commit is contained in:
Alex Hart
2023-01-23 13:11:28 -04:00
committed by Greyson Parrelli
parent d76d13f76c
commit 5d14166a27
16 changed files with 598 additions and 480 deletions

View File

@@ -1,21 +1,26 @@
package org.thoughtcrime.securesms.contacts.paged
import android.app.Application
import androidx.core.os.bundleOf
import org.junit.Assert
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
import org.mockito.kotlin.any
import org.mockito.kotlin.anyOrNull
import org.mockito.kotlin.isNull
import org.mockito.kotlin.mock
import org.mockito.kotlin.whenever
import org.robolectric.RobolectricTestRunner
import org.robolectric.annotation.Config
import org.thoughtcrime.securesms.MockCursor
import org.thoughtcrime.securesms.database.model.DistributionListPrivacyMode
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel
@RunWith(JUnit4::class)
@RunWith(RobolectricTestRunner::class)
@Config(application = Application::class)
class ContactSearchPagedDataSourceTest {
private val repository: ContactSearchPagedDataSourceRepository = mock()
@@ -117,6 +122,36 @@ class ContactSearchPagedDataSourceTest {
Assert.assertEquals(expected, resultKeys)
}
@Test
fun `Given only arbitrary elements, when I size, then I expect 3`() {
val testSubject = createArbitrarySubject()
val expected = 3
val actual = testSubject.size()
Assert.assertEquals(expected, actual)
}
@Test
fun `Given only arbitrary elements, when I load 1, then I expect 1`() {
val testSubject = createArbitrarySubject()
val expected = ContactSearchData.Arbitrary("two", bundleOf("n" to "two"))
val actual = testSubject.load(1, 1) { false }[0] as ContactSearchData.Arbitrary
Assert.assertEquals(expected.data?.getString("n"), actual.data?.getString("n"))
}
private fun createArbitrarySubject(): ContactSearchPagedDataSource {
val configuration = ContactSearchConfiguration.build {
arbitrary(
"one",
"two",
"three"
)
}
return ContactSearchPagedDataSource(configuration, repository, ArbitraryRepoFake())
}
private fun createStoriesSubject(): ContactSearchPagedDataSource {
val configuration = ContactSearchConfiguration.build {
addSection(
@@ -161,4 +196,24 @@ class ContactSearchPagedDataSourceTest {
return ContactSearchPagedDataSource(configuration, repository)
}
private class ArbitraryModel : MappingModel<ArbitraryModel> {
override fun areItemsTheSame(newItem: ArbitraryModel): Boolean = true
override fun areContentsTheSame(newItem: ArbitraryModel): Boolean = true
}
private class ArbitraryRepoFake : ArbitraryRepository {
override fun getSize(section: ContactSearchConfiguration.Section.Arbitrary, query: String?): Int = section.types.size
override fun getData(section: ContactSearchConfiguration.Section.Arbitrary, query: String?, startIndex: Int, endIndex: Int): List<ContactSearchData.Arbitrary> {
return section.types.toList().slice(startIndex..endIndex).map {
ContactSearchData.Arbitrary(it, bundleOf("n" to it))
}
}
override fun getMappingModel(arbitrary: ContactSearchData.Arbitrary): MappingModel<*> {
return ArbitraryModel()
}
}
}