client = new Parse(); $this->client->http = new p3k\HTTP\Test(dirname(__FILE__).'/data/'); $this->client->mc = null; } private function parse($params) { $request = new Request($params); $response = new Response(); return $this->client->parse($request, $response); } public function testRedirectLimit() { $url = 'http://redirect.example.com/3'; $response = $this->parse( [ 'url' => $url, 'max_redirects' => 1 ] ); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $data = json_decode($body); $this->assertObjectHasAttribute('error', $data); $this->assertEquals('too_many_redirects', $data->error); $url = 'http://redirect.example.com/2'; $response = $this->parse( [ 'url' => $url, 'max_redirects' => 1 ] ); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $data = json_decode($body); $this->assertObjectHasAttribute('error', $data); $this->assertEquals('too_many_redirects', $data->error); } public function testRedirectUnderLimit() { $url = 'http://redirect.example.com/2'; $response = $this->parse( [ 'url' => $url, 'max_redirects' => 2 ] ); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $data = json_decode($body); $this->assertObjectNotHasAttribute('error', $data); $this->assertEquals(200, $data->code); $this->assertEquals('The Final Page', $data->data->name); $this->assertEquals('http://redirect.example.com/0', $data->url); } public function testReturnsHTTPStatusCode() { $url = 'http://redirect.example.com/code-418'; $response = $this->parse( [ 'url' => $url ] ); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $data = json_decode($body); $this->assertObjectNotHasAttribute('error', $data); $this->assertEquals($url, $data->url); $this->assertEquals(418, $data->code); } public function testReturnsForbidden() { $url = 'http://redirect.example.com/code-403'; $response = $this->parse( [ 'url' => $url ] ); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $data = json_decode($body); $this->assertObjectHasAttribute('error', $data); $this->assertEquals('forbidden', $data->error); $this->assertEquals($url, $data->url); $this->assertEquals(403, $data->code); } public function testReturnsUnauthorized() { $url = 'http://redirect.example.com/code-401'; $response = $this->parse( [ 'url' => $url ] ); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $data = json_decode($body); $this->assertObjectHasAttribute('error', $data); $this->assertEquals('unauthorized', $data->error); $this->assertEquals($url, $data->url); $this->assertEquals(401, $data->code); } public function testDeleted() { $url = 'http://source.example.com/deleted-gone'; $response = $this->parse( [ 'url' => $url ] ); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $data = json_decode($body); $this->assertObjectNotHasAttribute('error', $data); $this->assertEquals(410, $data->code); $this->assertEquals('This post has been deleted.', $data->data->content->text); } public function testDeletedEmptyBody() { $url = 'http://source.example.com/deleted-empty'; $response = $this->parse( [ 'url' => $url ] ); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $data = json_decode($body); $this->assertObjectNotHasAttribute('error', $data); $this->assertEquals(410, $data->code); $this->assertEquals('unknown', $data->data->type); } public function testDeletedTargetProvided() { $url = 'http://source.example.com/deleted-gone'; $response = $this->parse( [ 'url' => $url, 'target' => 'http://example.com/' ] ); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $data = json_decode($body); $this->assertObjectHasAttribute('error', $data); $this->assertEquals('no_link_found', $data->error); $this->assertEquals(410, $data->code); } public function testMetaEquivDeleted() { $url = 'http://source.example.com/deleted'; $response = $this->parse( [ 'url' => $url ] ); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $data = json_decode($body); $this->assertObjectNotHasAttribute('error', $data); $this->assertEquals(410, $data->code); $this->assertEquals('This post has been deleted.', $data->data->content->text); } public function testMetaEquivDeletedCaps() { $url = 'http://source.example.com/deleted-2'; $response = $this->parse( [ 'url' => $url ] ); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $data = json_decode($body); $this->assertObjectNotHasAttribute('error', $data); $this->assertEquals(410, $data->code); $this->assertEquals('This post has been deleted.', $data->data->content->text); } public function testMetaEquivDeletedTargetProvided() { // for example when verifying a webmention but the source was replaced with an html deleted page $url = 'http://source.example.com/deleted'; $response = $this->parse( [ 'url' => $url, 'target' => 'http://example.com/' ] ); $body = $response->getContent(); $this->assertEquals(200, $response->getStatusCode()); $data = json_decode($body); $this->assertObjectHasAttribute('error', $data); $this->assertEquals('no_link_found', $data->error); $this->assertEquals(410, $data->code); } }