瀏覽代碼

Add API tests

tags/2018.09
Pierre Rudloff 2 年之前
父節點
當前提交
3195d6e125
共有 12 個文件被更改,包括 5342 次插入15 次删除
  1. +11
    -1
      .travis.yml
  2. +10
    -1
      composer.json
  3. +1377
    -2
      composer.lock
  4. +18
    -0
      doc/Tests.md
  5. +9
    -0
      include/dba.php
  6. +1
    -1
      phpunit.xml
  7. +3669
    -0
      tests/ApiTest.php
  8. +3
    -5
      tests/BaseObjectTest.php
  9. +60
    -0
      tests/DatabaseTest.php
  10. +2
    -5
      tests/TextTest.php
  11. +22
    -0
      tests/bootstrap.php
  12. +160
    -0
      tests/datasets/api.yml

+ 11
- 1
.travis.yml 查看文件

@@ -7,4 +7,14 @@ php:
- 7.1
- 7.2

install: composer install
services:
- mysql
env:
- USER=travis DB=test

install:
- composer install
before_script:
- mysql -e 'CREATE DATABASE IF NOT EXISTS test;'
# In order to avoid bin/worker.php warnings
- touch .htconfig.php

+ 10
- 1
composer.json 查看文件

@@ -47,7 +47,8 @@
],
"autoload": {
"psr-4": {
"Friendica\\": "src/"
"Friendica\\": "src/",
"Friendica\\Test\\": "tests/"
},
"psr-0": {
"": "library/"
@@ -68,5 +69,13 @@
"exclude": [
"log", "cache", "/photo", "/proxy"
]
},
"require-dev": {
"phpunit/dbunit": "^2.0",
"phpdocumentor/reflection-docblock": "^3.0.2",
"phpunit/php-token-stream": "^1.4.2"
},
"scripts": {
"test": "phpunit"
}
}

+ 1377
- 2
composer.lock
文件差異過大導致無法顯示
查看文件


+ 18
- 0
doc/Tests.md 查看文件

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

+ 9
- 0
include/dba.php 查看文件

@@ -102,6 +102,15 @@ class dba {
return self::$connected;
}

/**
* Return the database object.
* @return PDO|mysqli
*/
public static function get_db()
{
return self::$db;
}

/**
* @brief Returns the MySQL server version string
*


+ 1
- 1
phpunit.xml 查看文件

@@ -1,5 +1,5 @@
<?xml version="1.0"?>
<phpunit bootstrap="boot.php">
<phpunit bootstrap="tests/bootstrap.php">
<testsuites>
<testsuite>
<directory>tests/</directory>


+ 3669
- 0
tests/ApiTest.php
文件差異過大導致無法顯示
查看文件


+ 3
- 5
tests/BaseObjectTest.php 查看文件

@@ -7,14 +7,12 @@ namespace Friendica\Test;

use Friendica\App;
use Friendica\BaseObject;
// backward compatibility
if (!class_exists('\PHPUnit\Framework\TestCase')) {
class_alias('\PHPUnit_Framework_TestCase', '\PHPUnit\Framework\TestCase');
}
use PHPUnit\Framework\TestCase;

/**
* Tests for the BaseObject class.
*/
class BaseObjectTest extends \PHPUnit\Framework\TestCase
class BaseObjectTest extends TestCase
{

/**


+ 60
- 0
tests/DatabaseTest.php 查看文件

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

+ 2
- 5
tests/TextTest.php 查看文件

@@ -5,15 +5,12 @@

namespace Friendica\Test;

// backward compatibility
if (!class_exists('\PHPUnit\Framework\TestCase')) {
class_alias('\PHPUnit_Framework_TestCase', '\PHPUnit\Framework\TestCase');
}
use PHPUnit\Framework\TestCase;

/**
* Tests for text functions.
*/
class TextTest extends \PHPUnit\Framework\TestCase
class TextTest extends TestCase
{

/**


+ 22
- 0
tests/bootstrap.php 查看文件

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

+ 160
- 0
tests/datasets/api.yml 查看文件

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

Loading…
取消
儲存