76 lines
2.3 KiB
PHP
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' => [],
|
|
],
|
|
],
|
|
]);
|
|
}
|
|
}
|