Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito.atLeastOnce
import org.mockito.Mockito.mock
import org.mockito.Mockito.never
import org.mockito.Mockito.verify
import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations
Expand Down Expand Up @@ -490,6 +491,44 @@ class FileOpeningViewModelTest {
verify(signedContainerObserver, atLeastOnce()).onChanged(signedContainer)
}

@Test
fun fileOpeningViewModel_handleFiles_openExistingSignedContainer_doesNotEmitFileAdded() =
runTest {
val uri: Uri = mock()
val uris = listOf(uri)
val containerFile =
getResourceFileAsFile(context, "example.asice", ee.ria.DigiDoc.common.R.raw.example)
val isSivaConfirmed = true

val signedContainer =
runBlocking {
SignedContainer.openOrCreate(context, containerFile, listOf(containerFile), isSivaConfirmed)
}

`when`(
fileOpeningRepository.uriToFile(context, contentResolver, uri),
).thenReturn(containerFile)
`when`(
fileOpeningRepository.openOrCreateContainer(
context,
contentResolver,
uris,
isSivaConfirmed,
),
).thenReturn(signedContainer)
`when`(sivaRepository.isTimestampedContainer(signedContainer)).thenReturn(false)

viewModel.handleFiles(
context,
uris,
isSivaConfirmed = isSivaConfirmed,
fileOpeningMethod = FileOpeningMethod.ALL,
)

verify(filesAddedObserver, never()).onChanged(listOf(containerFile))
verify(signedContainerObserver, atLeastOnce()).onChanged(signedContainer)
}

@Test
fun fileOpeningViewModel_handleFiles_cryptoFileSuccess() =
runTest {
Expand Down Expand Up @@ -528,7 +567,7 @@ class FileOpeningViewModelTest {
fileOpeningMethod = FileOpeningMethod.ALL,
)

verify(filesAddedObserver, atLeastOnce()).onChanged(listOf(file))
verify(filesAddedObserver, never()).onChanged(listOf(file))
verify(cryptoContainerObserver, atLeastOnce()).onChanged(cryptoContainer)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,8 @@ class CryptoFileOpeningViewModel
}
} else {
try {
val files = urisToFile(context, contentResolver, uris)

val cryptoContainer =
fileOpeningRepository.openOrCreateCryptoContainer(
context,
Expand All @@ -169,7 +171,9 @@ class CryptoFileOpeningViewModel

_cryptoContainer.postValue(cryptoContainer)

_filesAdded.postValue(urisToFile(context, contentResolver, uris))
if (!cryptoContainer.isExistingContainer) {
_filesAdded.postValue(files)
}
} catch (e: Exception) {
_cryptoContainer.postValue(null)
_launchFilePicker.postValue(false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,8 @@ class FileOpeningViewModel
uris.size == 1 && file.isCryptoContainer()
} == true

val opensExistingContainer: Boolean

if ((fileOpeningMethod == FileOpeningMethod.ALL || isExternalFile) && isCdoc) {
val cryptoContainer =
fileOpeningRepository.openOrCreateCryptoContainer(
Expand All @@ -215,6 +217,7 @@ class FileOpeningViewModel
)

_cryptoContainer.postValue(cryptoContainer)
opensExistingContainer = cryptoContainer.isExistingContainer
} else {
val signedContainer =
fileOpeningRepository.openOrCreateContainer(
Expand Down Expand Up @@ -242,9 +245,12 @@ class FileOpeningViewModel
} else {
_signedContainer.postValue(signedContainer)
}
opensExistingContainer = signedContainer.isExistingContainer()
}

_filesAdded.postValue(urisToFile(context, contentResolver, uris))
if (!opensExistingContainer) {
_filesAdded.postValue(files)
}
} catch (e: Exception) {
_signedContainer.postValue(null)
_launchFilePicker.postValue(false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ import kotlinx.coroutines.test.runTest
import org.apache.commons.io.FileUtils
import org.junit.After
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertTrue
import org.junit.Assume.assumeTrue
Expand Down Expand Up @@ -1281,6 +1282,30 @@ class CryptoContainerTest {
}

@Suppress("SameParameterValue")
@Test
fun cryptoContainer_isExistingContainer_trueForExistingCdoc() =
runTest {
val cryptoContainer = openOrCreate(context, containerCDOC1, listOf(containerCDOC1), cdoc2Settings)

assertTrue(cryptoContainer.isExistingContainer)
}

@Test
fun cryptoContainer_isExistingContainer_falseForPlainFile() =
runTest {
val cryptoContainer = openOrCreate(context, testFile, listOf(testFile), cdoc2Settings)

assertFalse(cryptoContainer.isExistingContainer)
}

@Test
fun cryptoContainer_isExistingContainer_falseWhenForced() =
runTest {
val cryptoContainer = openOrCreate(context, containerCDOC1, listOf(containerCDOC1), cdoc2Settings, true)

assertFalse(cryptoContainer.isExistingContainer)
}

private fun createTempFileWithStringContent(
filename: String,
content: String,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ class CryptoContainer
val recipients: ArrayList<Addressee>,
val decrypted: Boolean,
val encrypted: Boolean,
val isExistingContainer: Boolean = false,
) : Container {
fun containerMimetype(): String = CONTAINER_MIME_TYPE

Expand Down Expand Up @@ -225,6 +226,7 @@ class CryptoContainer
recipients,
decrypted = false,
encrypted = true,
isExistingContainer = true,
)
}

Expand Down Expand Up @@ -261,6 +263,7 @@ class CryptoContainer
recipients,
decrypted = false,
encrypted = true,
isExistingContainer = true,
)
}

Expand Down Expand Up @@ -433,6 +436,7 @@ class CryptoContainer
recipients: List<Addressee>,
decrypted: Boolean,
encrypted: Boolean,
isExistingContainer: Boolean = false,
): CryptoContainer =
CryptoContainer(
context,
Expand All @@ -441,6 +445,7 @@ class CryptoContainer
ArrayList(recipients),
decrypted,
encrypted,
isExistingContainer,
)

@Throws(Exception::class)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -717,6 +717,14 @@ class SignedContainerTest {
assertTrue(pdfContainer.getName().endsWith("pdf"))
}

@Test
fun signedContainer_isExistingContainer_trueForSignedPdf() =
runTest {
val signedContainer = openOrCreate(context, signedPdfDocument, listOf(signedPdfDocument), true)

assertTrue(signedContainer.isExistingContainer())
}

@Suppress("SameParameterValue")
private fun createTempFileWithStringContent(
filename: String,
Expand Down
Loading