X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=tests%2Finclude%2FApiTest.php;h=a65283b2f1dd360972e188247026d44b767a4a0c;hb=7d800c81ecd616abb25c8543add1c9212809906c;hp=1419f7d7fe0730488bad3aba1c4f90fd943fdfb5;hpb=b9f8762eb3b4f125dcdf5335cd992466b79a5ef6;p=friendica.git diff --git a/tests/include/ApiTest.php b/tests/include/ApiTest.php index 1419f7d7fe..a65283b2f1 100644 --- a/tests/include/ApiTest.php +++ b/tests/include/ApiTest.php @@ -7,15 +7,18 @@ namespace Friendica\Test; use Dice\Dice; use Friendica\App; -use Friendica\BaseObject; -use Friendica\Core\Config\Configuration; -use Friendica\Core\Config\PConfiguration; +use Friendica\Core\Config\IConfig; +use Friendica\Core\PConfig\IPConfig; use Friendica\Core\Protocol; +use Friendica\Core\Session; use Friendica\Core\Session\ISession; -use Friendica\Core\System; use Friendica\Database\Database; +use Friendica\Database\DBStructure; +use Friendica\DI; +use Friendica\Model\Contact; use Friendica\Network\HTTPException; use Friendica\Test\Util\Database\StaticDatabase; +use Friendica\Util\Temporal; use Monolog\Handler\TestHandler; require_once __DIR__ . '/../../include/api.php'; @@ -45,7 +48,7 @@ class ApiTest extends DatabaseTest /** @var App */ protected $app; - /** @var Configuration */ + /** @var IConfig */ protected $config; /** @var Dice */ @@ -60,14 +63,19 @@ class ApiTest extends DatabaseTest $this->dice = (new Dice()) ->addRules(include __DIR__ . '/../../static/dependencies.config.php') - ->addRule(Database::class, ['instanceOf' => StaticDatabase::class, 'shared' => true]); - BaseObject::setDependencyInjection($this->dice); + ->addRule(Database::class, ['instanceOf' => StaticDatabase::class, 'shared' => true]) + ->addRule(ISession::class, ['instanceOf' => Session\Memory::class, 'shared' => true, 'call' => null]); + DI::init($this->dice); /** @var Database $dba */ $dba = $this->dice->create(Database::class); - /** @var Configuration $config */ - $this->config = $this->dice->create(Configuration::class); + $dba->setTestmode(true); + + DBStructure::checkInitialValues(); + + /** @var IConfig $config */ + $this->config = $this->dice->create(IConfig::class); $this->config->set('system', 'url', 'http://localhost'); $this->config->set('system', 'hostname', 'localhost'); @@ -84,7 +92,7 @@ class ApiTest extends DatabaseTest $this->loadFixture(__DIR__ . '/../datasets/api.fixture.php', $dba); /** @var App app */ - $this->app = BaseObject::getApp(); + $this->app = DI::app(); $this->app->argc = 1; $this->app->argv = ['home']; @@ -112,9 +120,7 @@ class ApiTest extends DatabaseTest // User ID that we know is not in the database $this->wrongUserId = 666; - /** @var ISession $session */ - $session = BaseObject::getClass(ISession::class); - $session->start(); + DI::session()->start(); // Most API require login so we force the session $_SESSION = [ @@ -431,12 +437,14 @@ class ApiTest extends DatabaseTest } ]; $_SERVER['REQUEST_METHOD'] = 'method'; + $_SERVER['QUERY_STRING'] = 'q=api_path'; $_GET['callback'] = 'callback_name'; - $this->app->query_string = 'api_path'; + $args = DI::args()->determine($_SERVER, $_GET); + $this->assertEquals( 'callback_name(["some_data"])', - api_call($this->app) + api_call($this->app, $args) ); } @@ -455,7 +463,12 @@ class ApiTest extends DatabaseTest return ['data' => ['some_data']]; } ]; + $_SERVER['REQUEST_METHOD'] = 'method'; + $_SERVER['QUERY_STRING'] = 'q=api_path'; + + $args = DI::args()->determine($_SERVER, $_GET); + $this->config->set('system', 'profiler', true); $this->config->set('rendertime', 'callstack', true); $this->app->callstack = [ @@ -466,10 +479,9 @@ class ApiTest extends DatabaseTest 'network' => ['some_function' => 200] ]; - $this->app->query_string = 'api_path'; $this->assertEquals( '["some_data"]', - api_call($this->app) + api_call($this->app, $args) ); } @@ -489,11 +501,13 @@ class ApiTest extends DatabaseTest } ]; $_SERVER['REQUEST_METHOD'] = 'method'; + $_SERVER['QUERY_STRING'] = 'q=api_path'; + + $args = DI::args()->determine($_SERVER, $_GET); - $this->app->query_string = 'api_path'; $this->assertEquals( '{"status":{"error":"Internal Server Error","code":"500 Internal Server Error","request":"api_path"}}', - api_call($this->app) + api_call($this->app, $args) ); } @@ -527,11 +541,13 @@ class ApiTest extends DatabaseTest } ]; $_SERVER['REQUEST_METHOD'] = 'method'; + $_SERVER['QUERY_STRING'] = 'q=api_path.json'; + + $args = DI::args()->determine($_SERVER, $_GET); - $this->app->query_string = 'api_path.json'; $this->assertEquals( '["some_data"]', - api_call($this->app) + api_call($this->app, $args) ); } @@ -551,11 +567,13 @@ class ApiTest extends DatabaseTest } ]; $_SERVER['REQUEST_METHOD'] = 'method'; + $_SERVER['QUERY_STRING'] = 'q=api_path.xml'; + + $args = DI::args()->determine($_SERVER, $_GET); - $this->app->query_string = 'api_path.xml'; $this->assertEquals( 'some_data', - api_call($this->app) + api_call($this->app, $args) ); } @@ -575,12 +593,14 @@ class ApiTest extends DatabaseTest } ]; $_SERVER['REQUEST_METHOD'] = 'method'; + $_SERVER['QUERY_STRING'] = 'q=api_path.rss'; + + $args = DI::args()->determine($_SERVER, $_GET); - $this->app->query_string = 'api_path.rss'; $this->assertEquals( '' . "\n" . 'some_data', - api_call($this->app) + api_call($this->app, $args) ); } @@ -600,12 +620,14 @@ class ApiTest extends DatabaseTest } ]; $_SERVER['REQUEST_METHOD'] = 'method'; + $_SERVER['QUERY_STRING'] = 'q=api_path.atom'; + + $args = DI::args()->determine($_SERVER, $_GET); - $this->app->query_string = 'api_path.atom'; $this->assertEquals( '' . "\n" . 'some_data', - api_call($this->app) + api_call($this->app, $args) ); } @@ -620,10 +642,13 @@ class ApiTest extends DatabaseTest global $API; $API['api_path'] = ['method' => 'method']; - $this->app->query_string = 'api_path'; + $_SERVER['QUERY_STRING'] = 'q=api_path'; + + $args = DI::args()->determine($_SERVER, $_GET); + $this->assertEquals( '{"status":{"error":"Method Not Allowed","code":"405 Method Not Allowed","request":"api_path"}}', - api_call($this->app) + api_call($this->app, $args) ); } @@ -640,13 +665,15 @@ class ApiTest extends DatabaseTest 'method' => 'method', 'auth' => true ]; - $_SERVER['REQUEST_METHOD'] = 'method'; $_SESSION['authenticated'] = false; + $_SERVER['REQUEST_METHOD'] = 'method'; + $_SERVER['QUERY_STRING'] = 'q=api_path'; + + $args = DI::args()->determine($_SERVER, $_GET); - $this->app->query_string = 'api_path'; $this->assertEquals( '{"status":{"error":"This API requires login","code":"401 Unauthorized","request":"api_path"}}', - api_call($this->app) + api_call($this->app, $args) ); } @@ -660,7 +687,7 @@ class ApiTest extends DatabaseTest { $this->assertEquals( '{"status":{"error":"error_message","code":"200 OK","request":""}}', - api_error('json', new HTTPException\OKException('error_message')) + api_error('json', new HTTPException\OKException('error_message'), DI::args()) ); } @@ -681,7 +708,7 @@ class ApiTest extends DatabaseTest ' 200 OK' . "\n" . ' ' . "\n" . '' . "\n", - api_error('xml', new HTTPException\OKException('error_message')) + api_error('xml', new HTTPException\OKException('error_message'), DI::args()) ); } @@ -702,7 +729,7 @@ class ApiTest extends DatabaseTest ' 200 OK' . "\n" . ' ' . "\n" . '' . "\n", - api_error('rss', new HTTPException\OKException('error_message')) + api_error('rss', new HTTPException\OKException('error_message'), DI::args()) ); } @@ -723,7 +750,7 @@ class ApiTest extends DatabaseTest ' 200 OK' . "\n" . ' ' . "\n" . '' . "\n", - api_error('atom', new HTTPException\OKException('error_message')) + api_error('atom', new HTTPException\OKException('error_message'), DI::args()) ); } @@ -805,7 +832,7 @@ class ApiTest extends DatabaseTest */ public function testApiGetUserWithFrioSchema() { - $pConfig = $this->dice->create(PConfiguration::class); + $pConfig = $this->dice->create(IPConfig::class); $pConfig->set($this->selfUser['id'], 'frio', 'schema', 'red'); $user = api_get_user($this->app); $this->assertSelfUser($user); @@ -821,7 +848,7 @@ class ApiTest extends DatabaseTest */ public function testApiGetUserWithCustomFrioSchema() { - $pConfig = $this->dice->create(PConfiguration::class); + $pConfig = $this->dice->create(IPConfig::class); $pConfig->set($this->selfUser['id'], 'frio', 'schema', '---'); $pConfig->set($this->selfUser['id'], 'frio', 'nav_bg', '#123456'); $pConfig->set($this->selfUser['id'], 'frio', 'link_color', '#123456'); @@ -840,7 +867,7 @@ class ApiTest extends DatabaseTest */ public function testApiGetUserWithEmptyFrioSchema() { - $pConfig = $this->dice->create(PConfiguration::class); + $pConfig = $this->dice->create(IPConfig::class); $pConfig->set($this->selfUser['id'], 'frio', 'schema', '---'); $user = api_get_user($this->app); $this->assertSelfUser($user); @@ -1361,7 +1388,7 @@ class ApiTest extends DatabaseTest 'type' => 'image/png' ] ]; - $app = \get_app(); + $app = DI::app(); $app->argc = 2; $result = api_media_upload(); @@ -2396,7 +2423,7 @@ class ApiTest extends DatabaseTest public function testApiFormatItemsEmbededImages() { $this->assertEquals( - 'text ' . System::baseUrl() . '/display/item_guid', + 'text ' . DI::baseUrl() . '/display/item_guid', api_format_items_embeded_images(['guid' => 'item_guid'], 'text data:image/foo') ); } @@ -2465,102 +2492,6 @@ class ApiTest extends DatabaseTest $this->assertArrayHasKey('friendica:attendmaybe', $result); } - /** - * Test the api_format_items_profiles() function. - * - * @return void - */ - public function testApiFormatItemsProfiles() - { - $profile_row = [ - 'id' => 'profile_id', - 'profile-name' => 'profile_name', - 'is-default' => true, - 'hide-friends' => true, - 'photo' => 'profile_photo', - 'thumb' => 'profile_thumb', - 'publish' => true, - 'net-publish' => true, - 'pdesc' => 'description', - 'dob' => 'date_of_birth', - 'address' => 'address', - 'locality' => 'city', - 'region' => 'region', - 'postal-code' => 'postal_code', - 'country-name' => 'country', - 'hometown' => 'hometown', - 'gender' => 'gender', - 'marital' => 'marital', - 'with' => 'marital_with', - 'howlong' => 'marital_since', - 'sexual' => 'sexual', - 'politic' => 'politic', - 'religion' => 'religion', - 'pub_keywords' => 'public_keywords', - 'prv_keywords' => 'private_keywords', - - 'likes' => 'likes', - 'dislikes' => 'dislikes', - 'about' => 'about', - 'music' => 'music', - 'book' => 'book', - 'tv' => 'tv', - 'film' => 'film', - 'interest' => 'interest', - 'romance' => 'romance', - 'work' => 'work', - 'education' => 'education', - 'contact' => 'social_networks', - 'homepage' => 'homepage' - ]; - $result = api_format_items_profiles($profile_row); - $this->assertEquals( - [ - 'profile_id' => 'profile_id', - 'profile_name' => 'profile_name', - 'is_default' => true, - 'hide_friends' => true, - 'profile_photo' => 'profile_photo', - 'profile_thumb' => 'profile_thumb', - 'publish' => true, - 'net_publish' => true, - 'description' => 'description', - 'date_of_birth' => 'date_of_birth', - 'address' => 'address', - 'city' => 'city', - 'region' => 'region', - 'postal_code' => 'postal_code', - 'country' => 'country', - 'hometown' => 'hometown', - 'gender' => 'gender', - 'marital' => 'marital', - 'marital_with' => 'marital_with', - 'marital_since' => 'marital_since', - 'sexual' => 'sexual', - 'politic' => 'politic', - 'religion' => 'religion', - 'public_keywords' => 'public_keywords', - 'private_keywords' => 'private_keywords', - - 'likes' => 'likes', - 'dislikes' => 'dislikes', - 'about' => 'about', - 'music' => 'music', - 'book' => 'book', - 'tv' => 'tv', - 'film' => 'film', - 'interest' => 'interest', - 'romance' => 'romance', - 'work' => 'work', - 'education' => 'education', - 'social_networks' => 'social_networks', - 'homepage' => 'homepage', - 'users' => null - ], - $result - ); - } - /** * Test the api_format_items() function. * @@ -2899,7 +2830,7 @@ class ApiTest extends DatabaseTest $result = api_statusnet_config('json'); $this->assertEquals('localhost', $result['config']['site']['server']); $this->assertEquals('default', $result['config']['site']['theme']); - $this->assertEquals(System::baseUrl() . '/images/friendica-64.png', $result['config']['site']['logo']); + $this->assertEquals(DI::baseUrl() . '/images/friendica-64.png', $result['config']['site']['logo']); $this->assertTrue($result['config']['site']['fancy']); $this->assertEquals('en', $result['config']['site']['language']); $this->assertEquals('UTC', $result['config']['site']['timezone']); @@ -2927,8 +2858,8 @@ class ApiTest extends DatabaseTest */ public function testApiFfIds() { - $result = api_ff_ids('json'); - $this->assertNull($result); + $result = api_ff_ids('json', Contact::FOLLOWER); + $this->assertEquals(['id' => []], $result); } /** @@ -2950,7 +2881,7 @@ class ApiTest extends DatabaseTest public function testApiFfIdsWithoutAuthenticatedUser() { $_SESSION['authenticated'] = false; - api_ff_ids('json'); + api_ff_ids('json', Contact::FOLLOWER); } /** @@ -2961,7 +2892,7 @@ class ApiTest extends DatabaseTest public function testApiFriendsIds() { $result = api_friends_ids('json'); - $this->assertNull($result); + $this->assertEquals(['id' => []], $result); } /** @@ -2972,7 +2903,7 @@ class ApiTest extends DatabaseTest public function testApiFollowersIds() { $result = api_followers_ids('json'); - $this->assertNull($result); + $this->assertEquals(['id' => []], $result); } /** @@ -3283,7 +3214,7 @@ class ApiTest extends DatabaseTest */ public function testApiOauthRequestToken() { - $this->markTestIncomplete('killme() kills phpunit as well'); + $this->markTestIncomplete('exit() kills phpunit as well'); } /** @@ -3293,7 +3224,7 @@ class ApiTest extends DatabaseTest */ public function testApiOauthAccessToken() { - $this->markTestIncomplete('killme() kills phpunit as well'); + $this->markTestIncomplete('exit() kills phpunit as well'); } /** @@ -3721,28 +3652,6 @@ class ApiTest extends DatabaseTest $this->markTestIncomplete(); } - /** - * Test the api_get_nick() function. - * - * @return void - */ - public function testApiGetNick() - { - $result = api_get_nick($this->otherUser['nurl']); - $this->assertEquals('othercontact', $result); - } - - /** - * Test the api_get_nick() function with a wrong URL. - * - * @return void - */ - public function testApiGetNickWithWrongUrl() - { - $result = api_get_nick('wrong_url'); - $this->assertFalse($result); - } - /** * Test the api_in_reply_to() function. * @@ -3916,14 +3825,15 @@ class ApiTest extends DatabaseTest } /** - * Test the api_friendica_notification() function with an argument count. + * Test the api_friendica_notification() function with empty result * * @return void */ - public function testApiFriendicaNotificationWithArgumentCount() + public function testApiFriendicaNotificationWithEmptyResult() { $this->app->argv = ['api', 'friendica', 'notification']; $this->app->argc = count($this->app->argv); + $_SESSION['uid'] = 41; $result = api_friendica_notification('json'); $this->assertEquals(['note' => false], $result); } @@ -3938,89 +3848,57 @@ class ApiTest extends DatabaseTest $this->app->argv = ['api', 'friendica', 'notification']; $this->app->argc = count($this->app->argv); $result = api_friendica_notification('xml'); - $this->assertXml($result, 'notes'); + $dateRel = Temporal::getRelativeDate('2020-01-01 12:12:02'); + $assertXml=<< + + + +XML; + $this->assertXmlStringEqualsXmlString($assertXml, $result); } /** - * Test the api_friendica_notification_seen() function. + * Test the api_friendica_notification() function with an JSON result. * * @return void */ - public function testApiFriendicaNotificationSeen() + public function testApiFriendicaNotificationWithJsonResult() { - $this->markTestIncomplete(); + $this->app->argv = ['api', 'friendica', 'notification']; + $this->app->argc = count($this->app->argv); + $result = json_encode(api_friendica_notification('json')); + $this->assertJson($result); } /** - * Test the api_friendica_direct_messages_setseen() function. + * Test the api_friendica_notification_seen() function. * * @return void */ - public function testApiFriendicaDirectMessagesSetseen() + public function testApiFriendicaNotificationSeen() { $this->markTestIncomplete(); } /** - * Test the api_friendica_direct_messages_search() function. + * Test the api_friendica_direct_messages_setseen() function. * * @return void */ - public function testApiFriendicaDirectMessagesSearch() + public function testApiFriendicaDirectMessagesSetseen() { $this->markTestIncomplete(); } /** - * Test the api_friendica_profile_show() function. - * - * @return void - */ - public function testApiFriendicaProfileShow() - { - $result = api_friendica_profile_show('json'); - // We can't use assertSelfUser() here because the user object is missing some properties. - $this->assertEquals($this->selfUser['id'], $result['$result']['friendica_owner']['cid']); - $this->assertEquals('DFRN', $result['$result']['friendica_owner']['location']); - $this->assertEquals($this->selfUser['name'], $result['$result']['friendica_owner']['name']); - $this->assertEquals($this->selfUser['nick'], $result['$result']['friendica_owner']['screen_name']); - $this->assertEquals('dfrn', $result['$result']['friendica_owner']['network']); - $this->assertTrue($result['$result']['friendica_owner']['verified']); - $this->assertFalse($result['$result']['multi_profiles']); - } - - /** - * Test the api_friendica_profile_show() function with a profile ID. - * - * @return void - */ - public function testApiFriendicaProfileShowWithProfileId() - { - $this->markTestIncomplete('We need to add a dataset for this.'); - } - - /** - * Test the api_friendica_profile_show() function with a wrong profile ID. - * - * @return void - * @expectedException Friendica\Network\HTTPException\BadRequestException - */ - public function testApiFriendicaProfileShowWithWrongProfileId() - { - $_REQUEST['profile_id'] = 666; - api_friendica_profile_show('json'); - } - - /** - * Test the api_friendica_profile_show() function without an authenticated user. + * Test the api_friendica_direct_messages_search() function. * * @return void - * @expectedException Friendica\Network\HTTPException\ForbiddenException */ - public function testApiFriendicaProfileShowWithoutAuthenticatedUser() + public function testApiFriendicaDirectMessagesSearch() { - $_SESSION['authenticated'] = false; - api_friendica_profile_show('json'); + $this->markTestIncomplete(); } /**