]> git.mxchange.org Git - friendica.git/commitdiff
Make API testable & move PhotoAlbum tests to new destination
authorPhilipp <admin@philipp.info>
Fri, 12 Nov 2021 20:08:36 +0000 (21:08 +0100)
committerPhilipp <admin@philipp.info>
Fri, 12 Nov 2021 20:08:36 +0000 (21:08 +0100)
src/Module/Api/Friendica/Photo/Delete.php
src/Module/Api/Friendica/Photoalbum/Update.php
src/Security/Authentication.php
tests/FixtureTest.php
tests/Util/AuthenticationDouble.php [new file with mode: 0644]
tests/Util/authtest/authtest.php [new file with mode: 0644]
tests/legacy/ApiTest.php
tests/src/Module/Api/ApiTest.php [new file with mode: 0644]
tests/src/Module/Api/Friendica/Photo/DeleteTest.php [new file with mode: 0644]
tests/src/Module/Api/Friendica/Photo/UpdateTest.php [new file with mode: 0644]

index 13ea7ebe7a7119a927c58d559145fdb0ad720245..cf287d3d333376b02dc5656686d13cecc9fc4c40 100644 (file)
@@ -44,7 +44,7 @@ class Delete extends BaseApi
 
                // do several checks on input parameters
                // we do not allow calls without photo id
-               if ($request['photo_id'] == null) {
+               if (empty($request['photo_id'])) {
                        throw new BadRequestException("no photo_id specified");
                }
 
index 9b75596fa72a8702b070219955c2b3f32562e18c..369d33e825407be8809e943208536dbb8cc15e25 100644 (file)
@@ -43,10 +43,10 @@ class Update extends BaseApi
                ]);
 
                // we do not allow calls without album string
