99 lines
3.9 KiB
Java
99 lines
3.9 KiB
Java
package com.label.unit;
|
|
|
|
import com.label.module.annotation.controller.ExtractionController;
|
|
import com.label.module.annotation.controller.QaController;
|
|
import com.label.module.config.controller.SysConfigController;
|
|
import com.label.module.export.controller.ExportController;
|
|
import com.label.module.source.controller.SourceController;
|
|
import com.label.module.source.dto.SourceResponse;
|
|
import com.label.module.task.controller.TaskController;
|
|
import com.label.module.task.dto.TaskResponse;
|
|
import com.label.module.user.controller.AuthController;
|
|
import com.label.module.user.controller.UserController;
|
|
import com.label.module.user.dto.LoginRequest;
|
|
import com.label.module.user.dto.LoginResponse;
|
|
import com.label.module.user.dto.UserInfoResponse;
|
|
import com.label.module.video.controller.VideoController;
|
|
import io.swagger.v3.oas.annotations.Operation;
|
|
import io.swagger.v3.oas.annotations.media.Schema;
|
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
|
import org.junit.jupiter.api.DisplayName;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.springframework.web.bind.annotation.DeleteMapping;
|
|
import org.springframework.web.bind.annotation.GetMapping;
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
|
import org.springframework.web.bind.annotation.PutMapping;
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
|
import java.lang.reflect.Method;
|
|
import java.lang.reflect.Modifier;
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
|
|
@DisplayName("OpenAPI 注解覆盖测试")
|
|
class OpenApiAnnotationTest {
|
|
|
|
private static final List<Class<?>> CONTROLLERS = List.of(
|
|
AuthController.class,
|
|
UserController.class,
|
|
SourceController.class,
|
|
TaskController.class,
|
|
ExtractionController.class,
|
|
QaController.class,
|
|
ExportController.class,
|
|
SysConfigController.class,
|
|
VideoController.class
|
|
);
|
|
|
|
private static final List<Class<?>> DTOS = List.of(
|
|
LoginRequest.class,
|
|
LoginResponse.class,
|
|
UserInfoResponse.class,
|
|
TaskResponse.class,
|
|
SourceResponse.class
|
|
);
|
|
|
|
@Test
|
|
@DisplayName("所有 REST Controller 都声明 @Tag")
|
|
void allControllersHaveTag() {
|
|
assertThat(CONTROLLERS)
|
|
.allSatisfy(controller ->
|
|
assertThat(controller.getAnnotation(Tag.class))
|
|
.as(controller.getSimpleName() + " should have @Tag")
|
|
.isNotNull());
|
|
}
|
|
|
|
@Test
|
|
@DisplayName("所有 REST endpoint 方法都声明 @Operation")
|
|
void allEndpointMethodsHaveOperation() {
|
|
for (Class<?> controller : CONTROLLERS) {
|
|
Arrays.stream(controller.getDeclaredMethods())
|
|
.filter(method -> !Modifier.isPrivate(method.getModifiers()))
|
|
.filter(OpenApiAnnotationTest::isEndpointMethod)
|
|
.forEach(method -> assertThat(method.getAnnotation(Operation.class))
|
|
.as(controller.getSimpleName() + "." + method.getName() + " should have @Operation")
|
|
.isNotNull());
|
|
}
|
|
}
|
|
|
|
@Test
|
|
@DisplayName("核心 DTO 都声明 @Schema")
|
|
void coreDtosHaveSchema() {
|
|
assertThat(DTOS)
|
|
.allSatisfy(dto ->
|
|
assertThat(dto.getAnnotation(Schema.class))
|
|
.as(dto.getSimpleName() + " should have @Schema")
|
|
.isNotNull());
|
|
}
|
|
|
|
private static boolean isEndpointMethod(Method method) {
|
|
return method.isAnnotationPresent(GetMapping.class)
|
|
|| method.isAnnotationPresent(PostMapping.class)
|
|
|| method.isAnnotationPresent(PutMapping.class)
|
|
|| method.isAnnotationPresent(DeleteMapping.class)
|
|
|| method.isAnnotationPresent(RequestMapping.class);
|
|
}
|
|
}
|