Enable Discovery debug logging for production troubleshooting

- Add DISCOVERY_LOG_LEVEL=debug
- Add DISCOVERY_SHOW_PROGRESS=true
- Temporary changes for debugging InitializerProcessor fixes on production
This commit is contained in:
2025-08-11 20:13:26 +02:00
parent 59fd3dd3b1
commit 55a330b223
3683 changed files with 2956207 additions and 16948 deletions

View File

@@ -0,0 +1,162 @@
<?php
declare(strict_types=1);
namespace Tests\Framework\Http\Parser;
use App\Framework\Cache\Compression\NullCompression;
use App\Framework\Cache\CompressionCacheDecorator;
use App\Framework\Cache\Driver\InMemoryCache;
use App\Framework\Cache\GeneralCache;
use App\Framework\Http\Parser\ParserCache;
use App\Framework\Http\Parser\ParserConfig;
use App\Framework\Http\Parser\QueryStringParser;
use App\Framework\Serializer\Php\PhpSerializer;
use PHPUnit\Framework\TestCase;
final class QueryStringParserTest extends TestCase
{
private QueryStringParser $parser;
protected function setUp(): void
{
// Create parser cache with proper serialization
$baseCache = new GeneralCache(new InMemoryCache(), new \App\Framework\Serializer\Php\PhpSerializer());
$compressionCache = new CompressionCacheDecorator(
$baseCache,
new NullCompression(),
new PhpSerializer()
);
$cache = new ParserCache($compressionCache);
$this->parser = new QueryStringParser($cache, new ParserConfig());
}
public function testParseEmptyString(): void
{
$result = $this->parser->parse('');
$this->assertSame([], $result);
}
public function testParseSimpleParameters(): void
{
$result = $this->parser->parse('foo=bar&baz=qux');
$this->assertSame([
'foo' => 'bar',
'baz' => 'qux',
], $result);
}
public function testParseUrlEncodedValues(): void
{
$result = $this->parser->parse('name=John+Doe&city=New%20York');
$this->assertSame([
'name' => 'John Doe',
'city' => 'New York',
], $result);
}
public function testParseSpecialCharacters(): void
{
$result = $this->parser->parse('email=test%40example.com&msg=Hello%21');
$this->assertSame([
'email' => 'test@example.com',
'msg' => 'Hello!',
], $result);
}
public function testParseEmptyValues(): void
{
$result = $this->parser->parse('foo=&bar=value&baz');
$this->assertSame([
'foo' => '',
'bar' => 'value',
'baz' => '',
], $result);
}
public function testParseArrayNotation(): void
{
$result = $this->parser->parse('items[]=one&items[]=two&items[]=three');
$this->assertSame([
'items' => ['one', 'two', 'three'],
], $result);
}
public function testParseArrayWithKeys(): void
{
$result = $this->parser->parse('user[name]=John&user[email]=john@example.com');
$this->assertSame([
'user' => [
'name' => 'John',
'email' => 'john@example.com',
],
], $result);
}
public function testParseNestedArrays(): void
{
$result = $this->parser->parse('data[user][info][name]=John&data[user][info][age]=30');
$this->assertSame([
'data' => [
'user' => [
'info' => [
'name' => 'John',
'age' => '30',
],
],
],
], $result);
}
public function testParseMixedArrayNotations(): void
{
$result = $this->parser->parse('items[0]=first&items[]=second&items[2]=third');
$this->assertSame([
'items' => [
'0' => 'first',
1 => 'second',
'2' => 'third',
],
], $result);
}
public function testParseComplexRealWorldExample(): void
{
$query = 'search=php+frameworks&' .
'filters[category][]=web&' .
'filters[category][]=api&' .
'filters[rating]=5&' .
'sort=popularity&' .
'page=2';
$result = $this->parser->parse($query);
$this->assertSame([
'search' => 'php frameworks',
'filters' => [
'category' => ['web', 'api'],
'rating' => '5',
],
'sort' => 'popularity',
'page' => '2',
], $result);
}
public function testHandlesDuplicateKeys(): void
{
// Later values override earlier ones for simple keys
$result = $this->parser->parse('foo=bar&foo=baz');
$this->assertSame(['foo' => 'baz'], $result);
}
public function testHandlesEmptyArrayKeys(): void
{
$result = $this->parser->parse('arr[]=one&arr[][nested]=two');
$this->assertSame([
'arr' => [
0 => 'one',
1 => ['nested' => 'two'],
],
], $result);
}
}