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 5dfaae76c2..56388ff9f4 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 @@ -48,7 +48,7 @@ public class ResourcesFileSource implements FileSource { this(toSources(resources)); } - private ResourcesFileSource(FileSource... sources) { + protected ResourcesFileSource(FileSource... sources) { this.sources = sources; } 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 index a83c5e6707..911b03f0a4 100644 --- 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 @@ -16,15 +16,25 @@ package org.springframework.cloud.contract.wiremock.file; +import com.github.tomakehurst.wiremock.common.BinaryFile; +import com.github.tomakehurst.wiremock.common.ClasspathFileSource; import com.github.tomakehurst.wiremock.common.FileSource; +import java.io.File; +import java.net.URI; +import java.net.URISyntaxException; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import static org.assertj.core.api.Assertions.assertThat; +@ExtendWith(MockitoExtension.class) class ResourcesFileSourceTest { @DisplayName("find all files in the multiple files directories.") @@ -57,4 +67,24 @@ class ResourcesFileSourceTest { assertThat(resourcesFileSource.getBinaryFileNamed("response-noticeList-success.json").getStream()).isNotEmpty(); } + @DisplayName("find a stub file in jar") + @Test + void find_stub_file_in_jar() throws URISyntaxException { + + // given + ClassLoader classLoader = getClass().getClassLoader(); + File file = new File(classLoader.getResource("jarfiles/module-banner-test-fixtures.jar").getFile()); + + String bannerStubPathInJar = "jar:file:" + file.getAbsolutePath() + "!/wiremock/banner/__files"; + String bannerStubFilename = "response-bannerList-success.json"; + ClasspathFileSource classpathFileSource1 = mock(ClasspathFileSource.class); + when(classpathFileSource1.getUri()).thenReturn(new URI(bannerStubPathInJar)); + when(classpathFileSource1.exists()).thenReturn(true); + when(classpathFileSource1.getBinaryFileNamed(bannerStubFilename)).thenReturn(new BinaryFile(new URI(bannerStubPathInJar + "/response-bannerList-success.json"))); + ResourcesFileSource resourcesFileSource = new ResourcesFileSource(classpathFileSource1); + + // when & then + assertThat(resourcesFileSource.getBinaryFileNamed(bannerStubFilename).getStream()).isNotEmpty(); + } + } diff --git a/spring-cloud-contract-wiremock/src/test/resources/jarfiles/module-banner-test-fixtures.jar b/spring-cloud-contract-wiremock/src/test/resources/jarfiles/module-banner-test-fixtures.jar new file mode 100644 index 0000000000..95a8bedd0a Binary files /dev/null and b/spring-cloud-contract-wiremock/src/test/resources/jarfiles/module-banner-test-fixtures.jar differ