From 23a41aebadbe13e8992856c6be84ce6d01de0175 Mon Sep 17 00:00:00 2001
From: Vitaly Takmazov
Date: Sat, 14 Jan 2023 15:42:03 +0300
Subject: Configure test coverage reports
---
pom.xml | 23 ++++++++++++++++++++++
src/main/java/com/juick/config/WebConfig.java | 5 +++++
src/main/java/com/juick/www/api/Index.java | 5 +++++
.../java/com/juick/www/controllers/Compat.java | 12 +++++------
.../java/com/juick/server/tests/ServerTests.java | 1 +
5 files changed, 40 insertions(+), 6 deletions(-)
diff --git a/pom.xml b/pom.xml
index 2c828b45..cb76d74f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -42,6 +42,10 @@
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
org.springframework.boot
spring-boot-starter-security
@@ -388,6 +392,25 @@
+
+ org.jacoco
+ jacoco-maven-plugin
+ 0.8.8
+
+
+
+ prepare-agent
+
+
+
+ report
+ prepare-package
+
+ report
+
+
+
+
diff --git a/src/main/java/com/juick/config/WebConfig.java b/src/main/java/com/juick/config/WebConfig.java
index 136faea9..2040afd6 100644
--- a/src/main/java/com/juick/config/WebConfig.java
+++ b/src/main/java/com/juick/config/WebConfig.java
@@ -35,6 +35,7 @@ import org.springframework.format.FormatterRegistry;
import org.springframework.http.CacheControl;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@@ -66,6 +67,10 @@ public class WebConfig implements WebMvcConfigurer {
public void addArgumentResolvers(List resolvers) {
resolvers.add(visitorArgumentResolver());
}
+ @Bean
+ public MethodValidationPostProcessor methodValidationPostProcessor() {
+ return new MethodValidationPostProcessor();
+ }
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
try {
diff --git a/src/main/java/com/juick/www/api/Index.java b/src/main/java/com/juick/www/api/Index.java
index 921ebca4..7430c22d 100644
--- a/src/main/java/com/juick/www/api/Index.java
+++ b/src/main/java/com/juick/www/api/Index.java
@@ -19,6 +19,7 @@ package com.juick.www.api;
import io.swagger.v3.oas.annotations.Hidden;
+import jakarta.validation.ConstraintViolationException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
@@ -56,4 +57,8 @@ public class Index {
ServletUriComponentsBuilder.fromCurrentRequestUri().build().toUriString());
return ResponseEntity.badRequest().body("Invalid media type");
}
+ @ExceptionHandler(ConstraintViolationException.class)
+ public ResponseEntity badRequest(final ConstraintViolationException exception) {
+ return ResponseEntity.badRequest().body(exception.getMessage());
+ }
}
diff --git a/src/main/java/com/juick/www/controllers/Compat.java b/src/main/java/com/juick/www/controllers/Compat.java
index 4a7390f5..edd7bc29 100644
--- a/src/main/java/com/juick/www/controllers/Compat.java
+++ b/src/main/java/com/juick/www/controllers/Compat.java
@@ -21,8 +21,10 @@ import com.juick.service.ActivityPubService;
import com.juick.service.WebfingerService;
import com.juick.util.HttpNotFoundException;
import com.juick.www.api.activity.model.Context;
+import jakarta.validation.constraints.NotEmpty;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
+import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
@@ -31,6 +33,7 @@ import org.springframework.web.servlet.view.RedirectView;
import javax.inject.Inject;
@Controller
+@Validated
public class Compat {
@Inject
private WebfingerService webfingerService;
@@ -42,12 +45,9 @@ public class Compat {
return new RedirectView("/post");
}
@GetMapping("/mention")
- public RedirectView mention(@RequestParam String username) {
+ public RedirectView mention(@RequestParam @NotEmpty(message = "Username may not be empty") String username) {
var uri = webfingerService.discoverAccountURI(username, MediaType.valueOf(Context.ACTIVITY_MEDIA_TYPE));
- if (!uri.toASCIIString().isEmpty()) {
- var context = activityPubService.get(uri).orElseThrow(HttpNotFoundException::new);
- return new RedirectView(context.getUrl());
- }
- throw new HttpNotFoundException();
+ var context = activityPubService.get(uri).orElseThrow(HttpNotFoundException::new);
+ return new RedirectView(context.getUrl());
}
}
diff --git a/src/test/java/com/juick/server/tests/ServerTests.java b/src/test/java/com/juick/server/tests/ServerTests.java
index a6c840bf..d6f0b6ae 100644
--- a/src/test/java/com/juick/server/tests/ServerTests.java
+++ b/src/test/java/com/juick/server/tests/ServerTests.java
@@ -2715,6 +2715,7 @@ public class ServerTests {
mockMvc.perform(get("/mention?username=vt@juick.com")).andExpect(
redirectedUrl("https://juick.com/vt/")
);
+ mockMvc.perform(get("/mention?username=")).andExpect(status().isBadRequest());
}
@Test
--
cgit v1.2.3