From d4764781921e3fcecab8321fd08873ac89af5e91 Mon Sep 17 00:00:00 2001 From: Dominik Adam Przybysz Date: Sun, 14 Dec 2014 12:45:56 +0100 Subject: [PATCH] Add support for path parameters --- .../mockserver/server/ContextExecutor.groovy | 2 +- .../touk/mockserver/server/MockRequest.groovy | 6 +++-- .../server/MockServerIntegrationTest.groovy | 25 ++++++++++++++++++- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy b/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy index 8531af6..d7cf14a 100644 --- a/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy +++ b/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy @@ -17,7 +17,7 @@ class ContextExecutor { this.mocks = new CopyOnWriteArrayList<>([initialMock]) httpServerWraper.createContext(path, { HttpExchange ex -> - MockRequest request = new MockRequest(ex.requestBody.text, ex.requestHeaders, ex.requestURI.query) + MockRequest request = new MockRequest(ex.requestBody.text, ex.requestHeaders, ex.requestURI) println "Mock received input" for (Mock mock : mocks) { try { diff --git a/src/main/groovy/pl/touk/mockserver/server/MockRequest.groovy b/src/main/groovy/pl/touk/mockserver/server/MockRequest.groovy index 56cdfbd..5e6ddc8 100644 --- a/src/main/groovy/pl/touk/mockserver/server/MockRequest.groovy +++ b/src/main/groovy/pl/touk/mockserver/server/MockRequest.groovy @@ -13,14 +13,16 @@ class MockRequest { final GPathResult xml final GPathResult soap final Object json + final List path - MockRequest(String text, Headers headers, String query) { + MockRequest(String text, Headers headers, URI uri) { this.text = text this.headers = headersToMap(headers) - this.query = queryParamsToMap(query) + this.query = queryParamsToMap(uri.query) this.xml = inputToXml(text) this.soap = inputToSoap(xml) this.json = inputToJson(text) + this.path = uri.path.split('/').findAll() } private static GPathResult inputToXml(String text) { diff --git a/src/test/groovy/pl/touk/mockserver/server/MockServerIntegrationTest.groovy b/src/test/groovy/pl/touk/mockserver/server/MockServerIntegrationTest.groovy index 7feb10f..f6fb5b2 100644 --- a/src/test/groovy/pl/touk/mockserver/server/MockServerIntegrationTest.groovy +++ b/src/test/groovy/pl/touk/mockserver/server/MockServerIntegrationTest.groovy @@ -612,7 +612,30 @@ class MockServerIntegrationTest extends Specification { new RegisteredMock('testRest4', 'testEndpoint', 9999), new RegisteredMock('testRest6', 'testEndpoint2', 9999) ] - } + + def "should add mock accepts path certain path params"() { + given: + controlServerClient.addMock(new AddMockRequestData( + name: 'testRest', + path: 'testEndpoint', + port: 9999, + predicate: '''{req -> req.path[1] == '15' && req.path[2] == 'comments'}''', + response: '''{req -> """{"name":"goodResponse-${req.path[1]}"}"""}''' + )) + HttpPost restPost = new HttpPost('http://localhost:9999/testEndpoint/15/comments') + HttpPost badRestPost = new HttpPost('http://localhost:9999/testEndpoint/test/comments') + when: + CloseableHttpResponse badResponse = client.execute(badRestPost) + then: + badResponse.statusLine.statusCode == 404 + Util.consumeResponse(badResponse) + when: + CloseableHttpResponse response = client.execute(restPost) + then: + Object restPostResponse = Util.extractJsonResponse(response) + restPostResponse.name == 'goodResponse-15' + } + //TODO def "should get mock report"(){} }