diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt index e1a5729c0..4556735b9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt @@ -593,7 +593,7 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe // called from onCreate private fun setUpInputBar() { val binding = binding ?: return - binding.inputBar.isGone = viewModel.hideInputBar() + binding.inputBar.isGone = viewModel.hidesInputBar() binding.inputBar.delegate = this binding.inputBarRecordingView.delegate = this // GIF button diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt index 89654d958..532e65e19 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModel.kt @@ -214,7 +214,7 @@ class ConversationViewModel( _recipient.updateTo(repository.maybeGetRecipientForThreadId(threadId)) } - fun hideInputBar(): Boolean = openGroup?.canWrite != true && + fun hidesInputBar(): Boolean = openGroup?.canWrite != true && blindedRecipient?.blocksCommunityMessageRequests == true diff --git a/app/src/test/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModelTest.kt b/app/src/test/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModelTest.kt index c41e4e5b3..aecbd7e4a 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModelTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/conversation/v2/ConversationViewModelTest.kt @@ -5,29 +5,31 @@ import kotlinx.coroutines.flow.emptyFlow import kotlinx.coroutines.flow.first import org.hamcrest.CoreMatchers.endsWith import org.hamcrest.CoreMatchers.equalTo +import org.hamcrest.CoreMatchers.notNullValue +import org.hamcrest.CoreMatchers.nullValue import org.hamcrest.MatcherAssert.assertThat import org.junit.Before import org.junit.Test import org.mockito.Mockito.anyLong import org.mockito.Mockito.anySet -import org.mockito.Mockito.mock import org.mockito.Mockito.verify import org.mockito.kotlin.any +import org.mockito.kotlin.mock +import org.mockito.kotlin.whenever import org.session.libsession.utilities.recipients.Recipient import org.thoughtcrime.securesms.BaseViewModelTest import org.thoughtcrime.securesms.database.Storage import org.thoughtcrime.securesms.database.model.MessageRecord import org.thoughtcrime.securesms.repository.ConversationRepository import org.thoughtcrime.securesms.repository.ResultOf -import org.mockito.Mockito.`when` as whenever class ConversationViewModelTest: BaseViewModelTest() { - private val repository = mock(ConversationRepository::class.java) - private val storage = mock(Storage::class.java) + private val repository = mock() + private val storage = mock() private val threadId = 123L - private val edKeyPair = mock(KeyPair::class.java) + private val edKeyPair = mock() private lateinit var recipient: Recipient private val viewModel: ConversationViewModel by lazy { @@ -36,7 +38,7 @@ class ConversationViewModelTest: BaseViewModelTest() { @Before fun setUp() { - recipient = mock(Recipient::class.java) + recipient = mock() whenever(repository.maybeGetRecipientForThreadId(anyLong())).thenReturn(recipient) whenever(repository.recipientUpdateFlow(anyLong())).thenReturn(emptyFlow()) } @@ -81,7 +83,7 @@ class ConversationViewModelTest: BaseViewModelTest() { @Test fun `should delete locally`() { - val message = mock(MessageRecord::class.java) + val message = mock() viewModel.deleteLocally(message) @@ -90,7 +92,7 @@ class ConversationViewModelTest: BaseViewModelTest() { @Test fun `should emit error message on failure to delete a message for everyone`() = runBlockingTest { - val message = mock(MessageRecord::class.java) + val message = mock() val error = Throwable() whenever(repository.deleteForEveryone(anyLong(), any(), any())) .thenReturn(ResultOf.Failure(error)) @@ -103,7 +105,7 @@ class ConversationViewModelTest: BaseViewModelTest() { @Test fun `should emit error message on failure to delete messages without unsend request`() = runBlockingTest { - val message = mock(MessageRecord::class.java) + val message = mock() val error = Throwable() whenever(repository.deleteMessageWithoutUnsendRequest(anyLong(), anySet())) .thenReturn(ResultOf.Failure(error)) @@ -183,4 +185,30 @@ class ConversationViewModelTest: BaseViewModelTest() { assertThat(viewModel.uiState.value.uiMessages.size, equalTo(0)) } + @Test + fun `open group recipient should have no blinded recipient`() { + whenever(recipient.isOpenGroupRecipient).thenReturn(true) + whenever(recipient.isOpenGroupOutboxRecipient).thenReturn(false) + whenever(recipient.isOpenGroupInboxRecipient).thenReturn(false) + assertThat(viewModel.blindedRecipient, nullValue()) + } + + @Test + fun `local recipient should have input and no blinded recipient`() { + whenever(recipient.isLocalNumber).thenReturn(true) + assertThat(viewModel.hidesInputBar(), equalTo(false)) + assertThat(viewModel.blindedRecipient, nullValue()) + } + + @Test + fun `contact recipient should hide input bar if not accepting requests`() { + whenever(recipient.isOpenGroupInboxRecipient).thenReturn(true) + val blinded = mock { + whenever(it.blocksCommunityMessageRequests).thenReturn(true) + } + whenever(repository.maybeGetBlindedRecipient(recipient)).thenReturn(blinded) + assertThat(viewModel.blindedRecipient, notNullValue()) + assertThat(viewModel.hidesInputBar(), equalTo(true)) + } + } \ No newline at end of file