public function testMoveTaskAnotherSwimlane() { $tp = new TaskPosition($this->container); $tc = new TaskCreation($this->container); $p = new Project($this->container); $tf = new TaskFinder($this->container); $s = new Swimlane($this->container); $this->container['dispatcher'] = new EventDispatcher(); $this->container['dispatcher']->addSubscriber(new TaskMovedDateSubscriber($this->container)); $now = time(); $this->assertEquals(1, $p->create(array('name' => 'Project #1'))); $this->assertEquals(1, $s->create(array('project_id' => 1, 'name' => 'S1'))); $this->assertEquals(2, $s->create(array('project_id' => 1, 'name' => 'S2'))); $this->assertEquals(1, $tc->create(array('title' => 'Task #1', 'project_id' => 1))); $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals($now, $task['date_moved'], '', 1); $this->assertEquals(1, $task['column_id']); $this->assertEquals(0, $task['swimlane_id']); sleep(1); $this->assertTrue($tp->movePosition(1, 1, 2, 1, 2)); $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertNotEquals($now, $task['date_moved']); $this->assertEquals(2, $task['column_id']); $this->assertEquals(2, $task['swimlane_id']); }
public function testExecute() { $action = new TaskMoveAnotherProject($this->container, 1, Task::EVENT_MOVE_COLUMN); // We create a task in the first column $tc = new TaskCreation($this->container); $tf = new TaskFinder($this->container); $p = new Project($this->container); $this->assertEquals(1, $p->create(array('name' => 'project 1'))); $this->assertEquals(2, $p->create(array('name' => 'project 2'))); $this->assertEquals(1, $tc->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(new GenericEvent($event))); // Our task should be assigned to the project 1 $task = $tf->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(new GenericEvent($event))); // Our task should be assigned to the project 2 $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals(2, $task['project_id']); }
public function testAverageWithTransitions() { $transitionModel = new Transition($this->container); $taskFinderModel = new TaskFinder($this->container); $taskCreationModel = new TaskCreation($this->container); $projectModel = new Project($this->container); $averageLeadCycleTimeAnalytic = new AverageTimeSpentColumnAnalytic($this->container); $now = time(); $this->assertEquals(1, $projectModel->create(array('name' => 'test1'))); $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); $this->assertEquals(2, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); $this->container['db']->table(Task::TABLE)->eq('id', 1)->update(array('date_completed' => $now + 3600)); $this->container['db']->table(Task::TABLE)->eq('id', 2)->update(array('date_completed' => $now + 1800)); foreach (array(1, 2) as $task_id) { $task = $taskFinderModel->getById($task_id); $task['task_id'] = $task['id']; $task['date_moved'] = $now - 900; $task['src_column_id'] = 3; $task['dst_column_id'] = 1; $this->assertTrue($transitionModel->save(1, $task)); } $stats = $averageLeadCycleTimeAnalytic->build(1); $expected = array(1 => array('count' => 2, 'time_spent' => 3600 + 1800, 'average' => (int) ((3600 + 1800) / 2), 'title' => 'Backlog'), 2 => array('count' => 0, 'time_spent' => 0, 'average' => 0, 'title' => 'Ready'), 3 => array('count' => 2, 'time_spent' => 1800, 'average' => 900, 'title' => 'Work in progress'), 4 => array('count' => 0, 'time_spent' => 0, 'average' => 0, 'title' => 'Done')); $this->assertEquals($expected, $stats); }
public function testExecute() { $action = new TaskAssignColorCategory($this->container, 1, Task::EVENT_CREATE_UPDATE); $action->setParam('category_id', 1); $action->setParam('color_id', 'blue'); // We create a task in the first column $tc = new TaskCreation($this->container); $tf = new TaskFinder($this->container); $p = new Project($this->container); $c = new Category($this->container); $this->assertEquals(1, $p->create(array('name' => 'test'))); $this->assertEquals(1, $c->create(array('name' => 'c1', 'project_id' => 1))); $this->assertEquals(2, $c->create(array('name' => 'c2', 'project_id' => 1))); $this->assertEquals(1, $tc->create(array('title' => 'test', 'project_id' => 1, 'column_id' => 1, 'color_id' => 'green', 'category_id' => 2))); // We create an event but we don't do anything $event = array('project_id' => 1, 'task_id' => 1, 'column_id' => 1, 'category_id' => 2, 'position' => 2); // Our event should NOT be executed $this->assertFalse($action->execute(new GenericEvent($event))); // Our task should be assigned to the ategory_id=1 and have the green color $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals(2, $task['category_id']); $this->assertEquals('green', $task['color_id']); // We create an event to move the task $event = array('project_id' => 1, 'task_id' => 1, 'column_id' => 1, 'position' => 5, 'category_id' => 1); // Our event should be executed $this->assertTrue($action->execute(new GenericEvent($event))); // Our task should have the blue color $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals('blue', $task['color_id']); }
public function testCleanup() { $e = new ProjectActivity($this->container); $tc = new TaskCreation($this->container); $tf = new TaskFinder($this->container); $p = new Project($this->container); $this->assertEquals(1, $p->create(array('name' => 'Project #1'))); $this->assertEquals(1, $tc->create(array('title' => 'Task #1', 'project_id' => 1))); $max = 15; $nb_events = 100; for ($i = 0; $i < $nb_events; $i++) { $this->assertTrue($e->createEvent(1, 1, 1, Task::EVENT_CLOSE, array('task' => $tf->getbyId(1)))); } $this->assertEquals($nb_events, $this->container['db']->table('project_activities')->count()); $e->cleanup($max); $events = $e->getProject(1); $this->assertNotEmpty($events); $this->assertTrue(is_array($events)); $this->assertEquals($max, count($events)); $this->assertEquals(100, $events[0]['id']); $this->assertEquals(99, $events[1]['id']); $this->assertEquals(86, $events[14]['id']); // Cleanup during task creation $nb_events = ProjectActivity::MAX_EVENTS + 10; for ($i = 0; $i < $nb_events; $i++) { $this->assertTrue($e->createEvent(1, 1, 1, Task::EVENT_CLOSE, array('task' => $tf->getbyId(1)))); } $this->assertEquals(ProjectActivity::MAX_EVENTS, $this->container['db']->table('project_activities')->count()); }
public function testExecute() { $action = new TaskAssignColorUser($this->container, 1, Task::EVENT_ASSIGNEE_CHANGE); $action->setParam('user_id', 1); $action->setParam('color_id', 'blue'); // We create a task in the first column $tc = new TaskCreation($this->container); $tf = new TaskFinder($this->container); $p = new Project($this->container); $this->assertEquals(1, $p->create(array('name' => 'test'))); $this->assertEquals(1, $tc->create(array('title' => 'test', 'project_id' => 1, 'column_id' => 1, 'color_id' => 'green'))); // We change the assignee $event = array('project_id' => 1, 'task_id' => 1, 'owner_id' => 5); // Our event should NOT be executed $this->assertFalse($action->execute(new GenericEvent($event))); // Our task should be assigned to nobody and have the green color $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals(0, $task['owner_id']); $this->assertEquals('green', $task['color_id']); // We change the assignee $event = array('project_id' => 1, 'task_id' => 1, 'owner_id' => 1); // Our event should be executed $this->assertTrue($action->execute(new GenericEvent($event))); // Our task should be assigned to nobody and have the blue color $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals(0, $task['owner_id']); $this->assertEquals('blue', $task['color_id']); }
public function testGetTitle() { $wn = new Notification($this->container); $p = new Project($this->container); $tf = new TaskFinder($this->container); $tc = new TaskCreation($this->container); $s = new Subtask($this->container); $c = new Comment($this->container); $f = new TaskFile($this->container); $this->assertEquals(1, $p->create(array('name' => 'test'))); $this->assertEquals(1, $tc->create(array('title' => 'test', 'project_id' => 1))); $this->assertEquals(1, $s->create(array('title' => 'test', 'task_id' => 1))); $this->assertEquals(1, $c->create(array('comment' => 'test', 'task_id' => 1, 'user_id' => 1))); $this->assertEquals(1, $f->create(1, 'test', 'blah', 123)); $task = $tf->getDetails(1); $subtask = $s->getById(1, true); $comment = $c->getById(1); $file = $c->getById(1); $this->assertNotEmpty($task); $this->assertNotEmpty($subtask); $this->assertNotEmpty($comment); $this->assertNotEmpty($file); foreach (NotificationSubscriber::getSubscribedEvents() as $event_name => $values) { $title = $wn->getTitleWithoutAuthor($event_name, array('task' => $task, 'comment' => $comment, 'subtask' => $subtask, 'file' => $file, 'changes' => array())); $this->assertNotEmpty($title); $title = $wn->getTitleWithAuthor('foobar', $event_name, array('task' => $task, 'comment' => $comment, 'subtask' => $subtask, 'file' => $file, 'changes' => array())); $this->assertNotEmpty($title); } $this->assertNotEmpty($wn->getTitleWithoutAuthor(Task::EVENT_OVERDUE, array('tasks' => array(array('id' => 1))))); $this->assertNotEmpty($wn->getTitleWithoutAuthor('unkown', array())); }
public function testGetAll() { $this->container['sessionStorage']->user = array('id' => 1); $this->container['externalLinkManager'] = new ExternalLinkManager($this->container); $projectModel = new Project($this->container); $taskCreationModel = new TaskCreation($this->container); $taskExternalLinkModel = new TaskExternalLink($this->container); $webLinkProvider = new WebLinkProvider($this->container); $this->container['externalLinkManager']->register($webLinkProvider); $this->assertEquals(1, $projectModel->create(array('name' => 'Test'))); $this->assertEquals(1, $taskCreationModel->create(array('title' => 'Test', 'project_id' => 1))); $this->assertEquals(1, $taskExternalLinkModel->create(array('task_id' => 1, 'url' => 'https://miniflux.net/', 'title' => 'MX', 'link_type' => 'weblink', 'dependency' => 'related'))); $this->assertEquals(2, $taskExternalLinkModel->create(array('task_id' => 1, 'url' => 'http://kanboard.net/', 'title' => 'KB', 'link_type' => 'weblink', 'dependency' => 'related'))); $links = $taskExternalLinkModel->getAll(1); $this->assertCount(2, $links); $this->assertEquals('KB', $links[0]['title']); $this->assertEquals('MX', $links[1]['title']); $this->assertEquals('Web Link', $links[0]['type']); $this->assertEquals('Web Link', $links[1]['type']); $this->assertEquals('Related', $links[0]['dependency_label']); $this->assertEquals('Related', $links[1]['dependency_label']); $this->assertEquals('admin', $links[0]['creator_username']); $this->assertEquals('admin', $links[1]['creator_username']); $this->assertEquals('', $links[0]['creator_name']); $this->assertEquals('', $links[1]['creator_name']); }
public function testExecute() { $action = new TaskMoveColumnCategoryChange($this->container, 1, Task::EVENT_UPDATE); $action->setParam('dest_column_id', 3); $action->setParam('category_id', 1); $this->assertEquals(3, $action->getParam('dest_column_id')); $this->assertEquals(1, $action->getParam('category_id')); // We create a task in the first column $tc = new TaskCreation($this->container); $tf = new TaskFinder($this->container); $p = new Project($this->container); $c = new Category($this->container); $this->assertEquals(1, $p->create(array('name' => 'test'))); $this->assertEquals(1, $c->create(array('name' => 'bug', 'project_id' => 1))); $this->assertEquals(1, $tc->create(array('title' => 'test', 'project_id' => 1, 'column_id' => 1))); // No category should be assigned + column_id=1 $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEmpty($task['category_id']); $this->assertEquals(1, $task['column_id']); // We create an event to move the task to the 2nd column $event = array('task_id' => 1, 'column_id' => 1, 'project_id' => 1, 'category_id' => 1); // Our event should be executed $this->assertTrue($action->hasCompatibleEvent()); $this->assertTrue($action->hasRequiredProject($event)); $this->assertTrue($action->hasRequiredParameters($event)); $this->assertTrue($action->hasRequiredCondition($event)); $this->assertTrue($action->isExecutable($event)); $this->assertTrue($action->execute(new GenericEvent($event))); // Our task should be moved to the other column $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals(3, $task['column_id']); }
public function testBuild() { $taskCreationModel = new TaskCreation($this->container); $projectModel = new Project($this->container); $averageLeadCycleTimeAnalytic = new AverageLeadCycleTimeAnalytic($this->container); $now = time(); $this->assertEquals(1, $projectModel->create(array('name' => 'test1'))); $this->assertEquals(2, $projectModel->create(array('name' => 'test1'))); $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); $this->assertEquals(2, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); $this->assertEquals(3, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); $this->assertEquals(4, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); // LT=3600 CT=1800 $this->container['db']->table(Task::TABLE)->eq('id', 1)->update(array('date_completed' => $now + 3600, 'date_started' => $now + 1800)); // LT=1800 CT=900 $this->container['db']->table(Task::TABLE)->eq('id', 2)->update(array('date_completed' => $now + 1800, 'date_started' => $now + 900)); // LT=3600 CT=0 $this->container['db']->table(Task::TABLE)->eq('id', 3)->update(array('date_completed' => $now + 3600)); // LT=2*3600 CT=0 $this->container['db']->table(Task::TABLE)->eq('id', 4)->update(array('date_completed' => $now + 2 * 3600)); $stats = $averageLeadCycleTimeAnalytic->build(1); $this->assertEquals(4, $stats['count']); $this->assertEquals(3600 + 1800 + 3600 + 2 * 3600, $stats['total_lead_time'], '', 5); $this->assertEquals(1800 + 900, $stats['total_cycle_time'], '', 5); $this->assertEquals((3600 + 1800 + 3600 + 2 * 3600) / 4, $stats['avg_lead_time'], '', 5); $this->assertEquals((1800 + 900) / 4, $stats['avg_cycle_time'], '', 5); }
private function createTasks($user_id, $nb_active, $nb_inactive) { $taskCreationModel = new TaskCreation($this->container); for ($i = 0; $i < $nb_active; $i++) { $this->assertNotFalse($taskCreationModel->create(array('project_id' => 1, 'title' => 'test', 'owner_id' => $user_id, 'is_active' => 1))); } for ($i = 0; $i < $nb_inactive; $i++) { $this->assertNotFalse($taskCreationModel->create(array('project_id' => 1, 'title' => 'test', 'owner_id' => $user_id, 'is_active' => 0))); } }
public function testFormat() { $dp = new DateParser($this->container); $p = new Project($this->container); $tc = new TaskCreation($this->container); $tf = new TaskFilterGanttFormatter($this->container); $this->assertEquals(1, $p->create(array('name' => 'test'))); $this->assertNotFalse($tc->create(array('project_id' => 1, 'title' => 'task1'))); $this->assertNotEmpty($tf->search('status:open')->format()); }
public function testRemove() { $t = new Task($this->container); $tc = new TaskCreation($this->container); $tf = new TaskFinder($this->container); $p = new Project($this->container); $this->assertEquals(1, $p->create(array('name' => 'UnitTest'))); $this->assertEquals(1, $tc->create(array('title' => 'Task #1', 'project_id' => 1))); $this->assertTrue($t->remove(1)); $this->assertFalse($t->remove(1234)); }
public function testTaskCreation() { $c = new Config($this->container); $p = new Project($this->container); $tc = new TaskCreation($this->container); $this->container['dispatcher']->addSubscriber(new NotificationSubscriber($this->container)); $c->save(array('webhook_url' => 'http://localhost/?task-creation')); $this->container['httpClient']->expects($this->once())->method('postJson')->with($this->stringContains('http://localhost/?task-creation&token='), $this->anything()); $this->assertEquals(1, $p->create(array('name' => 'test'))); $this->assertEquals(1, $tc->create(array('project_id' => 1, 'title' => 'test'))); }
public function testWithWrongColumn() { $projectModel = new Project($this->container); $taskCreationModel = new TaskCreation($this->container); $this->assertEquals(1, $projectModel->create(array('name' => 'test1'))); $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); $event = new GenericEvent(array('project_id' => 1, 'task_id' => 1, 'column_id' => 3)); $action = new TaskUpdateStartDate($this->container); $action->setProjectId(1); $action->setParam('column_id', 2); $this->assertFalse($action->execute($event, Task::EVENT_MOVE_COLUMN)); }
public function validateRemove() { $c = new Comment($this->container); $tc = new TaskCreation($this->container); $p = new Project($this->container); $this->assertEquals(1, $p->create(array('name' => 'test1'))); $this->assertEquals(1, $tc->create(array('title' => 'test', 'project_id' => 1, 'column_id' => 3, 'owner_id' => 1))); $this->assertTrue($c->create(array('task_id' => 1, 'comment' => 'c1', 'user_id' => 1))); $this->assertTrue($c->remove(1)); $this->assertFalse($c->remove(1)); $this->assertFalse($c->remove(1111)); }
public function testWithNoUserSession() { $projectModel = new Project($this->container); $taskCreationModel = new TaskCreation($this->container); $taskFinderModel = new TaskFinder($this->container); $this->assertEquals(1, $projectModel->create(array('name' => 'test1'))); $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); $event = new GenericEvent(array('project_id' => 1, 'task_id' => 1)); $action = new TaskAssignCurrentUser($this->container); $action->setProjectId(1); $this->assertFalse($action->execute($event, Task::EVENT_CREATE)); }
public function testWithNoTaskId() { $projectModel = new Project($this->container); $taskCreationModel = new TaskCreation($this->container); $this->assertEquals(1, $projectModel->create(array('name' => 'test1'))); $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); $event = new GenericEvent(array('project_id' => 1)); $action = new TaskClose($this->container); $action->setProjectId(1); $action->addEvent('test.event', 'Test Event'); $this->assertFalse($action->execute($event, 'test.event')); }
public function testSendWithoutEmailAddress() { $en = new Mail($this->container); $p = new Project($this->container); $tf = new TaskFinder($this->container); $tc = new TaskCreation($this->container); $u = new User($this->container); $this->assertEquals(1, $p->create(array('name' => 'test'))); $this->assertEquals(1, $tc->create(array('title' => 'test', 'project_id' => 1))); $this->container['emailClient'] = $this->getMockBuilder('\\Kanboard\\Core\\Mail\\Client')->setConstructorArgs(array($this->container))->setMethods(array('send'))->getMock(); $this->container['emailClient']->expects($this->never())->method('send'); $en->notifyUser($u->getById(1), Task::EVENT_CREATE, array('task' => $tf->getDetails(1))); }
public function testCountByProject() { $tc = new TaskCreation($this->container); $tf = new TaskFinder($this->container); $p = new Project($this->container); $this->assertEquals(1, $p->create(array('name' => 'Project #1'))); $this->assertEquals(2, $p->create(array('name' => 'Project #2'))); $this->assertEquals(1, $tc->create(array('title' => 'Task #1', 'project_id' => 1))); $this->assertEquals(2, $tc->create(array('title' => 'Task #2', 'project_id' => 2))); $this->assertEquals(3, $tc->create(array('title' => 'Task #3', 'project_id' => 2))); $this->assertEquals(1, $tf->countByProjectId(1)); $this->assertEquals(2, $tf->countByProjectId(2)); }
public function testBuildWithOnlyClosedTask() { $taskCreationModel = new TaskCreation($this->container); $projectModel = new Project($this->container); $estimatedTimeComparisonAnalytic = new EstimatedTimeComparisonAnalytic($this->container); $this->assertEquals(1, $projectModel->create(array('name' => 'test1'))); $this->assertEquals(2, $projectModel->create(array('name' => 'test1'))); $this->assertNotFalse($taskCreationModel->create(array('project_id' => 1, 'title' => 'test', 'time_estimated' => 5.5, 'is_active' => 0))); $this->assertNotFalse($taskCreationModel->create(array('project_id' => 1, 'title' => 'test', 'time_estimated' => 1.75, 'is_active' => 0))); $this->assertNotFalse($taskCreationModel->create(array('project_id' => 1, 'title' => 'test', 'time_spent' => 8.25, 'is_active' => 0))); $this->assertNotFalse($taskCreationModel->create(array('project_id' => 1, 'title' => 'test', 'time_spent' => 0.25, 'is_active' => 0))); $expected = array('closed' => array('time_spent' => 8.5, 'time_estimated' => 7.25), 'open' => array('time_spent' => 0, 'time_estimated' => 0)); $this->assertEquals($expected, $estimatedTimeComparisonAnalytic->build(1)); }
public function testWithWrongLink() { $projectModel = new Project($this->container); $taskCreationModel = new TaskCreation($this->container); $taskFinderModel = new TaskFinder($this->container); $this->assertEquals(1, $projectModel->create(array('name' => 'test1'))); $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); $event = new GenericEvent(array('project_id' => 1, 'task_id' => 1, 'link_id' => 2)); $action = new TaskAssignColorLink($this->container); $action->setProjectId(1); $action->setParam('color_id', 'red'); $action->setParam('link_id', 1); $this->assertFalse($action->execute($event, TaskLink::EVENT_CREATE_UPDATE)); }
public function testUpdateTotals() { $p = new Project($this->container); $pds = new ProjectDailyColumnStats($this->container); $tc = new TaskCreation($this->container); $ts = new TaskStatus($this->container); $this->assertEquals(1, $p->create(array('name' => 'UnitTest'))); $this->assertEquals(0, $pds->countDays(1, date('Y-m-d', strtotime('-2days')), date('Y-m-d'))); for ($i = 0; $i < 10; $i++) { $this->assertNotFalse($tc->create(array('title' => 'Task #' . $i, 'project_id' => 1, 'column_id' => 1))); } for ($i = 0; $i < 5; $i++) { $this->assertNotFalse($tc->create(array('title' => 'Task #' . $i, 'project_id' => 1, 'column_id' => 4))); } $pds->updateTotals(1, date('Y-m-d', strtotime('-2days'))); for ($i = 0; $i < 15; $i++) { $this->assertNotFalse($tc->create(array('title' => 'Task #' . $i, 'project_id' => 1, 'column_id' => 3))); } for ($i = 0; $i < 25; $i++) { $this->assertNotFalse($tc->create(array('title' => 'Task #' . $i, 'project_id' => 1, 'column_id' => 2))); } $pds->updateTotals(1, date('Y-m-d', strtotime('-1 day'))); $this->assertNotFalse($ts->close(1)); $this->assertNotFalse($ts->close(2)); for ($i = 0; $i < 3; $i++) { $this->assertNotFalse($tc->create(array('title' => 'Task #' . $i, 'project_id' => 1, 'column_id' => 3))); } for ($i = 0; $i < 5; $i++) { $this->assertNotFalse($tc->create(array('title' => 'Task #' . $i, 'project_id' => 1, 'column_id' => 2))); } for ($i = 0; $i < 4; $i++) { $this->assertNotFalse($tc->create(array('title' => 'Task #' . $i, 'project_id' => 1, 'column_id' => 4))); } $pds->updateTotals(1, date('Y-m-d')); $this->assertEquals(3, $pds->countDays(1, date('Y-m-d', strtotime('-2days')), date('Y-m-d'))); $metrics = $pds->getAggregatedMetrics(1, date('Y-m-d', strtotime('-2days')), date('Y-m-d')); $this->assertNotEmpty($metrics); $this->assertEquals(4, count($metrics)); $this->assertEquals(5, count($metrics[0])); $this->assertEquals('Date', $metrics[0][0]); $this->assertEquals('Backlog', $metrics[0][1]); $this->assertEquals('Ready', $metrics[0][2]); $this->assertEquals('Work in progress', $metrics[0][3]); $this->assertEquals('Done', $metrics[0][4]); $this->assertEquals(date('Y-m-d', strtotime('-2days')), $metrics[1][0]); $this->assertEquals(10, $metrics[1][1]); $this->assertEquals(0, $metrics[1][2]); $this->assertEquals(0, $metrics[1][3]); $this->assertEquals(5, $metrics[1][4]); $this->assertEquals(date('Y-m-d', strtotime('-1day')), $metrics[2][0]); $this->assertEquals(10, $metrics[2][1]); $this->assertEquals(25, $metrics[2][2]); $this->assertEquals(15, $metrics[2][3]); $this->assertEquals(5, $metrics[2][4]); $this->assertEquals(date('Y-m-d'), $metrics[3][0]); $this->assertEquals(10, $metrics[3][1]); $this->assertEquals(30, $metrics[3][2]); $this->assertEquals(18, $metrics[3][3]); $this->assertEquals(9, $metrics[3][4]); }
public function testExport() { $projectModel = new Project($this->container); $taskCreationModel = new TaskCreation($this->container); $transitionModel = new Transition($this->container); $transitionExportModel = new TransitionExport($this->container); $this->assertEquals(1, $projectModel->create(array('name' => 'test'))); $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); $task_event = array('project_id' => 1, 'task_id' => 1, 'src_column_id' => 1, 'dst_column_id' => 2, 'date_moved' => time() - 3600); $this->assertTrue($transitionModel->save(1, $task_event)); $export = $transitionExportModel->export(1, date('Y-m-d'), date('Y-m-d')); $this->assertCount(2, $export); $this->assertEquals(array('Id', 'Task Title', 'Source column', 'Destination column', 'Executer', 'Date', 'Time spent'), $export[0]); $this->assertEquals(array(1, 'test', 'Backlog', 'Ready', 'admin', date('m/d/Y H:i', time()), 1.0), $export[1]); }
public function testWithNotAssignableUser() { $userModel = new User($this->container); $projectModel = new Project($this->container); $projectUserRoleModel = new ProjectUserRole($this->container); $taskCreationModel = new TaskCreation($this->container); $taskFinderModel = new TaskFinder($this->container); $this->assertEquals(1, $projectModel->create(array('name' => 'test1'))); $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); $event = new GenericEvent(array('project_id' => 1, 'task_id' => 1, 'owner_id' => 1)); $action = new TaskAssignUser($this->container); $action->setProjectId(1); $action->addEvent('test.event', 'Test Event'); $this->assertFalse($action->execute($event, 'test.event')); }
public function testThatExistingCategoryWillNotChange() { $tc = new TaskCreation($this->container); $tf = new TaskFinder($this->container); $p = new Project($this->container); $c = new Category($this->container); $action = new TaskAssignCategoryLink($this->container, 1, TaskLink::EVENT_CREATE_UPDATE); $action->setParam('category_id', 2); $action->setParam('link_id', 2); $this->assertEquals(1, $p->create(array('name' => 'P1'))); $this->assertEquals(1, $c->create(array('name' => 'C1', 'project_id' => 1))); $this->assertEquals(2, $c->create(array('name' => 'C2', 'project_id' => 1))); $this->assertEquals(1, $tc->create(array('title' => 'T1', 'project_id' => 1, 'category_id' => 1))); $event = array('project_id' => 1, 'task_id' => 1, 'opposite_task_id' => 2, 'link_id' => 2); $this->assertFalse($action->execute(new TaskLinkEvent($event))); }
public function testUpdateTotals() { $p = new Project($this->container); $pds = new ProjectDailyStats($this->container); $tc = new TaskCreation($this->container); $ts = new TaskStatus($this->container); $this->assertEquals(1, $p->create(array('name' => 'UnitTest'))); $this->assertEquals(1, $tc->create(array('title' => 'Task #1', 'project_id' => 1, 'date_started' => strtotime('-1 day')))); $this->assertEquals(2, $tc->create(array('title' => 'Task #1', 'project_id' => 1))); $pds->updateTotals(1, date('Y-m-d', strtotime('-1 day'))); $this->assertTrue($ts->close(1)); $pds->updateTotals(1, date('Y-m-d')); $metrics = $pds->getRawMetrics(1, date('Y-m-d', strtotime('-1days')), date('Y-m-d')); $expected = array(array('day' => date('Y-m-d', strtotime('-1days')), 'avg_lead_time' => 0, 'avg_cycle_time' => 43200), array('day' => date('Y-m-d'), 'avg_lead_time' => 0, 'avg_cycle_time' => 43200)); $this->assertEquals($expected, $metrics); }
public function testGetAll() { $wn = new UserUnreadNotification($this->container); $p = new Project($this->container); $tf = new TaskFinder($this->container); $tc = new TaskCreation($this->container); $u = new User($this->container); $this->assertEquals(1, $p->create(array('name' => 'test'))); $this->assertEquals(1, $tc->create(array('title' => 'test', 'project_id' => 1))); $wn->create(1, Task::EVENT_CREATE, array('task' => $tf->getDetails(1))); $wn->create(1, Task::EVENT_CREATE, array('task' => $tf->getDetails(1))); $this->assertEmpty($wn->getAll(2)); $notifications = $wn->getAll(1); $this->assertCount(2, $notifications); $this->assertArrayHasKey('title', $notifications[0]); $this->assertTrue(is_array($notifications[0]['event_data'])); }
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']); } }
public function testSuccess() { $userModel = new User($this->container); $projectModel = new Project($this->container); $taskCreationModel = new TaskCreation($this->container); $this->assertEquals(1, $projectModel->create(array('name' => 'test1'))); $this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); $this->assertTrue($userModel->update(array('id' => 1, 'email' => 'admin@localhost'))); $event = new GenericEvent(array('project_id' => 1, 'task_id' => 1, 'column_id' => 2)); $action = new TaskEmail($this->container); $action->setProjectId(1); $action->setParam('column_id', 2); $action->setParam('user_id', 1); $action->setParam('subject', 'My email subject'); $this->container['emailClient']->expects($this->once())->method('send')->with($this->equalTo('admin@localhost'), $this->equalTo('admin'), $this->equalTo('My email subject'), $this->stringContains('test')); $this->assertTrue($action->execute($event, Task::EVENT_CLOSE)); }