ConditionMatcher instance -> component

This commit is contained in:
현성필
2023-08-23 11:20:04 +09:00
parent 255920c503
commit deb53dade2
6 changed files with 36 additions and 9 deletions
@@ -7,4 +7,6 @@ import java.util.Map;
public interface ConditionMatcher {
boolean matches(MockCondition condition, MockRequest request, Map<String, String> pathVariables);
String getType();
}
@@ -2,12 +2,19 @@ package com.eactive.httpmockserver.api.condition;
import com.eactive.httpmockserver.api.dto.MockRequest;
import com.eactive.httpmockserver.api.entity.MockCondition;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component
public class HeaderMatcher implements ConditionMatcher {
@Override
public boolean matches(MockCondition condition, MockRequest request, Map<String, String> pathVariables) {
return condition.getValue().equals(request.getHeader(condition.getKey()));
}
@Override
public String getType() {
return "header";
}
}
@@ -4,9 +4,12 @@ import com.eactive.httpmockserver.api.dto.MockRequest;
import com.eactive.httpmockserver.api.entity.MockCondition;
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.PathNotFoundException;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component
public class JsonPathMatcher implements ConditionMatcher {
@Override
public boolean matches(MockCondition condition, MockRequest request, Map<String, String> pathVariables) {
@@ -17,4 +20,9 @@ public class JsonPathMatcher implements ConditionMatcher {
return false;
}
}
@Override
public String getType() {
return "jsonpath";
}
}
@@ -2,12 +2,19 @@ package com.eactive.httpmockserver.api.condition;
import com.eactive.httpmockserver.api.dto.MockRequest;
import com.eactive.httpmockserver.api.entity.MockCondition;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component
public class PathMatcher implements ConditionMatcher {
@Override
public boolean matches(MockCondition condition, MockRequest request, Map<String, String> pathVariables) {
return condition.getValue().equals(pathVariables.get(condition.getKey()));
}
@Override
public String getType() {
return "path";
}
}
@@ -2,12 +2,20 @@ package com.eactive.httpmockserver.api.condition;
import com.eactive.httpmockserver.api.dto.MockRequest;
import com.eactive.httpmockserver.api.entity.MockCondition;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component
public class QueryMatcher implements ConditionMatcher {
@Override
public boolean matches(MockCondition condition, MockRequest request, Map<String, String> pathVariables) {
return condition.getValue().equals(request.getParam(condition.getKey()));
}
@Override
public String getType() {
return "query";
}
}
@@ -19,23 +19,18 @@ import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.stream.Collectors;
@RestController
public class MockApiController {
private final MockRouteService mockRouteService;
Map<String, ConditionMatcher> matchers;
private final Map<String, ConditionMatcher> matchers;
public MockApiController(MockRouteService mockRouteService) {
public MockApiController(MockRouteService mockRouteService, List<ConditionMatcher> matchersList) {
this.mockRouteService = mockRouteService;
this.matchers = new ConcurrentHashMap<>();
matchers.put("query", new QueryMatcher());
matchers.put("path", new PathMatcher());
matchers.put("header", new HeaderMatcher());
matchers.put("jsonpath", new JsonPathMatcher());
this.matchers = matchersList.stream().collect(Collectors.toMap(ConditionMatcher::getType, Function.identity()));
}
private static final Logger logger = LoggerFactory.getLogger(MockApiController.class);