Skip to content

Commit 1fd40b4

Browse files
committed
fix client request immutability
1 parent 538a6d4 commit 1fd40b4

File tree

2 files changed

+38
-2
lines changed

2 files changed

+38
-2
lines changed

src/Model/Client/Request.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public function __construct(string $method, string $url, array $query = [], ?Str
5050
*/
5151
public function withBaseUrl(string $baseUrl): self
5252
{
53-
$request = new self($this->method, $this->url, $this->headers);
53+
$request = new self($this->method, $this->url, [], $this->body, $this->headers);
5454
$request->baseUrl = StringRule::make($baseUrl, '$baseUrl')->parseHttpUrl([], [PHP_URL_QUERY, PHP_URL_FRAGMENT])->notNull();
5555
return $request;
5656
}
@@ -69,7 +69,7 @@ public function withJson($jsonData, ?Transformer $transformer): self
6969
$headers = $this->headers;
7070
$headers['Content-Type'] = 'application/json';
7171
$stream = Utils::streamFor(\GuzzleHttp\Utils::jsonEncode($jsonData));
72-
$request = new self($this->method, $this->url, $headers, $stream);
72+
$request = new self($this->method, $this->url, [], $stream, $headers);
7373
$request->baseUrl = $this->baseUrl;
7474
return $request;
7575
}

test/Model/Client/RequestTest.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use GuzzleHttp\Psr7\HttpFactory;
6+
use PHPUnit\Framework\TestCase;
7+
use SimpleAsFuck\ApiToolkit\Model\Client\Request;
8+
9+
final class RequestTest extends TestCase
10+
{
11+
public function testWithJson(): void
12+
{
13+
$request = new Request('POST', '/test');
14+
$request = $request->withBaseUrl('http://host');
15+
$requestWithJson = $request->withJson(['test' => 'test'], null);
16+
17+
$factory = new HttpFactory();
18+
19+
self::assertSame('', $request->createPsr($factory)->getBody()->getContents());
20+
self::assertSame('{"test":"test"}', $requestWithJson->createPsr($factory)->getBody()->getContents());
21+
}
22+
23+
public function testWithBaseUrl(): void
24+
{
25+
$request = new Request('GET', '/test', ['test' => 'test'], null, ['test' => 'test']);
26+
$requestWithBaseUrl = $request->withBaseUrl('http://host');
27+
$psrRequest = $requestWithBaseUrl->createPsr(new HttpFactory());
28+
29+
self::assertSame(false, $request->hasBaseUrl());
30+
self::assertSame(true, $requestWithBaseUrl->hasBaseUrl());
31+
self::assertSame('GET', $psrRequest->getMethod());
32+
self::assertSame('http://host/test?test=test', (string) $psrRequest->getUri());
33+
self::assertSame('', $psrRequest->getBody()->getContents());
34+
self::assertSame(['test'], $psrRequest->getHeader('test'));
35+
}
36+
}

0 commit comments

Comments
 (0)