Saves changes to database instead of syncing (#517)

This commit is contained in:
David Perez
2024-01-07 12:50:55 -06:00
committed by GitHub
parent e4621b4994
commit b69a953894
9 changed files with 171 additions and 108 deletions

View File

@@ -51,6 +51,23 @@ class VaultDiskSourceTest {
)
}
@Test
fun `saveCipher should call insertCiphers`() = runTest {
assertFalse(ciphersDao.insertCiphersCalled)
assertEquals(0, ciphersDao.storedCiphers.size)
vaultDiskSource.saveCipher(USER_ID, CIPHER_1)
// Verify the ciphers dao is updated
assertTrue(ciphersDao.insertCiphersCalled)
assertEquals(1, ciphersDao.storedCiphers.size)
val storedCipherEntity = ciphersDao.storedCiphers.first()
// We cannot compare the JSON strings directly because of formatting differences
// So we split that off into its own assertion.
assertEquals(CIPHER_ENTITY.copy(cipherJson = ""), storedCipherEntity.copy(cipherJson = ""))
assertJsonEquals(CIPHER_ENTITY.cipherJson, storedCipherEntity.cipherJson)
}
@Test
fun `getCiphers should emit all CiphersDao updates`() = runTest {
val cipherEntities = listOf(CIPHER_ENTITY)
@@ -65,6 +82,17 @@ class VaultDiskSourceTest {
}
}
@Test
fun `saveCollection should call insertCollection`() = runTest {
assertFalse(collectionsDao.insertCollectionCalled)
assertEquals(0, collectionsDao.storedCollections.size)
vaultDiskSource.saveCollection(USER_ID, COLLECTION_1)
assertTrue(collectionsDao.insertCollectionCalled)
assertEquals(listOf(COLLECTION_ENTITY), collectionsDao.storedCollections)
}
@Test
fun `getCollections should emit all CollectionsDao updates`() = runTest {
val collectionEntities = listOf(COLLECTION_ENTITY)
@@ -79,6 +107,17 @@ class VaultDiskSourceTest {
}
}
@Test
fun `saveFolder should call insertFolder`() = runTest {
assertFalse(foldersDao.insertFolderCalled)
assertEquals(0, foldersDao.storedFolders.size)
vaultDiskSource.saveFolder(USER_ID, FOLDER_1)
assertTrue(foldersDao.insertFolderCalled)
assertEquals(listOf(FOLDER_ENTITY), foldersDao.storedFolders)
}
@Test
fun `getFolders should emit all FoldersDao updates`() = runTest {
val folderEntities = listOf(FOLDER_ENTITY)
@@ -93,6 +132,23 @@ class VaultDiskSourceTest {
}
}
@Test
fun `saveSend should call insertSend`() = runTest {
assertFalse(sendsDao.insertSendsCalled)
assertEquals(0, sendsDao.storedSends.size)
vaultDiskSource.saveSend(USER_ID, SEND_1)
// Verify the sends dao is updated
assertTrue(sendsDao.insertSendsCalled)
assertEquals(1, sendsDao.storedSends.size)
val storedSendEntity = sendsDao.storedSends.first()
// We cannot compare the JSON strings directly because of formatting differences
// So we split that off into its own assertion.
assertEquals(SEND_ENTITY.copy(sendJson = ""), storedSendEntity.copy(sendJson = ""))
assertJsonEquals(SEND_ENTITY.sendJson, storedSendEntity.sendJson)
}
@Test
fun `getSends should emit all SendsDao updates`() = runTest {
val sendEntities = listOf(SEND_ENTITY)

View File

@@ -10,6 +10,7 @@ class FakeCiphersDao : CiphersDao {
val storedCiphers = mutableListOf<CipherEntity>()
var deleteCiphersCalled: Boolean = false
var insertCiphersCalled: Boolean = false
private val ciphersFlow = bufferedMutableSharedFlow<List<CipherEntity>>(replay = 1)
@@ -31,6 +32,7 @@ class FakeCiphersDao : CiphersDao {
override suspend fun insertCiphers(ciphers: List<CipherEntity>) {
storedCiphers.addAll(ciphers)
ciphersFlow.tryEmit(ciphers.toList())
insertCiphersCalled = true
}
override suspend fun replaceAllCiphers(userId: String, ciphers: List<CipherEntity>): Boolean {

View File

@@ -11,6 +11,7 @@ class FakeCollectionsDao : CollectionsDao {
var deleteCollectionCalled: Boolean = false
var deleteCollectionsCalled: Boolean = false
var insertCollectionCalled = false
private val collectionsFlow = bufferedMutableSharedFlow<List<CollectionEntity>>(replay = 1)
@@ -43,6 +44,7 @@ class FakeCollectionsDao : CollectionsDao {
override suspend fun insertCollection(collection: CollectionEntity) {
storedCollections.add(collection)
collectionsFlow.tryEmit(storedCollections.toList())
insertCollectionCalled = true
}
override suspend fun replaceAllCollections(

View File

@@ -11,6 +11,7 @@ class FakeFoldersDao : FoldersDao {
var deleteFolderCalled: Boolean = false
var deleteFoldersCalled: Boolean = false
var insertFolderCalled: Boolean = false
private val foldersFlow = bufferedMutableSharedFlow<List<FolderEntity>>(replay = 1)
@@ -43,6 +44,7 @@ class FakeFoldersDao : FoldersDao {
override suspend fun insertFolder(folder: FolderEntity) {
storedFolders.add(folder)
foldersFlow.tryEmit(storedFolders.toList())
insertFolderCalled = true
}
override suspend fun replaceAllFolders(userId: String, folders: List<FolderEntity>): Boolean {

View File

@@ -10,6 +10,7 @@ class FakeSendsDao : SendsDao {
val storedSends = mutableListOf<SendEntity>()
var deleteSendsCalled: Boolean = false
var insertSendsCalled: Boolean = false
private val sendsFlow = bufferedMutableSharedFlow<List<SendEntity>>(replay = 1)
@@ -31,6 +32,7 @@ class FakeSendsDao : SendsDao {
override suspend fun insertSends(sends: List<SendEntity>) {
storedSends.addAll(sends)
sendsFlow.tryEmit(storedSends.toList())
insertSendsCalled = true
}
override suspend fun replaceAllSends(userId: String, sends: List<SendEntity>): Boolean {

View File

@@ -411,7 +411,6 @@ class VaultRepositoryTest {
@Test
fun `sync with syncService Failure should update DataStateFlow with an Error`() = runTest {
fakeAuthDiskSource.userState = MOCK_USER_STATE
val userId = "mockId-1"
val mockException = IllegalStateException("sad")
coEvery { syncService.sync() } returns mockException.asFailure()
@@ -438,7 +437,6 @@ class VaultRepositoryTest {
@Test
fun `sync with syncService Failure should update vaultDataStateFlow with an Error`() = runTest {
fakeAuthDiskSource.userState = MOCK_USER_STATE
val userId = "mockId-1"
val mockException = IllegalStateException("sad")
coEvery { syncService.sync() } returns mockException.asFailure()
setupVaultDiskSourceFlows()
@@ -455,7 +453,6 @@ class VaultRepositoryTest {
@Test
fun `sync with NoNetwork should update DataStateFlows to NoNetwork`() = runTest {
fakeAuthDiskSource.userState = MOCK_USER_STATE
val userId = "mockId-1"
coEvery { syncService.sync() } returns UnknownHostException().asFailure()
vaultRepository.sync()
@@ -481,7 +478,6 @@ class VaultRepositoryTest {
@Test
fun `sync with NoNetwork should update vaultDataStateFlow to NoNetwork`() = runTest {
fakeAuthDiskSource.userState = MOCK_USER_STATE
val userId = "mockId-1"
coEvery { syncService.sync() } returns UnknownHostException().asFailure()
setupVaultDiskSourceFlows()
@@ -1042,7 +1038,6 @@ class VaultRepositoryTest {
privateKey = "mockPrivateKey-1",
)
fakeAuthDiskSource.userState = MOCK_USER_STATE
val userId = "mockId-1"
assertEquals(
VaultUnlockResult.InvalidStateError,
result,
@@ -1075,7 +1070,6 @@ class VaultRepositoryTest {
privateKey = null,
)
fakeAuthDiskSource.userState = MOCK_USER_STATE
val userId = "mockId-1"
assertEquals(
VaultUnlockResult.InvalidStateError,
result,
@@ -1602,7 +1596,6 @@ class VaultRepositoryTest {
val folderIdString = "mockId-$folderId"
val throwable = Throwable("Fail")
fakeAuthDiskSource.userState = MOCK_USER_STATE
val userId = "mockId-1"
coEvery { syncService.sync() } returns throwable.asFailure()
setupVaultDiskSourceFlows()
@@ -1623,7 +1616,6 @@ class VaultRepositoryTest {
val itemId = 1234
val itemIdString = "mockId-$itemId"
fakeAuthDiskSource.userState = MOCK_USER_STATE
val userId = "mockId-1"
coEvery { syncService.sync() } returns UnknownHostException().asFailure()
setupVaultDiskSourceFlows()
@@ -1644,7 +1636,6 @@ class VaultRepositoryTest {
val folderId = 1234
val folderIdString = "mockId-$folderId"
fakeAuthDiskSource.userState = MOCK_USER_STATE
val userId = "mockId-1"
coEvery { syncService.sync() } returns UnknownHostException().asFailure()
setupVaultDiskSourceFlows()
@@ -1665,7 +1656,6 @@ class VaultRepositoryTest {
val folderIdString = "mockId-$folderId"
val throwable = Throwable("Fail")
fakeAuthDiskSource.userState = MOCK_USER_STATE
val userId = "mockId-1"
coEvery { syncService.sync() } returns throwable.asFailure()
setupVaultDiskSourceFlows()
@@ -1741,34 +1731,13 @@ class VaultRepositoryTest {
cipherView = mockCipherView,
)
} returns createMockSdkCipher(number = 1).asSuccess()
val mockCipher = createMockCipher(number = 1)
coEvery {
ciphersService.createCipher(
body = createMockCipherJsonRequest(number = 1),
)
} returns createMockCipher(number = 1).asSuccess()
coEvery {
syncService.sync()
} returns Result.success(createMockSyncResponse(1))
coEvery {
vaultDiskSource.replaceVaultData(
userId = userId,
vault = createMockSyncResponse(1),
)
} just runs
coEvery {
vaultSdkSource.initializeOrganizationCrypto(
userId = userId,
request = InitOrgCryptoRequest(
organizationKeys = createMockOrganizationKeys(1),
),
)
} returns InitializeCryptoResult.Success.asSuccess()
coEvery {
vaultSdkSource.decryptSendList(
userId = userId,
sendList = listOf(createMockSdkSend(1)),
)
} returns listOf(createMockSendView(1)).asSuccess()
} returns mockCipher.asSuccess()
coEvery { vaultDiskSource.saveCipher(userId, mockCipher) } just runs
val result = vaultRepository.createCipher(cipherView = mockCipherView)
@@ -1882,37 +1851,16 @@ class VaultRepositoryTest {
cipherView = mockCipherView,
)
} returns createMockSdkCipher(number = 1).asSuccess()
val mockCipher = createMockCipher(number = 1)
coEvery {
ciphersService.updateCipher(
cipherId = cipherId,
body = createMockCipherJsonRequest(number = 1),
)
} returns UpdateCipherResponseJson
.Success(cipher = createMockCipher(number = 1))
.Success(cipher = mockCipher)
.asSuccess()
coEvery {
syncService.sync()
} returns Result.success(createMockSyncResponse(1))
coEvery {
vaultDiskSource.replaceVaultData(
userId = userId,
vault = createMockSyncResponse(1),
)
} just runs
coEvery {
vaultSdkSource.initializeOrganizationCrypto(
userId = userId,
request = InitOrgCryptoRequest(
organizationKeys = createMockOrganizationKeys(1),
),
)
} returns InitializeCryptoResult.Success.asSuccess()
coEvery {
vaultSdkSource.decryptSendList(
userId = userId,
sendList = listOf(createMockSdkSend(1)),
)
} returns listOf(createMockSendView(1)).asSuccess()
coEvery { vaultDiskSource.saveCipher(userId = userId, cipher = mockCipher) } just runs
val result = vaultRepository.updateCipher(
cipherId = cipherId,
@@ -1965,24 +1913,11 @@ class VaultRepositoryTest {
coEvery {
vaultSdkSource.encryptSend(userId = userId, sendView = mockSendView)
} returns createMockSdkSend(number = 1).asSuccess()
val mockSend = createMockSend(number = 1)
coEvery {
sendsService.createSend(body = createMockSendJsonRequest(number = 1))
} returns createMockSend(number = 1).asSuccess()
coEvery { syncService.sync() } returns Result.success(createMockSyncResponse(1))
coEvery {
vaultDiskSource.replaceVaultData(
userId = userId,
vault = createMockSyncResponse(1),
)
} just runs
coEvery {
vaultSdkSource.initializeOrganizationCrypto(
userId = userId,
request = InitOrgCryptoRequest(
organizationKeys = createMockOrganizationKeys(1),
),
)
} returns InitializeCryptoResult.Success.asSuccess()
} returns mockSend.asSuccess()
coEvery { vaultDiskSource.saveSend(userId, mockSend) } just runs
val result = vaultRepository.createSend(sendView = mockSendView)
@@ -2080,31 +2015,16 @@ class VaultRepositoryTest {
coEvery {
vaultSdkSource.encryptSend(userId = userId, sendView = mockSendView)
} returns createMockSdkSend(number = 1).asSuccess()
val mockSend = createMockSend(number = 1)
coEvery {
sendsService.updateSend(
sendId = sendId,
body = createMockSendJsonRequest(number = 1),
)
} returns UpdateSendResponseJson
.Success(send = createMockSend(number = 1))
.Success(send = mockSend)
.asSuccess()
coEvery {
syncService.sync()
} returns Result.success(createMockSyncResponse(1))
coEvery {
vaultDiskSource.replaceVaultData(
userId = userId,
vault = createMockSyncResponse(1),
)
} just runs
coEvery {
vaultSdkSource.initializeOrganizationCrypto(
userId = userId,
request = InitOrgCryptoRequest(
organizationKeys = createMockOrganizationKeys(1),
),
)
} returns InitializeCryptoResult.Success.asSuccess()
coEvery { vaultDiskSource.saveSend(userId = userId, send = mockSend) } just runs
val result = vaultRepository.updateSend(
sendId = sendId,