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('')); } }