-               if ($request['album'] == "") {
+               if (empty($request['album'])) {
                        throw new BadRequestException("no albumname specified");
                }
-               if ($request['album_new'] == "") {
+               if (empty($request['album_new'])) {
                        throw new BadRequestException("no new albumname specified");
                }
                // check if album is existing
index b570af7802b9501d5fa3a0086f5e682b8389fdc5..0b2fc9f9cf3d15850b7c88cd053b6608fe98cf3b 100644 (file)
@@ -65,6 +65,18 @@ class Authentication
        /** @var IManagePersonalConfigValues */
        private $pConfig;
 
+       /**
+        * Sets the X-Account-Management-Status header
+        *
+        * mainly extracted to make it overridable for tests
+        *
+        * @param array $user_record
+        */
+       protected function setXAccMgmtStatusHeader(array $user_record)
+       {
+               header('X-Account-Management-Status: active; name="' . $user_record['username'] . '"; id="' . $user_record['nickname'] . '"');
+       }
+
        /**
         * Authentication constructor.
         *
@@ -314,7 +326,7 @@ class Authentication
                        $this->session->set('cid', $contact['id']);
                }
 
-               header('X-Account-Management-Status: active; name="' . $user_record['username'] . '"; id="' . $user_record['nickname'] . '"');
+               $this->setXAccMgmtStatusHeader($user_record);
 
                if ($login_initial || $login_refresh) {
                        $this->dba->update('user', ['login_date' => DateTimeFormat::utcNow()], ['uid' => $user_record['uid']]);
index 17e606a9e62c11877ec23a912a9e18d8bf59d817..17760c85d4b5c41c3929d263e85b0c7ca80132b0 100644 (file)
@@ -26,7 +26,7 @@ abstract class FixtureTest extends DatabaseTest
        /**
         * Create variables used by tests.
         */
-       protected function setUp() : void
+       protected function setUp(): void
        {
                parent::setUp();
 
diff --git a/tests/Util/AuthenticationDouble.php b/tests/Util/AuthenticationDouble.php
new file mode 100644 (file)
index 0000000..c296939
--- /dev/null
@@ -0,0 +1,13 @@
+<?php
+
+namespace Friendica\Test\Util;
+
+use Friendica\Security\Authentication;
+
+class AuthenticationDouble extends Authentication
+{
+       protected function setXAccMgmtStatusHeader(array $user_record)
+       {
+               // Don't set any header..
+       }
+}
diff --git a/tests/Util/authtest/authtest.php b/tests/Util/authtest/authtest.php
new file mode 100644 (file)
index 0000000..cec0c06
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Name: TEST-ADDON: Authentication "allow all"
+ * Description: For testing purpose only
+ * Version: 1.0
+ * Author: Philipp Holzer <admin@philipp.info>
+ */
+
+use Friendica\Core\Hook;
+use Friendica\Model\User;
+
+function authtest_install()
+{
+       Hook::register('authenticate', 'tests/Util/authtest/authtest.php', 'authtest_authenticate');
+}
+
+function authtest_authenticate($a,&$b)
+{
+       $b['authenticated'] = 1;
+       $b['user_record']   = User::getById(42);
+}
index 6bf144463a9582d2b69661ff06ed8afb15374e91..645c078a466a35b1113f3949725789b346243e82 100644 (file)
@@ -3178,97 +3178,6 @@ class ApiTest extends FixtureTest
                $this->markTestIncomplete('exit() kills phpunit as well');
        }
 
-       /**
-        * Test the api_fr_photoalbum_delete() function.
-        *
-        * @return void
-        */
-       public function testApiFrPhotoalbumDelete()
-       {
-               // $this->expectException(\Friendica\Network\HTTPException\BadRequestException::class);
-               // api_fr_photoalbum_delete('json');
-       }
-
-       /**
-        * Test the api_fr_photoalbum_delete() function with an album name.
-        *
-        * @return void
-        */
-       public function testApiFrPhotoalbumDeleteWithAlbum()
-       {
-               // $this->expectException(\Friendica\Network\HTTPException\BadRequestException::class);
-               // $_REQUEST['album'] = 'album_name';
-               // api_fr_photoalbum_delete('json');
-       }
-
-       /**
-        * Test the api_fr_photoalbum_delete() function with an album name.
-        *
-        * @return void
-        */
-       public function testApiFrPhotoalbumDeleteWithValidAlbum()
-       {
-               $this->markTestIncomplete('We need to add a dataset for this.');
-       }
-
-       /**
-        * Test the api_fr_photoalbum_delete() function.
-        *
-        * @return void
-        */
-       public function testApiFrPhotoalbumUpdate()
-       {
-               // $this->expectException(\Friendica\Network\HTTPException\BadRequestException::class);
-               // api_fr_photoalbum_update('json');
-       }
-
-       /**
-        * Test the api_fr_photoalbum_delete() function with an album name.
-        *
-        * @return void
-        */
-       public function testApiFrPhotoalbumUpdateWithAlbum()
-       {
-               // $this->expectException(\Friendica\Network\HTTPException\BadRequestException::class);
-               // $_REQUEST['album'] = 'album_name';
-               // api_fr_photoalbum_update('json');
-       }
-
-       /**
-        * Test the api_fr_photoalbum_delete() function with an album name.
-        *
-        * @return void
-        */
-       public function testApiFrPhotoalbumUpdateWithAlbumAndNewAlbum()
-       {
-               // $this->expectException(\Friendica\Network\HTTPException\BadRequestException::class);
-               // $_REQUEST['album']     = 'album_name';
-               // $_REQUEST['album_new'] = 'album_name';
-               // api_fr_photoalbum_update('json');
-       }
-
-       /**
-        * Test the api_fr_photoalbum_update() function without an authenticated user.
-        *
-        * @return void
-        */
-       public function testApiFrPhotoalbumUpdateWithoutAuthenticatedUser()
-       {
-               // $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class);
-               // $_SESSION['authenticated'] = false;
-               // api_fr_photoalbum_update('json');
-       }
-
-       /**
-        * Test the api_fr_photoalbum_delete() function with an album name.
-        *
-        * @return void
-        */
-       public function testApiFrPhotoalbumUpdateWithValidAlbum()
-       {
-               $this->markTestIncomplete('We need to add a dataset for this.');
-       }
-
        /**
         * Test the api_fr_photos_list() function.
         *
diff --git a/tests/src/Module/Api/ApiTest.php b/tests/src/Module/Api/ApiTest.php
new file mode 100644 (file)
index 0000000..b2c38c3
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+
+namespace Friendica\Test\src\Module\Api;
+
+use Dice\Dice;
+use Friendica\Core\Addon;
+use Friendica\Core\Hook;
+use Friendica\Database\Database;
+use Friendica\DI;
+use Friendica\Security\Authentication;
+use Friendica\Test\FixtureTest;
+use Friendica\Test\Util\AuthenticationDouble;
+
+class ApiTest extends FixtureTest
+{
+       protected function setUp(): void
+       {
+               parent::setUp(); // TODO: Change the autogenerated stub
+
+               $this->dice = $this->dice
+                       ->addRule(Authentication::class, ['instanceOf' => AuthenticationDouble::class, 'shared' => true]);
+               DI::init($this->dice);
+
+               $this->installAuthTest();
+       }
+
+       /**
+        * installs auththest.
+        *
+        * @throws \Exception
+        */
+       public function installAuthTest()
+       {
+               $addon           = 'authtest';
+               $addon_file_path = __DIR__ . '/../../../Util/authtest/authtest.php';
+               $t               = @filemtime($addon_file_path);
+
+               @include_once($addon_file_path);
+               if (function_exists($addon . '_install')) {
+                       $func = $addon . '_install';
+                       $func(DI::app());
+               }
+
+               /** @var Database $dba */
+               $dba = $this->dice->create(Database::class);
+
+               $dba->insert('addon', [
+                       'name'         => $addon,
+                       'installed'    => true,
+                       'timestamp'    => $t,
+                       'plugin_admin' => function_exists($addon . '_addon_admin'),
+                       'hidden'       => file_exists('addon/' . $addon . '/.hidden')
+               ]);
+
+               Addon::loadAddons();
+               Hook::loadHooks();
+       }
+}
diff --git a/tests/src/Module/Api/Friendica/Photo/DeleteTest.php b/tests/src/Module/Api/Friendica/Photo/DeleteTest.php
new file mode 100644 (file)
index 0000000..69e9dbd
--- /dev/null
@@ -0,0 +1,27 @@
+<?php
+
+namespace Friendica\Test\src\Module\Api\Friendica\Photo;
+
+use Friendica\Module\Api\Friendica\Photoalbum\Delete;
+use Friendica\Network\HTTPException\BadRequestException;
+use Friendica\Test\src\Module\Api\ApiTest;
+
+class DeleteTest extends ApiTest
+{
+       public function testEmpty()
+       {
+               self::expectException(BadRequestException::class);
+               Delete::rawContent();
+       }
+
+       public function testWrong()
+       {
+               self::expectException(BadRequestException::class);
+               Delete::rawContent(['album' => 'album_name']);
+       }
+
+       public function testValid()
+       {
+               self::markTestIncomplete('We need to add a dataset for this.');
+       }
+}
diff --git a/tests/src/Module/Api/Friendica/Photo/UpdateTest.php b/tests/src/Module/Api/Friendica/Photo/UpdateTest.php
new file mode 100644 (file)
index 0000000..f233998
--- /dev/null
@@ -0,0 +1,38 @@
+<?php
+
+namespace Friendica\Test\src\Module\Api\Friendica\Photo;
+
+use Friendica\Module\Api\Friendica\Photoalbum\Update;
+use Friendica\Network\HTTPException\BadRequestException;
+use Friendica\Test\src\Module\Api\ApiTest;
+
+class UpdateTest extends ApiTest
+{
+       public function testEmpty()
+       {
+               self::expectException(BadRequestException::class);
+               Update::rawContent();
+       }
+
+       public function testTooFewArgs()
+       {
+               self::expectException(BadRequestException::class);
+               Update::rawContent(['album' => 'album_name']);
+       }
+
+       public function testWrongUpdate()
+       {
+               self::expectException(BadRequestException::class);
+               Update::rawContent(['album' => 'album_name', 'album_new' => 'album_name']);
+       }
+
+       public function testUpdateWithoutAuthenticatedUser()
+       {
+               self::markTestIncomplete('Needs BasicAuth as dynamic method for overriding first');
+       }
+
+       public function testValid()
+       {
+               self::markTestIncomplete('We need to add a dataset for this.');
+       }
+}