From df79a1f309d9a5f9e043c5b50408b58ad1c9e085 Mon Sep 17 00:00:00 2001 From: Rowan Hill Date: Fri, 31 Dec 2021 15:31:20 +0000 Subject: [PATCH] Support proxy prefix removal --- .../Client/ResponseDefinitionBuilder.php | 15 +++++++++++++- src/WireMock/Http/ResponseDefinition.php | 20 +++++++++++++++++-- .../Integration/ProxyingIntegrationTest.php | 14 +++++++++++++ 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/src/WireMock/Client/ResponseDefinitionBuilder.php b/src/WireMock/Client/ResponseDefinitionBuilder.php index ea9c60e..1e53d46 100644 --- a/src/WireMock/Client/ResponseDefinitionBuilder.php +++ b/src/WireMock/Client/ResponseDefinitionBuilder.php @@ -29,6 +29,8 @@ class ResponseDefinitionBuilder private $_transformerParameters = array(); protected $_additionalRequestHeaders = array(); + /** @var string */ + protected $_proxyUrlPrefixToRemove; /** * @param int $status @@ -222,7 +224,8 @@ public function build() $this->_chunkedDribbleDelay, $this->_fault, $this->_transformers, - $this->_transformerParameters + $this->_transformerParameters, + $this->_proxyUrlPrefixToRemove ); } } @@ -250,4 +253,14 @@ public function withAdditionalRequestHeader($headerName, $value) $this->_additionalRequestHeaders[$headerName] = $value; return $this; } + + /** + * @param string $proxyUrlPrefixToRemove + * @return $this + */ + public function withProxyUrlPrefixToRemove($proxyUrlPrefixToRemove) + { + $this->_proxyUrlPrefixToRemove = $proxyUrlPrefixToRemove; + return $this; + } } diff --git a/src/WireMock/Http/ResponseDefinition.php b/src/WireMock/Http/ResponseDefinition.php index 6db374e..76666ea 100644 --- a/src/WireMock/Http/ResponseDefinition.php +++ b/src/WireMock/Http/ResponseDefinition.php @@ -36,6 +36,8 @@ class ResponseDefinition private $_transformers = array(); /** @var array */ private $_transformerParameters = array(); + /** @var string */ + private $_proxyUrlPrefixToRemove; /** * ResponseDefinition constructor. @@ -68,7 +70,8 @@ public function __construct( $chunkedDribbleDelay, $fault, $transformers, - $transformerParameters + $transformerParameters, + $proxyUrlPrefixToRemove ) { $this->_status = $status; $this->_statusMessage = $statusMessage; @@ -84,6 +87,7 @@ public function __construct( $this->_transformers = $transformers; $this->_transformerParameters = $transformerParameters; $this->_additionalProxyRequestHeaders = $additionalProxyRequestHeaders; + $this->_proxyUrlPrefixToRemove = $proxyUrlPrefixToRemove; } /** @@ -198,6 +202,14 @@ public function getTransformerParameters() return $this->_transformerParameters; } + /** + * @return string + */ + public function getProxyUrlPrefixToRemove() + { + return $this->_proxyUrlPrefixToRemove; + } + public function toArray() { $array = array(); @@ -241,6 +253,9 @@ public function toArray() if ($this->_transformerParameters) { $array['transformerParameters'] = $this->_transformerParameters; } + if ($this->_proxyUrlPrefixToRemove) { + $array['proxyUrlPrefixToRemove'] = $this->_proxyUrlPrefixToRemove; + } return $array; } @@ -271,7 +286,8 @@ public static function fromArray(array $array) null, isset($array['fault']) ? $array['fault'] : null, isset($array['transformers']) ? $array['transformers'] : null, - isset($array['transformerParameters']) ? $array['transformerParameters'] : null + isset($array['transformerParameters']) ? $array['transformerParameters'] : null, + isset($array['proxyUrlPrefixToRemove']) ? $array['proxyUrlPrefixToRemove'] : null ); } } diff --git a/test/WireMock/Integration/ProxyingIntegrationTest.php b/test/WireMock/Integration/ProxyingIntegrationTest.php index 7ee0cbd..16b0460 100644 --- a/test/WireMock/Integration/ProxyingIntegrationTest.php +++ b/test/WireMock/Integration/ProxyingIntegrationTest.php @@ -34,4 +34,18 @@ public function testAdditionProxiedRequestHeadersCanBeSet() assertThat($stubMappingArray['response']['additionalProxyRequestHeaders'], equalTo(array('X-Header' => 'val'))); assertThatTheOnlyMappingPresentIs($stubMapping); } + + public function testProxyUrlPrefixToRemoveCanBeSet() + { + // when + $stubMapping = self::$_wireMock->stubFor(WireMock::get(WireMock::urlEqualTo("/other/service/doc/123")) + ->willReturn(WireMock::aResponse() + ->proxiedFrom("http://otherhost.com/approot") + ->withProxyUrlPrefixToRemove("/other/service"))); + + // then + $stubMappingArray = $stubMapping->toArray(); + assertThat($stubMappingArray['response']['proxyUrlPrefixToRemove'], equalTo('/other/service')); + assertThatTheOnlyMappingPresentIs($stubMapping); + } }