2023-03-08 15:31:49 +00:00
|
|
|
<?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));
|
|
|
|
}
|
|
|
|
|
2023-03-08 16:07:43 +00:00
|
|
|
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));
|
2023-03-08 21:27:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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');
|
2023-03-08 16:07:43 +00:00
|
|
|
|
2023-03-08 21:27:47 +00:00
|
|
|
$this->assertSame("https://webmention.rocks/test/153/webmention", EndpointParser::parse($response));
|
2023-03-08 16:07:43 +00:00
|
|
|
}
|
2023-03-08 15:31:49 +00:00
|
|
|
}
|