Skip to content

Commit 7edc33e

Browse files
committed
Add RequestFactory
1 parent 98e3760 commit 7edc33e

File tree

3 files changed

+96
-0
lines changed

3 files changed

+96
-0
lines changed

src/RequestFactory.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace HttpSoft\Request;
6+
7+
use Psr\Http\Message\RequestFactoryInterface;
8+
use Psr\Http\Message\RequestInterface;
9+
use Psr\Http\Message\StreamInterface;
10+
use Psr\Http\Message\UriInterface;
11+
12+
final class RequestFactory implements RequestFactoryInterface
13+
{
14+
/**
15+
* @param string $method
16+
* @param UriInterface|string $uri
17+
* @param StreamInterface|string|resource $body
18+
* @param array $headers
19+
* @param string $protocol
20+
* @return RequestInterface
21+
*/
22+
public static function create(
23+
string $method,
24+
$uri,
25+
$body = 'php://temp',
26+
array $headers = [],
27+
string $protocol = '1.1'
28+
): RequestInterface {
29+
return new Request($method, $uri, $body, $headers, $protocol);
30+
}
31+
32+
/**
33+
* {@inheritDoc}
34+
*/
35+
public function createRequest(string $method, $uri): RequestInterface
36+
{
37+
return new Request($method, $uri);
38+
}
39+
}

tests/RequestFactoryTest.php

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace HttpSoft\Tests\Request;
6+
7+
use HttpSoft\Request\Request;
8+
use HttpSoft\Request\RequestFactory;
9+
use PHPUnit\Framework\TestCase;
10+
use Psr\Http\Message\RequestInterface;
11+
use Psr\Http\Message\StreamInterface;
12+
13+
class RequestFactoryTest extends TestCase
14+
{
15+
private string $defaultProtocolVersion = '1.1';
16+
17+
public function testCreate(): void
18+
{
19+
$request = RequestFactory::create($method = 'GET', $uri = 'http://example.com');
20+
self::assertEquals($method, $request->getMethod());
21+
self::assertEquals($uri, (string) $request->getUri());
22+
self::assertEquals(['Host' => ['example.com']], $request->getHeaders());
23+
self::assertEquals($this->defaultProtocolVersion, $request->getProtocolVersion());
24+
self::assertInstanceOf(StreamInterface::class, $request->getBody());
25+
self::assertInstanceOf(RequestInterface::class, $request);
26+
self::assertInstanceOf(Request::class, $request);
27+
28+
$request = RequestFactory::create(
29+
$method = 'POST',
30+
$uri = 'http://example.com',
31+
'data://,Content',
32+
['Content-Type' => 'text/html'],
33+
$protocol = '1.0'
34+
);
35+
self::assertEquals($method, $request->getMethod());
36+
self::assertEquals($uri, (string) $request->getUri());
37+
self::assertEquals(['Host' => ['example.com'], 'Content-Type' => ['text/html']], $request->getHeaders());
38+
self::assertEquals($protocol, $request->getProtocolVersion());
39+
self::assertInstanceOf(StreamInterface::class, $request->getBody());
40+
self::assertEquals('Content', $request->getBody()->getContents());
41+
self::assertInstanceOf(RequestInterface::class, $request);
42+
self::assertInstanceOf(Request::class, $request);
43+
}
44+
45+
public function testCreateRequest(): void
46+
{
47+
$factory = new RequestFactory();
48+
$request = $factory->createRequest($method = 'GET', $uri = 'http://example.com');
49+
self::assertEquals($method, $request->getMethod());
50+
self::assertEquals($uri, (string) $request->getUri());
51+
self::assertEquals(['Host' => ['example.com']], $request->getHeaders());
52+
self::assertEquals($this->defaultProtocolVersion, $request->getProtocolVersion());
53+
self::assertInstanceOf(StreamInterface::class, $request->getBody());
54+
self::assertInstanceOf(RequestInterface::class, $request);
55+
self::assertInstanceOf(Request::class, $request);
56+
}
57+
}

tests/RequestTest.php

100755100644
File mode changed.

0 commit comments

Comments
 (0)