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:
@@ -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"));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user