<?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)); } }