From 5f5a2c93bc156306d5f308ffbe45147b717378c0 Mon Sep 17 00:00:00 2001 From: huneea <67728580+jhh992000@users.noreply.github.com> Date: Mon, 20 Jun 2022 23:53:43 +0900 Subject: [PATCH] fix: support multiple stubs files directories (bug fix) (#1801) * fix: support multiple stubs files directories (bug fix) - fix methods - ResourcesFileSource - child() - ResourcesFileSource - getBinaryFileNamed() - add test case. - add test stubs files. * style: change import order * style: apply checkstyle and add license header. --- .../wiremock/file/ResourcesFileSource.java | 11 +++- .../file/ResourcesFileSourceTest.java | 59 +++++++++++++++++++ .../__files/response-bannerList-error.json | 5 ++ .../__files/response-bannerList-success.json | 17 ++++++ .../__files/response-noticeList-error.json | 5 ++ .../__files/response-noticeList-success.json | 17 ++++++ 6 files changed, 111 insertions(+), 3 deletions(-) create mode 100644 spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSourceTest.java create mode 100644 spring-cloud-contract-wiremock/src/test/resources/files_banner/__files/response-bannerList-error.json create mode 100644 spring-cloud-contract-wiremock/src/test/resources/files_banner/__files/response-bannerList-success.json create mode 100644 spring-cloud-contract-wiremock/src/test/resources/files_notice/__files/response-noticeList-error.json create mode 100644 spring-cloud-contract-wiremock/src/test/resources/files_notice/__files/response-noticeList-success.json diff --git a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSource.java b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSource.java index 4150120734..e5d8c9c263 100644 --- a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSource.java +++ b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSource.java @@ -38,6 +38,7 @@ import static java.util.Arrays.asList; /** * @author Dave Syer * @author Pei-Tang Huang + * @author Hunhee Jung */ public class ResourcesFileSource implements FileSource { @@ -111,7 +112,10 @@ public class ResourcesFileSource implements FileSource { try { UrlResource uri = new UrlResource(resource.getUri()); if (uri.exists()) { - return resource.getBinaryFileNamed(name); + Resource relativeResource = uri.createRelative(name); + if (relativeResource.exists()) { + return resource.getBinaryFileNamed(name); + } } } catch (IOException e) { @@ -147,8 +151,9 @@ public class ResourcesFileSource implements FileSource { for (FileSource resource : this.sources) { try { UrlResource uri = new UrlResource(resource.child(subDirectoryName).getUri()); - if (uri.createRelative(subDirectoryName).exists()) { - childSources.add(resource.child(subDirectoryName)); + if (uri.exists()) { + FileSource child = resource.child(subDirectoryName); + childSources.add(child); } } catch (IOException e) { diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSourceTest.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSourceTest.java new file mode 100644 index 0000000000..b7d4ae3d9b --- /dev/null +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/file/ResourcesFileSourceTest.java @@ -0,0 +1,59 @@ +/* + * Copyright 2013-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.contract.wiremock.file; + +import com.github.tomakehurst.wiremock.common.FileSource; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; + +import static org.assertj.core.api.Assertions.assertThat; + +class ResourcesFileSourceTest { + + @DisplayName("find all files in the multiple files directories.") + @Test + void child() { + //given + Resource resource1 = new ClassPathResource("src/test/resources/files_banner"); + Resource resource2 = new ClassPathResource("src/test/resources/files_notice"); + ResourcesFileSource resourcesFileSource = new ResourcesFileSource(resource1, resource2); + + //when + String filesDirName = "__files"; + FileSource fileSource = resourcesFileSource.child(filesDirName); + + //then + assertThat(fileSource).isInstanceOf(ResourcesFileSource.class); + assertThat(fileSource.listFilesRecursively()).hasSize(4); + } + + @DisplayName("find a mapped response file in multiple directories.") + @Test + void getBinaryFileNamed() { + //given + Resource resource1 = new ClassPathResource("src/test/resources/files_banner/__files"); + Resource resource2 = new ClassPathResource("src/test/resources/files_notice/__files"); + ResourcesFileSource resourcesFileSource = new ResourcesFileSource(resource1, resource2); + + //when & then + assertThat(resourcesFileSource.getBinaryFileNamed("response-bannerList-success.json").getStream()).isNotEmpty(); + assertThat(resourcesFileSource.getBinaryFileNamed("response-noticeList-success.json").getStream()).isNotEmpty(); + } +} diff --git a/spring-cloud-contract-wiremock/src/test/resources/files_banner/__files/response-bannerList-error.json b/spring-cloud-contract-wiremock/src/test/resources/files_banner/__files/response-bannerList-error.json new file mode 100644 index 0000000000..0cf2bbf8f8 --- /dev/null +++ b/spring-cloud-contract-wiremock/src/test/resources/files_banner/__files/response-bannerList-error.json @@ -0,0 +1,5 @@ +{ + "successful": false, + "message": "INVALID_PARAMETER", + "result": null +} diff --git a/spring-cloud-contract-wiremock/src/test/resources/files_banner/__files/response-bannerList-success.json b/spring-cloud-contract-wiremock/src/test/resources/files_banner/__files/response-bannerList-success.json new file mode 100644 index 0000000000..2e4173a1ec --- /dev/null +++ b/spring-cloud-contract-wiremock/src/test/resources/files_banner/__files/response-bannerList-success.json @@ -0,0 +1,17 @@ +{ + "results": [ + { + "seq": 1, + "title": "1111111111111111111111111", + "content": "1111111111111111111111111111111", + "regDate": "2022/06/17" + }, + { + "seq": 2, + "title": "22222222222222222222222222", + "content": "2222222222222222222222222222222", + "regDate": "2022/06/18" + } + ] +} + diff --git a/spring-cloud-contract-wiremock/src/test/resources/files_notice/__files/response-noticeList-error.json b/spring-cloud-contract-wiremock/src/test/resources/files_notice/__files/response-noticeList-error.json new file mode 100644 index 0000000000..0cf2bbf8f8 --- /dev/null +++ b/spring-cloud-contract-wiremock/src/test/resources/files_notice/__files/response-noticeList-error.json @@ -0,0 +1,5 @@ +{ + "successful": false, + "message": "INVALID_PARAMETER", + "result": null +} diff --git a/spring-cloud-contract-wiremock/src/test/resources/files_notice/__files/response-noticeList-success.json b/spring-cloud-contract-wiremock/src/test/resources/files_notice/__files/response-noticeList-success.json new file mode 100644 index 0000000000..5fe55eb27a --- /dev/null +++ b/spring-cloud-contract-wiremock/src/test/resources/files_notice/__files/response-noticeList-success.json @@ -0,0 +1,17 @@ +{ + "results": [ + { + "seq": 1, + "title": "[AAA] BBBBBBBBBBBBBBB", + "content": "CCCCCCCCCCCCCCCCCCCCCCCCC", + "regDate": "2022/06/17" + }, + { + "seq": 2, + "title": "[BBB] CCCCCCCCCCCCCCCCCCCCCCC", + "content": "DDDDDDDDDDDDDDDDDDD", + "regDate": "2022/06/18" + } + ] +} +