From b6b733b22f9e9f38786166c1274b135a99bce02a Mon Sep 17 00:00:00 2001 From: Frederic Guillot Date: Sat, 20 Jun 2015 16:50:52 -0400 Subject: [PATCH] Close all subtasks when a task is closed --- app/Model/Subtask.php | 12 ++++++++++++ app/Model/TaskStatus.php | 3 ++- app/Template/task/close.php | 2 +- tests/units/SubtaskTest.php | 22 ++++++++++++++++++++++ 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 65fa0f0ce..a869ae912 100644 --- a/app/Model/Subtask.php +++ b/app/Model/Subtask.php @@ -227,6 +227,18 @@ class Subtask extends Base return $result; } + /** + * 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 * diff --git a/app/Model/TaskStatus.php b/app/Model/TaskStatus.php index 30a65e1e0..3f62667ca 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 79150333e..160d54008 100644 --- a/app/Template/task/close.php +++ b/app/Template/task/close.php @@ -4,7 +4,7 @@

- e($task['title'])) ?> + e($task['title'])) ?>

diff --git a/tests/units/SubtaskTest.php b/tests/units/SubtaskTest.php index 791f8089a..2abd81d98 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 5c59698b6..c1f79142a 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']); + } + } }