Files
MageSail/Magesail/Test/Unit/Model/TunnelRegistryTest.php
T
snxraven bbd83659a7
CI / php (push) Successful in 2m56s
tests
2026-03-21 03:49:54 -05:00

124 lines
4.1 KiB
PHP

<?php
declare(strict_types=1);
namespace MageSail\Magesail\Test\Unit\Model;
use MageSail\Magesail\Model\TunnelRegistry;
use PHPUnit\Framework\TestCase;
class TunnelRegistryTest extends TestCase
{
public function testHostFromHttpHostStripsPort(): void
{
self::assertSame('dev.local', TunnelRegistry::hostFromHttpHost('dev.local:8080'));
}
public function testHostFromHttpHostNullForEmpty(): void
{
self::assertNull(TunnelRegistry::hostFromHttpHost(null));
self::assertNull(TunnelRegistry::hostFromHttpHost(''));
}
public function testHostFromBaseUrlExtractsHost(): void
{
self::assertSame('shop.test', TunnelRegistry::hostFromBaseUrl('https://shop.test/base/'));
}
public function testHostFromBaseUrlInvalidReturnsNull(): void
{
self::assertNull(TunnelRegistry::hostFromBaseUrl('not-a-url'));
}
public function testFindByRequestHostMatchesUnsecureBaseUrlHost(): void
{
$registry = $this->getMockBuilder(TunnelRegistry::class)
->disableOriginalConstructor()
->onlyMethods(['listTunnels'])
->getMock();
$registry->method('listTunnels')->willReturn([
[
'id' => 't1',
'store_code' => 'mgtun_abc',
'unsecure_base_url' => 'http://dev.example.com/',
'secure_base_url' => '',
],
]);
$match = $registry->findByRequestHost('dev.example.com');
self::assertNotNull($match);
self::assertSame('mgtun_abc', $match['store_code'] ?? null);
}
public function testFindByRequestHostMatchesSecureBaseUrlHost(): void
{
$registry = $this->getMockBuilder(TunnelRegistry::class)
->disableOriginalConstructor()
->onlyMethods(['listTunnels'])
->getMock();
$registry->method('listTunnels')->willReturn([
[
'id' => 't2',
'store_code' => 'mgtun_xyz',
'unsecure_base_url' => '',
'secure_base_url' => 'https://secure.shop/',
],
]);
$match = $registry->findByRequestHost('secure.shop:443');
self::assertNotNull($match);
self::assertSame('mgtun_xyz', $match['store_code'] ?? null);
}
public function testFindByRequestHostIsCaseInsensitive(): void
{
$registry = $this->getMockBuilder(TunnelRegistry::class)
->disableOriginalConstructor()
->onlyMethods(['listTunnels'])
->getMock();
$registry->method('listTunnels')->willReturn([
[
'id' => 't3',
'store_code' => 'mgtun_ci',
'unsecure_base_url' => 'http://Mixed.Case.Host/',
'secure_base_url' => '',
],
]);
$match = $registry->findByRequestHost('mixed.case.host');
self::assertNotNull($match);
self::assertSame('mgtun_ci', $match['store_code'] ?? null);
}
public function testFindByRequestHostReturnsNullWhenNoTunnelMatches(): void
{
$registry = $this->getMockBuilder(TunnelRegistry::class)
->disableOriginalConstructor()
->onlyMethods(['listTunnels'])
->getMock();
$registry->method('listTunnels')->willReturn([
[
'id' => 't4',
'store_code' => 'mgtun_only',
'unsecure_base_url' => 'http://other.com/',
'secure_base_url' => '',
],
]);
self::assertNull($registry->findByRequestHost('unknown.com'));
}
public function testFindByRequestHostReturnsNullForEmptyHttpHost(): void
{
$registry = $this->getMockBuilder(TunnelRegistry::class)
->disableOriginalConstructor()
->onlyMethods(['listTunnels'])
->getMock();
$registry->method('listTunnels')->willReturn([
[
'id' => 't5',
'store_code' => 'mgtun_x',
'unsecure_base_url' => 'http://a.com/',
'secure_base_url' => '',
],
]);
self::assertNull($registry->findByRequestHost(''));
}
}