|
|
- <?php
- use Symfony\Component\HttpFoundation\Request;
- use Symfony\Component\HttpFoundation\Response;
-
- class ProcessTest extends PHPUnit_Framework_TestCase {
-
- private $http;
- private $api;
-
- public function setUp() {
- $this->http = new Telegraph\HTTPTest();
- $this->api = new API();
- $this->api->http = $this->http;
- ORM::for_table('users')->raw_query('TRUNCATE users')->delete_many();
- ORM::for_table('roles')->raw_query('TRUNCATE roles')->delete_many();
- ORM::for_table('sites')->raw_query('TRUNCATE sites')->delete_many();
- ORM::for_table('webmentions')->raw_query('TRUNCATE webmentions')->delete_many();
- ORM::for_table('webmention_status')->raw_query('TRUNCATE webmention_status')->delete_many();
- }
-
- private function _createExampleAccount() {
- $user = ORM::for_table('users')->create();
- $user->url = 'http://example.com';
- $user->save();
-
- $site = ORM::for_table('sites')->create();
- $site->name = 'Example';
- $site->created_by = $user->id();
- $site->save();
-
- $role = ORM::for_table('roles')->create();
- $role->site_id = $site->id();
- $role->user_id = $user->id();
- $role->role = 'owner';
- $role->token = 'a';
- $role->save();
- }
-
- private function webmention($params) {
- $request = new Request($params);
- $response = new Response();
- $response = $this->api->webmention($request, $response);
- $webmention = ORM::for_table('webmentions')->where(['source' => $params['source'], 'target' => $params['target']])->find_one();
- $client = new IndieWeb\MentionClientTest();
- $client::$dataDir = dirname(__FILE__) . '/data/';
- if(!is_object($webmention)) {
- throw new Exception("No webmention was queued for this test");
- }
- $callback = Telegraph\Webmention::send($webmention->id, $client, $this->http);
- return [$webmention, $callback];
- }
-
- private static function webmentionStatus($id) {
- return ORM::for_table('webmention_status')->where(['webmention_id'=>$id])->order_by_desc('created_at')->find_one();
- }
-
- public function testNoEndpoint() {
- $this->_createExampleAccount();
- list($webmention, $callback) = $this->webmention([
- 'token' => 'a',
- 'source' => 'http://source.example.com/no-endpoint',
- 'target' => 'http://target.example.com/no-endpoint'
- ]);
- $status = $this->webmentionStatus($webmention->id);
- $this->assertEquals($status->status, 'not_supported');
- }
-
- public function testPingbackSuccess() {
- $this->_createExampleAccount();
- list($webmention, $callback) = $this->webmention([
- 'token' => 'a',
- 'source' => 'http://source.example.com/pingback-success',
- 'target' => 'http://target.example.com/pingback-success'
- ]);
- $status = $this->webmentionStatus($webmention->id);
- $this->assertEquals($status->status, 'pingback_accepted');
- $webmention = ORM::for_table('webmentions')->where('id',$webmention->id)->find_one();
- $this->assertEquals('http://pingback.example.com/success', $webmention->pingback_endpoint);
- }
-
- public function testPingbackFailed() {
- $this->_createExampleAccount();
- list($webmention, $callback) = $this->webmention([
- 'token' => 'a',
- 'source' => 'http://source.example.com/pingback-failed',
- 'target' => 'http://target.example.com/pingback-failed'
- ]);
- $status = $this->webmentionStatus($webmention->id);
- $this->assertEquals($status->status, 'pingback_error');
- }
-
- public function testWebmentionTakesPriorityOverPingback() {
- $this->_createExampleAccount();
- list($webmention, $callback) = $this->webmention([
- 'token' => 'a',
- 'source' => 'http://source.example.com/webmention-and-pingback',
- 'target' => 'http://target.example.com/webmention-success'
- ]);
- $status = $this->webmentionStatus($webmention->id);
- $this->assertEquals($status->status, 'webmention_accepted');
- }
-
- public function testWebmentionSucceeds() {
- $this->_createExampleAccount();
- list($webmention, $callback) = $this->webmention([
- 'token' => 'a',
- 'source' => 'http://source.example.com/webmention-success',
- 'target' => 'http://target.example.com/webmention-success'
- ]);
- $status = $this->webmentionStatus($webmention->id);
- $this->assertEquals($status->status, 'webmention_accepted');
- $webmention = ORM::for_table('webmentions')->where('id',$webmention->id)->find_one();
- $this->assertEquals('http://webmention.example.com/success', $webmention->webmention_endpoint);
- }
-
- public function testSavesWebmentionStatusURL() {
- $this->_createExampleAccount();
- list($webmention, $callback) = $this->webmention([
- 'token' => 'a',
- 'source' => 'http://source.example.com/webmention-status-url',
- 'target' => 'http://target.example.com/webmention-status-url'
- ]);
- $status = $this->webmentionStatus($webmention->id);
- $this->assertEquals($status->status, 'webmention_accepted');
- $webmention = ORM::for_table('webmentions')->where('id',$webmention->id)->find_one();
- $this->assertEquals('http://webmention.example.com/success-with-status', $webmention->webmention_endpoint);
- // Make sure the status URL returned is an absolute URL
- $this->assertEquals('http://webmention.example.com/webmention/1000', $webmention->webmention_status_url);
- }
-
- public function testWebmentionFailed() {
- $this->_createExampleAccount();
- list($webmention, $callback) = $this->webmention([
- 'token' => 'a',
- 'source' => 'http://source.example.com/webmention-failed',
- 'target' => 'http://target.example.com/webmention-failed'
- ]);
- $status = $this->webmentionStatus($webmention->id);
- $this->assertEquals($status->status, 'webmention_error');
- $webmention = ORM::for_table('webmentions')->where('id',$webmention->id)->find_one();
- $this->assertEquals('http://webmention.example.com/error', $webmention->webmention_endpoint);
- }
-
- public function testWebmentionStatusCallback() {
- $this->_createExampleAccount();
- list($webmention, $callback) = $this->webmention([
- 'token' => 'a',
- 'source' => 'http://source.example.com/webmention-success',
- 'target' => 'http://target.example.com/webmention-success',
- 'callback' => 'http://source.example.com/callback'
- ]);
- $status = $this->webmentionStatus($webmention->id);
- $this->assertEquals($status->status, 'webmention_accepted');
- $webmention = ORM::for_table('webmentions')->where('id',$webmention->id)->find_one();
- $this->assertEquals('http://webmention.example.com/success', $webmention->webmention_endpoint);
- $this->assertEquals('Callback was successful', trim($callback['body']));
- }
-
- }
|