diff options
-rw-r--r-- | app/Model/Subtask.php | 12 | ||||
-rw-r--r-- | app/Model/TaskStatus.php | 3 | ||||
-rw-r--r-- | app/Template/task/close.php | 2 | ||||
-rw-r--r-- | tests/units/SubtaskTest.php | 22 | ||||
-rw-r--r-- | tests/units/TaskStatusTest.php | 24 |
5 files changed, 61 insertions, 2 deletions
diff --git a/app/Model/Subtask.php b/app/Model/Subtask.php index 65fa0f0c..a869ae91 100644 --- a/app/Model/Subtask.php +++ b/app/Model/Subtask.php @@ -228,6 +228,18 @@ class Subtask extends Base } /** + * Close all subtasks of a task + * + * @access public + * @param integer $task_id + * @return boolean + */ + public function closeAll($task_id) + { + return $this->db->table(self::TABLE)->eq('task_id', $task_id)->update(array('status' => self::STATUS_DONE)); + } + + /** * Get subtasks with consecutive positions * * If you remove a subtask, the positions are not anymore consecutives diff --git a/app/Model/TaskStatus.php b/app/Model/TaskStatus.php index 30a65e1e..3f62667c 100644 --- a/app/Model/TaskStatus.php +++ b/app/Model/TaskStatus.php @@ -62,6 +62,7 @@ class TaskStatus extends Base */ public function close($task_id) { + $this->subtask->closeAll($task_id); return $this->changeStatus($task_id, Task::STATUS_CLOSED, time(), Task::EVENT_CLOSE); } @@ -113,7 +114,7 @@ class TaskStatus extends Base } /** - * Check the status of task + * Check the status of a task * * @access private * @param integer $task_id Task id diff --git a/app/Template/task/close.php b/app/Template/task/close.php index 79150333..160d5400 100644 --- a/app/Template/task/close.php +++ b/app/Template/task/close.php @@ -4,7 +4,7 @@ <div class="confirm"> <p class="alert alert-info"> - <?= t('Do you really want to close this task: "%s"?', $this->e($task['title'])) ?> + <?= t('Do you really want to close the task "%s" as well as all subtasks?', $this->e($task['title'])) ?> </p> <div class="form-actions"> diff --git a/tests/units/SubtaskTest.php b/tests/units/SubtaskTest.php index 791f8089..2abd81d9 100644 --- a/tests/units/SubtaskTest.php +++ b/tests/units/SubtaskTest.php @@ -11,6 +11,28 @@ use Model\User; class SubTaskTest extends Base { + public function testCloseAll() + { + $tc = new TaskCreation($this->container); + $s = new Subtask($this->container); + $p = new Project($this->container); + + $this->assertEquals(1, $p->create(array('name' => 'test1'))); + $this->assertEquals(1, $tc->create(array('title' => 'test 1', 'project_id' => 1))); + + $this->assertEquals(1, $s->create(array('title' => 'subtask #1', 'task_id' => 1))); + $this->assertEquals(2, $s->create(array('title' => 'subtask #2', 'task_id' => 1))); + + $this->assertTrue($s->closeAll(1)); + + $subtasks = $s->getAll(1); + $this->assertNotEmpty($subtasks); + + foreach ($subtasks as $subtask) { + $this->assertEquals(Subtask::STATUS_DONE, $subtask['status']); + } + } + public function testMoveUp() { $tc = new TaskCreation($this->container); diff --git a/tests/units/TaskStatusTest.php b/tests/units/TaskStatusTest.php index 5c59698b..c1f79142 100644 --- a/tests/units/TaskStatusTest.php +++ b/tests/units/TaskStatusTest.php @@ -2,6 +2,7 @@ require_once __DIR__.'/Base.php'; +use Model\Subtask; use Model\Task; use Model\TaskCreation; use Model\TaskFinder; @@ -74,4 +75,27 @@ class TaskStatusTest extends Base $this->assertArrayHasKey('task_id', $event); $this->assertNotEmpty($event['task_id']); } + + public function testThatAllSubtasksAreClosed() + { + $ts = new TaskStatus($this->container); + $tc = new TaskCreation($this->container); + $s = new Subtask($this->container); + $p = new Project($this->container); + + $this->assertEquals(1, $p->create(array('name' => 'test1'))); + $this->assertEquals(1, $tc->create(array('title' => 'test 1', 'project_id' => 1))); + + $this->assertEquals(1, $s->create(array('title' => 'subtask #1', 'task_id' => 1))); + $this->assertEquals(2, $s->create(array('title' => 'subtask #2', 'task_id' => 1))); + + $this->assertTrue($ts->close(1)); + + $subtasks = $s->getAll(1); + $this->assertNotEmpty($subtasks); + + foreach ($subtasks as $subtask) { + $this->assertEquals(Subtask::STATUS_DONE, $subtask['status']); + } + } } |