BIT-1351 Sorting Items by name (#823)

This commit is contained in:
Oleg Semenenko 2024-01-27 22:51:56 -06:00 committed by Álison Fernandes
parent 2dde22f762
commit cf7f0ad7fe
7 changed files with 113 additions and 3 deletions

View file

@ -57,6 +57,7 @@ import com.x8bit.bitwarden.data.vault.repository.model.UpdateCipherResult
import com.x8bit.bitwarden.data.vault.repository.model.UpdateSendResult
import com.x8bit.bitwarden.data.vault.repository.model.VaultData
import com.x8bit.bitwarden.data.vault.repository.model.VaultUnlockResult
import com.x8bit.bitwarden.data.vault.repository.util.sortAlphabetically
import com.x8bit.bitwarden.data.vault.repository.util.toDomainsData
import com.x8bit.bitwarden.data.vault.repository.util.toEncryptedNetworkCipher
import com.x8bit.bitwarden.data.vault.repository.util.toEncryptedNetworkCipherResponse
@ -1027,7 +1028,7 @@ class VaultRepositoryImpl(
cipherList = it.toEncryptedSdkCipherList(),
)
.fold(
onSuccess = { ciphers -> DataState.Loaded(ciphers) },
onSuccess = { ciphers -> DataState.Loaded(ciphers.sortAlphabetically()) },
onFailure = { throwable -> DataState.Error(throwable) },
)
}
@ -1059,7 +1060,7 @@ class VaultRepositoryImpl(
folderList = it.toEncryptedSdkFolderList(),
)
.fold(
onSuccess = { folders -> DataState.Loaded(folders) },
onSuccess = { folders -> DataState.Loaded(folders.sortAlphabetically()) },
onFailure = { throwable -> DataState.Error(throwable) },
)
}
@ -1078,7 +1079,11 @@ class VaultRepositoryImpl(
collectionList = it.toEncryptedSdkCollectionList(),
)
.fold(
onSuccess = { collections -> DataState.Loaded(collections) },
onSuccess = { collections ->
DataState.Loaded(
collections.sortAlphabetically(),
)
},
onFailure = { throwable -> DataState.Error(throwable) },
)
}

View file

@ -7,6 +7,7 @@ import com.bitwarden.core.Card
import com.bitwarden.core.Cipher
import com.bitwarden.core.CipherRepromptType
import com.bitwarden.core.CipherType
import com.bitwarden.core.CipherView
import com.bitwarden.core.Field
import com.bitwarden.core.FieldType
import com.bitwarden.core.Identity
@ -26,6 +27,7 @@ import com.x8bit.bitwarden.data.vault.datasource.network.model.SyncResponseJson
import com.x8bit.bitwarden.data.vault.datasource.network.model.UriMatchTypeJson
import java.time.ZoneOffset
import java.time.ZonedDateTime
import java.util.Locale
/**
* Converts a Bitwarden SDK [Cipher] object to a corresponding
@ -491,3 +493,10 @@ fun FieldTypeJson.toSdkFieldType(): FieldType =
FieldTypeJson.BOOLEAN -> FieldType.BOOLEAN
FieldTypeJson.LINKED -> FieldType.LINKED
}
/**
* Sorts the data in alphabetical order by name.
*/
@JvmName("toAlphabeticallySortedCipherList")
fun List<CipherView>.sortAlphabetically(): List<CipherView> =
this.sortedBy { it.name.uppercase(Locale.getDefault()) }

View file

@ -1,7 +1,9 @@
package com.x8bit.bitwarden.data.vault.repository.util
import com.bitwarden.core.Collection
import com.bitwarden.core.CollectionView
import com.x8bit.bitwarden.data.vault.datasource.network.model.SyncResponseJson
import java.util.Locale
/**
* Converts a [SyncResponseJson.Collection] object to a corresponding Bitwarden SDK [Collection]
@ -23,3 +25,10 @@ fun SyncResponseJson.Collection.toEncryptedSdkCollection(): Collection =
*/
fun List<SyncResponseJson.Collection>.toEncryptedSdkCollectionList(): List<Collection> =
map { it.toEncryptedSdkCollection() }
/**
* Sorts the data in alphabetical order by name.
*/
@JvmName("toAlphabeticallySortedCollectionList")
fun List<CollectionView>.sortAlphabetically(): List<CollectionView> =
this.sortedBy { it.name.uppercase(Locale.getDefault()) }

View file

