Skip to content

Commit 6de1904

Browse files
committed
fixed broken tests
1 parent a3f96b3 commit 6de1904

File tree

2 files changed

+72
-42
lines changed

2 files changed

+72
-42
lines changed

spec/BaseUriPluginSpec.php

Lines changed: 67 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -32,62 +32,61 @@ function it_is_a_plugin()
3232
}
3333

3434
function it_appends_base_uri(
35-
UriFactory $uriFactory,
36-
RequestInterface $request,
3735
ResponseInterface $response,
38-
UriInterface $uri,
36+
RequestInterface $request,
3937
RequestInterface $modifiedRequest,
38+
UriInterface $baseUri,
39+
UriInterface $inputUri,
4040
UriInterface $modifiedUri
4141
) {
42-
$uriFactory->createUri('http://httplug.io/bar')->willReturn($modifiedUri);
43-
$this->beConstructedWith($uriFactory, 'http://httplug.io/');
44-
45-
$request->getUri()->shouldBeCalled()->willReturn($uri);
46-
$uri->__toString()->shouldBeCalled()->willReturn('bar');
47-
$request->withUri($modifiedUri)->shouldBeCalled()->willReturn($modifiedRequest);
48-
$modifiedRequest->getUri()->willReturn($modifiedUri);
42+
$inputUri->__toString()->shouldBeCalled()->willReturn('biz');
43+
$baseUri->__toString()->willReturn('http://httplug.io/bar/');
44+
$baseUri->getPath()->shouldBeCalled()->willReturn('/bar/');
45+
$baseUri->getQuery()->shouldBeCalled()->willReturn('');
4946

50-
$next = function (RequestInterface $receivedRequest) use($modifiedUri, $response) {
51-
if (Argument::is($modifiedUri->getWrappedObject())->scoreArgument($receivedRequest->getUri())) {
52-
return new FulfilledPromise($response->getWrappedObject());
53-
}
54-
};
47+
$baseUri->withPath('/bar/biz')->shouldBeCalled()->willReturn($modifiedUri);
5548

56-
$finalPromise = $this->handleRequest($request, $next, function () {});
57-
$finalPromise->shouldReturnAnInstanceOf('Http\Promise\FulfilledPromise');
49+
$this->beConstructedWith($baseUri);
50+
$this->valdateReturnValue($request, $modifiedRequest, $inputUri, $modifiedUri, $response);
5851
}
5952

