fix: 收窄 SettingRow 可见性并强化设备 ViewModel 测试的数据管线断言

This commit is contained in:
2026-09-10 11:32:55 +08:00
parent 20fe2bce66
commit 7170a49664
2 changed files with 12 additions and 3 deletions
@@ -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(),
@@ -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