@ -1,7 +1,9 @@
package com.x8bit.bitwarden.data.vault.repository.util
import com.bitwarden.core.Folder
import com.bitwarden.core.FolderView
import com.x8bit.bitwarden.data.vault.datasource.network.model.SyncResponseJson
import java.util.Locale
/**
* Converts a list of [SyncResponseJson.Folder] objects to a list of corresponding
@ -20,3 +22,10 @@ fun SyncResponseJson.Folder.toEncryptedSdkFolder(): Folder =
name = name.orEmpty(),
revisionDate = revisionDate.toInstant(),
)
/**
* Sorts the data in alphabetical order by name.
*/
@JvmName("toAlphabeticallySortedFolderList")
fun List<FolderView>.sortAlphabetically(): List<FolderView> =
this.sortedBy { it.name.uppercase(Locale.getDefault()) }

View file

@ -18,6 +18,7 @@ import com.x8bit.bitwarden.data.vault.datasource.network.model.createMockLogin
import com.x8bit.bitwarden.data.vault.datasource.network.model.createMockPasswordHistory
import com.x8bit.bitwarden.data.vault.datasource.network.model.createMockSecureNote
import com.x8bit.bitwarden.data.vault.datasource.network.model.createMockUri
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCipherView
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockSdkAttachment
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockSdkCard
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockSdkCipher
@ -270,4 +271,29 @@ class VaultSdkCipherExtensionsTest {
sdkFieldType,
)
}
@Suppress("MaxLineLength")
@Test
fun `toSortAlphabetically should sort ciphers by name`() {
val list = listOf(
createMockCipherView(1).copy(name = "c"),
createMockCipherView(1).copy(name = "B"),
createMockCipherView(1).copy(name = "z"),
createMockCipherView(1).copy(name = "A"),
createMockCipherView(1).copy(name = "D"),
)
val expected = listOf(
createMockCipherView(1).copy(name = "A"),
createMockCipherView(1).copy(name = "B"),
createMockCipherView(1).copy(name = "c"),
createMockCipherView(1).copy(name = "D"),
createMockCipherView(1).copy(name = "z"),
)
assertEquals(
expected,
list.sortAlphabetically(),
)
}
}

View file

@ -2,6 +2,7 @@ package com.x8bit.bitwarden.data.vault.repository.util
import com.bitwarden.core.Collection
import com.x8bit.bitwarden.data.vault.datasource.network.model.SyncResponseJson
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCollectionView
import org.junit.Test
import org.junit.jupiter.api.Assertions.assertEquals
@ -56,4 +57,29 @@ class VaultSdkCollectionExtensionsTest {
),
)
}
@Suppress("MaxLineLength")
@Test
fun `toSortAlphabetically should sort collections by name`() {
val list = listOf(
createMockCollectionView(1).copy(name = "c"),
createMockCollectionView(1).copy(name = "B"),
createMockCollectionView(1).copy(name = "z"),
createMockCollectionView(1).copy(name = "A"),
createMockCollectionView(1).copy(name = "D"),
)
val expected = listOf(
createMockCollectionView(1).copy(name = "A"),
createMockCollectionView(1).copy(name = "B"),
createMockCollectionView(1).copy(name = "c"),
createMockCollectionView(1).copy(name = "D"),
createMockCollectionView(1).copy(name = "z"),
)
assertEquals(
expected,
list.sortAlphabetically(),
)
}
}

View file

@ -1,6 +1,7 @@
package com.x8bit.bitwarden.data.vault.repository.util
import com.x8bit.bitwarden.data.vault.datasource.network.model.createMockFolder
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockFolderView
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockSdkFolder
import org.junit.Assert.assertEquals
import org.junit.Test
@ -32,4 +33,29 @@ class VaultSdkFolderExtensionsTest {
sdkFolder,
)
}
@Suppress("MaxLineLength")
@Test
fun `toSortAlphabetically should sort folders by name`() {
val list = listOf(
createMockFolderView(1).copy(name = "c"),
createMockFolderView(1).copy(name = "D"),
createMockFolderView(1).copy(name = "B"),
createMockFolderView(1).copy(name = "A"),
createMockFolderView(1).copy(name = "z"),
)
val expected = listOf(
createMockFolderView(1).copy(name = "A"),
createMockFolderView(1).copy(name = "B"),
createMockFolderView(1).copy(name = "c"),
createMockFolderView(1).copy(name = "D"),
createMockFolderView(1).copy(name = "z"),
)
assertEquals(
expected,
list.sortAlphabetically(),
)
}
}