60-
function it_replaces_path_on_base_uri(
61-
UriFactory $uriFactory,
62-
RequestInterface $request,
53+
function it_appends_base_uri_with_query(
6354
ResponseInterface $response,
64-
UriInterface $uri,
55+
RequestInterface $request,
6556
RequestInterface $modifiedRequest,
57+
UriInterface $baseUri,
58+
UriInterface $inputUri,
6659
UriInterface $modifiedUri
6760
) {
68-
$baseUri = 'http://httplug.io/';
69-
$uriFactory->createUri($baseUri)->willReturn($modifiedUri);
70-
$this->beConstructedWith($uriFactory, $baseUri);
61+
$inputUri->__toString()->shouldBeCalled()->willReturn('&a=b&c=d');
62+
$baseUri->__toString()->willReturn('http://httplug.io/bar/');
63+
$baseUri->getPath()->willReturn('/bar/');
64+
$baseUri->getQuery()->willReturn('foo=bar');
7165

72-
$request->getUri()->shouldBeCalled()->willReturn($uri);
73-
$uri->__toString()->shouldBeCalled()->willReturn('/foo');
74-
$uri->getPath()->shouldBeCalled()->willReturn('/foo');
75-
$uri->getQuery()->shouldBeCalled()->willReturn('');
66+
$baseUri->withQuery('foo=bar&a=b&c=d')->shouldBeCalled()->willReturn($modifiedUri);
7667

77-
$modifiedUri->withPath('/foo')->shouldBeCalled()->willReturn($modifiedUri);
78-
$modifiedUri->withQuery('')->shouldBeCalled()->willReturn($modifiedUri);
68+
$this->beConstructedWith($baseUri);
69+
$this->valdateReturnValue($request, $modifiedRequest, $inputUri, $modifiedUri, $response);
70+
}
7971

80-
$request->withUri($modifiedUri)->shouldBeCalled()->willReturn($modifiedRequest);
81-
$modifiedRequest->getUri()->willReturn($modifiedUri);
72+
function it_replaces_path_on_base_uri(
73+
ResponseInterface $response,
74+
RequestInterface $request,
75+
RequestInterface $modifiedRequest,
76+
UriInterface $baseUri,
77+
UriInterface $inputUri,
78+
UriInterface $modifiedUri
79+
) {
80+
$inputUri->__toString()->shouldBeCalled()->willReturn('/foo');
81+
$inputUri->getPath()->shouldBeCalled()->willReturn('/foo');
82+
$inputUri->getQuery()->shouldBeCalled()->willReturn('');
83+
$baseUri->__toString()->willReturn('http://httplug.io/bar/');
8284

83-
$next = function (RequestInterface $receivedRequest) use($modifiedUri, $response) {
84-
if (Argument::is($modifiedUri->getWrappedObject())->scoreArgument($receivedRequest->getUri())) {
85-
return new FulfilledPromise($response->getWrappedObject());
86-
}
87-
};
85+
$baseUri->withPath('/foo')->shouldBeCalled()->willReturn($modifiedUri);
86+
$modifiedUri->withQuery('')->shouldBeCalled()->willReturn($modifiedUri);
8887

89-
$finalPromise = $this->handleRequest($request, $next, function () {});
90-
$finalPromise->shouldReturnAnInstanceOf('Http\Promise\FulfilledPromise');
88+
$this->beConstructedWith($baseUri);
89+
$this->valdateReturnValue($request, $modifiedRequest, $inputUri, $modifiedUri, $response);
9190
}
9291

9392
function it_ignores_absolute_url(RequestInterface $request, UriInterface $uri)
@@ -98,4 +97,33 @@ function it_ignores_absolute_url(RequestInterface $request, UriInterface $uri)
9897
$this->handleRequest($request, function () {}, function () {});
9998
}
10099

100+
/**
101+
* Make sure the handleRequest function returns what we expect. We expect that if we input a request
102+
* the output request will have an instance of output uri.
103+
*
104+
* @param RequestInterface $inputRequest
105+
* @param ResponseInterface $dummyResponse
106+
* @param UriInterface $outputUri
107+
*/
108+
private function valdateReturnValue(
109+
RequestInterface $inputRequest,
110+
RequestInterface $outputRequest,
111+
UriInterface $inputUri,
112+
UriInterface $outputUri,
113+
ResponseInterface $dummyResponse
114+
) {
115+
$inputRequest->getUri()->willReturn($inputUri);
116+
$inputRequest->withUri($outputUri)->willReturn($outputRequest);
117+
$outputRequest->getUri()->willReturn($outputUri);
118+
119+
$next = function (RequestInterface $receivedRequest) use ($outputUri, $dummyResponse) {
120+
if (Argument::is($outputUri->getWrappedObject())->scoreArgument($receivedRequest->getUri())) {
121+
return new FulfilledPromise($dummyResponse->getWrappedObject());
122+
}
123+
};
124+
125+
$finalPromise = $this->handleRequest($inputRequest, $next, function () {});
126+
$finalPromise->shouldReturnAnInstanceOf('Http\Promise\FulfilledPromise');
127+
}
128+
101129
}

src/BaseUriPlugin.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,11 @@ private function modifyUri(UriInterface $uri)
5959
$modifiedUri = $this->baseUri->withQuery($query.$uriString);
6060
} else {
6161
// Append the uri on path and query
62-
list($path, $query) = explode('?', $uriString, 2);
63-
$modifiedUri = $this->baseUri->withPath($this->baseUri->getPath().$path);
64-
$modifiedUri = $modifiedUri->withQuery($query);
62+
$parts = explode('?', $uriString, 2);
63+
$modifiedUri = $this->baseUri->withPath($this->baseUri->getPath().$parts[0]);
64+
if (isset($parts[1])) {
65+
$modifiedUri = $modifiedUri->withQuery($parts[1]);
66+
}
6567
}
6668
}
6769

0 commit comments

Comments
 (0)