Skip to content

Commit 7dca015

Browse files
canvuralscaytrase
authored andcommitted
Update dependencies and fix tests
1 parent 78ec0a3 commit 7dca015

File tree

5 files changed

+50
-38
lines changed

5 files changed

+50
-38
lines changed

composer.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
"php": ">=7.2",
2525
"ext-json": "*",
2626
"cebe/php-openapi": "^1.3",
27-
"dflydev/fig-cookies": "^2.0",
27+
"hansott/psr7-cookies": "^3.0.2",
2828
"league/uri": "^6.3",
2929
"psr/cache": "^1.0",
3030
"psr/http-message": "^1.0",
@@ -34,10 +34,10 @@
3434
"webmozart/assert": "^1.4"
3535
},
3636
"require-dev": {
37-
"cache/array-adapter": "^1.0",
3837
"doctrine/coding-standard": "^8.0",
3938
"guzzlehttp/psr7": "^1.5",
40-
"phpunit/phpunit": "^7|^8"
39+
"phpunit/phpunit": "^7|^8|^9",
40+
"symfony/cache": "^5.1"
4141
},
4242
"config": {
4343
"sort-packages": true

src/PSR7/Validators/CookiesValidator/RequestCookieValidator.php

+36-12
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
namespace League\OpenAPIValidation\PSR7\Validators\CookiesValidator;
66

77
use cebe\openapi\spec\Parameter;
8-
use Dflydev\FigCookies\Cookie;
9-
use Dflydev\FigCookies\Cookies;
108
use League\OpenAPIValidation\PSR7\Exception\Validation\InvalidCookies;
119
use League\OpenAPIValidation\PSR7\MessageValidator;
1210
use League\OpenAPIValidation\PSR7\OperationAddress;
@@ -18,6 +16,10 @@
1816
use Psr\Http\Message\RequestInterface;
1917
use Webmozart\Assert\Assert;
2018

19+
use function array_key_exists;
20+
use function explode;
21+
use function implode;
22+
2123
class RequestCookieValidator implements MessageValidator
2224
{
2325
use ValidationStrategy;
@@ -39,42 +41,64 @@ public function __construct(array $specs)
3941
public function validate(OperationAddress $addr, MessageInterface $message): void
4042
{
4143
Assert::isInstanceOf($message, RequestInterface::class);
42-
$cookies = Cookies::fromRequest($message);
44+
$cookies = $this->getCookiesFromMessage($message);
4345
$this->checkRequiredCookies($cookies, $addr);
4446
$this->checkCookiesAgainstSchema($message, $addr, $cookies);
4547
}
4648

4749
/**
50+
* @param string[] $cookies
51+
*
4852
* @throws InvalidCookies
4953
*/
50-
private function checkRequiredCookies(Cookies $cookies, OperationAddress $addr): void
54+
private function checkRequiredCookies(array $cookies, OperationAddress $addr): void
5155
{
5256
foreach ($this->specs as $cookieName => $spec) {
53-
if ($spec->required && ! $cookies->has($cookieName)) {
57+
if ($spec->required && ! array_key_exists($cookieName, $cookies)) {
5458
throw InvalidCookies::becauseOfMissingRequiredCookie($cookieName, $addr);
5559
}
5660
}
5761
}
5862

5963
/**
64+
* @param string[] $cookies
65+
*
6066
* @throws InvalidCookies
6167
*/
62-
private function checkCookiesAgainstSchema(RequestInterface $request, OperationAddress $addr, Cookies $cookies): void
68+
private function checkCookiesAgainstSchema(RequestInterface $request, OperationAddress $addr, array $cookies): void
6369
{
6470
$validator = new SchemaValidator($this->detectValidationStrategy($request));
6571

66-
foreach ($cookies->getAll() as $cookie) {
67-
/** @var Cookie $cookie */
68-
if (! isset($this->specs[$cookie->getName()])) {
72+
foreach ($cookies as $cookieName => $cookie) {
73+
if (! isset($this->specs[$cookieName])) {
6974
continue;
7075
}
7176

72-
$parameter = SerializedParameter::fromSpec($this->specs[$cookie->getName()]);
77+
$parameter = SerializedParameter::fromSpec($this->specs[$cookieName]);
7378
try {
74-
$validator->validate($parameter->deserialize($cookie->getValue()), $parameter->getSchema());
79+
$validator->validate($parameter->deserialize($cookie), $parameter->getSchema());
7580
} catch (SchemaMismatch $e) {
76-
throw InvalidCookies::becauseValueDoesNotMatchSchema($cookie->getName(), $cookie->getValue(), $addr, $e);
81+
throw InvalidCookies::becauseValueDoesNotMatchSchema($cookieName, $cookie, $addr, $e);
7782
}
7883
}
7984
}
85+
86+
/**
87+
* @return string[]
88+
*/
89+
private function getCookiesFromMessage(MessageInterface $message): array
90+
{
91+
// Needed in case it is an array of cookies.
92+
$cookieString = implode('; ', $message->getHeader('Cookie'));
93+
$headerCookies = explode('; ', $cookieString);
94+
95+
$cookies = [];
96+
foreach ($headerCookies as $itm) {
97+
$pairParts = explode('=', $itm, 2);
98+
$pairParts[1] = $pairParts[1] ?? '';
99+
$cookies[$pairParts[0]] = $pairParts[1];
100+
}
101+
102+
return $cookies;
103+
}
80104
}

tests/PSR7/BaseValidatorTest.php

+3-7
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,11 @@
44

55
namespace League\OpenAPIValidation\Tests\PSR7;
66

7-
use Dflydev\FigCookies\Cookie;
8-
use Dflydev\FigCookies\FigRequestCookies;
9-
use Dflydev\FigCookies\FigResponseCookies;
10-
use Dflydev\FigCookies\SetCookie;
117
use GuzzleHttp\Psr7\Request;
128
use GuzzleHttp\Psr7\Response;
139
use GuzzleHttp\Psr7\ServerRequest;
1410
use GuzzleHttp\Psr7\Uri;
11+
use HansOtt\PSR7Cookies\SetCookie;
1512
use InvalidArgumentException;
1613
use PHPUnit\Framework\TestCase;
1714
use Psr\Http\Message\RequestInterface;
@@ -41,7 +38,7 @@ protected function makeGoodResponse(string $path, string $method): ResponseInter
4138
case 'post /cookies':
4239
$response = (new Response())
4340
->withHeader('Content-Type', 'text/plain');
44-
$response = FigResponseCookies::set($response, SetCookie::create('session_id', 'abc'));
41+
$response = SetCookie::thatStaysForever('session_id', 'abc')->addToResponse($response);
4542

4643
return $response;
4744

@@ -98,8 +95,7 @@ protected function makeGoodRequest(string $path, string $method): RequestInterfa
9895

9996
case 'post /cookies':
10097
$request = $request->withHeader('Content-Type', 'text/plain');
101-
$request = FigRequestCookies::set($request, Cookie::create('session_id', 'abc'));
102-
$request = FigRequestCookies::set($request, Cookie::create('debug', '10'));
98+
$request = $request->withHeader('Cookie', 'session_id=abc; debug=10');
10399

104100
return $request;
105101

tests/PSR7/MessageCookiesTest.php

+4-8
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@
44

55
namespace League\OpenAPIValidation\Tests\PSR7;
66

7-
use Dflydev\FigCookies\Cookie;
8-
use Dflydev\FigCookies\FigRequestCookies;
9-
use Dflydev\FigCookies\FigResponseCookies;
10-
use Dflydev\FigCookies\SetCookie;
7+
use HansOtt\PSR7Cookies\SetCookie;
118
use League\OpenAPIValidation\PSR7\Exception\Validation\InvalidCookies;
129
use League\OpenAPIValidation\PSR7\Exception\Validation\InvalidHeaders;
1310
use League\OpenAPIValidation\PSR7\OperationAddress;
@@ -100,8 +97,7 @@ public function testItValidatesRequestWithInvalidCookieValueForRequestRed(): voi
10097
$addr = new OperationAddress('/cookies', 'post');
10198
$request = $this->makeGoodRequest($addr->path(), $addr->method())
10299
->withoutHeader('Cookie');
103-
$request = FigRequestCookies::set($request, Cookie::create('session_id', 'goodvalue'));
104-
$request = FigRequestCookies::set($request, Cookie::create('debug', 'bad value'));
100+
$request = $request->withHeader('Cookie', 'session_id=goodvalue; debug=bad value');
105101

106102
$this->expectException(InvalidCookies::class);
107103
$this->expectExceptionMessage('Value "bad value" for cookie "debug" is invalid for Request [post /cookies]');
@@ -129,7 +125,7 @@ public function testItValidatesRequestWithExtraCookieForRequestGreen(): void
129125
{
130126
$addr = new OperationAddress('/cookies', 'post');
131127
$request = $this->makeGoodRequest($addr->path(), $addr->method());
132-
$request = FigRequestCookies::set($request, Cookie::create('extra', 'any value'));
128+
$request = $request->withAddedHeader('Cookie', 'extra=any value');
133129

134130
$validator = (new ValidatorBuilder())->fromYamlFile($this->apiSpecFile)->getRequestValidator();
135131
$validator->validate($request);
@@ -140,7 +136,7 @@ public function testItValidatesRequestWithExtraCookieForResponseGreen(): void
140136
{
141137
$addr = new ResponseAddress('/cookies', 'post', 200);
142138
$response = $this->makeGoodResponse($addr->path(), $addr->method());
143-
$response = FigResponseCookies::set($response, SetCookie::create('any', 'value'));
139+
$response = SetCookie::thatStaysForever('any', 'value')->addToResponse($response);
144140

145141
$validator = (new ValidatorBuilder())->fromYamlFile($this->apiSpecFile)->getResponseValidator();
146142
$validator->validate($addr, $response);

tests/PSR7/ValidatorBuilderTest.php

+4-8
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,20 @@
44

55
namespace League\OpenAPIValidation\Tests\PSR7;
66

7-
use Cache\Adapter\PHPArray\ArrayCachePool;
87
use cebe\openapi\spec\OpenApi;
98
use League\OpenAPIValidation\PSR7\CacheableSchemaFactory;
109
use League\OpenAPIValidation\PSR7\ValidatorBuilder;
1110
use PHPUnit\Framework\TestCase;
11+
use Symfony\Component\Cache\Adapter\ArrayAdapter;
1212

1313
/**
14-
* @covers \OpenAPIValidation\PSR7\ValidatorBuilder
14+
* @covers \League\OpenAPIValidation\PSR7\ValidatorBuilder
1515
*/
1616
final class ValidatorBuilderTest extends TestCase
1717
{
1818
public function testItCachesParsedOpenApiSpec(): void
1919
{
20-
// configure cache
21-
$pool = [];
22-
$cache = new ArrayCachePool(10, $pool);
20+
$cache = new ArrayAdapter(0, true, 0, 10);
2321

2422
$factory = $this->createMock(CacheableSchemaFactory::class);
2523
$factory->expects($this->once())->method('createSchema')
@@ -37,9 +35,7 @@ public function testItCachesParsedOpenApiSpec(): void
3735

3836
public function testItUtilizesCacheKeyOverride(): void
3937
{
40-
// configure cache
41-
$pool = [];
42-
$cache = new ArrayCachePool(10, $pool);
38+
$cache = new ArrayAdapter(0, true, 0, 10);
4339

4440
$factory = $this->createMock(CacheableSchemaFactory::class);
4541
$factory->expects($this->once())->method('createSchema')

0 commit comments

Comments
 (0)