93 lines
3 KiB
PHP
93 lines
3 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
declare(strict_types=1);
|
||
|
|
|
||
|
|
namespace Tests\Feature\Api\V1\Middlewares;
|
||
|
|
|
||
|
|
use Illuminate\Http\Request;
|
||
|
|
use Presentation\Api\V1\Http\Middlewares\NormalizeQueryStringArrays;
|
||
|
|
use Symfony\Component\HttpFoundation\Response;
|
||
|
|
|
||
|
|
describe('NormalizeQueryStringArrays Middleware Feature Tests', function (): void {
|
||
|
|
it('normalizes repeated query parameters into array', function (): void {
|
||
|
|
// GIVEN
|
||
|
|
$middleware = new NormalizeQueryStringArrays();
|
||
|
|
$request = Request::create('/api/v1/employees?siteIds=LDCSER&siteIds=SLELA', 'GET');
|
||
|
|
|
||
|
|
// WHEN
|
||
|
|
$response = $middleware->handle($request, function (Request $req): Response {
|
||
|
|
expect($req->query('siteIds'))->toBe(['LDCSER', 'SLELA']);
|
||
|
|
|
||
|
|
return new Response();
|
||
|
|
});
|
||
|
|
|
||
|
|
// THEN
|
||
|
|
expect($response->getStatusCode())->toBe(200);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('normalizes bracket query parameters into array without trailing brackets in key', function (): void {
|
||
|
|
// GIVEN
|
||
|
|
$middleware = new NormalizeQueryStringArrays();
|
||
|
|
$request = Request::create('/api/v1/employees?siteIds[]=LDCSER&siteIds[]=SLELA', 'GET');
|
||
|
|
|
||
|
|
// WHEN
|
||
|
|
$response = $middleware->handle($request, function (Request $req): Response {
|
||
|
|
expect($req->query('siteIds'))->toBe(['LDCSER', 'SLELA']);
|
||
|
|
|
||
|
|
return new Response();
|
||
|
|
});
|
||
|
|
|
||
|
|
// THEN
|
||
|
|
expect($response->getStatusCode())->toBe(200);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('normalizes single scalar brand query parameter into array', function (): void {
|
||
|
|
// GIVEN
|
||
|
|
$middleware = new NormalizeQueryStringArrays();
|
||
|
|
$request = Request::create('/api/v1/inco-sheets?brands=LGL01', 'GET');
|
||
|
|
|
||
|
|
// WHEN
|
||
|
|
$response = $middleware->handle($request, function (Request $req): Response {
|
||
|
|
expect($req->query('brands'))->toBe(['LGL01']);
|
||
|
|
|
||
|
|
return new Response();
|
||
|
|
});
|
||
|
|
|
||
|
|
// THEN
|
||
|
|
expect($response->getStatusCode())->toBe(200);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('normalizes comma separated brands into array', function (): void {
|
||
|
|
// GIVEN
|
||
|
|
$middleware = new NormalizeQueryStringArrays();
|
||
|
|
$request = Request::create('/api/v1/inco-sheets?brands=LGL01,MCQ01', 'GET');
|
||
|
|
|
||
|
|
// WHEN
|
||
|
|
$response = $middleware->handle($request, function (Request $req): Response {
|
||
|
|
expect($req->query('brands'))->toBe(['LGL01', 'MCQ01']);
|
||
|
|
|
||
|
|
return new Response();
|
||
|
|
});
|
||
|
|
|
||
|
|
// THEN
|
||
|
|
expect($response->getStatusCode())->toBe(200);
|
||
|
|
});
|
||
|
|
|
||
|
|
it('bypasses non-api routes', function (): void {
|
||
|
|
// GIVEN
|
||
|
|
$middleware = new NormalizeQueryStringArrays();
|
||
|
|
$request = Request::create('/ping?siteIds=LDCSER&siteIds=SLELA', 'GET');
|
||
|
|
|
||
|
|
// WHEN
|
||
|
|
$response = $middleware->handle($request, function (Request $req): Response {
|
||
|
|
// PHP native behavior: last value wins if not normalized
|
||
|
|
expect($req->query('siteIds'))->toBe('SLELA');
|
||
|
|
|
||
|
|
return new Response();
|
||
|
|
});
|
||
|
|
|
||
|
|
// THEN
|
||
|
|
expect($response->getStatusCode())->toBe(200);
|
||
|
|
});
|
||
|
|
});
|