Explorar o código

test: 锁定 ReadSettings gateway 写入边界

5151561 hai 3 meses
pai
achega
00eeafdcb3

+ 4 - 0
app/src/main/java/io/legado/app/data/repository/ReadSettingsRepository.kt

@@ -543,6 +543,10 @@ class ReadSettingsRepository(
     }
 }
 
+/**
+ * ReadSettings 是 101 字段的读取超集;gateway update 当前只承诺持久化以下 45 个键。
+ * 扩展此边界时必须同步更新 ReadSettingsMappingTest 的显式键集契约。
+ */
 internal fun ReadSettings.toGatewayPrefMap(): Map<String, Any?> = mapOf(
     PreferKey.screenOrientation to screenOrientation,
     PreferKey.keepLight to keepLight,

+ 5 - 0
app/src/main/java/io/legado/app/domain/gateway/ReadSettingsGateway.kt

@@ -7,5 +7,10 @@ interface ReadSettingsGateway {
     val currentSettings: ReadSettings
     val settings: Flow<ReadSettings>
 
+    /**
+     * 仅持久化 gateway 实现映射声明的 45 个配置键。
+     * [ReadSettings] 是包含遗留阅读菜单/样式字段的读模型超集;未纳入 gateway 映射的字段
+     * 仍须通过对应的遗留 Repository setter 写入,不能在此处 copy 后期待自动落盘。
+     */
     suspend fun update(transform: (ReadSettings) -> ReadSettings)
 }

+ 9 - 0
app/src/test/java/io/legado/app/data/repository/ReadSettingsMappingTest.kt

@@ -12,6 +12,15 @@ import org.junit.Test
 
 class ReadSettingsMappingTest {
 
+    @Test
+    fun `gateway 持久化边界固定为显式声明的 45 键`() {
+        val actualKeys = ReadSettings().toGatewayPrefMap().keys
+        val expectedKeys = ReadSettings().expectedGatewayPrefMap().keys
+
+        assertEquals(45, actualKeys.size)
+        assertEquals(expectedKeys, actualKeys)
+    }
+
     @Test
     fun `阅读设置 gateway 45 键写读映射逐字段对应`() {
         val repository = ReadSettingsRepository(