diff options
-rw-r--r-- | app/Model/Task.php | 1 | ||||
-rw-r--r-- | docs/api-json-rpc.markdown | 310 | ||||
-rw-r--r-- | jsonrpc.php | 38 | ||||
-rw-r--r-- | tests/functionals/ApiTest.php | 6 | ||||
-rw-r--r-- | tests/units/Base.php | 1 | ||||
-rw-r--r-- | tests/units/ProjectTest.php | 80 | ||||
-rw-r--r-- | tests/units/TaskTest.php | 12 | ||||
-rw-r--r-- | vendor/PicoDb/Table.php | 10 |
8 files changed, 438 insertions, 20 deletions
diff --git a/app/Model/Task.php b/app/Model/Task.php index e35bd383..8c1fec8e 100644 --- a/app/Model/Task.php +++ b/app/Model/Task.php @@ -565,7 +565,6 @@ class Task extends Base $board = $this->db->table(Board::TABLE)->eq('project_id', $project_id)->asc('position')->findAllByColumn('id'); $columns = array(); - $task_id = (int) $task_id; // Prepare the columns foreach ($board as $board_column_id) { diff --git a/docs/api-json-rpc.markdown b/docs/api-json-rpc.markdown index aef04b3e..88012081 100644 --- a/docs/api-json-rpc.markdown +++ b/docs/api-json-rpc.markdown @@ -93,17 +93,72 @@ Procedures ### createProject - Purpose: **Create a new project** -- Parameters: **name** (string) +- Parameters: + - **name** (string, required) - Result on success: **true** - Result on failure: **false** +Request example: + +```json +{ + "jsonrpc": "2.0", + "method": "createProject", + "id": 1797076613, + "params": { + "name": "PHP client" + } +} +``` + +Response example: + +```json +{ + "jsonrpc": "2.0", + "id": 1797076613, + "result": true +} +``` + ### getProjectById - Purpose: **Get project information** -- Parameters: **project_id** (integer) +- Parameters: + - **project_id** (integer, required) - Result on success: **project properties** - Result on failure: **null** +Request example: + +```json + + "jsonrpc": "2.0", + "method": "getProjectById", + "id": 226760253, + "params": { + "project_id": 1 + } +} +``` + +Response example: + +```json +{ + "jsonrpc": "2.0", + "id": 226760253, + "result": { + "id": "1", + "name": "API test", + "is_active": "1", + "token": "", + "last_modified": "1410263246", + "is_public": "0" + } +} +``` + ### getProjectByName - Purpose: **Get project information** @@ -111,6 +166,36 @@ Procedures - Result on success: **project properties** - Result on failure: **null** +Request example: + +```json +{ + "jsonrpc": "2.0", + "method": "getProjectByName", + "id": 1620253806, + "params": { + "name": "Test" + } +} +``` + +Response example: + +```json +{ + "jsonrpc": "2.0", + "id": 1620253806, + "result": { + "id": "1", + "name": "Test", + "is_active": "1", + "token": "", + "last_modified": "0", + "is_public": "0" + } +} +``` + ### getAllProjects - Purpose: **Get all available projects** @@ -118,20 +203,233 @@ Procedures - Result on success: **List of projects** - Result on failure: **false** +Request example: + +```json +{ + "jsonrpc": "2.0", + "method": "getAllProjects", + "id": 134982303 +} +``` + +Response example: + +```json +{ + "jsonrpc": "2.0", + "id": 134982303, + "result": [ + { + "id": "2", + "name": "PHP client", + "is_active": "1", + "token": "", + "last_modified": "0", + "is_public": "0" + }, + { + "id": "1", + "name": "Test", + "is_active": "1", + "token": "", + "last_modified": "0", + "is_public": "0" + } + ] +} +``` + ### updateProject - Purpose: **Update a project** -- Parameters: Key/value pair composed of the **id** (integer), **name** (string), **is_active** (integer, optional) +- Parameters: + - **id** (integer, required) + - **name** (string, required) + - **is_active** (integer, optional) + - **token** (string, optional) + - **is_public** (integer, optional) - Result on success: **true** - Result on failure: **false** +Request example: + +```json +{ + "jsonrpc": "2.0", + "method": "updateProject", + "id": 1853996288, + "params": { + "id": 1, + "name": "PHP client update" + } +} +``` + +Response example: + +```json +{ + "jsonrpc": "2.0", + "id": 1853996288, + "result": true +} +``` + ### removeProject - Purpose: **Remove a project** -- Parameters: **project_id** (integer) +- Parameters: + **project_id** (integer, required) - Result on success: **true** - Result on failure: **false** +Request example: + +```json +{ + "jsonrpc": "2.0", + "method": "removeProject", + "id": 46285125, + "params": { + "project_id": "2" + } +} +``` + +Response example: + +```json +{ + "jsonrpc": "2.0", + "id": 46285125, + "result": true +} +``` + +### enableProject + +- Purpose: **Enable a project** +- Parameters: + - **project_id** (integer, required) +- Result on success: **true** +- Result on failure: **false** + +Request example: + +```json +{ + "jsonrpc": "2.0", + "method": "enableProject", + "id": 1775494839, + "params": [ + "1" + ] +} +``` + +Response example: + +```json +{ + "jsonrpc": "2.0", + "id": 1775494839, + "result": true +} +``` + +### disableProject + +- Purpose: **Disable a project** +- Parameters: + - **project_id** (integer, required) +- Result on success: **true** +- Result on failure: **false** + +Request example: + +```json +{ + "jsonrpc": "2.0", + "method": "disableProject", + "id": 1734202312, + "params": [ + "1" + ] +} +``` + +Response example: + +```json +{ + "jsonrpc": "2.0", + "id": 1734202312, + "result": true +} +``` + +### enableProjectPublicAccess + +- Purpose: **Enable public access for a given project** +- Parameters: + - **project_id** (integer, required) +- Result on success: **true** +- Result on failure: **false** + +Request example: + +```json +{ + "jsonrpc": "2.0", + "method": "enableProjectPublicAccess", + "id": 103792571, + "params": [ + "1" + ] +} +``` + +Response example: + +```json +{ + "jsonrpc": "2.0", + "id": 103792571, + "result": true +} +``` + +### disableProjectPublicAccess + +- Purpose: **Disable public access for a given project** +- Parameters: + - **project_id** (integer, required) +- Result on success: **true** +- Result on failure: **false** + +Request example: + +```json +{ + "jsonrpc": "2.0", + "method": "disableProjectPublicAccess", + "id": 942472945, + "params": [ + "1" + ] +} +``` + +Response example: + +```json + + "jsonrpc": "2.0", + "id": 942472945, + "result": true +} +``` @@ -213,9 +511,9 @@ Procedures - Purpose: **Create a new task** - Parameters: - **title** (string, required) - - **color_id** (string, required) - **project_id** (integer, required) - - **column_id** (integer, required) + - **color_id** (string, optional) + - **column_id** (integer, optional) - **description** (string, optional) - **owner_id** (integer, optional) - **creator_id** (integer, optional) diff --git a/jsonrpc.php b/jsonrpc.php index 4bb1ffa8..7c885334 100644 --- a/jsonrpc.php +++ b/jsonrpc.php @@ -41,6 +41,7 @@ if ($language !== 'en_US') Translator::load($language); $server = new Server; $server->authentication(array('jsonrpc' => $config->get('api_token'))); + /** * Project procedures */ @@ -62,7 +63,22 @@ $server->register('getAllProjects', function() use ($project) { return $project->getAll(); }); -$server->register('updateProject', function(array $values) use ($project) { +$server->register('updateProject', function($id, $name, $is_active = null, $is_public = null, $token = null) use ($project) { + + $values = array( + 'id' => $id, + 'name' => $name, + 'is_active' => $is_active, + 'is_public' => $is_public, + 'token' => $token, + ); + + foreach ($values as $key => $value) { + if (is_null($value)) { + unset($values[$key]); + } + } + list($valid,) = $project->validateModification($values); return $valid && $project->update($values); }); @@ -71,6 +87,26 @@ $server->register('removeProject', function($project_id) use ($project) { return $project->remove($project_id); }); +$server->register('enableProject', function($project_id) use ($project) { + return $project->enable($project_id); +}); + +$server->register('disableProject', function($project_id) use ($project) { + return $project->disable($project_id); +}); + +$server->register('enableProjectPublicAccess', function($project_id) use ($project) { + return $project->enablePublicAccess($project_id); +}); + +$server->register('disableProjectPublicAccess', function($project_id) use ($project) { + return $project->disablePublicAccess($project_id); +}); + + +/** + * Board procedures + */ $server->register('getBoard', function($project_id) use ($board) { return $board->get($project_id); }); diff --git a/tests/functionals/ApiTest.php b/tests/functionals/ApiTest.php index 9d347527..bc0bbe42 100644 --- a/tests/functionals/ApiTest.php +++ b/tests/functionals/ApiTest.php @@ -24,7 +24,7 @@ class Api extends PHPUnit_Framework_TestCase if ($projects) { foreach ($projects as $project) { - $this->client->removeProject($project['id']); + $this->assertTrue($this->client->removeProject($project['id'])); } } } @@ -45,13 +45,13 @@ class Api extends PHPUnit_Framework_TestCase { $project = $this->client->getProjectById(1); $this->assertNotEmpty($project); - $this->assertTrue($this->client->updateProject(array('id' => 1, 'name' => 'API test 2', 'is_active' => 0))); + $this->assertTrue($this->client->execute('updateProject', array('id' => 1, 'name' => 'API test 2', 'is_active' => 0))); $project = $this->client->getProjectById(1); $this->assertEquals('API test 2', $project['name']); $this->assertEquals(0, $project['is_active']); - $this->assertTrue($this->client->updateProject(array('id' => 1, 'name' => 'API test', 'is_active' => 1))); + $this->assertTrue($this->client->execute('updateProject', array('id' => 1, 'name' => 'API test', 'is_active' => 1))); $project = $this->client->getProjectById(1); $this->assertEquals('API test', $project['name']); diff --git a/tests/units/Base.php b/tests/units/Base.php index 7d8a075f..0d721e3d 100644 --- a/tests/units/Base.php +++ b/tests/units/Base.php @@ -40,6 +40,7 @@ require_once __DIR__.'/../../app/Model/Board.php'; require_once __DIR__.'/../../app/Model/Action.php'; require_once __DIR__.'/../../app/Model/Category.php'; require_once __DIR__.'/../../app/Model/SubTask.php'; +require_once __DIR__.'/../../app/Model/File.php'; require_once __DIR__.'/../../app/Action/Base.php'; require_once __DIR__.'/../../app/Action/TaskClose.php'; diff --git a/tests/units/ProjectTest.php b/tests/units/ProjectTest.php index cb7aee36..95894172 100644 --- a/tests/units/ProjectTest.php +++ b/tests/units/ProjectTest.php @@ -15,7 +15,81 @@ class ProjectTest extends Base $p = new Project($this->registry); $this->assertEquals(1, $p->create(array('name' => 'UnitTest'))); - $this->assertNotEmpty($p->getById(1)); + + $project = $p->getById(1); + $this->assertNotEmpty($project); + $this->assertEquals(1, $project['is_active']); + $this->assertEquals(0, $project['is_public']); + $this->assertEmpty($project['token']); + } + + public function testRemove() + { + $p = new Project($this->registry); + + $this->assertEquals(1, $p->create(array('name' => 'UnitTest'))); + $this->assertTrue($p->remove(1)); + $this->assertFalse($p->remove(1234)); + } + + public function testEnable() + { + $p = new Project($this->registry); + + $this->assertEquals(1, $p->create(array('name' => 'UnitTest'))); + $this->assertTrue($p->disable(1)); + + $project = $p->getById(1); + $this->assertNotEmpty($project); + $this->assertEquals(0, $project['is_active']); + + $this->assertFalse($p->disable(1111)); + } + + public function testDisable() + { + $p = new Project($this->registry); + + $this->assertEquals(1, $p->create(array('name' => 'UnitTest'))); + $this->assertTrue($p->disable(1)); + $this->assertTrue($p->enable(1)); + + $project = $p->getById(1); + $this->assertNotEmpty($project); + $this->assertEquals(1, $project['is_active']); + + $this->assertFalse($p->enable(1234567)); + } + + public function testEnablePublicAccess() + { + $p = new Project($this->registry); + + $this->assertEquals(1, $p->create(array('name' => 'UnitTest'))); + $this->assertTrue($p->enablePublicAccess(1)); + + $project = $p->getById(1); + $this->assertNotEmpty($project); + $this->assertEquals(1, $project['is_public']); + $this->assertNotEmpty($project['token']); + + $this->assertFalse($p->enablePublicAccess(123)); + } + + public function testDisablePublicAccess() + { + $p = new Project($this->registry); + + $this->assertEquals(1, $p->create(array('name' => 'UnitTest'))); + $this->assertTrue($p->enablePublicAccess(1)); + $this->assertTrue($p->disablePublicAccess(1)); + + $project = $p->getById(1); + $this->assertNotEmpty($project); + $this->assertEquals(0, $project['is_public']); + $this->assertEmpty($project['token']); + + $this->assertFalse($p->disablePublicAccess(123)); } public function testAllowEverybody() @@ -66,8 +140,8 @@ class ProjectTest extends Base // We create a project $this->assertEquals(1, $p->create(array('name' => 'UnitTest'))); - // We revoke our admin user - $this->assertTrue($p->revokeUser(1, 1)); + // We revoke our admin user (not existing row) + $this->assertFalse($p->revokeUser(1, 1)); // We should have nobody in the users list $this->assertEmpty($p->getAllowedUsers(1)); diff --git a/tests/units/TaskTest.php b/tests/units/TaskTest.php index 3d1a5e49..c9468efd 100644 --- a/tests/units/TaskTest.php +++ b/tests/units/TaskTest.php @@ -35,6 +35,18 @@ class TaskTest extends Base $this->assertEquals(time(), $task['date_modification']); } + public function testRemove() + { + $t = new Task($this->registry); + $p = new Project($this->registry); + + $this->assertEquals(1, $p->create(array('name' => 'UnitTest'))); + $this->assertEquals(1, $t->create(array('title' => 'Task #1', 'project_id' => 1))); + + $this->assertTrue($t->remove(1)); + $this->assertFalse($t->remove(1234)); + } + public function testMoveTaskWithBadPreviousPosition() { $t = new Task($this->registry); diff --git a/vendor/PicoDb/Table.php b/vendor/PicoDb/Table.php index 60a1280c..b333feb4 100644 --- a/vendor/PicoDb/Table.php +++ b/vendor/PicoDb/Table.php @@ -70,11 +70,7 @@ class Table $result = $this->db->execute($sql, $values); - if ($result !== false/* && $result->rowCount() > 0*/) { - return true; - } - - return false; + return $result !== false && $result->rowCount() > 0; } @@ -106,7 +102,9 @@ class Table $this->conditions() ); - return false !== $this->db->execute($sql, $this->values); + $result = $this->db->execute($sql, $this->values); + + return $result !== false && $result->rowCount() > 0; } |