124 lines
4.1 KiB
PHP
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(''));
|
|
}
|
|
}
|