]> git.mxchange.org Git - friendica.git/blobdiff - tests/include/ApiTest.php
Fix faulty test expectation in ApiTest->testApiFriendicaNotificationWithXmlResult
[friendica.git] / tests / include / ApiTest.php
index 1419f7d7fe0730488bad3aba1c4f90fd943fdfb5..a65283b2f1dd360972e188247026d44b767a4a0c 100644 (file)
@@ -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(
                        '<?xml version="1.0" encoding="UTF-8"?>' . "\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(
                        '<?xml version="1.0" encoding="UTF-8"?>' . "\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
                        '  <code>200 OK</code>' . "\n" .
                        '  <request/>' . "\n" .
                        '</status>' . "\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
                        '  <code>200 OK</code>' . "\n" .
                        '  <request/>' . "\n" .
                        '</status>' . "\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
                        '  <code>200 OK</code>' . "\n" .
                        '  <request/>' . "\n" .
                        '</status>' . "\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
+<?xml version="1.0"?>
+<notes>
+  <note id="1" hash="" type="8" name="Reply to" url="http://localhost/display/1" photo="http://localhost/" date="2020-01-01 12:12:02" msg="A test reply from an item" uid="42" uri-id="" link="http://localhost/notification/1" iid="4" parent="0" parent-uri-id="" seen="0" verb="" otype="item" name_cache="Reply to" msg_cache="A test reply from an item" timestamp="1577880722" date_rel="{$dateRel}" msg_html="A test reply from an item" msg_plain="A test reply from an item"/>
+</notes>
+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();
        }
 
        /**