outbox sync
This commit is contained in:
@@ -23,11 +23,14 @@ cd backend && go test ./...
|
|||||||
mise up_mobile [device|emulator] # défaut: emulator
|
mise up_mobile [device|emulator] # défaut: emulator
|
||||||
cd mobile-kotlin && ./gradlew :app:assembleDebug
|
cd mobile-kotlin && ./gradlew :app:assembleDebug
|
||||||
|
|
||||||
|
# Frontend tests (JVM, Robolectric + Room in-memory)
|
||||||
|
cd mobile-kotlin && ./gradlew :app:testDebugUnitTest
|
||||||
|
|
||||||
# PostgreSQL (via docker-compose)
|
# PostgreSQL (via docker-compose)
|
||||||
docker compose up postgres -d
|
docker compose up postgres -d
|
||||||
```
|
```
|
||||||
|
|
||||||
Il n'y a **pas** de tests mobiles (pas de dossier `src/test` ni `src/androidTest`).
|
Tests mobiles : JVM unit tests dans `app/src/test` (JUnit + Robolectric + Room in-memory), lancés via `:app:testDebugUnitTest`. Pas de tests instrumentés (`androidTest`).
|
||||||
|
|
||||||
## Backend Structure
|
## Backend Structure
|
||||||
|
|
||||||
|
|||||||
@@ -40,6 +40,11 @@ android {
|
|||||||
compose = true
|
compose = true
|
||||||
buildConfig = true
|
buildConfig = true
|
||||||
}
|
}
|
||||||
|
testOptions {
|
||||||
|
unitTests {
|
||||||
|
isIncludeAndroidResources = true
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
@@ -81,4 +86,11 @@ dependencies {
|
|||||||
implementation(libs.coil.compose)
|
implementation(libs.coil.compose)
|
||||||
|
|
||||||
debugImplementation(libs.androidx.compose.ui.tooling)
|
debugImplementation(libs.androidx.compose.ui.tooling)
|
||||||
|
|
||||||
|
testImplementation(libs.junit)
|
||||||
|
testImplementation(libs.robolectric)
|
||||||
|
testImplementation(libs.androidx.test.core)
|
||||||
|
testImplementation(libs.androidx.arch.core.testing)
|
||||||
|
testImplementation(libs.kotlinx.coroutines.test)
|
||||||
|
testImplementation(libs.androidx.room.testing)
|
||||||
}
|
}
|
||||||
+2
-1
@@ -8,6 +8,7 @@ import com.vaultdrop.mobile.data.local.entity.FileStatus
|
|||||||
import com.vaultdrop.mobile.data.remote.ApiClient
|
import com.vaultdrop.mobile.data.remote.ApiClient
|
||||||
import com.vaultdrop.mobile.data.remote.dto.FileDto
|
import com.vaultdrop.mobile.data.remote.dto.FileDto
|
||||||
import com.vaultdrop.mobile.domain.GenerateId
|
import com.vaultdrop.mobile.domain.GenerateId
|
||||||
|
import com.vaultdrop.mobile.domain.SyncPlacement
|
||||||
import com.vaultdrop.mobile.domain.computeCategory
|
import com.vaultdrop.mobile.domain.computeCategory
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@@ -173,7 +174,7 @@ class FileRepository @Inject constructor(
|
|||||||
// Le snapshot serveur confirme la présence cloud : si une copie
|
// Le snapshot serveur confirme la présence cloud : si une copie
|
||||||
// physique existe aussi, placement local-cloud (jamais d'écrasement
|
// physique existe aussi, placement local-cloud (jamais d'écrasement
|
||||||
// de l'uri / de régression du placement).
|
// de l'uri / de régression du placement).
|
||||||
syncStatus = if (existing?.uri != null) FileStatus.LOCAL_CLOUD else FileStatus.CLOUD,
|
syncStatus = SyncPlacement.confirmed(existing?.uri != null),
|
||||||
processed = existing?.processed ?: false,
|
processed = existing?.processed ?: false,
|
||||||
addedAt = existing?.addedAt ?: now,
|
addedAt = existing?.addedAt ?: now,
|
||||||
updatedAt = now,
|
updatedAt = now,
|
||||||
|
|||||||
+2
-1
@@ -9,6 +9,7 @@ import com.vaultdrop.mobile.data.remote.ApiClient
|
|||||||
import com.vaultdrop.mobile.data.remote.dto.FolderDto
|
import com.vaultdrop.mobile.data.remote.dto.FolderDto
|
||||||
import com.vaultdrop.mobile.domain.DeviceIdentity
|
import com.vaultdrop.mobile.domain.DeviceIdentity
|
||||||
import com.vaultdrop.mobile.domain.GenerateId
|
import com.vaultdrop.mobile.domain.GenerateId
|
||||||
|
import com.vaultdrop.mobile.domain.SyncPlacement
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Singleton
|
import javax.inject.Singleton
|
||||||
@@ -77,7 +78,7 @@ class FolderRepository @Inject constructor(
|
|||||||
// Le snapshot serveur confirme la présence cloud : si une copie
|
// Le snapshot serveur confirme la présence cloud : si une copie
|
||||||
// physique existe aussi, placement local-cloud (jamais d'écrasement
|
// physique existe aussi, placement local-cloud (jamais d'écrasement
|
||||||
// de l'uri / de régression du placement).
|
// de l'uri / de régression du placement).
|
||||||
syncStatus = if (existing?.uri != null) FolderStatus.LOCAL_CLOUD else FolderStatus.CLOUD,
|
syncStatus = SyncPlacement.confirmed(existing?.uri != null),
|
||||||
addedAt = existing?.addedAt ?: now,
|
addedAt = existing?.addedAt ?: now,
|
||||||
updatedAt = now,
|
updatedAt = now,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -17,6 +17,11 @@ moshi = "1.15.1"
|
|||||||
securityCrypto = "1.0.0"
|
securityCrypto = "1.0.0"
|
||||||
timber = "5.0.1"
|
timber = "5.0.1"
|
||||||
coil = "2.7.0"
|
coil = "2.7.0"
|
||||||
|
junit = "4.13.2"
|
||||||
|
robolectric = "4.14.1"
|
||||||
|
androidxTestCore = "1.6.1"
|
||||||
|
archCore = "2.2.0"
|
||||||
|
coroutinesTest = "1.9.0"
|
||||||
|
|
||||||
[libraries]
|
[libraries]
|
||||||
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
|
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
|
||||||
@@ -50,6 +55,12 @@ moshi-kotlin = { group = "com.squareup.moshi", name = "moshi-kotlin", version.re
|
|||||||
androidx-security-crypto = { group = "androidx.security", name = "security-crypto", version.ref = "securityCrypto" }
|
androidx-security-crypto = { group = "androidx.security", name = "security-crypto", version.ref = "securityCrypto" }
|
||||||
timber = { group = "com.jakewharton.timber", name = "timber", version.ref = "timber" }
|
timber = { group = "com.jakewharton.timber", name = "timber", version.ref = "timber" }
|
||||||
coil-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = "coil" }
|
coil-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = "coil" }
|
||||||
|
junit = { group = "junit", name = "junit", version.ref = "junit" }
|
||||||
|
robolectric = { group = "org.robolectric", name = "robolectric", version.ref = "robolectric" }
|
||||||
|
androidx-test-core = { group = "androidx.test", name = "core-ktx", version.ref = "androidxTestCore" }
|
||||||
|
androidx-arch-core-testing = { group = "androidx.arch.core", name = "core-testing", version.ref = "archCore" }
|
||||||
|
kotlinx-coroutines-test = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-test", version.ref = "coroutinesTest" }
|
||||||
|
androidx-room-testing = { group = "androidx.room", name = "room-testing", version.ref = "room" }
|
||||||
|
|
||||||
[plugins]
|
[plugins]
|
||||||
android-application = { id = "com.android.application", version.ref = "agp" }
|
android-application = { id = "com.android.application", version.ref = "agp" }
|
||||||
|
|||||||
Reference in New Issue
Block a user