public function testHtml2Markdown() { $w = new Postmark($this->container); $p = new Project($this->container); $pp = new ProjectPermission($this->container); $u = new User($this->container); $tc = new TaskCreation($this->container); $tf = new TaskFinder($this->container); $this->assertEquals(2, $u->create(array('username' => 'me', 'email' => 'me@localhost'))); $this->assertEquals(1, $p->create(array('name' => 'test2', 'identifier' => 'TEST1'))); $this->assertTrue($pp->addMember(1, 2)); $this->assertTrue($w->receiveEmail(array('From' => 'me@localhost', 'Subject' => 'Email task', 'MailboxHash' => 'test1', 'TextBody' => 'boo', 'HtmlBody' => '<p><strong>boo</strong></p>'))); $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals(1, $task['project_id']); $this->assertEquals('Email task', $task['title']); $this->assertEquals('**boo**', $task['description']); $this->assertEquals(2, $task['creator_id']); $this->assertTrue($w->receiveEmail(array('From' => 'me@localhost', 'Subject' => 'Email task', 'MailboxHash' => 'test1', 'TextBody' => '**boo**', 'HtmlBody' => ''))); $task = $tf->getById(2); $this->assertNotEmpty($task); $this->assertEquals(1, $task['project_id']); $this->assertEquals('Email task', $task['title']); $this->assertEquals('**boo**', $task['description']); $this->assertEquals(2, $task['creator_id']); }
public function testExecute() { $action = new Action\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 testExecute() { $action = new Action\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'))); $this->assertEquals(2, $c->create(array('name' => 'c2'))); $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($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($event)); // Our task should have the blue color $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals('blue', $task['color_id']); }
public function testExecute() { $action = new Action\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 testExecute() { $action = new Action\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($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($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 testStatus() { $tc = new TaskCreation($this->container); $tf = new TaskFinder($this->container); $ts = new TaskStatus($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))); // The task must be open $this->assertTrue($ts->isOpen(1)); $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals(Task::STATUS_OPEN, $task['is_active']); $this->assertEquals(0, $task['date_completed']); $this->assertEquals(time(), $task['date_modification']); // We close the task $this->assertTrue($ts->close(1)); $this->assertTrue($ts->isClosed(1)); $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals(Task::STATUS_CLOSED, $task['is_active']); $this->assertEquals(time(), $task['date_completed']); $this->assertEquals(time(), $task['date_modification']); $this->assertTrue($this->container['event']->isEventTriggered(Task::EVENT_CLOSE)); // We open the task again $this->assertTrue($ts->open(1)); $this->assertTrue($ts->isOpen(1)); $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals(Task::STATUS_OPEN, $task['is_active']); $this->assertEquals(0, $task['date_completed']); $this->assertEquals(time(), $task['date_modification']); $this->assertTrue($this->container['event']->isEventTriggered(Task::EVENT_OPEN)); }
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 testHandlePayload() { $w = new Sendgrid($this->container); $p = new Project($this->container); $pp = new ProjectPermission($this->container); $u = new User($this->container); $tc = new TaskCreation($this->container); $tf = new TaskFinder($this->container); $this->assertEquals(2, $u->create(array('username' => 'me', 'email' => 'me@localhost'))); $this->assertEquals(1, $p->create(array('name' => 'test1'))); $this->assertEquals(2, $p->create(array('name' => 'test2', 'identifier' => 'TEST1'))); // Empty payload $this->assertFalse($w->receiveEmail(array())); // Unknown user $this->assertFalse($w->receiveEmail(array('envelope' => '{"to":["a@b.c"],"from":"a.b.c"}', 'subject' => 'Email task'))); // Project not found $this->assertFalse($w->receiveEmail(array('envelope' => '{"to":["a@b.c"],"from":"me@localhost"}', 'subject' => 'Email task'))); // User is not member $this->assertFalse($w->receiveEmail(array('envelope' => '{"to":["something+test1@localhost"],"from":"me@localhost"}', 'subject' => 'Email task'))); $this->assertTrue($pp->addMember(2, 2)); // The task must be created $this->assertTrue($w->receiveEmail(array('envelope' => '{"to":["something+test1@localhost"],"from":"me@localhost"}', 'subject' => 'Email task'))); $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals(2, $task['project_id']); $this->assertEquals('Email task', $task['title']); $this->assertEquals('', $task['description']); $this->assertEquals(2, $task['creator_id']); // Html content $this->assertTrue($w->receiveEmail(array('envelope' => '{"to":["something+test1@localhost"],"from":"me@localhost"}', 'subject' => 'Email task', 'html' => '<strong>bold</strong> text'))); $task = $tf->getById(2); $this->assertNotEmpty($task); $this->assertEquals(2, $task['project_id']); $this->assertEquals('Email task', $task['title']); $this->assertEquals('**bold** text', $task['description']); $this->assertEquals(2, $task['creator_id']); // Text content $this->assertTrue($w->receiveEmail(array('envelope' => '{"to":["something+test1@localhost"],"from":"me@localhost"}', 'subject' => 'Email task', 'text' => '**bold** text'))); $task = $tf->getById(3); $this->assertNotEmpty($task); $this->assertEquals(2, $task['project_id']); $this->assertEquals('Email task', $task['title']); $this->assertEquals('**bold** text', $task['description']); $this->assertEquals(2, $task['creator_id']); // Text + html content $this->assertTrue($w->receiveEmail(array('envelope' => '{"to":["something+test1@localhost"],"from":"me@localhost"}', 'subject' => 'Email task', 'html' => '<strong>bold</strong> html', 'text' => '**bold** text'))); $task = $tf->getById(4); $this->assertNotEmpty($task); $this->assertEquals(2, $task['project_id']); $this->assertEquals('Email task', $task['title']); $this->assertEquals('**bold** html', $task['description']); $this->assertEquals(2, $task['creator_id']); }
public function testHandlePayload() { $w = new MailgunWebhook($this->container); $p = new Project($this->container); $pp = new ProjectPermission($this->container); $u = new User($this->container); $tc = new TaskCreation($this->container); $tf = new TaskFinder($this->container); $this->assertEquals(2, $u->create(array('name' => 'me', 'email' => 'me@localhost'))); $this->assertEquals(1, $p->create(array('name' => 'test1'))); $this->assertEquals(2, $p->create(array('name' => 'test2', 'identifier' => 'TEST1'))); // Empty payload $this->assertFalse($w->parsePayload(array())); // Unknown user $this->assertFalse($w->parsePayload(array('sender' => 'a@b.c', 'subject' => 'Email task', 'recipient' => 'foobar', 'stripped-text' => 'boo'))); // Project not found $this->assertFalse($w->parsePayload(array('sender' => 'me@localhost', 'subject' => 'Email task', 'recipient' => 'foo+test@localhost', 'stripped-text' => 'boo'))); // User is not member $this->assertFalse($w->parsePayload(array('sender' => 'me@localhost', 'subject' => 'Email task', 'recipient' => 'foo+test1@localhost', 'stripped-text' => 'boo'))); $this->assertTrue($pp->addMember(2, 2)); // The task must be created $this->assertTrue($w->parsePayload(array('sender' => 'me@localhost', 'subject' => 'Email task', 'recipient' => 'foo+test1@localhost', 'stripped-text' => 'boo'))); $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals(2, $task['project_id']); $this->assertEquals('Email task', $task['title']); $this->assertEquals('boo', $task['description']); $this->assertEquals(2, $task['creator_id']); }
public function testCalculateTime() { $tm = new TaskModification($this->container); $tc = new TaskCreation($this->container); $tf = new TaskFinder($this->container); $p = new Project($this->container); $s = new SubTask($this->container); $ts = new TimeTracking($this->container); $this->assertEquals(1, $p->create(array('name' => 'Project #1'))); $this->assertEquals(1, $tc->create(array('title' => 'Task #1', 'project_id' => 1, 'time_estimated' => 4.5))); $this->assertTrue($tm->update(array('id' => 1, 'time_spent' => 3.5))); $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals(4.5, $task['time_estimated']); $this->assertEquals(3.5, $task['time_spent']); $timesheet = $ts->getTaskTimesheet($task, array()); $this->assertNotEmpty($timesheet); $this->assertEquals(4.5, $timesheet['time_estimated']); $this->assertEquals(3.5, $timesheet['time_spent']); $this->assertEquals(1, $timesheet['time_remaining']); // Subtasks calculation $this->assertEquals(1, $s->create(array('title' => 'subtask #1', 'task_id' => 1, 'time_estimated' => 5.5, 'time_spent' => 3))); $this->assertEquals(2, $s->create(array('title' => 'subtask #2', 'task_id' => 1, 'time_estimated' => '', 'time_spent' => 4))); $timesheet = $ts->getTaskTimesheet($task, $s->getAll(1)); $this->assertNotEmpty($timesheet); $this->assertEquals(5.5, $timesheet['time_estimated']); $this->assertEquals(7, $timesheet['time_spent']); $this->assertEquals(-1.5, $timesheet['time_remaining']); }
public function testRemove() { $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' => 'Project #1'))); $this->assertEquals(1, $c->create(array('name' => 'Category #1', 'project_id' => 1))); $this->assertEquals(2, $c->create(array('name' => 'Category #2', 'project_id' => 1))); $this->assertEquals(1, $tc->create(array('title' => 'Task #1', 'project_id' => 1, 'category_id' => 2))); $task = $tf->getById(1); $this->assertTrue(is_array($task)); $this->assertEquals(2, $task['category_id']); $this->assertTrue($c->remove(1)); $this->assertTrue($c->remove(2)); // Make sure tasks assigned with that category are reseted $task = $tf->getById(1); $this->assertTrue(is_array($task)); $this->assertEquals(0, $task['category_id']); }
public function testExecute() { $action = new Action\TaskUpdateStartDate($this->container, 1, Task::EVENT_MOVE_COLUMN); $action->setParam('column_id', 2); // 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))); // The start date must be empty $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEmpty($task['date_started']); // 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(new GenericEvent($event))); // Our task should be updated $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals(time(), $task['date_started'], '', 2); }
public function testStatus() { $tc = new TaskCreation($this->container); $tf = new TaskFinder($this->container); $ts = new TaskStatus($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))); // The task must be open $this->assertTrue($ts->isOpen(1)); $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals(Task::STATUS_OPEN, $task['is_active']); $this->assertEquals(0, $task['date_completed']); $this->assertEquals(time(), $task['date_modification']); // We close the task $this->container['dispatcher']->addListener(Task::EVENT_CLOSE, array($this, 'onTaskClose')); $this->container['dispatcher']->addListener(Task::EVENT_OPEN, array($this, 'onTaskOpen')); $this->assertTrue($ts->close(1)); $this->assertTrue($ts->isClosed(1)); $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals(Task::STATUS_CLOSED, $task['is_active']); $this->assertEquals(time(), $task['date_completed']); $this->assertEquals(time(), $task['date_modification']); // We open the task again $this->assertTrue($ts->open(1)); $this->assertTrue($ts->isOpen(1)); $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals(Task::STATUS_OPEN, $task['is_active']); $this->assertEquals(0, $task['date_completed']); $this->assertEquals(time(), $task['date_modification']); $called = $this->container['dispatcher']->getCalledListeners(); $this->assertArrayHasKey('task.close.TaskStatusTest::onTaskClose', $called); $this->assertArrayHasKey('task.open.TaskStatusTest::onTaskOpen', $called); }
public function testMultipleActions() { $tp = new TaskPosition($this->container); $tc = new TaskCreation($this->container); $tf = new TaskFinder($this->container); $b = new Board($this->container); $p = new Project($this->container); $a = new Action($this->container); $c = new Category($this->container); $g = new GithubWebhook($this->container); // We create a project $this->assertEquals(1, $p->create(array('name' => 'unit_test'))); $this->assertEquals(1, $c->create(array('name' => 'unit_test'))); // We create a new action $this->assertEquals(1, $a->create(array('project_id' => 1, 'event_name' => GithubWebhook::EVENT_ISSUE_OPENED, 'action_name' => 'TaskCreation', 'params' => array()))); $this->assertEquals(2, $a->create(array('project_id' => 1, 'event_name' => GithubWebhook::EVENT_ISSUE_LABEL_CHANGE, 'action_name' => 'TaskAssignCategoryLabel', 'params' => array('label' => 'bug', 'category_id' => 1)))); $this->assertEquals(3, $a->create(array('project_id' => 1, 'event_name' => Task::EVENT_CREATE_UPDATE, 'action_name' => 'TaskAssignColorCategory', 'params' => array('color_id' => 'red', 'category_id' => 1)))); // We attach events $a->attachEvents(); $g->setProjectId(1); // We create a Github issue $issue = array('number' => 123, 'title' => 'Bugs everywhere', 'body' => 'There is a bug!', 'html_url' => 'http://localhost/'); $this->assertTrue($g->handleIssueOpened($issue)); $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals(1, $task['is_active']); $this->assertEquals(0, $task['category_id']); $this->assertEquals('yellow', $task['color_id']); // We assign a label to our issue $label = array('name' => 'bug'); $this->assertTrue($g->handleIssueLabeled($issue, $label)); $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals(1, $task['is_active']); $this->assertEquals(1, $task['category_id']); $this->assertEquals('red', $task['color_id']); }
public function testExecute() { $action = new Action\TaskAssignColorLink($this->container, 1, TaskLink::EVENT_CREATE_UPDATE); $action->setParam('link_id', 2); $action->setParam('color_id', 'green'); // We create a task in the first column $tc = new TaskCreation($this->container); $tf = new TaskFinder($this->container); $tl = new TaskLink($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))); // The color should be yellow $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals('yellow', $task['color_id']); $event = array('project_id' => 1, 'task_id' => 1, 'link_id' => 2); // Our event should be executed $this->assertTrue($action->execute(new TaskLinkEvent($event))); // The color should be green $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals('green', $task['color_id']); }
public function testColorChange() { $action = new Action\TaskAssignColorColumn($this->container, 1, Task::EVENT_MOVE_COLUMN); $action->setParam('column_id', 2); $action->setParam('color_id', 'green'); // 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' => 'yellow'))); $event = array('project_id' => 1, 'task_id' => 1, 'column_id' => 2, 'color_id' => 'green'); // Our event should be executed $this->assertTrue($action->execute(new GenericEvent($event))); // Our task should have color green $task = $tf->getById(1); $this->assertEquals('green', $task['color_id']); }
public function testCreation() { $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))); $this->assertEquals(2, $tc->create(array('title' => 'Task #2', 'project_id' => 1))); $this->assertTrue($e->createEvent(1, 1, 1, Task::EVENT_CLOSE, array('task' => $tf->getbyId(1)))); $this->assertTrue($e->createEvent(1, 2, 1, Task::EVENT_UPDATE, array('task' => $tf->getById(2)))); $this->assertFalse($e->createEvent(1, 1, 0, Task::EVENT_OPEN, array('task' => $tf->getbyId(1)))); $events = $e->getProject(1); $this->assertNotEmpty($events); $this->assertTrue(is_array($events)); $this->assertEquals(2, count($events)); $this->assertEquals(time(), $events[0]['date_creation'], '', 1); $this->assertEquals(Task::EVENT_UPDATE, $events[0]['event_name']); $this->assertEquals(Task::EVENT_CLOSE, $events[1]['event_name']); }
public function testExecute() { $action = new Action\TaskAssignSpecificUser($this->container, 1, Task::EVENT_MOVE_COLUMN); $action->setParam('column_id', 2); $action->setParam('user_id', 1); // 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))); // 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(new GenericEvent($event))); // Our task should be assigned to the user 1 $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals(1, $task['owner_id']); }
public function testUpdateTaskTimeTracking() { $tf = new TaskFinder($this->container); $tc = new TaskCreation($this->container); $s = new Subtask($this->container); $st = new SubtaskTimeTracking($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(2, $tc->create(array('title' => 'test 2', 'project_id' => 1, 'time_estimated' => 1.5, 'time_spent' => 0.5))); $this->assertEquals(1, $s->create(array('title' => 'subtask #1', 'task_id' => 1, 'time_spent' => 2.2))); $this->assertEquals(2, $s->create(array('title' => 'subtask #2', 'task_id' => 1, 'time_estimated' => 1))); $st->updateTaskTimeTracking(1); $st->updateTaskTimeTracking(2); $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals(2.2, $task['time_spent'], 'Total spent', 0.01); $this->assertEquals(1, $task['time_estimated'], 'Total estimated', 0.01); $task = $tf->getById(2); $this->assertNotEmpty($task); $this->assertEquals(0.5, $task['time_spent'], 'Total spent', 0.01); $this->assertEquals(1.5, $task['time_estimated'], 'Total estimated', 0.01); }
public function testDefaultColor() { $p = new Project($this->container); $tc = new TaskCreation($this->container); $tf = new TaskFinder($this->container); $c = new Config($this->container); $this->assertEquals(1, $p->create(array('name' => 'test'))); $this->assertEquals(1, $tc->create(array('project_id' => 1, 'title' => 'test1'))); $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals('yellow', $task['color_id']); $this->assertTrue($c->save(array('default_color' => 'orange'))); $this->assertEquals(2, $tc->create(array('project_id' => 1, 'title' => 'test2'))); $task = $tf->getById(2); $this->assertNotEmpty($task); $this->assertEquals('orange', $task['color_id']); }
public function testDueDateYear2038TimestampBug() { $p = new Project($this->container); $tc = new TaskCreation($this->container); $tf = new TaskFinder($this->container); $this->assertEquals(1, $p->create(array('name' => 'test'))); $this->assertEquals(1, $tc->create(array('project_id' => 1, 'title' => 'test', 'date_due' => strtotime('2050-01-10 12:30')))); $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals('2050-01-10 12:30', date('Y-m-d H:i', $task['date_due'])); }
public function testChangeTimeSpent() { $p = new Project($this->container); $tc = new TaskCreation($this->container); $tm = new TaskModification($this->container); $tf = new TaskFinder($this->container); $this->assertEquals(1, $p->create(array('name' => 'test'))); $this->assertEquals(1, $tc->create(array('title' => 'test', 'project_id' => 1))); $task = $tf->getById(1); $this->assertEquals(0, $task['time_spent']); $this->assertTrue($tm->update(array('id' => 1, 'time_spent' => 13.3))); $task = $tf->getById(1); $this->assertEquals(13.3, $task['time_spent']); }
public function testRemove() { $u = new User($this->container); $tc = new TaskCreation($this->container); $tf = new TaskFinder($this->container); $p = new Project($this->container); $s = new Subtask($this->container); $c = new Comment($this->container); $this->assertNotFalse($u->create(array('username' => 'toto', 'password' => '123456', 'name' => 'Toto'))); $this->assertEquals(1, $p->create(array('name' => 'Project #1'))); $this->assertEquals(1, $tc->create(array('title' => 'Task #1', 'project_id' => 1, 'owner_id' => 2))); $this->assertEquals(1, $s->create(array('title' => 'Subtask #1', 'user_id' => 2, 'task_id' => 1))); $this->assertEquals(1, $c->create(array('comment' => 'foobar', 'user_id' => 2, 'task_id' => 1))); $task = $tf->getById(1); $this->assertEquals(1, $task['id']); $this->assertEquals(2, $task['owner_id']); $this->assertTrue($u->remove(1)); $this->assertTrue($u->remove(2)); $this->assertFalse($u->remove(2)); $this->assertFalse($u->remove(55)); // Make sure that assigned tasks are unassigned after removing the user $task = $tf->getById(1); $this->assertEquals(1, $task['id']); $this->assertEquals(0, $task['owner_id']); // Make sure that assigned subtasks are unassigned after removing the user $subtask = $s->getById(1); $this->assertEquals(1, $subtask['id']); $this->assertEquals(0, $subtask['user_id']); // Make sure that comments are not related to the user anymore $comment = $c->getById(1); $this->assertEquals(1, $comment['id']); $this->assertEquals(0, $comment['user_id']); // Make sure that private projects are also removed $user_id1 = $u->create(array('username' => 'toto1', 'password' => '123456', 'name' => 'Toto')); $user_id2 = $u->create(array('username' => 'toto2', 'password' => '123456', 'name' => 'Toto')); $this->assertNotFalse($user_id1); $this->assertNotFalse($user_id2); $this->assertEquals(2, $p->create(array('name' => 'Private project #1', 'is_private' => 1), $user_id1, true)); $this->assertEquals(3, $p->create(array('name' => 'Private project #2', 'is_private' => 1), $user_id2, true)); $this->assertTrue($u->remove($user_id1)); $this->assertNotEmpty($p->getById(1)); $this->assertNotEmpty($p->getById(3)); $this->assertEmpty($p->getById(2)); }
public function testScore() { $p = new Project($this->container); $tc = new TaskCreation($this->container); $tf = new TaskFinder($this->container); $this->assertEquals(1, $p->create(array('name' => 'test'))); $this->assertEquals(1, $tc->create(array('project_id' => 1, 'title' => 'test', 'score' => '3'))); $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertNotFalse($task); $this->assertEquals(3, $task['score']); }
public function testGetBoardWithSwimlane() { $b = new Board($this->container); $tc = new TaskCreation($this->container); $tf = new TaskFinder($this->container); $p = new Project($this->container); $s = new Swimlane($this->container); $this->assertEquals(1, $p->create(array('name' => 'Project #1'))); $this->assertEquals(1, $s->create(1, 'test 1')); $this->assertEquals(1, $tc->create(array('title' => 'Task #1', 'project_id' => 1, 'column_id' => 1))); $this->assertEquals(2, $tc->create(array('title' => 'Task #2', 'project_id' => 1, 'column_id' => 3))); $this->assertEquals(3, $tc->create(array('title' => 'Task #3', 'project_id' => 1, 'column_id' => 2, 'swimlane_id' => 1))); $this->assertEquals(4, $tc->create(array('title' => 'Task #4', 'project_id' => 1, 'column_id' => 3))); $this->assertEquals(5, $tc->create(array('title' => 'Task #5', 'project_id' => 1, 'column_id' => 4))); $this->assertEquals(6, $tc->create(array('title' => 'Task #6', 'project_id' => 1, 'column_id' => 4, 'swimlane_id' => 1))); $board = $b->getBoard(1); $this->assertNotEmpty($board); $this->assertEquals(2, count($board)); $this->assertEquals(5, count($board[0])); $this->assertTrue(array_key_exists('nb_tasks', $board[0])); $this->assertTrue(array_key_exists('name', $board[0])); $this->assertTrue(array_key_exists('columns', $board[0])); $this->assertTrue(array_key_exists('tasks', $board[0]['columns'][2])); $this->assertTrue(array_key_exists('title', $board[0]['columns'][2])); $task = $tf->getById(1); $this->assertEquals(1, $task['id']); $this->assertEquals(1, $task['column_id']); $this->assertEquals(1, $task['position']); $this->assertEquals(0, $task['swimlane_id']); $this->assertEquals(1, $board[0]['columns'][0]['tasks'][0]['id']); $this->assertEquals(1, $board[0]['columns'][0]['tasks'][0]['column_id']); $this->assertEquals(1, $board[0]['columns'][0]['tasks'][0]['position']); $this->assertEquals(0, $board[0]['columns'][0]['tasks'][0]['swimlane_id']); $task = $tf->getById(2); $this->assertEquals(2, $task['id']); $this->assertEquals(3, $task['column_id']); $this->assertEquals(1, $task['position']); $this->assertEquals(0, $task['swimlane_id']); $this->assertEquals(2, $board[0]['columns'][2]['tasks'][0]['id']); $this->assertEquals(3, $board[0]['columns'][2]['tasks'][0]['column_id']); $this->assertEquals(1, $board[0]['columns'][2]['tasks'][0]['position']); $this->assertEquals(0, $board[0]['columns'][2]['tasks'][0]['swimlane_id']); $task = $tf->getById(3); $this->assertEquals(3, $task['id']); $this->assertEquals(2, $task['column_id']); $this->assertEquals(1, $task['position']); $this->assertEquals(1, $task['swimlane_id']); $this->assertEquals(3, $board[1]['columns'][1]['tasks'][0]['id']); $this->assertEquals(2, $board[1]['columns'][1]['tasks'][0]['column_id']); $this->assertEquals(1, $board[1]['columns'][1]['tasks'][0]['position']); $this->assertEquals(1, $board[1]['columns'][1]['tasks'][0]['swimlane_id']); $task = $tf->getById(4); $this->assertEquals(4, $task['id']); $this->assertEquals(3, $task['column_id']); $this->assertEquals(2, $task['position']); $this->assertEquals(0, $task['swimlane_id']); $this->assertEquals(4, $board[0]['columns'][2]['tasks'][1]['id']); $this->assertEquals(3, $board[0]['columns'][2]['tasks'][1]['column_id']); $this->assertEquals(2, $board[0]['columns'][2]['tasks'][1]['position']); $this->assertEquals(0, $board[0]['columns'][2]['tasks'][1]['swimlane_id']); $task = $tf->getById(5); $this->assertEquals(5, $task['id']); $this->assertEquals(4, $task['column_id']); $this->assertEquals(1, $task['position']); $this->assertEquals(0, $task['swimlane_id']); $this->assertEquals(5, $board[0]['columns'][3]['tasks'][0]['id']); $this->assertEquals(4, $board[0]['columns'][3]['tasks'][0]['column_id']); $this->assertEquals(1, $board[0]['columns'][3]['tasks'][0]['position']); $this->assertEquals(0, $board[0]['columns'][3]['tasks'][0]['swimlane_id']); $task = $tf->getById(6); $this->assertEquals(6, $task['id']); $this->assertEquals(4, $task['column_id']); $this->assertEquals(1, $task['position']); $this->assertEquals(1, $task['swimlane_id']); $this->assertEquals(6, $board[1]['columns'][3]['tasks'][0]['id']); $this->assertEquals(4, $board[1]['columns'][3]['tasks'][0]['column_id']); $this->assertEquals(1, $board[1]['columns'][3]['tasks'][0]['position']); $this->assertEquals(1, $board[1]['columns'][3]['tasks'][0]['swimlane_id']); }
public function testDuplicateRecurringTask() { $td = new TaskDuplication($this->container); $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' => 'test1'))); $this->assertEquals(1, $tc->create(array('title' => 'test', 'project_id' => 1, 'date_due' => 1436561776, 'recurrence_status' => Task::RECURRING_STATUS_PENDING, 'recurrence_trigger' => Task::RECURRING_TRIGGER_CLOSE, 'recurrence_factor' => 2, 'recurrence_timeframe' => Task::RECURRING_TIMEFRAME_DAYS, 'recurrence_basedate' => Task::RECURRING_BASEDATE_TRIGGERDATE))); $this->assertEquals(2, $td->duplicateRecurringTask(1)); $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals(Task::RECURRING_STATUS_PROCESSED, $task['recurrence_status']); $this->assertEquals(2, $task['recurrence_child']); $this->assertEquals(1436561776, $task['date_due'], '', 2); $task = $tf->getById(2); $this->assertNotEmpty($task); $this->assertEquals(Task::RECURRING_STATUS_PENDING, $task['recurrence_status']); $this->assertEquals(Task::RECURRING_TRIGGER_CLOSE, $task['recurrence_trigger']); $this->assertEquals(Task::RECURRING_TIMEFRAME_DAYS, $task['recurrence_timeframe']); $this->assertEquals(Task::RECURRING_BASEDATE_TRIGGERDATE, $task['recurrence_basedate']); $this->assertEquals(1, $task['recurrence_parent']); $this->assertEquals(2, $task['recurrence_factor']); $this->assertEquals(strtotime('+2 days'), $task['date_due'], '', 2); }
public function testMoveAnotherProjectWithForbiddenUser() { $td = new TaskDuplication($this->container); $tc = new TaskCreation($this->container); $tf = new TaskFinder($this->container); $p = new Project($this->container); $pp = new ProjectPermission($this->container); $user = new User($this->container); // We create 2 projects $this->assertEquals(1, $p->create(array('name' => 'test1'))); $this->assertEquals(2, $p->create(array('name' => 'test2'))); // We create a new user for our project $this->assertNotFalse($user->create(array('username' => 'unittest#1', 'password' => 'unittest'))); $this->assertTrue($pp->allowUser(1, 2)); $this->assertTrue($pp->allowUser(2, 2)); $this->assertTrue($pp->isUserAllowed(1, 2)); $this->assertTrue($pp->isUserAllowed(2, 2)); // We create a task $this->assertEquals(1, $tc->create(array('title' => 'test', 'project_id' => 1, 'column_id' => 2, 'owner_id' => 3))); // We move our task to the 2nd project $this->assertTrue($td->moveToProject(1, 2)); // Check the values of the moved task $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals(1, $task['position']); $this->assertEquals(0, $task['owner_id']); $this->assertEquals(2, $task['project_id']); $this->assertEquals(5, $task['column_id']); }
public function testEvents() { $tp = new TaskPosition($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, 'column_id' => 1))); $this->assertEquals(2, $tc->create(array('title' => 'Task #2', 'project_id' => 1, 'column_id' => 2))); // We move the task 1 to the column 2 $this->assertTrue($tp->movePosition(1, 1, 2, 1)); $task = $tf->getById(1); $this->assertEquals(1, $task['id']); $this->assertEquals(2, $task['column_id']); $this->assertEquals(1, $task['position']); $task = $tf->getById(2); $this->assertEquals(2, $task['id']); $this->assertEquals(2, $task['column_id']); $this->assertEquals(2, $task['position']); $this->assertTrue($this->container['event']->isEventTriggered(Task::EVENT_MOVE_COLUMN)); $this->assertFalse($this->container['event']->isEventTriggered(Task::EVENT_MOVE_POSITION)); $event_data = $this->container['event']->getEventData(Task::EVENT_MOVE_COLUMN); $this->assertNotEmpty($event_data); $this->assertEquals(1, $event_data['task_id']); $this->assertEquals(1, $event_data['position']); $this->assertEquals(2, $event_data['column_id']); $this->assertEquals(1, $event_data['project_id']); $this->container['event']->clearTriggeredEvents(); // We move the task 1 to the position 2 $this->assertTrue($tp->movePosition(1, 1, 2, 2)); $task = $tf->getById(1); $this->assertEquals(1, $task['id']); $this->assertEquals(2, $task['column_id']); $this->assertEquals(2, $task['position']); $task = $tf->getById(2); $this->assertEquals(2, $task['id']); $this->assertEquals(2, $task['column_id']); $this->assertEquals(1, $task['position']); $this->assertFalse($this->container['event']->isEventTriggered(Task::EVENT_MOVE_COLUMN)); $this->assertTrue($this->container['event']->isEventTriggered(Task::EVENT_MOVE_POSITION)); $event_data = $this->container['event']->getEventData(Task::EVENT_MOVE_POSITION); $this->assertNotEmpty($event_data); $this->assertEquals(1, $event_data['task_id']); $this->assertEquals(2, $event_data['position']); $this->assertEquals(2, $event_data['column_id']); $this->assertEquals(1, $event_data['project_id']); }
public function testMoveAnotherProjectWithoutSwimlane() { $td = new TaskDuplication($this->container); $tc = new TaskCreation($this->container); $tf = new TaskFinder($this->container); $p = new Project($this->container); $s = new Swimlane($this->container); // We create 2 projects $this->assertEquals(1, $p->create(array('name' => 'test1'))); $this->assertEquals(2, $p->create(array('name' => 'test2'))); $this->assertNotFalse($s->create(1, 'Swimlane #1')); $this->assertNotFalse($s->create(2, 'Swimlane #2')); // We create a task $this->assertEquals(1, $tc->create(array('title' => 'test', 'project_id' => 1, 'column_id' => 2, 'swimlane_id' => 1))); // We move our task to the 2nd project $this->assertTrue($td->moveToProject(1, 2)); // Check the values of the moved task $task = $tf->getById(1); $this->assertNotEmpty($task); $this->assertEquals(0, $task['owner_id']); $this->assertEquals(0, $task['category_id']); $this->assertEquals(0, $task['swimlane_id']); $this->assertEquals(5, $task['column_id']); $this->assertEquals(1, $task['position']); $this->assertEquals(2, $task['project_id']); $this->assertEquals('test', $task['title']); }
public function testEvents() { $tp = new TaskPosition($this->container); $tc = new TaskCreation($this->container); $tf = new TaskFinder($this->container); $p = new Project($this->container); $s = new Swimlane($this->container); $this->assertEquals(1, $p->create(array('name' => 'Project #1'))); $this->assertEquals(1, $s->create(1, 'test 1')); $this->assertEquals(1, $tc->create(array('title' => 'Task #1', 'project_id' => 1, 'column_id' => 1))); $this->assertEquals(2, $tc->create(array('title' => 'Task #2', 'project_id' => 1, 'column_id' => 2))); $this->container['dispatcher']->addListener(Task::EVENT_MOVE_COLUMN, array($this, 'onMoveColumn')); $this->container['dispatcher']->addListener(Task::EVENT_MOVE_POSITION, array($this, 'onMovePosition')); $this->container['dispatcher']->addListener(Task::EVENT_MOVE_SWIMLANE, array($this, 'onMoveSwimlane')); // We move the task 1 to the column 2 $this->assertTrue($tp->movePosition(1, 1, 2, 1)); $task = $tf->getById(1); $this->assertEquals(1, $task['id']); $this->assertEquals(2, $task['column_id']); $this->assertEquals(1, $task['position']); $task = $tf->getById(2); $this->assertEquals(2, $task['id']); $this->assertEquals(2, $task['column_id']); $this->assertEquals(2, $task['position']); $called = $this->container['dispatcher']->getCalledListeners(); $this->assertArrayHasKey(Task::EVENT_MOVE_COLUMN . '.TaskPositionTest::onMoveColumn', $called); $this->assertEquals(1, count($called)); // We move the task 1 to the position 2 $this->assertTrue($tp->movePosition(1, 1, 2, 2)); $task = $tf->getById(1); $this->assertEquals(1, $task['id']); $this->assertEquals(2, $task['column_id']); $this->assertEquals(2, $task['position']); $task = $tf->getById(2); $this->assertEquals(2, $task['id']); $this->assertEquals(2, $task['column_id']); $this->assertEquals(1, $task['position']); $called = $this->container['dispatcher']->getCalledListeners(); $this->assertArrayHasKey(Task::EVENT_MOVE_POSITION . '.TaskPositionTest::onMovePosition', $called); $this->assertEquals(2, count($called)); // Move to another swimlane $this->assertTrue($tp->movePosition(1, 1, 3, 1, 1)); $task = $tf->getById(1); $this->assertEquals(1, $task['id']); $this->assertEquals(3, $task['column_id']); $this->assertEquals(1, $task['position']); $this->assertEquals(1, $task['swimlane_id']); $task = $tf->getById(2); $this->assertEquals(2, $task['id']); $this->assertEquals(2, $task['column_id']); $this->assertEquals(1, $task['position']); $this->assertEquals(0, $task['swimlane_id']); $called = $this->container['dispatcher']->getCalledListeners(); $this->assertArrayHasKey(Task::EVENT_MOVE_SWIMLANE . '.TaskPositionTest::onMoveSwimlane', $called); $this->assertEquals(3, count($called)); }