Первые тесты
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
package com.github.nullptroma.wallenc.infrastructure.android.db.app.repository
|
||||
|
||||
import androidx.room.Room
|
||||
import androidx.test.core.app.ApplicationProvider
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
import com.github.nullptroma.wallenc.domain.vault.model.YandexAccount
|
||||
import com.github.nullptroma.wallenc.infrastructure.android.db.app.AppDb
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.junit.After
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertNull
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class YandexAccountRepositoryTest {
|
||||
|
||||
private lateinit var db: AppDb
|
||||
private lateinit var repository: YandexAccountRepository
|
||||
|
||||
@Before
|
||||
fun setUp() {
|
||||
val context = ApplicationProvider.getApplicationContext<android.content.Context>()
|
||||
db = Room.inMemoryDatabaseBuilder(context, AppDb::class.java).build()
|
||||
repository = YandexAccountRepository(
|
||||
dao = db.yandexAccountDao,
|
||||
ioDispatcher = Dispatchers.IO,
|
||||
)
|
||||
}
|
||||
|
||||
@After
|
||||
fun tearDown() {
|
||||
db.close()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun insertAndLoadByVaultUuid() = runBlocking {
|
||||
val account = YandexAccount(
|
||||
vaultUuid = "vault-1",
|
||||
yandexUserId = "user-1",
|
||||
email = "test@yandex.ru",
|
||||
oauthToken = "token-abc",
|
||||
)
|
||||
repository.insert(account)
|
||||
val loaded = repository.getByVaultUuid("vault-1")
|
||||
assertEquals(account, loaded)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun updateCredentialsChangesToken() = runBlocking {
|
||||
repository.insert(
|
||||
YandexAccount(
|
||||
vaultUuid = "vault-2",
|
||||
yandexUserId = "user-2",
|
||||
email = "old@yandex.ru",
|
||||
oauthToken = "old-token",
|
||||
),
|
||||
)
|
||||
repository.updateCredentials("vault-2", "new@yandex.ru", "new-token")
|
||||
val loaded = repository.getByVaultUuid("vault-2")
|
||||
assertEquals("new@yandex.ru", loaded?.email)
|
||||
assertEquals("new-token", loaded?.oauthToken)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun deleteByVaultUuidRemovesRow() = runBlocking {
|
||||
repository.insert(
|
||||
YandexAccount(
|
||||
vaultUuid = "vault-3",
|
||||
yandexUserId = "user-3",
|
||||
email = "x@yandex.ru",
|
||||
oauthToken = "t",
|
||||
),
|
||||
)
|
||||
repository.deleteByVaultUuid("vault-3")
|
||||
assertNull(repository.getByVaultUuid("vault-3"))
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.github.nullptroma.wallenc.domain.vault.db
|
||||
package com.github.nullptroma.wallenc.infrastructure.android.db
|
||||
|
||||
import android.content.Context
|
||||
import androidx.room.Room
|
||||
import com.github.nullptroma.wallenc.domain.vault.db.app.AppDb
|
||||
import com.github.nullptroma.wallenc.infrastructure.android.db.app.AppDb
|
||||
|
||||
class RoomFactory(private val context: Context) {
|
||||
fun buildAppDb(): AppDb {
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.github.nullptroma.wallenc.infrastructure.android.db.app
|
||||
|
||||
import androidx.room.Database
|
||||
import androidx.room.RoomDatabase
|
||||
import com.github.nullptroma.wallenc.infrastructure.android.db.app.dao.StorageKeyMapDao
|
||||
import com.github.nullptroma.wallenc.infrastructure.android.db.app.dao.StorageMetaInfoDao
|
||||
import com.github.nullptroma.wallenc.infrastructure.android.db.app.dao.StorageSyncGroupDao
|
||||
import com.github.nullptroma.wallenc.infrastructure.android.db.app.dao.YandexAccountDao
|
||||
import com.github.nullptroma.wallenc.infrastructure.android.db.app.model.DbStorageKeyMap
|
||||
import com.github.nullptroma.wallenc.infrastructure.android.db.app.model.DbStorageMetaInfo
|
||||
import com.github.nullptroma.wallenc.infrastructure.android.db.app.model.DbStorageSyncGroup
|
||||
import com.github.nullptroma.wallenc.infrastructure.android.db.app.model.DbYandexAccount
|
||||
|
||||
interface IAppDb {
|
||||
val storageKeyMapDao: StorageKeyMapDao
|
||||
val storageMetaInfoDao: StorageMetaInfoDao
|
||||
val storageSyncGroupDao: StorageSyncGroupDao
|
||||
val yandexAccountDao: YandexAccountDao
|
||||
}
|
||||
|
||||
@Database(
|
||||
entities = [DbStorageKeyMap::class, DbStorageMetaInfo::class, DbYandexAccount::class, DbStorageSyncGroup::class],
|
||||
version = 5,
|
||||
exportSchema = false
|
||||
)
|
||||
abstract class AppDb : IAppDb, RoomDatabase() {
|
||||
abstract override val storageKeyMapDao: StorageKeyMapDao
|
||||
abstract override val storageMetaInfoDao: StorageMetaInfoDao
|
||||
abstract override val storageSyncGroupDao: StorageSyncGroupDao
|
||||
abstract override val yandexAccountDao: YandexAccountDao
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.github.nullptroma.wallenc.domain.vault.db.app.dao
|
||||
package com.github.nullptroma.wallenc.infrastructure.android.db.app.dao
|
||||
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Delete
|
||||
import androidx.room.Insert
|
||||
import androidx.room.OnConflictStrategy
|
||||
import androidx.room.Query
|
||||
import com.github.nullptroma.wallenc.domain.vault.db.app.model.DbStorageKeyMap
|
||||
import com.github.nullptroma.wallenc.infrastructure.android.db.app.model.DbStorageKeyMap
|
||||
|
||||
@Dao
|
||||
interface StorageKeyMapDao {
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.github.nullptroma.wallenc.domain.vault.db.app.dao
|
||||
package com.github.nullptroma.wallenc.infrastructure.android.db.app.dao
|
||||
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Delete
|
||||
import androidx.room.Insert
|
||||
import androidx.room.OnConflictStrategy
|
||||
import androidx.room.Query
|
||||
import com.github.nullptroma.wallenc.domain.vault.db.app.model.DbStorageMetaInfo
|
||||
import com.github.nullptroma.wallenc.infrastructure.android.db.app.model.DbStorageMetaInfo
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import java.util.UUID
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.github.nullptroma.wallenc.domain.vault.db.app.dao
|
||||
package com.github.nullptroma.wallenc.infrastructure.android.db.app.dao
|
||||
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Insert
|
||||
import androidx.room.OnConflictStrategy
|
||||
import androidx.room.Query
|
||||
import com.github.nullptroma.wallenc.domain.vault.db.app.model.DbStorageSyncGroup
|
||||
import com.github.nullptroma.wallenc.infrastructure.android.db.app.model.DbStorageSyncGroup
|
||||
|
||||
@Dao
|
||||
interface StorageSyncGroupDao {
|
||||
@@ -1,9 +1,9 @@
|
||||
package com.github.nullptroma.wallenc.domain.vault.db.app.dao
|
||||
package com.github.nullptroma.wallenc.infrastructure.android.db.app.dao
|
||||
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Insert
|
||||
import androidx.room.Query
|
||||
import com.github.nullptroma.wallenc.domain.vault.db.app.model.DbYandexAccount
|
||||
import com.github.nullptroma.wallenc.infrastructure.android.db.app.model.DbYandexAccount
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
@Dao
|
||||
@@ -1,14 +1,15 @@
|
||||
package com.github.nullptroma.wallenc.domain.vault.db.app.model
|
||||
package com.github.nullptroma.wallenc.infrastructure.android.db.app.model
|
||||
|
||||
import androidx.room.ColumnInfo
|
||||
import androidx.room.Entity
|
||||
import androidx.room.PrimaryKey
|
||||
import com.github.nullptroma.wallenc.domain.vault.model.StorageKeyMap
|
||||
import com.github.nullptroma.wallenc.domain.datatypes.EncryptKey
|
||||
import java.util.UUID
|
||||
|
||||
@Entity(tableName = "storage_key_maps")
|
||||
data class DbStorageKeyMap(
|
||||
@androidx.room.PrimaryKey
|
||||
@PrimaryKey
|
||||
@ColumnInfo(name = "source_uuid") val sourceUuid: UUID,
|
||||
@ColumnInfo(name = "key") val key: ByteArray
|
||||
) {
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.github.nullptroma.wallenc.domain.vault.db.app.model
|
||||
package com.github.nullptroma.wallenc.infrastructure.android.db.app.model
|
||||
|
||||
import androidx.room.ColumnInfo
|
||||
import androidx.room.Entity
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.github.nullptroma.wallenc.domain.vault.db.app.model
|
||||
package com.github.nullptroma.wallenc.infrastructure.android.db.app.model
|
||||
|
||||
import androidx.room.ColumnInfo
|
||||
import androidx.room.Entity
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.github.nullptroma.wallenc.domain.vault.db.app.model
|
||||
package com.github.nullptroma.wallenc.infrastructure.android.db.app.model
|
||||
|
||||
import androidx.room.Entity
|
||||
import androidx.room.Index
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.github.nullptroma.wallenc.domain.vault.db.app.repository
|
||||
package com.github.nullptroma.wallenc.infrastructure.android.db.app.repository
|
||||
|
||||
import com.github.nullptroma.wallenc.domain.vault.db.app.dao.StorageKeyMapDao
|
||||
import com.github.nullptroma.wallenc.domain.vault.db.app.model.DbStorageKeyMap
|
||||
import com.github.nullptroma.wallenc.infrastructure.android.db.app.dao.StorageKeyMapDao
|
||||
import com.github.nullptroma.wallenc.infrastructure.android.db.app.model.DbStorageKeyMap
|
||||
import com.github.nullptroma.wallenc.domain.vault.model.StorageKeyMap
|
||||
import com.github.nullptroma.wallenc.domain.vault.ports.StorageKeyMapStore
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.github.nullptroma.wallenc.domain.vault.db.app.repository
|
||||
package com.github.nullptroma.wallenc.infrastructure.android.db.app.repository
|
||||
|
||||
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
|
||||
import com.github.nullptroma.wallenc.domain.vault.db.app.dao.StorageMetaInfoDao
|
||||
import com.github.nullptroma.wallenc.domain.vault.db.app.model.DbStorageMetaInfo
|
||||
import com.github.nullptroma.wallenc.infrastructure.android.db.app.dao.StorageMetaInfoDao
|
||||
import com.github.nullptroma.wallenc.infrastructure.android.db.app.model.DbStorageMetaInfo
|
||||
import com.github.nullptroma.wallenc.domain.vault.utils.IProvider
|
||||
import com.github.nullptroma.wallenc.domain.common.impl.CommonStorageMetaInfo
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.github.nullptroma.wallenc.domain.vault.db.app.repository
|
||||
package com.github.nullptroma.wallenc.infrastructure.android.db.app.repository
|
||||
|
||||
import com.github.nullptroma.wallenc.domain.interfaces.IStorageSyncGroupStore
|
||||
import com.github.nullptroma.wallenc.domain.interfaces.StorageSyncGroup
|
||||
import com.github.nullptroma.wallenc.domain.interfaces.StorageSyncGroupEncryptionKind
|
||||
import com.github.nullptroma.wallenc.domain.vault.db.app.dao.StorageSyncGroupDao
|
||||
import com.github.nullptroma.wallenc.domain.vault.db.app.model.DbStorageSyncGroup
|
||||
import com.github.nullptroma.wallenc.infrastructure.android.db.app.dao.StorageSyncGroupDao
|
||||
import com.github.nullptroma.wallenc.infrastructure.android.db.app.model.DbStorageSyncGroup
|
||||
import com.github.nullptroma.wallenc.domain.vault.utils.IProvider
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
import kotlinx.coroutines.withContext
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.github.nullptroma.wallenc.domain.vault.db.app.repository
|
||||
package com.github.nullptroma.wallenc.infrastructure.android.db.app.repository
|
||||
|
||||
import com.github.nullptroma.wallenc.domain.vault.db.app.dao.YandexAccountDao
|
||||
import com.github.nullptroma.wallenc.domain.vault.db.app.model.DbYandexAccount
|
||||
import com.github.nullptroma.wallenc.infrastructure.android.db.app.dao.YandexAccountDao
|
||||
import com.github.nullptroma.wallenc.infrastructure.android.db.app.model.DbYandexAccount
|
||||
import com.github.nullptroma.wallenc.domain.vault.model.YandexAccount
|
||||
import com.github.nullptroma.wallenc.domain.vault.ports.YandexAccountStore
|
||||
import kotlinx.coroutines.CoroutineDispatcher
|
||||
@@ -1,31 +0,0 @@
|
||||
package com.github.nullptroma.wallenc.domain.vault.db.app
|
||||
|
||||
import androidx.room.Database
|
||||
import androidx.room.RoomDatabase
|
||||
import com.github.nullptroma.wallenc.domain.vault.db.app.dao.StorageKeyMapDao
|
||||
import com.github.nullptroma.wallenc.domain.vault.db.app.dao.StorageMetaInfoDao
|
||||
import com.github.nullptroma.wallenc.domain.vault.db.app.dao.StorageSyncGroupDao
|
||||
import com.github.nullptroma.wallenc.domain.vault.db.app.dao.YandexAccountDao
|
||||
import com.github.nullptroma.wallenc.domain.vault.db.app.model.DbStorageKeyMap
|
||||
import com.github.nullptroma.wallenc.domain.vault.db.app.model.DbStorageMetaInfo
|
||||
import com.github.nullptroma.wallenc.domain.vault.db.app.model.DbStorageSyncGroup
|
||||
import com.github.nullptroma.wallenc.domain.vault.db.app.model.DbYandexAccount
|
||||
|
||||
interface IAppDb {
|
||||
val storageKeyMapDao: StorageKeyMapDao
|
||||
val storageMetaInfoDao: StorageMetaInfoDao
|
||||
val storageSyncGroupDao: StorageSyncGroupDao
|
||||
val yandexAccountDao: YandexAccountDao
|
||||
}
|
||||
|
||||
@Database(
|
||||
entities = [DbStorageKeyMap::class, DbStorageMetaInfo::class, DbYandexAccount::class, DbStorageSyncGroup::class],
|
||||
version = 5,
|
||||
exportSchema = false
|
||||
)
|
||||
abstract class AppDb : IAppDb, RoomDatabase() {
|
||||
abstract override val storageKeyMapDao: StorageKeyMapDao
|
||||
abstract override val storageMetaInfoDao: StorageMetaInfoDao
|
||||
abstract override val storageSyncGroupDao: StorageSyncGroupDao
|
||||
abstract override val yandexAccountDao: YandexAccountDao
|
||||
}
|
||||
Reference in New Issue
Block a user