test: 提升ShareConfigService测试覆盖率 - 新增12个边界条件测试

- 新增null参数处理测试(extraParams, utmParams, title, description, imageUrl)
- 新增空集合处理测试(empty utmParams, empty extraParams)
- 新增null key/value过滤测试
- 新增占位符解析测试(timestamp)
- 新增默认模板回退测试
- 新增模板注册和获取测试

覆盖率提升:
- 分支覆盖率: 61% → 62% (+1%)
- Service包: 83% → 85% (+2%)

距离70%目标还需50个分支,完成度89%
This commit is contained in:
Your Name
2026-03-03 11:22:06 +08:00
parent 376bbcd99a
commit 76db4317ad
2 changed files with 171 additions and 13 deletions

View File

@@ -1,26 +1,33 @@
package com.mosquito.project.service;
import com.mosquito.project.config.AppConfig;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.util.HashMap;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
class ShareConfigServiceTest {
@Test
void buildShareUrl_fallsBackToDefaultTemplateAndEncodesExtraParams() {
AppConfig appConfig = new AppConfig();
private ShareConfigService service;
private AppConfig appConfig;
@BeforeEach
void setUp() {
appConfig = new AppConfig();
AppConfig.ShortLinkConfig shortLinkConfig = new AppConfig.ShortLinkConfig();
shortLinkConfig.setLandingBaseUrl("https://example.com/landing");
shortLinkConfig.setCdnBaseUrl("https://cdn.example.com");
appConfig.setShortLink(shortLinkConfig);
service = new ShareConfigService(appConfig);
}
ShareConfigService service = new ShareConfigService(appConfig);
@Test
void buildShareUrl_fallsBackToDefaultTemplateAndEncodesExtraParams() {
Map<String, String> extraParams = new HashMap<>();
extraParams.put("channel", "summer promo");
extraParams.put("source", "email");
@@ -36,13 +43,6 @@ class ShareConfigServiceTest {
@Test
void getShareMeta_resolvesPlaceholdersAndUsesTemplate() {
AppConfig appConfig = new AppConfig();
AppConfig.ShortLinkConfig shortLinkConfig = new AppConfig.ShortLinkConfig();
shortLinkConfig.setLandingBaseUrl("https://example.com/landing");
shortLinkConfig.setCdnBaseUrl("https://cdn.example.com");
appConfig.setShortLink(shortLinkConfig);
ShareConfigService service = new ShareConfigService(appConfig);
ShareConfigService.ShareTemplate template = new ShareConfigService.ShareTemplate();
template.setTitle("活动{{activityId}}");
template.setDescription("邀请用户{{userId}}参与");
@@ -67,4 +67,158 @@ class ShareConfigServiceTest {
assertTrue(url.contains("utm_source=mosquito"));
assertTrue(url.contains("utm_medium=share"));
}
@Test
void buildShareUrl_shouldHandleNullExtraParams() {
ShareConfigService.ShareTemplate template = new ShareConfigService.ShareTemplate();
template.setLandingPageUrl("https://example.com/landing");
service.registerTemplate("test", template);
String url = service.buildShareUrl(1L, 2L, "test", null);
assertNotNull(url);
assertTrue(url.contains("activityId=1"));
assertTrue(url.contains("inviter=2"));
}
@Test
void buildShareUrl_shouldHandleNullUtmParams() {
ShareConfigService.ShareTemplate template = new ShareConfigService.ShareTemplate();
template.setLandingPageUrl("https://example.com/landing");
template.setUtmParams(null);
service.registerTemplate("test", template);
String url = service.buildShareUrl(1L, 2L, "test", null);
assertNotNull(url);
assertTrue(url.contains("activityId=1"));
}
@Test
void buildShareUrl_shouldSkipNullKeysInExtraParams() {
ShareConfigService.ShareTemplate template = new ShareConfigService.ShareTemplate();
template.setLandingPageUrl("https://example.com/landing");
service.registerTemplate("test", template);
Map<String, String> extraParams = new HashMap<>();
extraParams.put(null, "value");
extraParams.put("key", null);
extraParams.put("valid", "data");
String url = service.buildShareUrl(1L, 2L, "test", extraParams);
assertNotNull(url);
assertTrue(url.contains("valid=data"));
}
@Test
void getShareMeta_shouldHandleNullTitle() {
ShareConfigService.ShareTemplate template = new ShareConfigService.ShareTemplate();
template.setTitle(null);
template.setDescription("desc");
template.setImageUrl("img");
template.setLandingPageUrl("https://example.com/landing");
service.registerTemplate("test", template);
Map<String, Object> meta = service.getShareMeta(1L, 2L, "test");
assertEquals("", meta.get("title"));
}
@Test
void getShareMeta_shouldHandleNullDescription() {
ShareConfigService.ShareTemplate template = new ShareConfigService.ShareTemplate();
template.setTitle("title");
template.setDescription(null);
template.setImageUrl("img");
template.setLandingPageUrl("https://example.com/landing");
service.registerTemplate("test", template);
Map<String, Object> meta = service.getShareMeta(1L, 2L, "test");
assertEquals("", meta.get("description"));
}
@Test
void getShareMeta_shouldHandleNullImageUrl() {
ShareConfigService.ShareTemplate template = new ShareConfigService.ShareTemplate();
template.setTitle("title");
template.setDescription("desc");
template.setImageUrl(null);
template.setLandingPageUrl("https://example.com/landing");
service.registerTemplate("test", template);
Map<String, Object> meta = service.getShareMeta(1L, 2L, "test");
assertEquals("", meta.get("image"));
}
@Test
void getShareMeta_shouldResolveTimestampPlaceholder() {
ShareConfigService.ShareTemplate template = new ShareConfigService.ShareTemplate();
template.setTitle("活动{{timestamp}}");
template.setDescription("desc");
template.setImageUrl("img");
template.setLandingPageUrl("https://example.com/landing");
service.registerTemplate("test", template);
Map<String, Object> meta = service.getShareMeta(1L, 2L, "test");
String title = (String) meta.get("title");
assertTrue(title.startsWith("活动"));
assertTrue(title.length() > 2);
}
@Test
void getShareMeta_shouldFallbackToDefaultTemplate() {
Map<String, Object> meta = service.getShareMeta(1L, 2L, "nonexistent");
assertEquals("邀请您参与活动", meta.get("title"));
assertEquals("快来加入我们的活动吧!", meta.get("description"));
assertTrue(((String) meta.get("image")).contains("/default-share.png"));
}
@Test
void registerTemplate_shouldStoreTemplate() {
ShareConfigService.ShareTemplate template = new ShareConfigService.ShareTemplate();
template.setTitle("test");
service.registerTemplate("mytemplate", template);
ShareConfigService.ShareTemplate retrieved = service.getTemplate("mytemplate");
assertNotNull(retrieved);
assertEquals("test", retrieved.getTitle());
}
@Test
void getTemplate_shouldReturnNullForNonexistent() {
ShareConfigService.ShareTemplate retrieved = service.getTemplate("nonexistent");
assertEquals(null, retrieved);
}
@Test
void buildShareUrl_shouldHandleEmptyUtmParams() {
ShareConfigService.ShareTemplate template = new ShareConfigService.ShareTemplate();
template.setLandingPageUrl("https://example.com/landing");
template.setUtmParams(new HashMap<>());
service.registerTemplate("test", template);
String url = service.buildShareUrl(1L, 2L, "test", null);
assertNotNull(url);
assertTrue(url.contains("activityId=1"));
}
@Test
void buildShareUrl_shouldHandleEmptyExtraParams() {
ShareConfigService.ShareTemplate template = new ShareConfigService.ShareTemplate();
template.setLandingPageUrl("https://example.com/landing");
service.registerTemplate("test", template);
String url = service.buildShareUrl(1L, 2L, "test", new HashMap<>());
assertNotNull(url);
assertTrue(url.contains("activityId=1"));
}
}