webmentions/tests/EndpointParserTest.php

115 lines
3.9 KiB
PHP
Raw Normal View History

<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;
use Symfony\Contracts\HttpClient\ResponseInterface;
use Lewisdale\Webmentions\EndpointParser;
class EndpointParserTest extends TestCase {
public function testParsesRelativeEndpointFromResponseHeaders() {
$response = $this->createStub(ResponseInterface::class);
$response->method('getHeaders')
->willReturn([
"link" => ["</test/1/webmention>; rel=webmention"],
]);
$response->method('getInfo')
->willReturn('https://webmention.rocks/test/1');
$this->assertSame("https://webmention.rocks/test/1/webmention", EndpointParser::parse($response));
}
public function testParsesRelativeEndpointWithQuotedRelInResponseHeader() {
$response = $this->createStub(ResponseInterface::class);
$response->method('getHeaders')
->willReturn([
"link" => ['</test/5/webmention>; rel="webmention"'],
]);
$response->method('getInfo')
->willReturn('https://webmention.rocks/test/5');
$this->assertSame("https://webmention.rocks/test/5/webmention", EndpointParser::parse($response));
}
public function testParsesAbsoluteEndpointFromHeader() {
$response = $this->createStub(ResponseInterface::class);
$response->method('getHeaders')
->willReturn([
"link" => ['<https://webmention.rocks/test/2/webmention>; rel="webmention"'],
]);
$response->method('getInfo')
->willReturn('https://webmention.rocks/test/2');
$this->assertSame("https://webmention.rocks/test/2/webmention", EndpointParser::parse($response));
}
public function testParsesRelativeEndpointFromLink() {
$content = <<<XML
<html>
<head>
<link rel="webmention" href="/test/4/webmention" />
</head>
<body>
<h1>Some content</h1>
</html>
XML;
$response = $this->createStub(ResponseInterface::class);
$response->method('getHeaders')->willReturn([]);
$response->method('getContent')->willReturn($content);
$response->method('getInfo')
->willReturn('https://webmention.rocks/test/4');
$this->assertSame("https://webmention.rocks/test/4/webmention", EndpointParser::parse($response));
}
public function testSkipsParsingEndpointWithNoHref() {
$content = <<<XML
<html>
<head>
<link rel="webmention" />
</head>
<body>
<h1>Some content</h1>
<a href="/test/6/webmention" rel="webmention">The real webmention</a>
</body>
</html>
XML;
$response = $this->createStub(ResponseInterface::class);
$response->method('getHeaders')->willReturn([]);
$response->method('getContent')->willReturn($content);
$response->method('getInfo')
->willReturn('https://webmention.rocks/test/6');
$this->assertSame("https://webmention.rocks/test/6/webmention", EndpointParser::parse($response));
}
public function testParseRelativeToPath() {
$content = <<<XML
<html>
<head>
<link rel="webmention" />
</head>
<body>
<h1>Some content</h1>
<a href="153/webmention" rel="webmention">The real webmention</a>
</body>
</html>
XML;
$response = $this->createStub(ResponseInterface::class);
$response->method('getHeaders')->willReturn([]);
$response->method('getContent')->willReturn($content);
$response->method('getInfo')
->willReturn('https://webmention.rocks/test/153');
$this->assertSame("https://webmention.rocks/test/153/webmention", EndpointParser::parse($response));
}
}