diff --git a/app/src/main/java/com/placeholder/ringhealth/feature/device/DeviceScreen.kt b/app/src/main/java/com/placeholder/ringhealth/feature/device/DeviceScreen.kt index 6dbb58d..9be0a7d 100644 --- a/app/src/main/java/com/placeholder/ringhealth/feature/device/DeviceScreen.kt +++ b/app/src/main/java/com/placeholder/ringhealth/feature/device/DeviceScreen.kt @@ -126,7 +126,7 @@ private fun DeviceInfoCard(state: DeviceUiState, modifier: Modifier = Modifier) /** 单行设置项(只读展示,开关在详情页操作)。 */ @Composable -internal fun SettingRow(setting: DeviceFunctionSetting, modifier: Modifier = Modifier) { +private fun SettingRow(setting: DeviceFunctionSetting, modifier: Modifier = Modifier) { HealthCard(modifier = modifier) { Row( modifier = Modifier.fillMaxWidth(), diff --git a/app/src/test/java/com/placeholder/ringhealth/feature/device/DeviceViewModelTest.kt b/app/src/test/java/com/placeholder/ringhealth/feature/device/DeviceViewModelTest.kt index 2a60c78..e83ef18 100644 --- a/app/src/test/java/com/placeholder/ringhealth/feature/device/DeviceViewModelTest.kt +++ b/app/src/test/java/com/placeholder/ringhealth/feature/device/DeviceViewModelTest.kt @@ -33,8 +33,9 @@ class DeviceViewModelTest { } @Test - fun `输出设备状态与五个功能开关`() = runTest(dispatcher) { - val viewModel = DeviceViewModel(MockRingDeviceRepository()) + fun `输出设备状态与五个功能开关,且仓库变化会回流到 UI 状态`() = runTest(dispatcher) { + val repository = MockRingDeviceRepository() + val viewModel = DeviceViewModel(repository) backgroundScope.launch { viewModel.uiState.collect {} } advanceUntilIdle() @@ -43,6 +44,14 @@ class DeviceViewModelTest { assertEquals(78, state.device.batteryPercent) assertEquals("1.0.5", state.device.firmwareVersion) assertEquals(5, state.settings.size) + + // 上面三个值恰好与 stateIn 的 initialValue 相同(DeviceViewModel 的 initialValue + // 直接取仓库当前值),所以**单靠它们无法区分「combine 发射过」与「一直停在 initialValue」** + // (ledger Ruling R30,审查者指出)。这里绕开 ViewModel 直接改仓库,再断言状态跟着变 —— + // 只有 combine 真的在发射,这一条才可能成立。 + repository.setFunctionEnabled("stress", true) + advanceUntilIdle() + assertTrue(viewModel.uiState.value.settings.first { it.id == "stress" }.enabled) } @Test