session-android/app/src/test/java/org/thoughtcrime/securesms/conversation/v2/ConversationSettingsViewMod...

95 lines
3.4 KiB
Kotlin

package org.thoughtcrime.securesms.conversation.v2
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.mockito.Mockito.mock
import org.mockito.kotlin.anyOrNull
import org.mockito.kotlin.never
import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever
import org.session.libsession.database.StorageProtocol
import org.session.libsession.utilities.Address
import org.session.libsession.utilities.GroupRecord
import org.session.libsession.utilities.TextSecurePreferences
import org.session.libsession.utilities.recipients.Recipient
import org.thoughtcrime.securesms.BaseViewModelTest
import org.thoughtcrime.securesms.conversation.settings.ConversationSettingsViewModel
class ConversationSettingsViewModelTest: BaseViewModelTest() {
companion object {
const val TEST_THREAD_ID = 1L
const val TEST_LOCAL_ID = "1234"
}
private val mockedStorage = mock(StorageProtocol::class.java)
private val mockedPrefs = mock(TextSecurePreferences::class.java)
private val mockedRecipient = mock(Recipient::class.java)
private val viewModel = ConversationSettingsViewModel(TEST_THREAD_ID, mockedStorage, mockedPrefs)
@Before
fun setup() {
whenever(mockedStorage.getRecipientForThread(TEST_THREAD_ID)).thenReturn(mockedRecipient)
}
@Test
fun `it should get a mocked recipient`() {
assertEquals(mockedRecipient, viewModel.recipient)
}
@Test
fun `it should report correct pin status`() {
whenever(mockedStorage.isPinned(TEST_THREAD_ID)).thenReturn(true)
val pinStatus = viewModel.isPinned()
verify(mockedStorage).isPinned(TEST_THREAD_ID)
assertTrue(pinStatus)
}
@Test
fun `it should auto download attachments`() {
whenever(mockedStorage.shouldAutoDownloadAttachments(mockedRecipient)).thenReturn(true)
val shouldDownload = viewModel.autoDownloadAttachments()
verify(mockedStorage).shouldAutoDownloadAttachments(mockedRecipient)
assertTrue(shouldDownload)
}
@Test
fun `it should not auto download if recipient null`() {
whenever(mockedStorage.getRecipientForThread(TEST_THREAD_ID)).thenReturn(null)
val shouldDownload = viewModel.autoDownloadAttachments()
verify(mockedStorage, never()).shouldAutoDownloadAttachments(anyOrNull())
assertFalse(shouldDownload)
}
@Test
fun `it should call storage for if user is an admin`() {
val groupAddress = Address.fromSerialized("__textsecure_group__!1234")
whenever(mockedRecipient.isClosedGroupRecipient).thenReturn(true)
whenever(mockedRecipient.address).thenReturn(groupAddress)
whenever(mockedPrefs.getLocalNumber()).thenReturn(TEST_LOCAL_ID)
val mockedGroup = mock(GroupRecord::class.java).apply {
whenever(this.admins).thenReturn(listOf(Address.fromSerialized(TEST_LOCAL_ID)))
}
whenever(mockedStorage.getGroup(groupAddress.serialize())).thenReturn(mockedGroup)
val isUserAdmin = viewModel.isUserGroupAdmin()
assertTrue(isUserAdmin)
}
@Test
fun `it should not call storage for group admin when we aren't in a group`() {
whenever(mockedRecipient.isClosedGroupRecipient).thenReturn(false)
val isUserAdmin = viewModel.isUserGroupAdmin()
assertFalse(isUserAdmin)
}
@Test
fun `it should `() {
}
}