@ -0,0 +1,18 @@ | |||
# Themes | |||
* [Home](help) | |||
You can run unit tests with [PHPUnit](https://phpunit.de/): | |||
```bash | |||
phpunit | |||
``` | |||
Some tests require access to a MySQL database. | |||
You can specify the database credentials in environment variables: | |||
```bash | |||
USER=database_user PASS=database_password DB=database_name phpunit | |||
``` | |||
**Warning**: This will empty all the tables! Never use this on a production database. |
@ -0,0 +1,60 @@ | |||
<?php | |||
/** | |||
* DatabaseTest class. | |||
*/ | |||
namespace Friendica\Test; | |||
use dba; | |||
use Friendica\Database\DBStructure; | |||
use PHPUnit_Extensions_Database_DB_IDatabaseConnection; | |||
use PHPUnit\DbUnit\DataSet\YamlDataSet; | |||
use PHPUnit\DbUnit\TestCaseTrait; | |||
use PHPUnit\Framework\TestCase; | |||
use PDO; | |||
/** | |||
* Abstract class used by tests that need a database. | |||
*/ | |||
abstract class DatabaseTest extends TestCase | |||
{ | |||
use TestCaseTrait; | |||
/** | |||
* Get database connection. | |||
* @return PHPUnit_Extensions_Database_DB_IDatabaseConnection | |||
* @see https://phpunit.de/manual/5.7/en/database.html | |||
*/ | |||
protected function getConnection() | |||
{ | |||
if (!dba::$connected) { | |||
dba::connect('localhost', getenv('USER'), getenv('PASS'), getenv('DB')); | |||
if (dba::$connected) { | |||
$app = get_app(); | |||
// We need to do this in order to disable logging | |||
$app->module = 'install'; | |||
// Create database structure | |||
DBStructure::update(false, true, true); | |||
} else { | |||
$this->markTestSkipped('Could not connect to the database.'); | |||
} | |||
} | |||
return $this->createDefaultDBConnection(dba::get_db(), 'friendica_test:'); | |||
} | |||
/** | |||
* Get dataset to populate the database with. | |||
* @return YamlDataSet | |||
* @see https://phpunit.de/manual/5.7/en/database.html | |||
*/ | |||
protected function getDataSet() | |||
{ | |||
return new YamlDataSet( | |||
__DIR__.'/datasets/api.yml' | |||
); | |||
} | |||
} |
@ -0,0 +1,22 @@ | |||
<?php | |||
/** | |||
* This file is loaded by PHPUnit before any test. | |||
*/ | |||
use PHPUnit\DbUnit\DataSet\YamlDataSet; | |||
use PHPUnit\DbUnit\TestCaseTrait; | |||
use PHPUnit\Framework\TestCase; | |||
require_once __DIR__.'/../boot.php'; | |||
require_once __DIR__.'/../include/api.php'; | |||
// Backward compatibility | |||
if (!class_exists(TestCase::class)) { | |||
class_alias(PHPUnit_Framework_TestCase::class, TestCase::class); | |||
} | |||
if (!trait_exists(TestCaseTrait::class)) { | |||
class_alias(PHPUnit_Extensions_Database_TestCase_Trait::class, TestCaseTrait::class); | |||
} | |||
if (!class_exists(YamlDataSet::class)) { | |||
class_alias(PHPUnit_Extensions_Database_DataSet_YamlDataSet::class, YamlDataSet::class); | |||
} |
@ -0,0 +1,160 @@ | |||
--- | |||
# Empty these tables | |||
cache: | |||
config: | |||
conversation: | |||
pconfig: | |||
photo: | |||
workerqueue: | |||
mail: | |||
# Populate tables with test data | |||
user: | |||
- | |||
uid: 42 | |||
username: Test user | |||
nickname: selfcontact | |||
verified: true | |||
password: $2y$10$DLRNTRmJgKe1cSrFJ5Jb0edCqvXlA9sh/RHdSnfxjbR.04yZRm4Qm | |||
theme: frio | |||
contact: | |||
- | |||
id: 42 | |||
uid: 42 | |||
name: Self contact | |||
nick: selfcontact | |||
self: true | |||
nurl: http://localhost/profile/selfcontact | |||
url: http://localhost/profile/selfcontact | |||
about: User used in tests | |||
pending: false | |||
blocked: false | |||
rel: 1 | |||
network: dfrn | |||
- | |||
id: 43 | |||
uid: 0 | |||
# Having the same name and nick allows us to test | |||
# the fallback to api_get_nick() in api_get_user() | |||
name: othercontact | |||
nick: othercontact | |||
self: false | |||
nurl: http://localhost/profile/othercontact | |||
url: http://localhost/profile/othercontact | |||
pending: false | |||
blocked: false | |||
rel: 2 | |||
network: dfrn | |||
item: | |||
- | |||
id: 1 | |||
visible: true | |||
contact-id: 42 | |||
author-id: 42 | |||
owner-id: 42 | |||
uid: 42 | |||
verb: http://activitystrea.ms/schema/1.0/post | |||
unseen: true | |||
body: Parent status | |||
parent: 1 | |||
author-link: http://localhost/profile/selfcontact | |||
wall: true | |||
starred: true | |||
allow_cid: '' | |||
allow_gid: '' | |||
deny_cid: '' | |||
deny_gid: '' | |||
- | |||
id: 2 | |||
visible: true | |||
contact-id: 42 | |||
author-id: 42 | |||
owner-id: 42 | |||
uid: 42 | |||
verb: http://activitystrea.ms/schema/1.0/post | |||
unseen: false | |||
body: Reply | |||
parent: 1 | |||
author-link: http://localhost/profile/selfcontact | |||
wall: true | |||
starred: false | |||
- | |||
id: 3 | |||
visible: true | |||
contact-id: 43 | |||
author-id: 43 | |||
owner-id: 42 | |||
uid: 42 | |||
verb: http://activitystrea.ms/schema/1.0/post | |||
unseen: false | |||
body: Other user status | |||
parent: 3 | |||
author-link: http://localhost/profile/othercontact | |||
wall: true | |||
starred: false | |||
- | |||
id: 4 | |||
visible: true | |||
contact-id: 43 | |||
author-id: 43 | |||
owner-id: 42 | |||
uid: 42 | |||
verb: http://activitystrea.ms/schema/1.0/post | |||
unseen: false | |||
body: Other user reply | |||
parent: 1 | |||
author-link: http://localhost/profile/othercontact | |||
wall: true | |||
starred: false | |||
- | |||
id: 5 | |||
visible: true | |||
contact-id: 42 | |||
author-id: 42 | |||
owner-id: 42 | |||
uid: 42 | |||
verb: http://activitystrea.ms/schema/1.0/post | |||
unseen: false | |||
body: '[share]Shared status[/share]' | |||
parent: 1 | |||
author-link: http://localhost/profile/othercontact | |||
wall: true | |||
starred: false | |||
allow_cid: '' | |||
allow_gid: '' | |||
deny_cid: '' | |||
deny_gid: '' | |||
thread: | |||
- | |||
iid: 1 | |||
visible: true | |||
contact-id: 42 | |||
uid: 42 | |||
wall: true | |||
- | |||
iid: 3 | |||
visible: true | |||
contact-id: 43 | |||
uid: 0 | |||
wall: true | |||
group: | |||
- | |||
id: 1 | |||
uid: 42 | |||
visible: true | |||
name: Visible list | |||
- | |||
id: 2 | |||
uid: 42 | |||
visible: false | |||
name: Private list | |||
search: | |||
- | |||
id: 1 | |||
term: Saved search | |||
uid: 42 |