ldc-arcadia-api/tests/Feature/Api/V1/Middlewares/NormalizeQueryStringArraysTest.php

93 lines
3 KiB
PHP
Raw Normal View History

<?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);
});
});