diff options
-rw-r--r-- | actions/task_assign_color_user.php | 32 | ||||
-rw-r--r-- | actions/task_assign_current_user.php | 33 | ||||
-rw-r--r-- | actions/task_assign_specific_user.php | 32 | ||||
-rw-r--r-- | actions/task_close.php | 3 | ||||
-rw-r--r-- | actions/task_duplicate_another_project.php | 32 | ||||
-rw-r--r-- | tests/ActionTaskAssignColorUserTest.php | 86 | ||||
-rw-r--r-- | tests/ActionTaskAssignCurrentUserTest.php | 73 | ||||
-rw-r--r-- | tests/ActionTaskAssignSpecificUserTest.php | 66 | ||||
-rw-r--r-- | tests/ActionTaskDuplicateAnotherProjectTest.php | 89 | ||||
-rw-r--r-- | tests/Base.php | 4 |
10 files changed, 448 insertions, 2 deletions
diff --git a/actions/task_assign_color_user.php b/actions/task_assign_color_user.php index a9f08e30..66002b80 100644 --- a/actions/task_assign_color_user.php +++ b/actions/task_assign_color_user.php @@ -4,14 +4,33 @@ namespace Action; require_once __DIR__.'/base.php'; +/** + * Assign a color to a specific user + * + * @package action + * @author Frederic Guillot + */ class TaskAssignColorUser extends Base { + /** + * Constructor + * + * @access public + * @param integer $project_id Project id + * @param Task $task Task model instance + */ public function __construct($project_id, \Model\Task $task) { parent::__construct($project_id); $this->task = $task; } + /** + * Get the required parameter for the action (defined by the user) + * + * @access public + * @return array + */ public function getActionRequiredParameters() { return array( @@ -21,6 +40,12 @@ class TaskAssignColorUser extends Base ); } + /** + * Get the required parameter for the event + * + * @access public + * @return array + */ public function getEventRequiredParameters() { return array( @@ -30,6 +55,13 @@ class TaskAssignColorUser extends Base ); } + /** + * Execute the action + * + * @access public + * @param array $data Event data dictionary + * @return bool True if the action was executed or false when not executed + */ public function doAction(array $data) { if ($data['column_id'] == $this->getParam('column_id') && $data['owner_id'] == $this->getParam('user_id')) { diff --git a/actions/task_assign_current_user.php b/actions/task_assign_current_user.php index 5a8edd01..35b8f89a 100644 --- a/actions/task_assign_current_user.php +++ b/actions/task_assign_current_user.php @@ -4,8 +4,22 @@ namespace Action; require_once __DIR__.'/base.php'; +/** + * Assign a task to the logged user + * + * @package action + * @author Frederic Guillot + */ class TaskAssignCurrentUser extends Base { + /** + * Constructor + * + * @access public + * @param integer $project_id Project id + * @param Task $task Task model instance + * @param Acl $acl Acl model instance + */ public function __construct($project_id, \Model\Task $task, \Model\Acl $acl) { parent::__construct($project_id); @@ -13,6 +27,12 @@ class TaskAssignCurrentUser extends Base $this->acl = $acl; } + /** + * Get the required parameter for the action (defined by the user) + * + * @access public + * @return array + */ public function getActionRequiredParameters() { return array( @@ -20,6 +40,12 @@ class TaskAssignCurrentUser extends Base ); } + /** + * Get the required parameter for the event + * + * @access public + * @return array + */ public function getEventRequiredParameters() { return array( @@ -28,6 +54,13 @@ class TaskAssignCurrentUser extends Base ); } + /** + * Execute the action + * + * @access public + * @param array $data Event data dictionary + * @return bool True if the action was executed or false when not executed + */ public function doAction(array $data) { if ($data['column_id'] == $this->getParam('column_id')) { diff --git a/actions/task_assign_specific_user.php b/actions/task_assign_specific_user.php index 8cafde6d..edde560e 100644 --- a/actions/task_assign_specific_user.php +++ b/actions/task_assign_specific_user.php @@ -4,14 +4,33 @@ namespace Action; require_once __DIR__.'/base.php'; +/** + * Assign a task to a specific user + * + * @package action + * @author Frederic Guillot + */ class TaskAssignSpecificUser extends Base { + /** + * Constructor + * + * @access public + * @param integer $project_id Project id + * @param Task $task Task model instance + */ public function __construct($project_id, \Model\Task $task) { parent::__construct($project_id); $this->task = $task; } + /** + * Get the required parameter for the action (defined by the user) + * + * @access public + * @return array + */ public function getActionRequiredParameters() { return array( @@ -20,6 +39,12 @@ class TaskAssignSpecificUser extends Base ); } + /** + * Get the required parameter for the event + * + * @access public + * @return array + */ public function getEventRequiredParameters() { return array( @@ -28,6 +53,13 @@ class TaskAssignSpecificUser extends Base ); } + /** + * Execute the action + * + * @access public + * @param array $data Event data dictionary + * @return bool True if the action was executed or false when not executed + */ public function doAction(array $data) { if ($data['column_id'] == $this->getParam('column_id')) { diff --git a/actions/task_close.php b/actions/task_close.php index 4d129d73..3c45ebc0 100644 --- a/actions/task_close.php +++ b/actions/task_close.php @@ -39,9 +39,8 @@ class TaskClose extends Base } /** - * Get the required parameter for the event (check if for the event data) + * Get the required parameter for the event * - * @abstract * @access public * @return array */ diff --git a/actions/task_duplicate_another_project.php b/actions/task_duplicate_another_project.php index 31089c67..e898f757 100644 --- a/actions/task_duplicate_another_project.php +++ b/actions/task_duplicate_another_project.php @@ -4,14 +4,33 @@ namespace Action; require_once __DIR__.'/base.php'; +/** + * Duplicate a task to another project + * + * @package action + * @author Frederic Guillot + */ class TaskDuplicateAnotherProject extends Base { + /** + * Constructor + * + * @access public + * @param integer $project_id Project id + * @param Task $task Task model instance + */ public function __construct($project_id, \Model\Task $task) { parent::__construct($project_id); $this->task = $task; } + /** + * Get the required parameter for the action (defined by the user) + * + * @access public + * @return array + */ public function getActionRequiredParameters() { return array( @@ -20,6 +39,12 @@ class TaskDuplicateAnotherProject extends Base ); } + /** + * Get the required parameter for the event + * + * @access public + * @return array + */ public function getEventRequiredParameters() { return array( @@ -29,6 +54,13 @@ class TaskDuplicateAnotherProject extends Base ); } + /** + * Execute the action + * + * @access public + * @param array $data Event data dictionary + * @return bool True if the action was executed or false when not executed + */ public function doAction(array $data) { if ($data['column_id'] == $this->getParam('column_id') && $data['project_id'] != $this->getParam('project_id')) { diff --git a/tests/ActionTaskAssignColorUserTest.php b/tests/ActionTaskAssignColorUserTest.php new file mode 100644 index 00000000..68d168cb --- /dev/null +++ b/tests/ActionTaskAssignColorUserTest.php @@ -0,0 +1,86 @@ +<?php + +require_once __DIR__.'/base.php'; + +use Model\Task; +use Model\Project; + +class ActionTaskAssignColorUser extends Base +{ + public function testBadProject() + { + $action = new Action\TaskAssignColorUser(3, new Task($this->db, $this->event)); + $action->setParam('column_id', 5); + + $event = array( + 'project_id' => 2, + 'task_id' => 3, + 'column_id' => 5, + ); + + $this->assertFalse($action->isExecutable($event)); + $this->assertFalse($action->execute($event)); + } + + public function testBadColumn() + { + $action = new Action\TaskAssignColorUser(3, new Task($this->db, $this->event)); + $action->setParam('column_id', 5); + + $event = array( + 'project_id' => 3, + 'task_id' => 3, + 'column_id' => 3, + ); + + $this->assertFalse($action->execute($event)); + } + + public function testExecute() + { + $action = new Action\TaskAssignColorUser(1, new Task($this->db, $this->event)); + $action->setParam('column_id', 2); + $action->setParam('user_id', 1); + $action->setParam('color_id', 'blue'); + + // We create a task in the first column + $t = new Task($this->db, $this->event); + $p = new Project($this->db, $this->event); + $this->assertEquals(1, $p->create(array('name' => 'test'))); + $this->assertEquals(1, $t->create(array('title' => 'test', 'project_id' => 1, 'column_id' => 1, 'color_id' => 'green'))); + + // We create an event to move the task to the 2nd column with a user id 5 + $event = array( + 'project_id' => 1, + 'task_id' => 1, + 'column_id' => 2, + 'owner_id' => 5, + ); + + // Our event should NOT be executed + $this->assertFalse($action->execute($event)); + + // Our task should be assigned to nobody and have the green color + $task = $t->getById(1); + $this->assertNotEmpty($task); + $this->assertEquals(0, $task['owner_id']); + $this->assertEquals('green', $task['color_id']); + + // We create an event to move the task to the 2nd column with a user id 1 + $event = array( + 'project_id' => 1, + 'task_id' => 1, + 'column_id' => 2, + 'owner_id' => 1, + ); + + // Our event should be executed + $this->assertTrue($action->execute($event)); + + // Our task should be assigned to nobody and have the blue color + $task = $t->getById(1); + $this->assertNotEmpty($task); + $this->assertEquals(0, $task['owner_id']); + $this->assertEquals('blue', $task['color_id']); + } +} diff --git a/tests/ActionTaskAssignCurrentUserTest.php b/tests/ActionTaskAssignCurrentUserTest.php new file mode 100644 index 00000000..9ba50fce --- /dev/null +++ b/tests/ActionTaskAssignCurrentUserTest.php @@ -0,0 +1,73 @@ +<?php + +require_once __DIR__.'/base.php'; + +use Model\Task; +use Model\Project; +use Model\Acl; + +class ActionTaskAssignCurrentUser extends Base +{ + public function testBadProject() + { + $action = new Action\TaskAssignCurrentUser(3, new Task($this->db, $this->event), new Acl($this->db, $this->event)); + $action->setParam('column_id', 5); + + $event = array( + 'project_id' => 2, + 'task_id' => 3, + 'column_id' => 5, + ); + + $this->assertFalse($action->isExecutable($event)); + $this->assertFalse($action->execute($event)); + } + + public function testBadColumn() + { + $action = new Action\TaskAssignCurrentUser(3, new Task($this->db, $this->event), new Acl($this->db, $this->event)); + $action->setParam('column_id', 5); + + $event = array( + 'project_id' => 3, + 'task_id' => 3, + 'column_id' => 3, + ); + + $this->assertFalse($action->execute($event)); + } + + public function testExecute() + { + $action = new Action\TaskAssignCurrentUser(1, new Task($this->db, $this->event), new Acl($this->db, $this->event)); + $action->setParam('column_id', 2); + $_SESSION = array( + 'user' => array('id' => 5) + ); + + // We create a task in the first column + $t = new Task($this->db, $this->event); + $p = new Project($this->db, $this->event); + $a = new Acl($this->db, $this->event); + + $this->assertEquals(5, $a->getUserId()); + $this->assertEquals(1, $p->create(array('name' => 'test'))); + $this->assertEquals(1, $t->create(array('title' => 'test', 'project_id' => 1, 'column_id' => 1))); + + // We create an event to move the task to the 2nd column + $event = array( + 'project_id' => 1, + 'task_id' => 1, + 'column_id' => 2, + ); + + // Our event should be executed + $this->assertTrue($action->execute($event)); + + // Our task should be assigned to the user 5 (from the session) + $task = $t->getById(1); + $this->assertNotEmpty($task); + $this->assertEquals(1, $task['id']); + $this->assertEquals(5, $task['owner_id']); + } +} diff --git a/tests/ActionTaskAssignSpecificUserTest.php b/tests/ActionTaskAssignSpecificUserTest.php new file mode 100644 index 00000000..9a5d83a9 --- /dev/null +++ b/tests/ActionTaskAssignSpecificUserTest.php @@ -0,0 +1,66 @@ +<?php + +require_once __DIR__.'/base.php'; + +use Model\Task; +use Model\Project; + +class ActionTaskAssignSpecificUser extends Base +{ + public function testBadProject() + { + $action = new Action\TaskAssignSpecificUser(3, new Task($this->db, $this->event)); + $action->setParam('column_id', 5); + + $event = array( + 'project_id' => 2, + 'task_id' => 3, + 'column_id' => 5, + ); + + $this->assertFalse($action->isExecutable($event)); + $this->assertFalse($action->execute($event)); + } + + public function testBadColumn() + { + $action = new Action\TaskAssignSpecificUser(3, new Task($this->db, $this->event)); + $action->setParam('column_id', 5); + + $event = array( + 'project_id' => 3, + 'task_id' => 3, + 'column_id' => 3, + ); + + $this->assertFalse($action->execute($event)); + } + + public function testExecute() + { + $action = new Action\TaskAssignSpecificUser(1, new Task($this->db, $this->event)); + $action->setParam('column_id', 2); + $action->setParam('user_id', 1); + + // We create a task in the first column + $t = new Task($this->db, $this->event); + $p = new Project($this->db, $this->event); + $this->assertEquals(1, $p->create(array('name' => 'test'))); + $this->assertEquals(1, $t->create(array('title' => 'test', 'project_id' => 1, 'column_id' => 1))); + + // We create an event to move the task to the 2nd column + $event = array( + 'project_id' => 1, + 'task_id' => 1, + 'column_id' => 2, + ); + + // Our event should be executed + $this->assertTrue($action->execute($event)); + + // Our task should be assigned to the user 1 + $task = $t->getById(1); + $this->assertNotEmpty($task); + $this->assertEquals(1, $task['owner_id']); + } +} diff --git a/tests/ActionTaskDuplicateAnotherProjectTest.php b/tests/ActionTaskDuplicateAnotherProjectTest.php new file mode 100644 index 00000000..e0851346 --- /dev/null +++ b/tests/ActionTaskDuplicateAnotherProjectTest.php @@ -0,0 +1,89 @@ +<?php + +require_once __DIR__.'/base.php'; + +use Model\Task; +use Model\Project; + +class ActionTaskDuplicateAnotherProject extends Base +{ + public function testBadProject() + { + $action = new Action\TaskDuplicateAnotherProject(3, new Task($this->db, $this->event)); + $action->setParam('column_id', 5); + + $event = array( + 'project_id' => 2, + 'task_id' => 3, + 'column_id' => 5, + ); + + $this->assertFalse($action->isExecutable($event)); + $this->assertFalse($action->execute($event)); + } + + public function testBadColumn() + { + $action = new Action\TaskDuplicateAnotherProject(3, new Task($this->db, $this->event)); + $action->setParam('column_id', 5); + + $event = array( + 'project_id' => 3, + 'task_id' => 3, + 'column_id' => 3, + ); + + $this->assertFalse($action->execute($event)); + } + + public function testExecute() + { + $action = new Action\TaskDuplicateAnotherProject(1, new Task($this->db, $this->event)); + + // We create a task in the first column + $t = new Task($this->db, $this->event); + $p = new Project($this->db, $this->event); + $this->assertEquals(1, $p->create(array('name' => 'project 1'))); + $this->assertEquals(2, $p->create(array('name' => 'project 2'))); + $this->assertEquals(1, $t->create(array('title' => 'test', 'project_id' => 1, 'column_id' => 1))); + + // We create an event to move the task to the 2nd column + $event = array( + 'project_id' => 1, + 'task_id' => 1, + 'column_id' => 2, + ); + + // Our event should NOT be executed because we define the same project + $action->setParam('column_id', 2); + $action->setParam('project_id', 1); + $this->assertFalse($action->execute($event)); + + // Our task should be assigned to the project 1 + $task = $t->getById(1); + $this->assertNotEmpty($task); + $this->assertEquals(1, $task['project_id']); + + // We create an event to move the task to the 2nd column + $event = array( + 'project_id' => 1, + 'task_id' => 1, + 'column_id' => 2, + ); + + // Our event should be executed because we define a different project + $action->setParam('column_id', 2); + $action->setParam('project_id', 2); + $this->assertTrue($action->execute($event)); + + // Our task should be assigned to the project 1 + $task = $t->getById(1); + $this->assertNotEmpty($task); + $this->assertEquals(1, $task['project_id']); + + // We should have another task assigned to the project 2 + $task = $t->getById(2); + $this->assertNotEmpty($task); + $this->assertEquals(2, $task['project_id']); + } +} diff --git a/tests/Base.php b/tests/Base.php index 98dbf1b9..ba664c3a 100644 --- a/tests/Base.php +++ b/tests/Base.php @@ -12,6 +12,10 @@ require_once __DIR__.'/../models/user.php'; require_once __DIR__.'/../models/board.php'; require_once __DIR__.'/../models/action.php'; require_once __DIR__.'/../actions/task_close.php'; +require_once __DIR__.'/../actions/task_assign_specific_user.php'; +require_once __DIR__.'/../actions/task_assign_color_user.php'; +require_once __DIR__.'/../actions/task_assign_current_user.php'; +require_once __DIR__.'/../actions/task_duplicate_another_project.php'; abstract class Base extends PHPUnit_Framework_TestCase { |