Files
honeyDueKMP/composeApp/src/commonTest/kotlin/com/tt/honeyDue/viewmodel/DocumentViewModelTest.kt
Trey T 334767cee7 Production hardening: password complexity, token refresh, network resilience
Password complexity: real-time validation UI on register, onboarding, and reset screens
  (uppercase, lowercase, digit, min 8 chars) — Compose + iOS Swift
iOS privacy descriptions: camera, photo library, photo save usage strings
Token refresh: Ktor interceptor catches 401 "token_expired", refreshes, retries
Retry with backoff: 3 retries on 5xx/IO errors, exponential delay (1s base, 10s max)
Gzip: ContentEncoding plugin on all platform HTTP clients
Request timeouts: 30s request, 10s connect, 30s socket
Validation rules: split passwordMissingLetter into uppercase/lowercase (iOS Swift)
Test fixes: corrected import paths in 5 existing test files
New tests: HTTP client retry/refresh (9), validation rules
2026-03-26 14:05:33 -05:00

66 lines
1.4 KiB
Kotlin

package com.tt.honeyDue.viewmodel
import com.tt.honeyDue.viewmodel.DocumentViewModel
import com.tt.honeyDue.network.ApiResult
import kotlin.test.Test
import kotlin.test.assertIs
class DocumentViewModelTest {
// MARK: - Initialization Tests
@Test
fun testInitialDocumentsState() {
// Given
val viewModel = DocumentViewModel()
// Then
assertIs<ApiResult.Idle>(viewModel.documentsState.value)
}
@Test
fun testInitialDocumentDetailState() {
// Given
val viewModel = DocumentViewModel()
// Then
assertIs<ApiResult.Idle>(viewModel.documentDetailState.value)
}
@Test
fun testInitialCreateState() {
// Given
val viewModel = DocumentViewModel()
// Then
assertIs<ApiResult.Idle>(viewModel.createState.value)
}
@Test
fun testInitialUpdateState() {
// Given
val viewModel = DocumentViewModel()
// Then
assertIs<ApiResult.Idle>(viewModel.updateState.value)
}
@Test
fun testInitialDeleteState() {
// Given
val viewModel = DocumentViewModel()
// Then
assertIs<ApiResult.Idle>(viewModel.deleteState.value)
}
@Test
fun testInitialDownloadState() {
// Given
val viewModel = DocumentViewModel()
// Then
assertIs<ApiResult.Idle>(viewModel.downloadState.value)
}
}