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 { public interface ConditionMatcher {
boolean matches(MockCondition condition, MockRequest request, Map<String, String> pathVariables); 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.dto.MockRequest;
import com.eactive.httpmockserver.api.entity.MockCondition; import com.eactive.httpmockserver.api.entity.MockCondition;
import org.springframework.stereotype.Component;
import java.util.Map; import java.util.Map;
@Component
public class HeaderMatcher implements ConditionMatcher { public class HeaderMatcher implements ConditionMatcher {
@Override @Override
public boolean matches(MockCondition condition, MockRequest request, Map<String, String> pathVariables) { public boolean matches(MockCondition condition, MockRequest request, Map<String, String> pathVariables) {
return condition.getValue().equals(request.getHeader(condition.getKey())); 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.eactive.httpmockserver.api.entity.MockCondition;
import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.PathNotFoundException; import com.jayway.jsonpath.PathNotFoundException;
import org.springframework.stereotype.Component;
import java.util.Map; import java.util.Map;
@Component
public class JsonPathMatcher implements ConditionMatcher { public class JsonPathMatcher implements ConditionMatcher {
@Override @Override
public boolean matches(MockCondition condition, MockRequest request, Map<String, String> pathVariables) { public boolean matches(MockCondition condition, MockRequest request, Map<String, String> pathVariables) {
@@ -17,4 +20,9 @@ public class JsonPathMatcher implements ConditionMatcher {
return false; 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.dto.MockRequest;
import com.eactive.httpmockserver.api.entity.MockCondition; import com.eactive.httpmockserver.api.entity.MockCondition;
import org.springframework.stereotype.Component;
import java.util.Map; import java.util.Map;
@Component
public class PathMatcher implements ConditionMatcher { public class PathMatcher implements ConditionMatcher {
@Override @Override
public boolean matches(MockCondition condition, MockRequest request, Map<String, String> pathVariables) { public boolean matches(MockCondition condition, MockRequest request, Map<String, String> pathVariables) {
return condition.getValue().equals(pathVariables.get(condition.getKey())); 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.dto.MockRequest;
import com.eactive.httpmockserver.api.entity.MockCondition; import com.eactive.httpmockserver.api.entity.MockCondition;
import org.springframework.stereotype.Component;
import java.util.Map; import java.util.Map;
@Component
public class QueryMatcher implements ConditionMatcher { public class QueryMatcher implements ConditionMatcher {
@Override @Override
public boolean matches(MockCondition condition, MockRequest request, Map<String, String> pathVariables) { public boolean matches(MockCondition condition, MockRequest request, Map<String, String> pathVariables) {
return condition.getValue().equals(request.getParam(condition.getKey())); 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.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@RestController @RestController
public class MockApiController { public class MockApiController {
private final MockRouteService mockRouteService; private final MockRouteService mockRouteService;
Map<String, ConditionMatcher> matchers; private final Map<String, ConditionMatcher> matchers;
public MockApiController(MockRouteService mockRouteService, List<ConditionMatcher> matchersList) {
public MockApiController(MockRouteService mockRouteService) {
this.mockRouteService = mockRouteService; this.mockRouteService = mockRouteService;
this.matchers = new ConcurrentHashMap<>(); this.matchers = matchersList.stream().collect(Collectors.toMap(ConditionMatcher::getType, Function.identity()));
matchers.put("query", new QueryMatcher());
matchers.put("path", new PathMatcher());
matchers.put("header", new HeaderMatcher());
matchers.put("jsonpath", new JsonPathMatcher());
} }
private static final Logger logger = LoggerFactory.getLogger(MockApiController.class); private static final Logger logger = LoggerFactory.getLogger(MockApiController.class);