Files
MageSail/Magesail/Test/Unit/Model/NginxMapParserTest.php
T
2026-03-21 03:01:08 -05:00

76 lines
2.3 KiB
PHP

<?php
declare(strict_types=1);
namespace MageSail\Magesail\Test\Unit\Model;
use MageSail\Magesail\Model\NginxMapParser;
use PHPUnit\Framework\TestCase;
class NginxMapParserTest extends TestCase
{
public function testParseExtractsMapBlockAndEntries(): void
{
$content = <<<'NGINX'
# comment
map $http_host $MAGE_RUN_CODE {
default '';
dev.example.com mgtun_abc123;
"other.host" mgtun_xyz;
}
NGINX;
$parser = new NginxMapParser();
$result = $parser->parse($content);
self::assertCount(1, $result['blocks']);
$b = $result['blocks'][0];
self::assertSame('http_host', $b['source']);
self::assertSame('MAGE_RUN_CODE', $b['target']);
self::assertSame(1, $b['startLine']);
self::assertSame(5, $b['endLine']);
self::assertCount(2, $b['entries']);
self::assertSame('dev.example.com', $b['entries'][0]['hostname']);
self::assertSame('mgtun_abc123', $b['entries'][0]['value']);
self::assertSame('other.host', $b['entries'][1]['hostname']);
self::assertSame('mgtun_xyz', $b['entries'][1]['value']);
}
public function testParseEmptyContent(): void
{
$parser = new NginxMapParser();
self::assertSame([], $parser->parse('')['blocks']);
}
public function testRebuildRoundTripPreservesNonMapLines(): void
{
$original = <<<'NGINX'
before
map $http_host $MAGE_RUN_CODE {
default '';
host1 code1;
}
after
NGINX;
$parser = new NginxMapParser();
$parsed = $parser->parse($original);
$rebuilt = $parser->rebuild($original, $parsed);
self::assertStringContainsString('before', $rebuilt);
self::assertStringContainsString('after', $rebuilt);
self::assertStringContainsString('map $http_host $MAGE_RUN_CODE {', $rebuilt);
self::assertStringContainsString('host1 code1;', $rebuilt);
}
public function testRebuildThrowsWhenBlockMissingLineMetadata(): void
{
$parser = new NginxMapParser();
$this->expectException(\InvalidArgumentException::class);
$parser->rebuild("map \$h \$t {\n}\n", [
'blocks' => [
[
'source' => 'h',
'target' => 't',
'entries' => [],
],
],
]);
}
}