package com.codechecker.cache.config; import org.junit.jupiter.api.Test; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; class ConfigLoaderTest { @Test void loadsDefaultsWhenNoBusinessConfig() { CheckerConfig config = ConfigLoader.load(null); assertTrue(config.isEnabled()); assertEquals("notify", config.getMode()); assertTrue(config.getDetection().getPatterns().contains("W01")); assertFalse(config.isScanTestSources()); } @Test void businessConfigOverridesDefaults(@org.junit.jupiter.api.io.TempDir Path tmp) throws IOException { Path cfg = tmp.resolve("biz.yaml"); Files.write(cfg, ("enabled: false\n" + "mode: block\n" + "include_modules:\n - jnpf-tenant\n" + "notify:\n enabled: false\n").getBytes(StandardCharsets.UTF_8)); CheckerConfig config = ConfigLoader.load(cfg); assertFalse(config.isEnabled()); assertEquals("block", config.getMode()); assertTrue(config.isBlockMode()); assertEquals(1, config.getIncludeModules().size()); assertEquals("jnpf-tenant", config.getIncludeModules().get(0)); // 未覆盖项保留默认 assertFalse(config.getNotify().isEnabled()); assertTrue(config.getDetection().getPatterns().contains("W01")); } @Test void loadsWebhookUrlFromConfig(@org.junit.jupiter.api.io.TempDir Path tmp) throws IOException { Path cfg = tmp.resolve("biz.yaml"); Files.write(cfg, ("notify:\n" + " webhook_url: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=test\n" ).getBytes(StandardCharsets.UTF_8)); CheckerConfig config = ConfigLoader.load(cfg); assertEquals("https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=test", config.getNotify().getWebhookUrl()); } @Test void legacyWebhookEnvUrlStillWorks(@org.junit.jupiter.api.io.TempDir Path tmp) throws IOException { Path cfg = tmp.resolve("biz.yaml"); Files.write(cfg, ("notify:\n" + " webhook_env: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=legacy\n" ).getBytes(StandardCharsets.UTF_8)); CheckerConfig config = ConfigLoader.load(cfg); assertEquals("https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=legacy", config.getNotify().getWebhookUrl()); } }