Make API testable & move PhotoAlbum tests to new destination

This commit is contained in:
Philipp Holzer 2021-11-12 21:08:36 +01:00
parent a0c5c91886
commit e477cf215d
Signed by: nupplaPhil
GPG Key ID: 24A7501396EB5432
10 changed files with 174 additions and 96 deletions

View 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");
}

View 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

View 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']]);

View 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();

View File

@ -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..
}
}

View File

@ -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);
}

View 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.
*

View File

@ -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();
}
}

View File

@ -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.');
}
}

View File

@ -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.');
}
}