mirror of
https://github.com/bitwarden/android.git
synced 2026-10-23 11:33:22 -05:00
BIT-493: Add full file send support (#651)
This commit is contained in:
1 parent
6f796725a1
commit
89a818aeaa
8 files changed
+290
-77
No files matched your search
+12
-2
@@ -336,7 +336,12 @@ class AddSendScreenTest : BaseComposeTest() {
|
||||
permissionsManager.checkPermissionResult = true
|
||||
mutableStateFlow.value = DEFAULT_STATE.copy(
|
||||
viewState = DEFAULT_VIEW_STATE.copy(
|
||||
selectedType = AddSendState.ViewState.Content.SendType.File,
|
||||
selectedType = AddSendState.ViewState.Content.SendType.File(
|
||||
name = null,
|
||||
displaySize = null,
|
||||
sizeBytes = null,
|
||||
uri = null,
|
||||
),
|
||||
),
|
||||
)
|
||||
composeTestRule
|
||||
@@ -357,7 +362,12 @@ class AddSendScreenTest : BaseComposeTest() {
|
||||
permissionsManager.getPermissionsResult = false
|
||||
mutableStateFlow.value = DEFAULT_STATE.copy(
|
||||
viewState = DEFAULT_VIEW_STATE.copy(
|
||||
selectedType = AddSendState.ViewState.Content.SendType.File,
|
||||
selectedType = AddSendState.ViewState.Content.SendType.File(
|
||||
name = null,
|
||||
displaySize = null,
|
||||
sizeBytes = null,
|
||||
uri = null,
|
||||
),
|
||||
),
|
||||
)
|
||||
composeTestRule
|
||||
|
||||
+100
-6
@@ -1,5 +1,6 @@
|
||||
package com.x8bit.bitwarden.ui.tools.feature.send.addsend
|
||||
|
||||
import android.net.Uri
|
||||
import androidx.lifecycle.SavedStateHandle
|
||||
import app.cash.turbine.test
|
||||
import com.bitwarden.core.SendView
|
||||
@@ -18,6 +19,7 @@ import com.x8bit.bitwarden.data.vault.repository.model.RemovePasswordSendResult
|
||||
import com.x8bit.bitwarden.data.vault.repository.model.UpdateSendResult
|
||||
import com.x8bit.bitwarden.ui.platform.base.BaseViewModelTest
|
||||
import com.x8bit.bitwarden.ui.platform.base.util.asText
|
||||
import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager
|
||||
import com.x8bit.bitwarden.ui.tools.feature.send.addsend.model.AddSendType
|
||||
import com.x8bit.bitwarden.ui.tools.feature.send.addsend.util.toSendView
|
||||
import com.x8bit.bitwarden.ui.tools.feature.send.addsend.util.toViewState
|
||||
@@ -277,6 +279,63 @@ class AddSendViewModelTest : BaseViewModelTest() {
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `SaveClick with file missing should show error dialog`() {
|
||||
val initialState = DEFAULT_STATE.copy(
|
||||
viewState = DEFAULT_VIEW_STATE.copy(
|
||||
common = DEFAULT_COMMON_STATE.copy(name = "test"),
|
||||
selectedType = AddSendState.ViewState.Content.SendType.File(
|
||||
uri = null,
|
||||
name = null,
|
||||
displaySize = null,
|
||||
sizeBytes = null,
|
||||
),
|
||||
),
|
||||
)
|
||||
val viewModel = createViewModel(initialState)
|
||||
|
||||
viewModel.trySendAction(AddSendAction.SaveClick)
|
||||
|
||||
assertEquals(
|
||||
initialState.copy(
|
||||
dialogState = AddSendState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.validation_field_required.asText(R.string.file.asText()),
|
||||
),
|
||||
),
|
||||
viewModel.stateFlow.value,
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `SaveClick with file too large should show error dialog`() {
|
||||
val initialState = DEFAULT_STATE.copy(
|
||||
viewState = DEFAULT_VIEW_STATE.copy(
|
||||
common = DEFAULT_COMMON_STATE.copy(name = "test"),
|
||||
selectedType = AddSendState.ViewState.Content.SendType.File(
|
||||
uri = mockk(),
|
||||
name = "test.png",
|
||||
displaySize = null,
|
||||
// Max size is 104857600
|
||||
sizeBytes = 104857601,
|
||||
),
|
||||
),
|
||||
)
|
||||
val viewModel = createViewModel(initialState)
|
||||
|
||||
viewModel.trySendAction(AddSendAction.SaveClick)
|
||||
|
||||
assertEquals(
|
||||
initialState.copy(
|
||||
dialogState = AddSendState.DialogState.Error(
|
||||
title = R.string.an_error_has_occurred.asText(),
|
||||
message = R.string.max_file_size.asText(),
|
||||
),
|
||||
),
|
||||
viewModel.stateFlow.value,
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `CopyLinkClick with nonnull sendUrl should copy to clipboard`() {
|
||||
val sendUrl = "www.test.com/send-stuff"
|
||||
@@ -584,11 +643,41 @@ class AddSendViewModelTest : BaseViewModelTest() {
|
||||
|
||||
@Test
|
||||
fun `FileChose should emit ShowToast`() = runTest {
|
||||
val viewModel = createViewModel()
|
||||
viewModel.eventFlow.test {
|
||||
viewModel.trySendAction(AddSendAction.FileChoose(fileData = mockk()))
|
||||
assertEquals(AddSendEvent.ShowToast("Not Yet Implemented".asText()), awaitItem())
|
||||
}
|
||||
val initialState = DEFAULT_STATE.copy(
|
||||
viewState = DEFAULT_VIEW_STATE.copy(
|
||||
selectedType = AddSendState.ViewState.Content.SendType.File(
|
||||
uri = null,
|
||||
name = null,
|
||||
displaySize = null,
|
||||
sizeBytes = null,
|
||||
),
|
||||
),
|
||||
)
|
||||
val fileName = "test.png"
|
||||
val uri = mockk<Uri>()
|
||||
val size = 50L
|
||||
val fileData = IntentManager.FileData(
|
||||
fileName = fileName,
|
||||
uri = uri,
|
||||
sizeBytes = size,
|
||||
)
|
||||
val viewModel = createViewModel(initialState)
|
||||
|
||||
viewModel.trySendAction(AddSendAction.FileChoose(fileData = fileData))
|
||||
|
||||
assertEquals(
|
||||
initialState.copy(
|
||||
viewState = DEFAULT_VIEW_STATE.copy(
|
||||
selectedType = AddSendState.ViewState.Content.SendType.File(
|
||||
uri = uri,
|
||||
name = fileName,
|
||||
displaySize = null,
|
||||
sizeBytes = size,
|
||||
),
|
||||
),
|
||||
),
|
||||
viewModel.stateFlow.value,
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -606,7 +695,12 @@ class AddSendViewModelTest : BaseViewModelTest() {
|
||||
val viewModel = createViewModel()
|
||||
val premiumUserState = DEFAULT_STATE.copy(isPremiumUser = true)
|
||||
val expectedViewState = DEFAULT_VIEW_STATE.copy(
|
||||
selectedType = AddSendState.ViewState.Content.SendType.File,
|
||||
selectedType = AddSendState.ViewState.Content.SendType.File(
|
||||
name = null,
|
||||
displaySize = null,
|
||||
sizeBytes = null,
|
||||
uri = null,
|
||||
),
|
||||
)
|
||||
// Make sure we are a premium user
|
||||
mutableUserStateFlow.tryEmit(
|
||||
|
||||
+13
-7
@@ -1,7 +1,7 @@
|
||||
package com.x8bit.bitwarden.ui.tools.feature.send.addsend.util
|
||||
|
||||
import com.bitwarden.core.SendFileView
|
||||
import com.bitwarden.core.SendType
|
||||
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockFileView
|
||||
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockSendView
|
||||
import com.x8bit.bitwarden.ui.tools.feature.send.addsend.AddSendState
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
@@ -21,17 +21,23 @@ class AddSendStateExtensionsTest {
|
||||
key = null,
|
||||
accessCount = 0U,
|
||||
text = null,
|
||||
file = SendFileView(
|
||||
id = "",
|
||||
fileName = "",
|
||||
size = "",
|
||||
sizeName = "",
|
||||
file = createMockFileView(number = 1).copy(
|
||||
id = null,
|
||||
size = null,
|
||||
sizeName = null,
|
||||
),
|
||||
hasPassword = false,
|
||||
)
|
||||
|
||||
val result = DEFAULT_VIEW_STATE
|
||||
.copy(selectedType = AddSendState.ViewState.Content.SendType.File)
|
||||
.copy(
|
||||
selectedType = AddSendState.ViewState.Content.SendType.File(
|
||||
name = "mockFileName-1",
|
||||
displaySize = "mockSizeName-1",
|
||||
sizeBytes = 1,
|
||||
uri = null,
|
||||
),
|
||||
)
|
||||
.toSendView(FIXED_CLOCK)
|
||||
|
||||
assertEquals(sendView, result)
|
||||
|
||||
+19
-3
@@ -21,7 +21,12 @@ class SendViewExtensionsTest {
|
||||
baseWebSendUrl = "www.test.com/",
|
||||
)
|
||||
|
||||
assertEquals(DEFAULT_STATE, result)
|
||||
assertEquals(
|
||||
DEFAULT_STATE.copy(
|
||||
common = DEFAULT_COMMON.copy(originalSendView = sendView),
|
||||
),
|
||||
result,
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -33,7 +38,13 @@ class SendViewExtensionsTest {
|
||||
baseWebSendUrl = "www.test.com/",
|
||||
)
|
||||
|
||||
assertEquals(DEFAULT_STATE.copy(selectedType = DEFAULT_TEXT_TYPE), result)
|
||||
assertEquals(
|
||||
DEFAULT_STATE.copy(
|
||||
common = DEFAULT_COMMON.copy(originalSendView = sendView),
|
||||
selectedType = DEFAULT_TEXT_TYPE,
|
||||
),
|
||||
result,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,7 +81,12 @@ private val DEFAULT_TEXT_TYPE: AddSendState.ViewState.Content.SendType.Text =
|
||||
)
|
||||
|
||||
private val DEFAULT_FILE_TYPE: AddSendState.ViewState.Content.SendType.File =
|
||||
AddSendState.ViewState.Content.SendType.File
|
||||
AddSendState.ViewState.Content.SendType.File(
|
||||
name = "mockFileName-1",
|
||||
displaySize = "mockSizeName-1",
|
||||
sizeBytes = null,
|
||||
uri = null,
|
||||
)
|
||||
|
||||
private val DEFAULT_STATE: AddSendState.ViewState.Content =
|
||||
AddSendState.ViewState.Content(
|
||||
|
||||
Reference in new issue
Block a user