namespace Friendica\Test;
-use Friendica\App;
+use Friendica\BaseObject;
use Friendica\Core\Config;
use Friendica\Core\PConfig;
-use Friendica\Network\BadRequestException;
+use Friendica\Core\Protocol;
+use Friendica\Core\System;
use Friendica\Network\HTTPException;
-use Friendica\Render\FriendicaSmarty;
+
+require_once __DIR__ . '/../include/api.php';
/**
* Tests for the API functions.
*/
class ApiTest extends DatabaseTest
{
-
/**
* Create variables used by tests.
*/
- protected function setUp()
+ public function setUp()
{
- global $a;
parent::setUp();
+ $this->app = BaseObject::getApp();
+
// User data that the test database is populated with
$this->selfUser = [
'id' => 42,
'nick' => 'selfcontact',
'nurl' => 'http://localhost/profile/selfcontact'
];
+ $this->friendUser = [
+ 'id' => 44,
+ 'name' => 'Friend contact',
+ 'nick' => 'friendcontact',
+ 'nurl' => 'http://localhost/profile/friendcontact'
+ ];
$this->otherUser = [
'id' => 43,
'name' => 'othercontact',
'uid' => $this->selfUser['id']
];
- // Reusable App object
- $this->app = new App(__DIR__.'/../');
- $a = $this->app;
+ Config::set('system', 'url', 'http://localhost');
+ Config::set('system', 'hostname', 'localhost');
+ Config::set('system', 'worker_dont_fork', true);
// Default config
Config::set('config', 'hostname', 'localhost');
Config::set('system', 'theme', 'system_theme');
}
+ /**
+ * Cleanup variables used by tests.
+ */
+ protected function tearDown()
+ {
+ parent::tearDown();
+
+ $this->app->argc = 1;
+ $this->app->argv = ['home'];
+ }
+
/**
* Assert that an user array contains expected keys.
* @param array $user User array
$this->app->query_string = 'api_path.rss';
$this->assertEquals(
- '<?xml version="1.0" encoding="UTF-8"?>'.PHP_EOL.
+ '<?xml version="1.0" encoding="UTF-8"?>'."\n".
'some_data',
api_call($this->app)
);
$this->app->query_string = 'api_path.atom';
$this->assertEquals(
- '<?xml version="1.0" encoding="UTF-8"?>'.PHP_EOL.
+ '<?xml version="1.0" encoding="UTF-8"?>'."\n".
'some_data',
api_call($this->app)
);
public function testApiErrorWithXml()
{
$this->assertEquals(
- '<?xml version="1.0"?>'.PHP_EOL.
+ '<?xml version="1.0"?>'."\n".
'<status xmlns="http://api.twitter.com" xmlns:statusnet="http://status.net/schema/api/1/" '.
'xmlns:friendica="http://friendi.ca/schema/api/1/" '.
- 'xmlns:georss="http://www.georss.org/georss">'.PHP_EOL.
- ' <error>error_message</error>'.PHP_EOL.
- ' <code>200 Friendica\Network\HTTP</code>'.PHP_EOL.
- ' <request/>'.PHP_EOL.
- '</status>'.PHP_EOL,
+ 'xmlns:georss="http://www.georss.org/georss">'."\n".
+ ' <error>error_message</error>'."\n".
+ ' <code>200 Friendica\Network\HTTP</code>'."\n".
+ ' <request/>'."\n".
+ '</status>'."\n",
api_error('xml', new HTTPException('error_message'))
);
}
public function testApiErrorWithRss()
{
$this->assertEquals(
- '<?xml version="1.0"?>'.PHP_EOL.
+ '<?xml version="1.0"?>'."\n".
'<status xmlns="http://api.twitter.com" xmlns:statusnet="http://status.net/schema/api/1/" '.
'xmlns:friendica="http://friendi.ca/schema/api/1/" '.
- 'xmlns:georss="http://www.georss.org/georss">'.PHP_EOL.
- ' <error>error_message</error>'.PHP_EOL.
- ' <code>200 Friendica\Network\HTTP</code>'.PHP_EOL.
- ' <request/>'.PHP_EOL.
- '</status>'.PHP_EOL,
+ 'xmlns:georss="http://www.georss.org/georss">'."\n".
+ ' <error>error_message</error>'."\n".
+ ' <code>200 Friendica\Network\HTTP</code>'."\n".
+ ' <request/>'."\n".
+ '</status>'."\n",
api_error('rss', new HTTPException('error_message'))
);
}
public function testApiErrorWithAtom()
{
$this->assertEquals(
- '<?xml version="1.0"?>'.PHP_EOL.
+ '<?xml version="1.0"?>'."\n".
'<status xmlns="http://api.twitter.com" xmlns:statusnet="http://status.net/schema/api/1/" '.
'xmlns:friendica="http://friendi.ca/schema/api/1/" '.
- 'xmlns:georss="http://www.georss.org/georss">'.PHP_EOL.
- ' <error>error_message</error>'.PHP_EOL.
- ' <code>200 Friendica\Network\HTTP</code>'.PHP_EOL.
- ' <request/>'.PHP_EOL.
- '</status>'.PHP_EOL,
+ 'xmlns:georss="http://www.georss.org/georss">'."\n".
+ ' <error>error_message</error>'."\n".
+ ' <code>200 Friendica\Network\HTTP</code>'."\n".
+ ' <request/>'."\n".
+ '</status>'."\n",
api_error('atom', new HTTPException('error_message'))
);
}
*/
public function testApiRssExtra()
{
- $user_info = ['url' => 'user_url'];
+ $user_info = ['url' => 'user_url', 'lang' => 'en'];
$result = api_rss_extra($this->app, [], $user_info);
$this->assertEquals($user_info, $result['$user']);
$this->assertEquals($user_info['url'], $result['$rss']['alternate']);
*/
public function testApiGetUserWithCustomFrioSchema()
{
- 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');
- PConfig::set($this->selfUser['id'], 'frio', 'background_color', '#123456');
+ $ret1 = PConfig::set($this->selfUser['id'], 'frio', 'schema', '---');
+ $ret2 = PConfig::set($this->selfUser['id'], 'frio', 'nav_bg', '#123456');
+ $ret3 = PConfig::set($this->selfUser['id'], 'frio', 'link_color', '#123456');
+ $ret4 = PConfig::set($this->selfUser['id'], 'frio', 'background_color', '#123456');
$user = api_get_user($this->app);
$this->assertSelfUser($user);
$this->assertEquals('123456', $user['profile_sidebar_fill_color']);
public function testApiGetUserWithCalledApi()
{
global $called_api;
- $called_api = ['api_path'];
+ $called_api = ['api', 'api_path'];
$this->assertSelfUser(api_get_user($this->app));
}
$this->assertSelfUser(api_get_user($this->app, 0));
}
-
/**
* Test the api_item_get_user() function.
* @return void
public function testApiCreateXml()
{
$this->assertEquals(
- '<?xml version="1.0"?>'.PHP_EOL.
+ '<?xml version="1.0"?>'."\n".
'<root_element xmlns="http://api.twitter.com" xmlns:statusnet="http://status.net/schema/api/1/" '.
'xmlns:friendica="http://friendi.ca/schema/api/1/" '.
- 'xmlns:georss="http://www.georss.org/georss">'.PHP_EOL.
- ' <data>some_data</data>'.PHP_EOL.
- '</root_element>'.PHP_EOL,
+ 'xmlns:georss="http://www.georss.org/georss">'."\n".
+ ' <data>some_data</data>'."\n".
+ '</root_element>'."\n",
api_create_xml(['data' => ['some_data']], 'root_element')
);
}
public function testApiCreateXmlWithoutNamespaces()
{
$this->assertEquals(
- '<?xml version="1.0"?>'.PHP_EOL.
- '<ok>'.PHP_EOL.
- ' <data>some_data</data>'.PHP_EOL.
- '</ok>'.PHP_EOL,
+ '<?xml version="1.0"?>'."\n".
+ '<ok>'."\n".
+ ' <data>some_data</data>'."\n".
+ '</ok>'."\n",
api_create_xml(['data' => ['some_data']], 'ok')
);
}
public function testApiFormatDataWithXml()
{
$this->assertEquals(
- '<?xml version="1.0"?>'.PHP_EOL.
+ '<?xml version="1.0"?>'."\n".
'<root_element xmlns="http://api.twitter.com" xmlns:statusnet="http://status.net/schema/api/1/" '.
'xmlns:friendica="http://friendi.ca/schema/api/1/" '.
- 'xmlns:georss="http://www.georss.org/georss">'.PHP_EOL.
- ' <data>some_data</data>'.PHP_EOL.
- '</root_element>'.PHP_EOL,
+ 'xmlns:georss="http://www.georss.org/georss">'."\n".
+ ' <data>some_data</data>'."\n".
+ '</root_element>'."\n",
api_format_data('root_element', 'xml', ['data' => ['some_data']])
);
}
'width' => 666,
'height' => 666,
'tmp_name' => $this->getTempImage(),
+ 'name' => 'spacer.png',
'type' => 'image/png'
]
];
'width' => 666,
'height' => 666,
'tmp_name' => $this->getTempImage(),
+ 'name' => 'spacer.png',
'type' => 'image/png'
]
];
{
$_FILES = [
'media' => [
- 'id' => 666
+ 'id' => 666,
+ 'tmp_name' => 'tmp_name'
]
];
api_media_upload();
'width' => 666,
'height' => 666,
'tmp_name' => $this->getTempImage(),
+ 'name' => 'spacer.png',
'type' => 'image/png'
]
];
*/
public function testApiFavoritesCreateDestroy()
{
+ $this->app->argv = ['api', '1.1', 'favorites', 'create'];
+ $this->app->argc = count($this->app->argv);
api_favorites_create_destroy('json');
}
*/
public function testApiFavoritesCreateDestroyWithInvalidId()
{
- // This triggers a very specific condition ($action_argv_id + 2)
- $this->app->argv[1] = '1.1';
- $this->app->argc = 5;
+ $this->app->argv = ['api', '1.1', 'favorites', 'create', '12.json'];
+ $this->app->argc = count($this->app->argv);
api_favorites_create_destroy('json');
}
*/
public function testApiFavoritesCreateDestroyWithInvalidAction()
{
- $this->app->argv[1] = '1.1';
- $this->app->argc = 10;
+ $this->app->argv = ['api', '1.1', 'favorites', 'change.json'];
+ $this->app->argc = count($this->app->argv);
$_REQUEST['id'] = 1;
api_favorites_create_destroy('json');
}
*/
public function testApiFavoritesCreateDestroyWithCreateAction()
{
- $this->app->argv[1] = '1.1';
- $this->app->argv[3] = 'create';
- $this->app->argc = 10;
+ $this->app->argv = ['api', '1.1', 'favorites', 'create.json'];
+ $this->app->argc = count($this->app->argv);
$_REQUEST['id'] = 3;
$result = api_favorites_create_destroy('json');
$this->assertStatus($result['status']);
*/
public function testApiFavoritesCreateDestroyWithCreateActionAndRss()
{
- $this->app->argv[1] = '1.1';
- $this->app->argv[3] = 'create';
- $this->app->argc = 10;
+ $this->app->argv = ['api', '1.1', 'favorites', 'create.rss'];
+ $this->app->argc = count($this->app->argv);
$_REQUEST['id'] = 3;
$result = api_favorites_create_destroy('rss');
$this->assertXml($result, 'status');
*/
public function testApiFavoritesCreateDestroyWithDestroyAction()
{
- $this->app->argv[1] = '1.1';
- $this->app->argv[3] = 'destroy';
- $this->app->argc = 10;
+ $this->app->argv = ['api', '1.1', 'favorites', 'destroy.json'];
+ $this->app->argc = count($this->app->argv);
$_REQUEST['id'] = 3;
$result = api_favorites_create_destroy('json');
$this->assertStatus($result['status']);
*/
public function testApiFavoritesCreateDestroyWithoutAuthenticatedUser()
{
+ $this->app->argv = ['api', '1.1', 'favorites', 'create.json'];
+ $this->app->argc = count($this->app->argv);
$_SESSION['authenticated'] = false;
api_favorites_create_destroy('json');
}
['id' => 2, 'screen_name' => 'recipient_name'],
['id' => 3, 'screen_name' => 'sender_name']
);
- $this->assertEquals('item_title'.PHP_EOL.'item_body', $result['text']);
+ $this->assertEquals('item_title'."\n".'item_body', $result['text']);
$this->assertEquals(1, $result['id']);
$this->assertEquals(2, $result['recipient_id']);
$this->assertEquals(3, $result['sender_id']);
['id' => 2, 'screen_name' => 'recipient_name'],
['id' => 3, 'screen_name' => 'sender_name']
);
- $this->assertNull($result['sender']);
- $this->assertNull($result['recipient']);
+ $this->assertTrue(!isset($result['sender']));
+ $this->assertTrue(!isset($result['recipient']));
}
/**
'repellat officia illum quos impedit quam iste esse unde qui '.
'suscipit aut facilis ut inventore omnis exercitationem quo magnam '.
'consequatur maxime aut illum soluta quaerat natus unde aspernatur '.
- 'et sed beatae nihil ullam temporibus corporis ratione blanditiis'
+ 'et sed beatae nihil ullam temporibus corporis ratione blanditiis',
+ 'plink' => 'item_plink'
]
);
$this->assertStringStartsWith('item_title', $result['text']);
*/
public function testApiGetAttachmentsWithImage()
{
- $body = '[img]img_url[/img]';
+ $body = '[img]http://via.placeholder.com/1x1.png[/img]';
$this->assertInternalType('array', api_get_attachments($body));
}
public function testApiGetAttachmentsWithImageAndAndStatus()
{
$_SERVER['HTTP_USER_AGENT'] = 'AndStatus';
- $body = '[img]img_url[/img]';
+ $body = '[img]http://via.placeholder.com/1x1.png[/img]';
$this->assertInternalType('array', api_get_attachments($body));
}
public function testApiFormatItemsEmbededImages()
{
$this->assertEquals(
- 'text http://localhost/display/item_guid',
+ 'text ' . System::baseUrl() . '/display/item_guid',
api_format_items_embeded_images(['guid' => 'item_guid'], 'text data:image/foo')
);
}
*/
public function testApiFormatItemsActivities()
{
- $item = [];
+ $item = ['uid' => 0, 'uri' => ''];
$result = api_format_items_activities($item);
$this->assertArrayHasKey('like', $result);
$this->assertArrayHasKey('dislike', $result);
*/
public function testApiFormatItemsActivitiesWithXml()
{
- $item = [];
+ $item = ['uid' => 0, 'uri' => ''];
$result = api_format_items_activities($item, 'xml');
$this->assertArrayHasKey('friendica:like', $result);
$this->assertArrayHasKey('friendica:dislike', $result);
[
'item_network' => 'item_network',
'source' => 'web',
- 'coord' => '5 7'
+ 'coord' => '5 7',
+ 'body' => '',
+ 'verb' => '',
+ 'author-id' => 43,
+ 'author-network' => Protocol::DFRN,
+ 'author-link' => 'http://localhost/profile/othercontact',
+ 'plink' => '',
]
];
- $result = api_format_items($items, [], true);
+ $result = api_format_items($items, ['id' => 0], true);
foreach ($result as $status) {
$this->assertStatus($status);
}
{
$items = [
[
- 'coord' => '5 7'
+ 'coord' => '5 7',
+ 'body' => '',
+ 'verb' => '',
+ 'author-id' => 43,
+ 'author-network' => Protocol::DFRN,
+ 'author-link' => 'http://localhost/profile/othercontact',
+ 'plink' => '',
]
];
- $result = api_format_items($items, [], true, 'xml');
+ $result = api_format_items($items, ['id' => 0], true, 'xml');
foreach ($result as $status) {
$this->assertStatus($status);
}
*/
public function testApiHelpTestWithXml()
{
- $this->markTestIncomplete('Triggers this error: "key() expects parameter 1 to be array, string given"');
$result = api_help_test('xml');
$this->assertXml($result, 'ok');
}
$result = api_statusnet_config('json');
$this->assertEquals('localhost', $result['config']['site']['server']);
$this->assertEquals('default', $result['config']['site']['theme']);
- $this->assertEquals('http://localhost/images/friendica-64.png', $result['config']['site']['logo']);
+ $this->assertEquals(System::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']);
public function testApiDirectMessagesNewWithScreenName()
{
$_POST['text'] = 'message_text';
- $_POST['screen_name'] = $this->otherUser['nick'];
+ $_POST['screen_name'] = $this->friendUser['nick'];
$result = api_direct_messages_new('json');
$this->assertEquals(1, $result['direct_message']['id']);
$this->assertContains('message_text', $result['direct_message']['text']);
public function testApiDirectMessagesNewWithTitle()
{
$_POST['text'] = 'message_text';
- $_POST['screen_name'] = $this->otherUser['nick'];
+ $_POST['screen_name'] = $this->friendUser['nick'];
$_REQUEST['title'] = 'message_title';
$result = api_direct_messages_new('json');
$this->assertEquals(1, $result['direct_message']['id']);
public function testApiDirectMessagesNewWithRss()
{
$_POST['text'] = 'message_text';
- $_POST['screen_name'] = $this->otherUser['nick'];
+ $_POST['screen_name'] = $this->friendUser['nick'];
$result = api_direct_messages_new('rss');
$this->assertXml($result, 'direct-messages');
}
*/
public function testApiFriendicaRemoteauthWithCorrectUrl()
{
- $this->markTestIncomplete("We can't use an assertion here because of goaway().");
+ $this->markTestIncomplete("We can't use an assertion here because of App->redirect().");
$_GET['url'] = 'url';
$_GET['c_url'] = $this->selfUser['nurl'];
api_friendica_remoteauth();
*/
public function testApiShareAsRetweet()
{
- $item = [];
+ $item = ['body' => '', 'author-id' => 1, 'owner-id' => 1];
$result = api_share_as_retweet($item);
$this->assertFalse($result);
}
*/
public function testApiInReplyTo()
{
- $result = api_in_reply_to([]);
+ $result = api_in_reply_to(['id' => 0, 'parent' => 0, 'uri' => '', 'thr-parent' => '']);
$this->assertArrayHasKey('status_id', $result);
$this->assertArrayHasKey('user_id', $result);
$this->assertArrayHasKey('status_id_str', $result);
*/
public function testApiFriendicaNotificationWithArgumentCount()
{
- $this->app->argc = 3;
+ $this->app->argv = ['api', 'friendica', 'notification'];
+ $this->app->argc = count($this->app->argv);
$result = api_friendica_notification('json');
$this->assertEquals(['note' => false], $result);
}
*/
public function testApiFriendicaNotificationWithXmlResult()
{
- $this->markTestIncomplete('Fails with "Invalid argument supplied for foreach()".');
- $this->app->argc = 3;
+ $this->app->argv = ['api', 'friendica', 'notification'];
+ $this->app->argc = count($this->app->argv);
$result = api_friendica_notification('xml');
$this->assertXml($result, 'notes');
}