diff --git a/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/adapter/test/MockEimsHttpServer.java b/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/adapter/test/MockEimsHttpServer.java new file mode 100644 index 00000000..a5634cb8 --- /dev/null +++ b/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/adapter/test/MockEimsHttpServer.java @@ -0,0 +1,61 @@ +package io.shinhanlife.dap.lib.adapter.test; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import java.util.Map; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.core.io.ClassPathResource; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * Local HTTP mock server for scaffolded HTTP Tools. + * + *

Each Tool Pod returns the JSON generated under + * {@code src/main/resources/mock-responses/{toolName}.json}. It is enabled only + * when {@code axhub.mock.http.enabled=true}, which the HTTP Scaffold adds to local configuration.

+ */ +@Slf4j +@RestController +@RequiredArgsConstructor +@ConditionalOnProperty(prefix = "axhub.mock.http", name = "enabled", havingValue = "true") +@RequestMapping("/api") +public class MockEimsHttpServer { + + private final ObjectMapper objectMapper; + + @PostMapping("/mock/http/{toolName:[a-z0-9_-]+}") + public ResponseEntity mockToolHttpResponse( + @PathVariable String toolName, + @RequestBody(required = false) JsonNode request) { + ClassPathResource resource = new ClassPathResource("mock-responses/" + toolName + ".json"); + if (!resource.exists()) { + return ResponseEntity.notFound().build(); + } + try { + log.info("[MockEimsHttpServer] HTTP mock request. toolName={}, body={}", toolName, request); + return ResponseEntity.ok(objectMapper.readTree(resource.getInputStream())); + } catch (Exception e) { + log.warn("[MockEimsHttpServer] Unable to read mock response. toolName={}", toolName, e); + return ResponseEntity.internalServerError().build(); + } + } + + @PostMapping("/gateway") + public ResponseEntity mockEimsReceiver( + @RequestHeader(value = "X-Trace-Id", required = false) String traceId, + @RequestBody Map request) { + String interfaceId = String.valueOf(request.getOrDefault("interfaceId", "")); + log.info("[MockEimsHttpServer] Legacy gateway mock request. traceId={}, interfaceId={}", traceId, interfaceId); + return ResponseEntity.ok(Map.of( + "status", "404", + "message", "MOCK data is not defined for interfaceId: " + interfaceId)); + } +} diff --git a/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/util/ToolScaffolder.java b/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/util/ToolScaffolder.java index d698c5a6..43015e23 100644 --- a/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/util/ToolScaffolder.java +++ b/dap-was-lib/src/main/java/io/shinhanlife/dap/lib/util/ToolScaffolder.java @@ -853,12 +853,17 @@ public class ToolScaffolder { Path projectRoot = moduleRoot.getParent(); Path wireMockBodyPath = projectRoot.resolve(Paths.get("mci-mock", "__files", toolName + ".json")); Path wireMockMappingPath = projectRoot.resolve(Paths.get("mci-mock", "mappings", toolName + ".json")); + Path podMockResponsePath = moduleRoot.resolve(Paths.get("src/main/resources/mock-responses", toolName + ".json")); Files.createDirectories(wireMockBodyPath.getParent()); Files.createDirectories(wireMockMappingPath.getParent()); + Files.createDirectories(podMockResponsePath.getParent()); Files.writeString(wireMockBodyPath, mockResponse); Files.writeString(wireMockMappingPath, wireMockMappingContent(interfaceId, wireMockBodyPath.getFileName().toString())); + Files.writeString(podMockResponsePath, mockResponse); + ensureLocalHttpApiConfiguration(moduleRoot, httpApiName, toolName); log.append("[WireMock Response] ").append(wireMockBodyPath).append("\n"); log.append("[WireMock Mapping] ").append(wireMockMappingPath).append("\n"); + log.append("[Pod Mock Response] ").append(podMockResponsePath).append("\n"); } else { Path mockResponsePath = rootDir.resolve(Paths.get(moduleName, "src/main/resources/mock-responses", toolName + ".json")); Files.createDirectories(mockResponsePath.getParent()); @@ -884,6 +889,36 @@ public class ToolScaffolder { .toLowerCase(Locale.ROOT); } + private static void ensureLocalHttpApiConfiguration(Path moduleRoot, String httpApiName, String toolName) throws IOException { + Path localConfigPath = moduleRoot.resolve("src/main/resources/application-local.yml"); + Files.createDirectories(localConfigPath.getParent()); + String existing = Files.exists(localConfigPath) ? Files.readString(localConfigPath) : ""; + if (java.util.regex.Pattern.compile("(?m)^\\s*-\\s+name:\\s*" + + java.util.regex.Pattern.quote(httpApiName) + "\\s*$").matcher(existing).find()) { + return; + } + String environmentKey = toPackageSegment(httpApiName).toUpperCase(Locale.ROOT).replace('-', '_'); + String config = """ + + axhub: + mock: + http: + enabled: true + + glow: + communication: + http: + api-list: + - name: %s + domain: ${AXHUB_%s_HTTP_DOMAIN:http://localhost:${server.port}} + url: ${AXHUB_%s_HTTP_URL:/api/mock/http/%s} + method: POST + content-type: application/json;charset=UTF-8 + biz-pod: false + """.formatted(httpApiName, environmentKey, environmentKey, toolName); + Files.writeString(localConfigPath, existing + config); + } + private static String dtoContent(String packageName, String className, List fields, String author, String createDate, boolean request) { String body = fieldLines(fields, request ? Set.of() : Set.of("resultCode", "resultMessage")); @@ -999,21 +1034,24 @@ public class ToolScaffolder { import %s.dto.%sRequest; import %s.dto.%sResponse; - import %s.%s.io.%sHttpRequest; - import %s.%s.io.%sHttpResponse; + import %s.io.%sHttpRequest; + import %s.io.%sHttpResponse; import org.mapstruct.Mapper; + import org.mapstruct.Mapping; import org.mapstruct.ReportingPolicy; @Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE) public interface %sConverter { + // Field names differ? Add mappings like this before the method. + // @Mapping(source = "sourceField", target = "targetField") %sHttpRequest toHttpRequest(%sRequest request); %sResponse toResponse(%sHttpResponse httpResponse); } """.formatted(bizPackage, bizPackage, baseName, bizPackage, baseName, - BASE_PACKAGE, httpPackage, baseName, - BASE_PACKAGE, httpPackage, baseName, + httpPackage, baseName, + httpPackage, baseName, baseName, baseName, baseName, baseName, baseName); } @@ -1032,9 +1070,13 @@ public class ToolScaffolder { import %s.%s.io.%s_I; import %s.%s.io.%s_O; import org.mapstruct.Mapper; + import org.mapstruct.Mapping; + import org.mapstruct.ReportingPolicy; - @Mapper(componentModel = "spring") + @Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE) public interface %sConverter { + // Field names differ? Add mappings like this before the method. + // @Mapping(source = "sourceField", target = "targetField") %s_I toLegacyRequest(%sRequest request); %sRequest toRequest(%s_I mciRequest); %sResponse toResponse(%s_O mciRes); @@ -1053,10 +1095,13 @@ public class ToolScaffolder { import %s.legacy.%sLegacyRequest; import %s.legacy.%sLegacyResponse; import org.mapstruct.Mapper; + import org.mapstruct.Mapping; import org.mapstruct.ReportingPolicy; @Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE) public interface %sConverter { + // Field names differ? Add mappings like this before the method. + // @Mapping(source = "sourceField", target = "targetField") %sLegacyRequest toLegacyRequest(%sRequest request); %sRequest toRequest(%sLegacyRequest legacyRequest); %sResponse toResponse(%sLegacyResponse legacyResponse); diff --git a/dap-was-lib/src/test/java/io/shinhanlife/dap/lib/adapter/test/MockEimsHttpServerTest.java b/dap-was-lib/src/test/java/io/shinhanlife/dap/lib/adapter/test/MockEimsHttpServerTest.java new file mode 100644 index 00000000..773659d4 --- /dev/null +++ b/dap-was-lib/src/test/java/io/shinhanlife/dap/lib/adapter/test/MockEimsHttpServerTest.java @@ -0,0 +1,19 @@ +package io.shinhanlife.dap.lib.adapter.test; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class MockEimsHttpServerTest { + + @Test + void returnsTheScaffoldGeneratedJsonResponse() { + MockEimsHttpServer server = new MockEimsHttpServer(new ObjectMapper()); + + var response = server.mockToolHttpResponse("cmm_memo_retriever", null); + + assertThat(response.getStatusCode().is2xxSuccessful()).isTrue(); + assertThat(response.getBody().path("resultCode").asText()).isEqualTo("SUCCESS"); + } +} diff --git a/dap-was-lib/src/test/java/io/shinhanlife/dap/lib/util/ToolScaffolderTest.java b/dap-was-lib/src/test/java/io/shinhanlife/dap/lib/util/ToolScaffolderTest.java index 8cd3b178..69452da9 100644 --- a/dap-was-lib/src/test/java/io/shinhanlife/dap/lib/util/ToolScaffolderTest.java +++ b/dap-was-lib/src/test/java/io/shinhanlife/dap/lib/util/ToolScaffolderTest.java @@ -1,6 +1,7 @@ package io.shinhanlife.dap.lib.util; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import java.nio.file.Files; @@ -166,6 +167,8 @@ class ToolScaffolderTest { String httpClient = Files.readString(root.resolve("dap-was-http/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/http/sample/SampleClient.java")); assertFalse(converter.contains("phoneNumber"), converter); assertTrue(converter.contains("infra.itrf.http.sample.io.EmployeeSearchHttpRequest"), converter); + assertFalse(converter.contains("io.shinhanlife.dap.mcc.io.shinhanlife.dap.mcc"), converter); + assertTrue(converter.contains("// @Mapping(source = \"sourceField\", target = \"targetField\")"), converter); assertTrue(httpRequest.contains("private String employeeId;"), httpRequest); assertTrue(httpResponse.contains("private String employeeName;"), httpResponse); assertTrue(httpClient.contains("http.call(API_NAME, request, responseType)"), httpClient); @@ -182,6 +185,19 @@ class ToolScaffolderTest { assertTrue(Files.exists(wireMockResponse), wireMockResponse.toString()); assertTrue(Files.exists(wireMockMapping), wireMockMapping.toString()); assertTrue(Files.readString(wireMockMapping).contains("\"urlPath\" : \"/HR_EMPLOYEE_SEARCH\"")); + Path localConfig = root.resolve("dap-was-http/src/main/resources/application-local.yml"); + assertTrue(Files.exists(localConfig), localConfig.toString()); + assertTrue(Files.readString(localConfig).contains("name: sample")); + assertTrue(Files.readString(localConfig).contains("url: ${AXHUB_SAMPLE_HTTP_URL:/api/mock/http/smp_employee_search}")); + Path podMockResponse = root.resolve("dap-was-http/src/main/resources/mock-responses/smp_employee_search.json"); + assertTrue(Files.exists(podMockResponse), podMockResponse.toString()); + + ToolScaffolder.scaffold("employee search", "HR_EMPLOYEE_SEARCH", "Employee search", "smp", "HTTP", moduleName, + "tester", "2026.08.11", false, null, null, null, inputFields, outputFields); + long apiNameCount = Files.readAllLines(localConfig).stream() + .filter(line -> line.trim().equals("- name: sample")) + .count(); + assertEquals(1, apiNameCount); } @Test void generatesSeparateToolTitleAndDescription() throws Exception { diff --git a/dap-was-lib/src/test/resources/mock-responses/cmm_memo_retriever.json b/dap-was-lib/src/test/resources/mock-responses/cmm_memo_retriever.json new file mode 100644 index 00000000..a949502b --- /dev/null +++ b/dap-was-lib/src/test/resources/mock-responses/cmm_memo_retriever.json @@ -0,0 +1,3 @@ +{ + "resultCode": "SUCCESS" +} diff --git a/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/converter/MemoListRetrieverConverter.java b/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/converter/MemoListRetrieverConverter.java new file mode 100644 index 00000000..ba759323 --- /dev/null +++ b/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/converter/MemoListRetrieverConverter.java @@ -0,0 +1,17 @@ +package io.shinhanlife.dap.mcc.biz.cmm.converter; + +import io.shinhanlife.dap.mcc.biz.cmm.dto.MemoListRetrieverRequest; +import io.shinhanlife.dap.mcc.biz.cmm.dto.MemoListRetrieverResponse; +import io.shinhanlife.dap.mcc.infra.itrf.http.memo.io.MemoListRetrieverHttpRequest; +import io.shinhanlife.dap.mcc.infra.itrf.http.memo.io.MemoListRetrieverHttpResponse; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.ReportingPolicy; + +@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface MemoListRetrieverConverter { + // Field names differ? Add mappings like this before the method. + // @Mapping(source = "sourceField", target = "targetField") + MemoListRetrieverHttpRequest toHttpRequest(MemoListRetrieverRequest request); + MemoListRetrieverResponse toResponse(MemoListRetrieverHttpResponse httpResponse); +} diff --git a/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/MemoListRetrieverRequest.java b/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/MemoListRetrieverRequest.java new file mode 100644 index 00000000..9cc7c4d3 --- /dev/null +++ b/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/MemoListRetrieverRequest.java @@ -0,0 +1,16 @@ +package io.shinhanlife.dap.mcc.biz.cmm.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class MemoListRetrieverRequest { + @Schema(description = "조회할 의뢰서 상태", example = "OPEN", requiredMode = Schema.RequiredMode.REQUIRED) + private String memoStatus; + + @Schema(description = "검색 키워드", example = "프로젝트", requiredMode = Schema.RequiredMode.REQUIRED) + private String searchKeyword; + +} diff --git a/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/MemoListRetrieverResponse.java b/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/MemoListRetrieverResponse.java new file mode 100644 index 00000000..79f704d8 --- /dev/null +++ b/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/MemoListRetrieverResponse.java @@ -0,0 +1,13 @@ +package io.shinhanlife.dap.mcc.biz.cmm.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class MemoListRetrieverResponse { + private String resultCode; + + private String resultMessage; +} diff --git a/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/MemoListRetrieverUseCase.java b/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/MemoListRetrieverUseCase.java new file mode 100644 index 00000000..13cb3645 --- /dev/null +++ b/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/MemoListRetrieverUseCase.java @@ -0,0 +1,27 @@ +package io.shinhanlife.dap.mcc.biz.cmm.usecase; + +import org.springaicommunity.mcp.annotation.McpTool; +import io.shinhanlife.dap.lib.annotation.ToolHint; +import io.shinhanlife.dap.mcc.biz.cmm.dto.MemoListRetrieverRequest; +import io.shinhanlife.dap.mcc.biz.cmm.dto.MemoListRetrieverResponse; + +/** + * @package io.shinhanlife.dap.mcc.biz.cmm.usecase + * @className MemoListRetrieverUseCase + * @description AX HUB ?쒖뒪??泥섎━ ?대옒?? + * @author Admin + * @create 2026.08.11 + *
+ * ---------- 媛쒖젙?대젰 ----------
+ * ?섏젙??     ?섏젙??   ?섏젙?댁슜
+ * ---------- -------- ---------------------------
+ * 2026.08.11  Admin    理쒖큹?앹꽦
+ *
+ * 
+ */ +public interface MemoListRetrieverUseCase { + + @McpTool(name = "cmm_memo_retriever", title = "의뢰서 목록 조회", description = "의뢰서 목록을 조회하여 의뢰 정보를 반환합니다.") + @ToolHint(register = false, categoryKey = "cmm", mappingId = "MEMO0000001") + MemoListRetrieverResponse execute(MemoListRetrieverRequest req); +} diff --git a/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/MemoListRetrieverUseCaseImpl.java b/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/MemoListRetrieverUseCaseImpl.java new file mode 100644 index 00000000..474832e5 --- /dev/null +++ b/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/MemoListRetrieverUseCaseImpl.java @@ -0,0 +1,30 @@ +package io.shinhanlife.dap.mcc.biz.cmm.usecase.impl; + +import io.shinhanlife.dap.mcc.biz.cmm.converter.MemoListRetrieverConverter; +import io.shinhanlife.dap.mcc.biz.cmm.dto.MemoListRetrieverRequest; +import io.shinhanlife.dap.mcc.biz.cmm.dto.MemoListRetrieverResponse; +import io.shinhanlife.dap.mcc.infra.itrf.http.memo.MemoClient; +import io.shinhanlife.dap.mcc.infra.itrf.http.memo.io.MemoListRetrieverHttpRequest; +import io.shinhanlife.dap.mcc.infra.itrf.http.memo.io.MemoListRetrieverHttpResponse; +import io.shinhanlife.dap.mcc.biz.cmm.usecase.MemoListRetrieverUseCase; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class MemoListRetrieverUseCaseImpl implements MemoListRetrieverUseCase { + + private final MemoListRetrieverConverter converter; + private final MemoClient memoClient; + + @Override + public MemoListRetrieverResponse execute(MemoListRetrieverRequest req) { + MemoListRetrieverHttpRequest httpRequest = converter.toHttpRequest(req); + MemoListRetrieverHttpResponse httpResponse = memoClient.call(httpRequest, MemoListRetrieverHttpResponse.class); + + MemoListRetrieverResponse response = converter.toResponse(httpResponse); + response.setResultCode("SUCCESS"); + response.setResultMessage("HTTP API call completed."); + return response; + } +} diff --git a/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/http/memo/MemoClient.java b/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/http/memo/MemoClient.java new file mode 100644 index 00000000..53026602 --- /dev/null +++ b/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/http/memo/MemoClient.java @@ -0,0 +1,17 @@ +package io.shinhanlife.dap.mcc.infra.itrf.http.memo; + +import io.shinhanlife.dap.lib.integration.http.component.AxhubHttpComponent; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class MemoClient { + private static final String API_NAME = "memo"; + + private final AxhubHttpComponent http; + + public O call(I request, Class responseType) { + return http.call(API_NAME, request, responseType); + } +} diff --git a/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/http/memo/io/MemoListRetrieverHttpRequest.java b/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/http/memo/io/MemoListRetrieverHttpRequest.java new file mode 100644 index 00000000..0a90902c --- /dev/null +++ b/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/http/memo/io/MemoListRetrieverHttpRequest.java @@ -0,0 +1,16 @@ +package io.shinhanlife.dap.mcc.infra.itrf.http.memo.io; + +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class MemoListRetrieverHttpRequest { + @Schema(description = "조회할 의뢰서 상태", example = "OPEN", requiredMode = Schema.RequiredMode.REQUIRED) + private String memoStatus; + + @Schema(description = "검색 키워드", example = "프로젝트", requiredMode = Schema.RequiredMode.REQUIRED) + private String searchKeyword; + +} diff --git a/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/http/memo/io/MemoListRetrieverHttpResponse.java b/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/http/memo/io/MemoListRetrieverHttpResponse.java new file mode 100644 index 00000000..191aeea2 --- /dev/null +++ b/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/http/memo/io/MemoListRetrieverHttpResponse.java @@ -0,0 +1,13 @@ +package io.shinhanlife.dap.mcc.infra.itrf.http.memo.io; + +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class MemoListRetrieverHttpResponse { + private String resultCode; + + private String resultMessage; +} diff --git a/dap-was-sms/src/main/resources/application-local.yml b/dap-was-sms/src/main/resources/application-local.yml index d4add358..c325e571 100644 --- a/dap-was-sms/src/main/resources/application-local.yml +++ b/dap-was-sms/src/main/resources/application-local.yml @@ -26,3 +26,17 @@ axhub: url: http://localhost:8081 tool: url: ${AXHUB_TOOL_URL:http://localhost:${server.port}} + mock: + http: + enabled: true + +glow: + communication: + http: + api-list: + - name: memo + domain: ${AXHUB_MEMO_HTTP_DOMAIN:http://localhost:${server.port}} + url: ${AXHUB_MEMO_HTTP_URL:/api/mock/http/cmm_memo_retriever} + method: POST + content-type: application/json;charset=UTF-8 + biz-pod: false diff --git a/dap-was-sms/src/main/resources/mock-responses/cmm_memo_retriever.json b/dap-was-sms/src/main/resources/mock-responses/cmm_memo_retriever.json new file mode 100644 index 00000000..a949502b --- /dev/null +++ b/dap-was-sms/src/main/resources/mock-responses/cmm_memo_retriever.json @@ -0,0 +1,3 @@ +{ + "resultCode": "SUCCESS" +} diff --git a/dap-was-sms/src/test/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/MemoListRetrieverUseCaseTest.java b/dap-was-sms/src/test/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/MemoListRetrieverUseCaseTest.java new file mode 100644 index 00000000..61d6f7f4 --- /dev/null +++ b/dap-was-sms/src/test/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/MemoListRetrieverUseCaseTest.java @@ -0,0 +1,16 @@ +package io.shinhanlife.dap.mcc.biz.cmm.usecase; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import io.shinhanlife.dap.mcc.biz.cmm.dto.MemoListRetrieverRequest; +import io.shinhanlife.dap.mcc.biz.cmm.dto.MemoListRetrieverResponse; +import org.junit.jupiter.api.Test; + +class MemoListRetrieverUseCaseTest { + + @Test + void createsToolRequestAndResponseDtos() { + assertNotNull(new MemoListRetrieverRequest()); + assertNotNull(new MemoListRetrieverResponse()); + } +} diff --git a/mci-mock/__files/cmm_memo_retriever.json b/mci-mock/__files/cmm_memo_retriever.json new file mode 100644 index 00000000..9f9a02a5 --- /dev/null +++ b/mci-mock/__files/cmm_memo_retriever.json @@ -0,0 +1,3 @@ +{ + "resultCode" : "SUCCESS" +} diff --git a/mci-mock/mappings/cmm_memo_retriever.json b/mci-mock/mappings/cmm_memo_retriever.json new file mode 100644 index 00000000..d592009c --- /dev/null +++ b/mci-mock/mappings/cmm_memo_retriever.json @@ -0,0 +1,13 @@ +{ + "request" : { + "method" : "POST", + "urlPath" : "/MEMO0000001" + }, + "response" : { + "status" : 200, + "headers" : { + "Content-Type" : "application/json;charset=UTF-8" + }, + "bodyFileName" : "cmm_memo_retriever.json" + } +}