createMock(HttpClientInterface::class)); $this->assertEquals($expected, $endpoint->validateUrl($url), "Expected $url"); } #[TestWith(["https://my-valid-source.url", "htt://my-invalid-target.com"])] #[TestWith(["my-invalid-source", "https://my-valid-target.com"])] #[TestWith(["http:///an-invalid-source", "an-invalid-target"])] public function testThrowsInvalidUrlExceptionIfTheUrlIsInvalid(string $source, string $target) { $this->expectException(InvalidUrlException::class); $endpoint = new Endpoint($this->createMock(HttpClientInterface::class)); $endpoint->receiveWebmention($source, $target); } public function testThrowsInvalidTargetExceptionIfTheTargetUrlIsNotOnCurrentSite() { $this->expectException(InvalidTargetException::class); $endpoint = new Endpoint($this->createMock(HttpClientInterface::class)); $endpoint->receiveWebmention("https://a-valid-source.url", "https://not-my-site.com"); } #[TestWith([404])] #[TestWith([401])] #[TestWith([500])] #[TestWith([501])] #[TestWith([502])] #[TestWith([503])] #[TestWith([500])] public function testItShouldThrowASourceNotFoundExceptionIfTheSourceUrlIsUnreachable(int $statusCode) { $source = "https://my-valid-source-url.com"; $target = "https://lewisdale.dev/post/a-post-page"; $mockClient = $this->createMock(HttpClientInterface::class); $mockResponse = $this->createMock(ResponseInterface::class); $mockClient->expects($this->once()) ->method('request') ->with($this->identicalTo('GET'), $this->identicalTo($source)) ->will($this->returnValue($mockResponse)); $mockResponse->method('getStatusCode') ->will($this->returnValue($statusCode)); $this->expectException(SourceNotFoundException::class); $endpoint = new Endpoint($mockClient); $endpoint->receiveWebmention($source, $target); } public function testItShouldThrowATargetNotMentionedErrorIfTheSourceDoesNotMentionTheTarget() { $source = "https://my-valid-source-url.com"; $target = "https://lewisdale.dev/post/a-post-page"; $content = <<

Some content

Here's some body content. It contains a url.

But it does not mention the target.

XML; $mockClient = $this->createMock(HttpClientInterface::class); $mockResponse = $this->createMock(ResponseInterface::class); $mockClient->expects($this->once()) ->method('request') ->with($this->identicalTo('GET'), $this->identicalTo($source)) ->will($this->returnValue($mockResponse)); $mockResponse->method('getStatusCode') ->will($this->returnValue(200)); $mockResponse->method('getContent') ->willReturn($content); $this->expectException(TargetNotMentionedException::class); $endpoint = new Endpoint($mockClient); $endpoint->receiveWebmention($source, $target); } } ?>