Skip to content

Commit a8396be

Browse files
committed
Added test cases for cookies
1 parent afa8faa commit a8396be

2 files changed

Lines changed: 58 additions & 6 deletions

File tree

examples/http_server_v2.php

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,14 @@
99
* @contact group@hyperf.io
1010
* @license https://github.com/hyperf/hyperf/blob/master/LICENSE
1111
*/
12+
use Hyperf\Codec\Json;
1213
use Hyperf\Contract\StdoutLoggerInterface;
1314
use Hyperf\Engine\Coroutine;
1415
use Hyperf\Engine\Http\ServerFactory;
1516
use Hyperf\Engine\Http\Stream;
1617
use Hyperf\Engine\ResponseEmitter;
18+
use Hyperf\HttpMessage\Cookie\Cookie;
19+
use Hyperf\HttpMessage\Server\Request;
1720
use Hyperf\HttpMessage\Server\Response;
1821
use Psr\Http\Message\RequestInterface;
1922
use Swoole\Http\Response as SwooleResponse;
@@ -35,12 +38,34 @@
3538
$server = (new ServerFactory($logger))->make('0.0.0.0', 9505);
3639

3740
$server->handle(static function (RequestInterface $request, SwooleResponse $response) use ($emitter) {
38-
$body = (string) $request->getBody();
39-
$ret = 'Hello World.';
40-
if ($body) {
41-
$ret = 'Received: ' . $body;
42-
}
43-
$emitter->emit((new Response())->withBody(new Stream($ret)), $response);
41+
$path = $request->getUri()->getPath();
42+
43+
$callback = match ($path) {
44+
'/set-cookies' => function (Request $request) {
45+
$cookies = $request->getCookieParams();
46+
$json = Json::decode((string) $request->getBody());
47+
48+
$response = new Response();
49+
if (! empty($json['id'])) {
50+
$response->setCookie(new Cookie('id', $json['id']));
51+
}
52+
if (! empty($json['id2'])) {
53+
$response->setCookie(new Cookie('id2', $json['id2']));
54+
}
55+
56+
return $response->withBody(new Stream(Json::encode($cookies)));
57+
},
58+
default => function (RequestInterface $request) {
59+
$body = (string) $request->getBody();
60+
$ret = 'Hello World.';
61+
if ($body) {
62+
$ret = 'Received: ' . $body;
63+
}
64+
65+
return (new Response())->withBody(new Stream($ret));
66+
}
67+
};
68+
$emitter->emit($callback($request), $response);
4469
});
4570

4671
$server->start();

tests/Cases/HttpServerTest.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
namespace HyperfTest\Cases;
1414

15+
use Hyperf\Codec\Json;
1516
use Hyperf\Engine\Http\Client;
1617

1718
/**
@@ -45,4 +46,30 @@ public function testHttpServerReceived()
4546
$this->assertSame('Received: Hyperf', $response->body);
4647
});
4748
}
49+
50+
/**
51+
* @group Server
52+
*/
53+
public function testHttpServerCookies()
54+
{
55+
$this->runInCoroutine(function () {
56+
$client = new Client('127.0.0.1', 9505);
57+
58+
$client->setCookies(['key' => 'value']);
59+
60+
$response = $client->request('POST', '/set-cookies', ['user_id' => uniqid()], Json::encode(['id' => $id = uniqid()]));
61+
$this->assertSame(200, $response->statusCode);
62+
$this->assertSame(1, count($response->getHeaders()['set-cookie']));
63+
$this->assertStringStartsWith('id=' . $id, $response->getHeaders()['set-cookie'][0]);
64+
$json = Json::decode((string) $response->getBody());
65+
$this->assertSame(['key' => 'value'], $json);
66+
67+
$response = $client->request('POST', '/set-cookies', [], Json::encode(['id2' => $id2 = uniqid()]));
68+
$this->assertSame(200, $response->statusCode);
69+
$this->assertSame(1, count($response->getHeaders()['set-cookie']));
70+
$this->assertStringStartsWith('id2=' . $id2, $response->getHeaders()['set-cookie'][0]);
71+
$json = Json::decode((string) $response->getBody());
72+
$this->assertSame(['key' => 'value', 'id' => $id], $json);
73+
});
74+
}
4875
}

0 commit comments

Comments
 (0)