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.CommonQuestionSaveRequest;
|
import com.tcm.training.admin.system.entity.CommonQuestion;
|
import com.tcm.training.admin.system.mapper.CommonQuestionMapper;
|
import com.tcm.training.admin.system.vo.CommonQuestionDetailVO;
|
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.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 CommonQuestionAppServiceTest {
|
|
@BeforeAll
|
static void initLambdaCache() {
|
MapperBuilderAssistant assistant = new MapperBuilderAssistant(new MybatisConfiguration(), "");
|
TableInfoHelper.initTableInfo(assistant, CommonQuestion.class);
|
}
|
|
@Mock
|
private CommonQuestionMapper commonQuestionMapper;
|
|
@InjectMocks
|
private CommonQuestionAppService commonQuestionAppService;
|
|
@Captor
|
private ArgumentCaptor<CommonQuestion> commonQuestionCaptor;
|
|
@Test
|
void createShouldPersistQuestion() {
|
doAnswer(invocation -> {
|
CommonQuestion item = invocation.getArgument(0);
|
item.setId(1L);
|
return 1;
|
}).when(commonQuestionMapper).insert(any(CommonQuestion.class));
|
|
CommonQuestion persisted = new CommonQuestion();
|
persisted.setId(1L);
|
persisted.setTitle("常见问题");
|
persisted.setContentHtml("<p>内容</p>");
|
persisted.setCreatedAt(LocalDateTime.of(2026, 3, 26, 21, 10, 0));
|
when(commonQuestionMapper.selectOne(any())).thenReturn(persisted);
|
|
CommonQuestionSaveRequest request = new CommonQuestionSaveRequest();
|
request.setTitle(" 常见问题 ");
|
request.setContentHtml("<p>内容</p>");
|
|
CommonQuestionDetailVO result = commonQuestionAppService.create(request);
|
|
verify(commonQuestionMapper).insert(commonQuestionCaptor.capture());
|
assertEquals("常见问题", commonQuestionCaptor.getValue().getTitle());
|
assertEquals("<p>内容</p>", commonQuestionCaptor.getValue().getContentHtml());
|
assertEquals("常见问题", result.getTitle());
|
}
|
|
@Test
|
void updateShouldPersistQuestion() {
|
CommonQuestion persisted = new CommonQuestion();
|
persisted.setId(2L);
|
persisted.setTitle("旧问题");
|
persisted.setContentHtml("<p>旧内容</p>");
|
when(commonQuestionMapper.selectOne(any())).thenReturn(persisted);
|
|
CommonQuestionSaveRequest request = new CommonQuestionSaveRequest();
|
request.setTitle("新问题");
|
request.setContentHtml("<p>新内容</p>");
|
|
commonQuestionAppService.update(2L, request);
|
|
verify(commonQuestionMapper).updateById(commonQuestionCaptor.capture());
|
assertEquals("新问题", commonQuestionCaptor.getValue().getTitle());
|
assertEquals("<p>新内容</p>", commonQuestionCaptor.getValue().getContentHtml());
|
}
|
|
@Test
|
void createShouldRejectBlankTitle() {
|
CommonQuestionSaveRequest request = new CommonQuestionSaveRequest();
|
request.setTitle(" ");
|
request.setContentHtml("<p>内容</p>");
|
|
IllegalArgumentException exception = assertThrows(IllegalArgumentException.class,
|
() -> commonQuestionAppService.create(request));
|
|
assertEquals("请输入问题", exception.getMessage());
|
}
|
|
@Test
|
void createShouldRejectTooLongTitle() {
|
CommonQuestionSaveRequest request = new CommonQuestionSaveRequest();
|
request.setTitle("这是一个超过十五个字的问题标题啊");
|
request.setContentHtml("<p>内容</p>");
|
|
IllegalArgumentException exception = assertThrows(IllegalArgumentException.class,
|
() -> commonQuestionAppService.create(request));
|
|
assertEquals("请输入15个字以内", exception.getMessage());
|
}
|
|
@Test
|
void createShouldRejectBlankContent() {
|
CommonQuestionSaveRequest request = new CommonQuestionSaveRequest();
|
request.setTitle("问题");
|
request.setContentHtml("<p><br/></p>");
|
|
IllegalArgumentException exception = assertThrows(IllegalArgumentException.class,
|
() -> commonQuestionAppService.create(request));
|
|
assertEquals("请输入内容", exception.getMessage());
|
}
|
|
@Test
|
void deleteShouldRejectMissingQuestion() {
|
when(commonQuestionMapper.selectOne(any())).thenReturn(null);
|
|
IllegalArgumentException exception = assertThrows(IllegalArgumentException.class,
|
() -> commonQuestionAppService.delete(100L));
|
|
assertEquals("常见问题不存在", exception.getMessage());
|
}
|
}
|