test: 邮件模板测试

This commit is contained in:
bunny 2025-03-27 17:33:20 +08:00
parent 05cf98ce27
commit 9e993b2b04
6 changed files with 234 additions and 33 deletions

View File

@ -28,10 +28,6 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<!-- asp 切面 --> <!-- asp 切面 -->
<dependency> <dependency>
<groupId>org.aspectj</groupId> <groupId>org.aspectj</groupId>

View File

@ -14,9 +14,7 @@ import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Mono;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -34,12 +32,15 @@ import java.util.Map;
@RequestMapping("api/emailTemplate") @RequestMapping("api/emailTemplate")
public class EmailTemplateController { public class EmailTemplateController {
@Autowired private final EmailTemplateService emailTemplateService;
private EmailTemplateService emailTemplateService;
public EmailTemplateController(EmailTemplateService emailTemplateService) {
this.emailTemplateService = emailTemplateService;
}
@Operation(summary = "分页查询邮件模板", description = "分页查询邮件模板") @Operation(summary = "分页查询邮件模板", description = "分页查询邮件模板")
@GetMapping("getEmailTemplateList/{page}/{limit}") @GetMapping("getEmailTemplateList/{page}/{limit}")
public Mono<Result<PageResult<EmailTemplateVo>>> getEmailTemplateList( public Result<PageResult<EmailTemplateVo>> getEmailTemplateList(
@Parameter(name = "page", description = "当前页", required = true) @Parameter(name = "page", description = "当前页", required = true)
@PathVariable("page") Integer page, @PathVariable("page") Integer page,
@Parameter(name = "limit", description = "每页记录数", required = true) @Parameter(name = "limit", description = "每页记录数", required = true)
@ -47,34 +48,34 @@ public class EmailTemplateController {
EmailTemplateDto dto) { EmailTemplateDto dto) {
Page<EmailTemplate> pageParams = new Page<>(page, limit); Page<EmailTemplate> pageParams = new Page<>(page, limit);
PageResult<EmailTemplateVo> pageResult = emailTemplateService.getEmailTemplateList(pageParams, dto); PageResult<EmailTemplateVo> pageResult = emailTemplateService.getEmailTemplateList(pageParams, dto);
return Mono.just(Result.success(pageResult)); return Result.success(pageResult);
} }
@Operation(summary = "获取邮件模板类型字段", description = "获取邮件模板类型字段") @Operation(summary = "获取邮件模板类型字段", description = "获取邮件模板类型字段")
@GetMapping("getEmailTypes") @GetMapping("getEmailTypes")
public Mono<Result<List<Map<String, String>>>> getEmailTypes() { public Result<List<Map<String, String>>> getEmailTypes() {
List<Map<String, String>> list = emailTemplateService.getEmailTypes(); List<Map<String, String>> list = emailTemplateService.getEmailTypes();
return Mono.just(Result.success(list)); return Result.success(list);
} }
@Operation(summary = "添加邮件模板", description = "添加邮件模板") @Operation(summary = "添加邮件模板", description = "添加邮件模板")
@PostMapping("addEmailTemplate") @PostMapping("addEmailTemplate")
public Mono<Result<String>> addEmailTemplate(@Valid @RequestBody EmailTemplateAddDto dto) { public Result<String> addEmailTemplate(@Valid @RequestBody EmailTemplateAddDto dto) {
emailTemplateService.addEmailTemplate(dto); emailTemplateService.addEmailTemplate(dto);
return Mono.just(Result.success(ResultCodeEnum.ADD_SUCCESS)); return Result.success(ResultCodeEnum.ADD_SUCCESS);
} }
@Operation(summary = "更新邮件模板", description = "更新邮件模板") @Operation(summary = "更新邮件模板", description = "更新邮件模板")
@PutMapping("updateEmailTemplate") @PutMapping("updateEmailTemplate")
public Mono<Result<String>> updateEmailTemplate(@Valid @RequestBody EmailTemplateUpdateDto dto) { public Result<String> updateEmailTemplate(@Valid @RequestBody EmailTemplateUpdateDto dto) {
emailTemplateService.updateEmailTemplate(dto); emailTemplateService.updateEmailTemplate(dto);
return Mono.just(Result.success(ResultCodeEnum.UPDATE_SUCCESS)); return Result.success(ResultCodeEnum.UPDATE_SUCCESS);
} }
@Operation(summary = "删除邮件模板", description = "删除邮件模板") @Operation(summary = "删除邮件模板", description = "删除邮件模板")
@DeleteMapping("deleteEmailTemplate") @DeleteMapping("deleteEmailTemplate")
public Mono<Result<String>> deleteEmailTemplate(@RequestBody List<Long> ids) { public Result<String> deleteEmailTemplate(@RequestBody List<Long> ids) {
emailTemplateService.deleteEmailTemplate(ids); emailTemplateService.deleteEmailTemplate(ids);
return Mono.just(Result.success(ResultCodeEnum.DELETE_SUCCESS)); return Result.success(ResultCodeEnum.DELETE_SUCCESS);
} }
} }

View File

@ -46,8 +46,8 @@
<if test="dto.type != null and dto.type != ''"> <if test="dto.type != null and dto.type != ''">
and template.type like CONCAT('%',#{dto.type},'%') and template.type like CONCAT('%',#{dto.type},'%')
</if> </if>
<if test="dto.isDefault != null and dto.isDefault != ''"> <if test="dto.isDefault != null and dto.type != ''">
and template.isDefault = #{dto.isDefault} and template.is_default = #{dto.isDefault}
</if> </if>
</where> </where>
</select> </select>

View File

@ -0,0 +1,27 @@
package cn.bunny.services.config;
import cn.bunny.services.utils.TokenUtilsTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@TestConfiguration
public class WebConfig {
@Value("${server.port}")
private String port;
@Autowired
private TokenUtilsTest tokenUtils;
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
String token = tokenUtils.getToken();
return builder.rootUri("http://localhost:" + port)
.defaultHeader("token", token)
.defaultHeader("Content-Type", "application/json")
.build();
}
}

View File

@ -1,36 +1,215 @@
package cn.bunny.services.controller.configuration; package cn.bunny.services.controller.configuration;
import cn.bunny.dao.dto.system.email.template.EmailTemplateAddDto;
import cn.bunny.dao.dto.system.email.template.EmailTemplateUpdateDto;
import cn.bunny.dao.enums.EmailTemplateEnums;
import cn.bunny.dao.vo.result.PageResult;
import cn.bunny.dao.vo.result.Result;
import cn.bunny.dao.vo.system.email.EmailTemplateVo;
import cn.bunny.services.utils.TokenUtilsTest;
import cn.hutool.crypto.digest.MD5;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.TypeReference;
import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.util.UriComponentsBuilder;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@SpringBootTest
@WebAppConfiguration
class EmailTemplateControllerTest { class EmailTemplateControllerTest {
private static final String prefix = "/api/emailTemplate";
private String token;
private MockMvc mockMvc;
@Autowired
private WebApplicationContext webApplicationContext;
@Autowired
private TokenUtilsTest tokenUtilsTest;
@Autowired
private RestTemplate restTemplate;
@BeforeEach @BeforeEach
void setUp() { void setUp() {
token = tokenUtilsTest.getToken();
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
.apply(SecurityMockMvcConfigurers.springSecurity())
.build();
} }
@AfterEach @AfterEach
void tearDown() { void tearDown() {
} }
@Test @Test
void getEmailTemplateList() { void getEmailTemplateList() throws Exception {
String api = prefix + "/getEmailTemplateList/1/10";
mockMvc.perform(MockMvcRequestBuilders
.get(api)
.header("token", token)
.contentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE)
.param("type", "code"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(result -> {
String contentAsString = result.getResponse().getContentAsString();
JSONObject jsonObject = JSONObject.parseObject(contentAsString);
if (jsonObject == null) {
throw new Exception(contentAsString);
}
System.out.println(jsonObject);
});
} }
@Test @Test
void getEmailTypes() { void getEmailTypes() throws Exception {
String api = prefix + "/getEmailTypes";
mockMvc.perform(MockMvcRequestBuilders.get(api).header("token", token))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(result -> {
String contentAsString = result.getResponse().getContentAsString();
JSONObject jsonObject = JSONObject.parseObject(contentAsString);
if (jsonObject == null) {
throw new Exception(contentAsString);
}
System.out.println(jsonObject);
});
} }
@Test @Test
void addEmailTemplate() { void addEmailTemplate() throws Exception {
String api = prefix + "/addEmailTemplate";
EmailTemplateAddDto dto = EmailTemplateAddDto.builder()
.emailUser(2L)
.body("哈哈哈")
.templateName("测试")
.subject("test")
.type(EmailTemplateEnums.NOTIFICATION.getType())
.isDefault(false)
.build();
mockMvc.perform(MockMvcRequestBuilders
.post(api)
.header("token", token)
.content(JSONObject.toJSONString(dto))
.contentType(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(result -> {
String contentAsString = result.getResponse().getContentAsString();
JSONObject jsonObject = JSONObject.parseObject(contentAsString);
System.out.println(jsonObject);
});
getEmailTemplateList();
} }
@Test @Test
void updateEmailTemplate() { void updateEmailTemplate() throws Exception {
String api = prefix + "/updateEmailTemplate";
String restTemplateApi = prefix + "/getEmailTemplateList/1/10";
String url = UriComponentsBuilder.fromUriString(restTemplateApi)
.queryParam("subject", "test")
.build()
.toUriString();
Result<PageResult<EmailTemplateVo>> result = restTemplate.exchange(
url,
HttpMethod.GET,
new HttpEntity<>(null),
new ParameterizedTypeReference<Result<PageResult<EmailTemplateVo>>>() {
}
).getBody();
if (result == null) throw new Exception();
if (!result.getCode().equals(200)) throw new Exception(result.getMessage());
if (result.getData().getList().isEmpty()) throw new Exception("没有测试数据");
EmailTemplateVo emailTemplateVo = result.getData().getList().get(0);
EmailTemplateUpdateDto emailTemplateUpdateDto = new EmailTemplateUpdateDto();
BeanUtils.copyProperties(emailTemplateVo, emailTemplateUpdateDto);
System.out.println(emailTemplateUpdateDto);
emailTemplateUpdateDto.setBody(MD5.create().digestHex16(LocalDateTime.now().toString()));
mockMvc.perform(MockMvcRequestBuilders.put(api)
.header("token", token)
.content(JSON.toJSONString(emailTemplateUpdateDto))
.contentType(MediaType.APPLICATION_JSON)
)
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(result1 -> {
String contentAsString = result1.getResponse().getContentAsString();
var pageResultResult = JSONObject.parseObject(contentAsString, new TypeReference<Result<PageResult<EmailTemplateVo>>>() {
});
if (pageResultResult == null) throw new Exception(contentAsString);
if (!pageResultResult.getCode().equals(200)) throw new Exception(pageResultResult.getMessage());
System.out.println(pageResultResult);
});
result = restTemplate.exchange(
url,
HttpMethod.GET,
new HttpEntity<>(null),
new ParameterizedTypeReference<Result<PageResult<EmailTemplateVo>>>() {
}
).getBody();
if (result == null) throw new Exception();
if (!result.getCode().equals(200)) throw new Exception(result.getMessage());
emailTemplateVo = result.getData().getList().get(0);
if (!emailTemplateVo.getBody().equals(emailTemplateUpdateDto.getBody())) {
throw new Exception(emailTemplateUpdateDto.getBody());
}
} }
@Test @Test
void deleteEmailTemplate() { void deleteEmailTemplate() throws Exception {
String api = prefix + "/deleteEmailTemplate";
List<Long> ids = new ArrayList<>();
ids.add(1905180657917157378L);
mockMvc.perform(MockMvcRequestBuilders
.delete(api)
.header("token", token)
.contentType(MediaType.APPLICATION_JSON)
.content(JSON.toJSONString(ids)))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(result -> {
String contentAsString = result.getResponse().getContentAsString();
JSONObject jsonObject = JSONObject.parseObject(contentAsString);
System.out.println(jsonObject);
});
} }
} }

View File

@ -18,7 +18,10 @@ import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.ParameterizedTypeReference; import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.*; import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers; import org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers;
import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.context.web.WebAppConfiguration;
@ -98,16 +101,11 @@ class UserLoginLogControllerTest {
Map<String, String> params = JSON.parseObject(JSON.toJSONString(dto), new TypeReference<>() { Map<String, String> params = JSON.parseObject(JSON.toJSONString(dto), new TypeReference<>() {
}); });
HttpHeaders headers = new HttpHeaders();
headers.set("token", token);
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<Map<String, String>> request = new HttpEntity<>(params, headers);
// 发送请求 // 发送请求
ResponseEntity<Result<PageResult<UserLoginLogVo>>> response = restTemplate.exchange( ResponseEntity<Result<PageResult<UserLoginLogVo>>> response = restTemplate.exchange(
"http://localhost:7070" + prefix + "/getUserLoginLogList/1/10", prefix + "/getUserLoginLogList/1/10",
HttpMethod.GET, HttpMethod.GET,
request, new HttpEntity<>(params),
new ParameterizedTypeReference<>() { new ParameterizedTypeReference<>() {
} }
); );