Moved API\Notification tests
This commit is contained in:
parent
f2ca21935e
commit
6725f05ab2
8 changed files with 161 additions and 86 deletions
|
@ -35,6 +35,29 @@ class ApiResponse
|
||||||
$this->logger = $logger;
|
$this->logger = $logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets header directly
|
||||||
|
* mainly used to override it for tests
|
||||||
|
*
|
||||||
|
* @param string $header
|
||||||
|
*/
|
||||||
|
protected function setHeader(string $header)
|
||||||
|
{
|
||||||
|
header($header);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prints output directly to the caller
|
||||||
|
* mainly used to override it for tests
|
||||||
|
*
|
||||||
|
* @param string $output
|
||||||
|
*/
|
||||||
|
protected function printOutput(string $output)
|
||||||
|
{
|
||||||
|
echo $output;
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the XML from a JSON style array
|
* Creates the XML from a JSON style array
|
||||||
*
|
*
|
||||||
|
@ -143,7 +166,7 @@ class ApiResponse
|
||||||
'request' => $this->args->getQueryString()
|
'request' => $this->args->getQueryString()
|
||||||
];
|
];
|
||||||
|
|
||||||
header(($_SERVER['SERVER_PROTOCOL'] ?? 'HTTP/1.1') . ' ' . $code . ' ' . $description);
|
$this->setHeader(($_SERVER['SERVER_PROTOCOL'] ?? 'HTTP/1.1') . ' ' . $code . ' ' . $description);
|
||||||
|
|
||||||
$this->exit('status', ['status' => $error], $format);
|
$this->exit('status', ['status' => $error], $format);
|
||||||
}
|
}
|
||||||
|
@ -165,10 +188,10 @@ class ApiResponse
|
||||||
|
|
||||||
switch ($format) {
|
switch ($format) {
|
||||||
case 'xml':
|
case 'xml':
|
||||||
header('Content-Type: text/xml');
|
$this->setHeader('Content-Type: text/xml');
|
||||||
break;
|
break;
|
||||||
case 'json':
|
case 'json':
|
||||||
header('Content-Type: application/json');
|
$this->setHeader('Content-Type: application/json');
|
||||||
if (!empty($return)) {
|
if (!empty($return)) {
|
||||||
$json = json_encode(end($return));
|
$json = json_encode(end($return));
|
||||||
if (!empty($_GET['callback'])) {
|
if (!empty($_GET['callback'])) {
|
||||||
|
@ -178,17 +201,16 @@ class ApiResponse
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'rss':
|
case 'rss':
|
||||||
header('Content-Type: application/rss+xml');
|
$this->setHeader('Content-Type: application/rss+xml');
|
||||||
$return = '<?xml version="1.0" encoding="UTF-8"?>' . "\n" . $return;
|
$return = '<?xml version="1.0" encoding="UTF-8"?>' . "\n" . $return;
|
||||||
break;
|
break;
|
||||||
case 'atom':
|
case 'atom':
|
||||||
header('Content-Type: application/atom+xml');
|
$this->setHeader('Content-Type: application/atom+xml');
|
||||||
$return = '<?xml version="1.0" encoding="UTF-8"?>' . "\n" . $return;
|
$return = '<?xml version="1.0" encoding="UTF-8"?>' . "\n" . $return;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
echo $return;
|
$this->printOutput($return);
|
||||||
exit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
54
tests/Util/ApiResponseDouble.php
Normal file
54
tests/Util/ApiResponseDouble.php
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Friendica\Test\Util;
|
||||||
|
|
||||||
|
use Friendica\Module\Api\ApiResponse;
|
||||||
|
|
||||||
|
class ApiResponseDouble extends ApiResponse
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* The header list
|
||||||
|
*
|
||||||
|
* @var string[]
|
||||||
|
*/
|
||||||
|
protected static $header = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The printed output
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected static $output = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string[]
|
||||||
|
*/
|
||||||
|
public static function getHeader(): array
|
||||||
|
{
|
||||||
|
return static::$header;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function getOutput(): string
|
||||||
|
{
|
||||||
|
return static::$output;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function reset()
|
||||||
|
{
|
||||||
|
self::$output = '';
|
||||||
|
self::$header = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function setHeader(string $header)
|
||||||
|
{
|
||||||
|
static::$header[] = $header;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function printOutput(string $output)
|
||||||
|
{
|
||||||
|
static::$output .= $output;
|
||||||
|
}
|
||||||
|
}
|
|
@ -3565,77 +3565,6 @@ class ApiTest extends FixtureTest
|
||||||
$this->markTestIncomplete();
|
$this->markTestIncomplete();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Test the api_friendica_notification() function.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function testApiFriendicaNotification()
|
|
||||||
{
|
|
||||||
// $this->expectException(\Friendica\Network\HTTPException\BadRequestException::class);
|
|
||||||
// api_friendica_notification('json');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test the api_friendica_notification() function without an authenticated user.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function testApiFriendicaNotificationWithoutAuthenticatedUser()
|
|
||||||
{
|
|
||||||
// $this->expectException(\Friendica\Network\HTTPException\ForbiddenException::class);
|
|
||||||
// $_SESSION['authenticated'] = false;
|
|
||||||
// api_friendica_notification('json');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test the api_friendica_notification() function with empty result
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function testApiFriendicaNotificationWithEmptyResult()
|
|
||||||
{
|
|
||||||
// DI::args()->setArgv(['api', 'friendica', 'notification']);
|
|
||||||
// $_SESSION['uid'] = 41;
|
|
||||||
// $result = api_friendica_notification('json');
|
|
||||||
// self::assertEquals(['note' => false], $result);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test the api_friendica_notification() function with an XML result.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function testApiFriendicaNotificationWithXmlResult()
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
DI::args()->setArgv(['api', 'friendica', 'notification']);
|
|
||||||
$result = api_friendica_notification('xml');
|
|
||||||
$date = DateTimeFormat::local('2020-01-01 12:12:02');
|
|
||||||
$dateRel = Temporal::getRelativeDate('2020-01-01 07:12:02');
|
|
||||||
|
|
||||||
$assertXml=<<<XML
|
|
||||||
<?xml version="1.0"?>
|
|
||||||
<notes>
|
|
||||||
<note date="$date" date_rel="$dateRel" id="1" iid="4" link="http://localhost/notification/1" msg="A test reply from an item" msg_cache="A test reply from an item" msg_html="A test reply from an item" msg_plain="A test reply from an item" name="Reply to" name_cache="Reply to" otype="item" parent="" photo="http://localhost/" seen="false" timestamp="1577880722" type="8" uid="42" url="http://localhost/display/1" verb="http://activitystrea.ms/schema/1.0/post"/>
|
|
||||||
</notes>
|
|
||||||
XML;
|
|
||||||
self::assertXmlStringEqualsXmlString($assertXml, $result);
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test the api_friendica_notification() function with an JSON result.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function testApiFriendicaNotificationWithJsonResult()
|
|
||||||
{
|
|
||||||
// DI::args()->setArgv(['api', 'friendica', 'notification']);
|
|
||||||
// $result = json_encode(api_friendica_notification('json'));
|
|
||||||
// self::assertJson($result);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test the api_friendica_notification_seen() function.
|
* Test the api_friendica_notification_seen() function.
|
||||||
*
|
*
|
||||||
|
|
|
@ -7,8 +7,10 @@ use Friendica\Core\Addon;
|
||||||
use Friendica\Core\Hook;
|
use Friendica\Core\Hook;
|
||||||
use Friendica\Database\Database;
|
use Friendica\Database\Database;
|
||||||
use Friendica\DI;
|
use Friendica\DI;
|
||||||
|
use Friendica\Module\Api\ApiResponse;
|
||||||
use Friendica\Security\Authentication;
|
use Friendica\Security\Authentication;
|
||||||
use Friendica\Test\FixtureTest;
|
use Friendica\Test\FixtureTest;
|
||||||
|
use Friendica\Test\Util\ApiResponseDouble;
|
||||||
use Friendica\Test\Util\AuthenticationDouble;
|
use Friendica\Test\Util\AuthenticationDouble;
|
||||||
|
|
||||||
class ApiTest extends FixtureTest
|
class ApiTest extends FixtureTest
|
||||||
|
@ -18,12 +20,20 @@ class ApiTest extends FixtureTest
|
||||||
parent::setUp(); // TODO: Change the autogenerated stub
|
parent::setUp(); // TODO: Change the autogenerated stub
|
||||||
|
|
||||||
$this->dice = $this->dice
|
$this->dice = $this->dice
|
||||||
->addRule(Authentication::class, ['instanceOf' => AuthenticationDouble::class, 'shared' => true]);
|
->addRule(Authentication::class, ['instanceOf' => AuthenticationDouble::class, 'shared' => true])
|
||||||
|
->addRule(ApiResponse::class, ['instanceOf' => ApiResponseDouble::class, 'shared' => true]);
|
||||||
DI::init($this->dice);
|
DI::init($this->dice);
|
||||||
|
|
||||||
$this->installAuthTest();
|
$this->installAuthTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function tearDown(): void
|
||||||
|
{
|
||||||
|
ApiResponseDouble::reset();
|
||||||
|
|
||||||
|
parent::tearDown();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* installs auththest.
|
* installs auththest.
|
||||||
*
|
*
|
||||||
|
|
60
tests/src/Module/Api/Friendica/NotificationTest.php
Normal file
60
tests/src/Module/Api/Friendica/NotificationTest.php
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Friendica\Test\src\Module\Api\Friendica;
|
||||||
|
|
||||||
|
use Friendica\DI;
|
||||||
|
use Friendica\Module\Api\Friendica\Notification;
|
||||||
|
use Friendica\Network\HTTPException\BadRequestException;
|
||||||
|
use Friendica\Test\src\Module\Api\ApiTest;
|
||||||
|
use Friendica\Test\Util\ApiResponseDouble;
|
||||||
|
use Friendica\Util\DateTimeFormat;
|
||||||
|
use Friendica\Util\Temporal;
|
||||||
|
|
||||||
|
class NotificationTest extends ApiTest
|
||||||
|
{
|
||||||
|
public function testEmpty()
|
||||||
|
{
|
||||||
|
self::markTestIncomplete('Needs BasicAuth as dynamic method for overriding first');
|
||||||
|
|
||||||
|
$this->expectException(BadRequestException::class);
|
||||||
|
DI::session()->set('uid', '');
|
||||||
|
|
||||||
|
Notification::rawContent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testWithoutAuthenticatedUser()
|
||||||
|
{
|
||||||
|
self::markTestIncomplete('Needs BasicAuth as dynamic method for overriding first');
|
||||||
|
|
||||||
|
$this->expectException(BadRequestException::class);
|
||||||
|
DI::session()->set('uid', 41);
|
||||||
|
|
||||||
|
Notification::rawContent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testWithXmlResult()
|
||||||
|
{
|
||||||
|
$date = DateTimeFormat::local('2020-01-01 12:12:02');
|
||||||
|
$dateRel = Temporal::getRelativeDate('2020-01-01 07:12:02');
|
||||||
|
|
||||||
|
$assertXml = <<<XML
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<notes>
|
||||||
|
<note date="$date" date_rel="$dateRel" id="1" iid="4" link="http://localhost/notification/1" msg="A test reply from an item" msg_cache="A test reply from an item" msg_html="A test reply from an item" msg_plain="A test reply from an item" name="Reply to" name_cache="Reply to" otype="item" parent="" photo="http://localhost/" seen="false" timestamp="1577880722" type="8" uid="42" url="http://localhost/display/1" verb="http://activitystrea.ms/schema/1.0/post"/>
|
||||||
|
</notes>
|
||||||
|
XML;
|
||||||
|
|
||||||
|
Notification::rawContent(['extension' => 'xml']);
|
||||||
|
|
||||||
|
self::assertXmlStringEqualsXmlString($assertXml, ApiResponseDouble::getOutput());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testWithJsonResult()
|
||||||
|
{
|
||||||
|
Notification::rawContent(['parameter' => 'json']);
|
||||||
|
|
||||||
|
$result = json_encode(ApiResponseDouble::getOutput());
|
||||||
|
|
||||||
|
self::assertJson($result);
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,7 +10,7 @@ class DeleteTest extends ApiTest
|
||||||
{
|
{
|
||||||
public function testEmpty()
|
public function testEmpty()
|
||||||
{
|
{
|
||||||
self::expectException(BadRequestException::class);
|
$this->expectException(BadRequestException::class);
|
||||||
Delete::rawContent();
|
Delete::rawContent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ class DeleteTest extends ApiTest
|
||||||
|
|
||||||
public function testWrong()
|
public function testWrong()
|
||||||
{
|
{
|
||||||
self::expectException(BadRequestException::class);
|
$this->expectException(BadRequestException::class);
|
||||||
Delete::rawContent(['photo_id' => 1]);
|
Delete::rawContent(['photo_id' => 1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,13 +10,13 @@ class DeleteTest extends ApiTest
|
||||||
{
|
{
|
||||||
public function testEmpty()
|
public function testEmpty()
|
||||||
{
|
{
|
||||||
self::expectException(BadRequestException::class);
|
$this->expectException(BadRequestException::class);
|
||||||
Delete::rawContent();
|
Delete::rawContent();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testWrong()
|
public function testWrong()
|
||||||
{
|
{
|
||||||
self::expectException(BadRequestException::class);
|
$this->expectException(BadRequestException::class);
|
||||||
Delete::rawContent(['album' => 'album_name']);
|
Delete::rawContent(['album' => 'album_name']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,19 +10,19 @@ class UpdateTest extends ApiTest
|
||||||
{
|
{
|
||||||
public function testEmpty()
|
public function testEmpty()
|
||||||
{
|
{
|
||||||
self::expectException(BadRequestException::class);
|
$this->expectException(BadRequestException::class);
|
||||||
Update::rawContent();
|
Update::rawContent();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testTooFewArgs()
|
public function testTooFewArgs()
|
||||||
{
|
{
|
||||||
self::expectException(BadRequestException::class);
|
$this->expectException(BadRequestException::class);
|
||||||
Update::rawContent(['album' => 'album_name']);
|
Update::rawContent(['album' => 'album_name']);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testWrongUpdate()
|
public function testWrongUpdate()
|
||||||
{
|
{
|
||||||
self::expectException(BadRequestException::class);
|
$this->expectException(BadRequestException::class);
|
||||||
Update::rawContent(['album' => 'album_name', 'album_new' => 'album_name']);
|
Update::rawContent(['album' => 'album_name', 'album_new' => 'album_name']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue