package com.tcm.training.admin.system.service; import com.baomidou.mybatisplus.core.MybatisConfiguration; import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; import com.tcm.training.admin.system.dto.PlatformQualificationPublishStatusRequest; import com.tcm.training.admin.system.dto.PlatformQualificationSaveRequest; import com.tcm.training.admin.system.entity.PlatformQualification; import com.tcm.training.admin.system.mapper.PlatformQualificationMapper; import com.tcm.training.admin.system.vo.PlatformQualificationDetailVO; import org.apache.ibatis.builder.MapperBuilderAssistant; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import java.time.LocalDateTime; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) class PlatformQualificationAppServiceTest { @BeforeAll static void initLambdaCache() { MapperBuilderAssistant assistant = new MapperBuilderAssistant(new MybatisConfiguration(), ""); TableInfoHelper.initTableInfo(assistant, PlatformQualification.class); } @Mock private PlatformQualificationMapper platformQualificationMapper; @InjectMocks private PlatformQualificationAppService platformQualificationAppService; @Captor private ArgumentCaptor platformQualificationCaptor; @Test void createShouldPersistRichTextQualification() { doAnswer(invocation -> { PlatformQualification item = invocation.getArgument(0); item.setId(1L); return 1; }).when(platformQualificationMapper).insert(any(PlatformQualification.class)); PlatformQualification persisted = new PlatformQualification(); persisted.setId(1L); persisted.setQualificationName("增值电信业务经营许可证"); persisted.setQualificationType(PlatformQualification.TYPE_RICH_TEXT); persisted.setRecordNumber("1654156"); persisted.setContentHtml("

资质内容

"); persisted.setSort(99); persisted.setPublishEnabled(1); persisted.setCreatedAt(LocalDateTime.of(2026, 3, 26, 21, 10, 0)); when(platformQualificationMapper.selectOne(any())).thenReturn(persisted); PlatformQualificationSaveRequest request = new PlatformQualificationSaveRequest(); request.setQualificationName(" 增值电信业务经营许可证 "); request.setQualificationType("rich_text"); request.setRecordNumber(" 1654156 "); request.setContentHtml("

资质内容

"); request.setSort(99); request.setPublishEnabled(true); PlatformQualificationDetailVO result = platformQualificationAppService.create(request); verify(platformQualificationMapper).insert(platformQualificationCaptor.capture()); assertEquals("增值电信业务经营许可证", platformQualificationCaptor.getValue().getQualificationName()); assertEquals("1654156", platformQualificationCaptor.getValue().getRecordNumber()); assertEquals("

资质内容

", platformQualificationCaptor.getValue().getContentHtml()); assertNull(platformQualificationCaptor.getValue().getLinkUrl()); assertEquals("增值电信业务经营许可证", result.getQualificationName()); } @Test void createShouldPersistLinkQualification() { doAnswer(invocation -> { PlatformQualification item = invocation.getArgument(0); item.setId(2L); return 1; }).when(platformQualificationMapper).insert(any(PlatformQualification.class)); PlatformQualification persisted = new PlatformQualification(); persisted.setId(2L); persisted.setQualificationName("营业执照"); persisted.setQualificationType(PlatformQualification.TYPE_LINK); persisted.setRecordNumber("ICP-2026"); persisted.setLinkUrl("https://example.com/license"); persisted.setSort(10); persisted.setPublishEnabled(0); when(platformQualificationMapper.selectOne(any())).thenReturn(persisted); PlatformQualificationSaveRequest request = new PlatformQualificationSaveRequest(); request.setQualificationName("营业执照"); request.setQualificationType("LINK"); request.setRecordNumber("ICP-2026"); request.setLinkUrl(" https://example.com/license "); request.setSort(10); request.setPublishEnabled(false); platformQualificationAppService.create(request); verify(platformQualificationMapper).insert(platformQualificationCaptor.capture()); assertEquals(PlatformQualification.TYPE_LINK, platformQualificationCaptor.getValue().getQualificationType()); assertEquals("https://example.com/license", platformQualificationCaptor.getValue().getLinkUrl()); assertNull(platformQualificationCaptor.getValue().getContentHtml()); } @Test void createShouldRejectBlankRichTextContent() { PlatformQualificationSaveRequest request = new PlatformQualificationSaveRequest(); request.setQualificationName("活动资质"); request.setQualificationType("RICH_TEXT"); request.setRecordNumber("A-001"); request.setContentHtml("


"); request.setSort(1); request.setPublishEnabled(true); IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> platformQualificationAppService.create(request)); assertEquals("请输入资质内容", exception.getMessage()); } @Test void createShouldRejectEmptyLinkUrl() { PlatformQualificationSaveRequest request = new PlatformQualificationSaveRequest(); request.setQualificationName("活动资质"); request.setQualificationType("LINK"); request.setRecordNumber("A-001"); request.setLinkUrl(" "); request.setSort(1); request.setPublishEnabled(true); IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> platformQualificationAppService.create(request)); assertEquals("请输入跳转链接", exception.getMessage()); } @Test void patchPublishStatusShouldUpdateFlag() { PlatformQualification persisted = new PlatformQualification(); persisted.setId(3L); persisted.setQualificationName("备案资质"); persisted.setQualificationType(PlatformQualification.TYPE_LINK); persisted.setRecordNumber("A-002"); persisted.setLinkUrl("https://example.com"); persisted.setSort(2); persisted.setPublishEnabled(0); when(platformQualificationMapper.selectOne(any())).thenReturn(persisted); PlatformQualificationPublishStatusRequest request = new PlatformQualificationPublishStatusRequest(); request.setPublishEnabled(true); platformQualificationAppService.patchPublishStatus(3L, request); verify(platformQualificationMapper).updateById(platformQualificationCaptor.capture()); assertEquals(Integer.valueOf(1), platformQualificationCaptor.getValue().getPublishEnabled()); } }