From e59725326a126d1ba295610e8a5c43aec11344d6 Mon Sep 17 00:00:00 2001 From: devdufutur <76944391+devdufutur@users.noreply.github.com> Date: Wed, 18 May 2022 09:37:58 +0200 Subject: [PATCH] Fixed relative URL computation in wIthoutBaseUrl (#1785) * Fixed relative URL computation in wIthoutBaseUrl Current behaviour : * base URL = http://foo.bar * url = http://foo.bar/my/api gives => my/api Fixed behaviour : * base URL = http://foo.bar * url = http://foo.bar/my/api gives => /my/api * Fixed & Added urlPathMatching related tests Fixed false positive test getWithUrlPathMatching() (now fails without commit f9c9527f89e36ba5b4f5b00fc5895c8df78062e2 and pass after), and added 2 tests to ensure leading slash in urlPathPattern or trailing slash in base URL works fine. Co-authored-by: Rudy Nappee --- .../wiremock/WireMockRestServiceServer.java | 2 +- .../WiremockMockServerApplicationTests.java | 18 ++++++++++++++++++ .../resources/mappings/url-path-pattern.json | 2 +- ...simple-path-pattern-with-leading-slash.json | 10 ++++++++++ ...ple-path-pattern-without-leading-slash.json | 10 ++++++++++ 5 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 spring-cloud-contract-wiremock/src/test/resources/mappings/url-simple-path-pattern-with-leading-slash.json create mode 100644 spring-cloud-contract-wiremock/src/test/resources/mappings/url-simple-path-pattern-without-leading-slash.json diff --git a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockRestServiceServer.java b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockRestServiceServer.java index 5a7ab3219c..e56cfb481f 100644 --- a/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockRestServiceServer.java +++ b/spring-cloud-contract-wiremock/src/main/java/org/springframework/cloud/contract/wiremock/WireMockRestServiceServer.java @@ -277,7 +277,7 @@ public final class WireMockRestServiceServer { if (indexOfBaseUrl == -1) { return url; } - return url.substring(indexOfBaseUrl + this.baseUrl.length() + 1); + return url.substring(indexOfBaseUrl + this.baseUrl.length()); } private Matcher requestMatcher(RequestPattern request) { diff --git a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockMockServerApplicationTests.java b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockMockServerApplicationTests.java index 19902f659b..0acb663193 100644 --- a/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockMockServerApplicationTests.java +++ b/spring-cloud-contract-wiremock/src/test/java/org/springframework/cloud/contract/wiremock/WiremockMockServerApplicationTests.java @@ -411,6 +411,24 @@ public class WiremockMockServerApplicationTests { server.verify(); } + @Test + public void getWithSimpleUrlPathMatchingWithTrailingSlashInBaseUrl() throws Exception { + MockRestServiceServer server = WireMockRestServiceServer.with(this.restTemplate).baseUrl("https://example.org/") + .stubs("classpath:/mappings/url-simple-path-pattern-without-leading-slash.json").build(); + assertThat(this.restTemplate.getForObject("https://example.org/my/api", String.class)) + .isEqualTo("Hello Url Path Matcher"); + server.verify(); + } + + @Test + public void getWithSimpleUrlPathMatchingWithLeadingSlashInPattern() throws Exception { + MockRestServiceServer server = WireMockRestServiceServer.with(this.restTemplate).baseUrl("https://example.org") + .stubs("classpath:/mappings/url-simple-path-pattern-with-leading-slash.json").build(); + assertThat(this.restTemplate.getForObject("https://example.org/my/api", String.class)) + .isEqualTo("Hello Url Path Matcher"); + server.verify(); + } + @Test public void getWithUrlMatching() throws Exception { MockRestServiceServer server = WireMockRestServiceServer.with(this.restTemplate) // diff --git a/spring-cloud-contract-wiremock/src/test/resources/mappings/url-path-pattern.json b/spring-cloud-contract-wiremock/src/test/resources/mappings/url-path-pattern.json index 58f58debed..26fccb5a45 100644 --- a/spring-cloud-contract-wiremock/src/test/resources/mappings/url-path-pattern.json +++ b/spring-cloud-contract-wiremock/src/test/resources/mappings/url-path-pattern.json @@ -1,7 +1,7 @@ { "request": { "method": "GET", - "urlPathPattern": "([a-zA-Z0-9/-]*)/url-path-pattern/" + "urlPathPattern": "/([0-9]+)/url-path-pattern/" }, "response": { "status": 200, diff --git a/spring-cloud-contract-wiremock/src/test/resources/mappings/url-simple-path-pattern-with-leading-slash.json b/spring-cloud-contract-wiremock/src/test/resources/mappings/url-simple-path-pattern-with-leading-slash.json new file mode 100644 index 0000000000..ce37ae8b9f --- /dev/null +++ b/spring-cloud-contract-wiremock/src/test/resources/mappings/url-simple-path-pattern-with-leading-slash.json @@ -0,0 +1,10 @@ +{ + "request": { + "method": "GET", + "urlPathPattern": "/my/api" + }, + "response": { + "status": 200, + "body": "Hello Url Path Matcher" + } +} diff --git a/spring-cloud-contract-wiremock/src/test/resources/mappings/url-simple-path-pattern-without-leading-slash.json b/spring-cloud-contract-wiremock/src/test/resources/mappings/url-simple-path-pattern-without-leading-slash.json new file mode 100644 index 0000000000..db22373c33 --- /dev/null +++ b/spring-cloud-contract-wiremock/src/test/resources/mappings/url-simple-path-pattern-without-leading-slash.json @@ -0,0 +1,10 @@ +{ + "request": { + "method": "GET", + "urlPathPattern": "my/api" + }, + "response": { + "status": 200, + "body": "Hello Url Path Matcher" + } +}