| | <?php |
| |
|
| | require_once __DIR__.'/../../Base.php'; |
| |
|
| | use Kanboard\Core\Action\ActionManager; |
| | use Kanboard\Action\TaskAssignColorColumn; |
| | use Kanboard\Action\TaskClose; |
| | use Kanboard\Action\TaskCloseColumn; |
| | use Kanboard\Action\TaskUpdateStartDate; |
| | use Kanboard\Model\ActionModel; |
| | use Kanboard\Model\TaskModel; |
| | use Kanboard\Model\ProjectModel; |
| | use Kanboard\Model\ProjectUserRoleModel; |
| | use Kanboard\Core\Security\Role; |
| |
|
| | class ActionManagerTest extends Base |
| | { |
| | public function testRegister() |
| | { |
| | $actionManager = new ActionManager($this->container); |
| | $actionTaskClose = new TaskClose($this->container); |
| |
|
| | $actionManager->register($actionTaskClose); |
| | $this->assertInstanceOf(get_class($actionTaskClose), $actionManager->getAction($actionTaskClose->getName())); |
| | } |
| |
|
| | public function testGetActionNotFound() |
| | { |
| | $this->expectException('RuntimeException', 'Automatic Action Not Found: foobar'); |
| | $actionManager = new ActionManager($this->container); |
| | $actionManager->getAction('foobar'); |
| | } |
| |
|
| | public function testGetAvailableActions() |
| | { |
| | $actionManager = new ActionManager($this->container); |
| | $actionTaskClose1 = new TaskCloseColumn($this->container); |
| | $actionTaskClose2 = new TaskCloseColumn($this->container); |
| | $actionTaskUpdateStartDate = new TaskUpdateStartDate($this->container); |
| |
|
| | $actionManager |
| | ->register($actionTaskClose1) |
| | ->register($actionTaskClose2) |
| | ->register($actionTaskUpdateStartDate); |
| |
|
| | $actions = $actionManager->getAvailableActions(); |
| | $this->assertCount(2, $actions); |
| | $this->assertArrayHasKey($actionTaskClose1->getName(), $actions); |
| | $this->assertArrayHasKey($actionTaskUpdateStartDate->getName(), $actions); |
| | $this->assertNotEmpty($actions[$actionTaskClose1->getName()]); |
| | $this->assertNotEmpty($actions[$actionTaskUpdateStartDate->getName()]); |
| | } |
| |
|
| | public function testGetAvailableParameters() |
| | { |
| | $actionManager = new ActionManager($this->container); |
| |
|
| | $actionManager |
| | ->register(new TaskCloseColumn($this->container)) |
| | ->register(new TaskUpdateStartDate($this->container)); |
| |
|
| | $params = $actionManager->getAvailableParameters(array( |
| | array('action_name' => '\Kanboard\Action\TaskCloseColumn'), |
| | array('action_name' => '\Kanboard\Action\TaskUpdateStartDate'), |
| | )); |
| |
|
| | $this->assertCount(2, $params); |
| | $this->assertArrayHasKey('column_id', $params['\Kanboard\Action\TaskCloseColumn']); |
| | $this->assertArrayHasKey('column_id', $params['\Kanboard\Action\TaskUpdateStartDate']); |
| | $this->assertNotEmpty($params['\Kanboard\Action\TaskCloseColumn']['column_id']); |
| | $this->assertNotEmpty($params['\Kanboard\Action\TaskUpdateStartDate']['column_id']); |
| | } |
| |
|
| | public function testGetCompatibleEvents() |
| | { |
| | $actionTaskAssignColorColumn = new TaskAssignColorColumn($this->container); |
| | $actionManager = new ActionManager($this->container); |
| | $actionManager->register($actionTaskAssignColorColumn); |
| |
|
| | $events = $actionManager->getCompatibleEvents('\\'.get_class($actionTaskAssignColorColumn)); |
| | $this->assertCount(2, $events); |
| | $this->assertArrayHasKey(TaskModel::EVENT_CREATE, $events); |
| | $this->assertArrayHasKey(TaskModel::EVENT_MOVE_COLUMN, $events); |
| | $this->assertNotEmpty($events[TaskModel::EVENT_CREATE]); |
| | $this->assertNotEmpty($events[TaskModel::EVENT_MOVE_COLUMN]); |
| | } |
| |
|
| | public function testAttachEventsWithoutUserSession() |
| | { |
| | $projectModel = new ProjectModel($this->container); |
| | $actionModel = new ActionModel($this->container); |
| | $actionTaskAssignColorColumn = new TaskAssignColorColumn($this->container); |
| | $actionManager = new ActionManager($this->container); |
| | $actionManager->register($actionTaskAssignColorColumn); |
| |
|
| | $actions = $actionManager->getAvailableActions(); |
| |
|
| | $actionManager->attachEvents(); |
| | $this->assertEmpty($this->dispatcher->getListeners()); |
| |
|
| | $this->assertEquals(1, $projectModel->create(array('name' =>'test'))); |
| | $this->assertEquals(1, $actionModel->create(array( |
| | 'project_id' => 1, |
| | 'event_name' => TaskModel::EVENT_CREATE, |
| | 'action_name' => key($actions), |
| | 'params' => array('column_id' => 1, 'color_id' => 'red'), |
| | ))); |
| |
|
| | $actionManager->attachEvents(); |
| | $listeners = $this->dispatcher->getListeners(TaskModel::EVENT_CREATE); |
| | $this->assertCount(1, $listeners); |
| | $this->assertInstanceOf(get_class($actionTaskAssignColorColumn), $listeners[0][0]); |
| |
|
| | $this->assertEquals(1, $listeners[0][0]->getProjectId()); |
| | } |
| |
|
| | public function testAttachEventsWithLoggedUser() |
| | { |
| | $_SESSION['user'] = array('id' => 1); |
| |
|
| | $projectModel = new ProjectModel($this->container); |
| | $projectUserRoleModel = new ProjectUserRoleModel($this->container); |
| | $actionModel = new ActionModel($this->container); |
| | $actionTaskAssignColorColumn = new TaskAssignColorColumn($this->container); |
| | $actionManager = new ActionManager($this->container); |
| | $actionManager->register($actionTaskAssignColorColumn); |
| |
|
| | $actions = $actionManager->getAvailableActions(); |
| |
|
| | $this->assertEquals(1, $projectModel->create(array('name' =>'test1'))); |
| | $this->assertEquals(2, $projectModel->create(array('name' =>'test2'))); |
| |
|
| | $this->assertTrue($projectUserRoleModel->addUser(2, 1, Role::PROJECT_MEMBER)); |
| |
|
| | $this->assertEquals(1, $actionModel->create(array( |
| | 'project_id' => 1, |
| | 'event_name' => TaskModel::EVENT_CREATE, |
| | 'action_name' => key($actions), |
| | 'params' => array('column_id' => 1, 'color_id' => 'red'), |
| | ))); |
| |
|
| | $this->assertEquals(2, $actionModel->create(array( |
| | 'project_id' => 2, |
| | 'event_name' => TaskModel::EVENT_MOVE_COLUMN, |
| | 'action_name' => key($actions), |
| | 'params' => array('column_id' => 1, 'color_id' => 'red'), |
| | ))); |
| |
|
| | $actionManager->attachEvents(); |
| |
|
| | $listeners = $this->dispatcher->getListeners(TaskModel::EVENT_MOVE_COLUMN); |
| | $this->assertCount(1, $listeners); |
| | $this->assertInstanceOf(get_class($actionTaskAssignColorColumn), $listeners[0][0]); |
| |
|
| | $this->assertEquals(2, $listeners[0][0]->getProjectId()); |
| | } |
| |
|
| | public function testThatEachListenerAreDifferentInstance() |
| | { |
| | $projectModel = new ProjectModel($this->container); |
| | $actionModel = new ActionModel($this->container); |
| | $actionTaskAssignColorColumn = new TaskAssignColorColumn($this->container); |
| | $actionManager = new ActionManager($this->container); |
| | $actionManager->register($actionTaskAssignColorColumn); |
| |
|
| | $this->assertEquals(1, $projectModel->create(array('name' =>'test1'))); |
| | $actions = $actionManager->getAvailableActions(); |
| |
|
| | $this->assertEquals(1, $actionModel->create(array( |
| | 'project_id' => 1, |
| | 'event_name' => TaskModel::EVENT_MOVE_COLUMN, |
| | 'action_name' => key($actions), |
| | 'params' => array('column_id' => 2, 'color_id' => 'green'), |
| | ))); |
| |
|
| | $this->assertEquals(2, $actionModel->create(array( |
| | 'project_id' => 1, |
| | 'event_name' => TaskModel::EVENT_MOVE_COLUMN, |
| | 'action_name' => key($actions), |
| | 'params' => array('column_id' => 1, 'color_id' => 'red'), |
| | ))); |
| |
|
| | $actionManager->attachEvents(); |
| |
|
| | $listeners = $this->dispatcher->getListeners(TaskModel::EVENT_MOVE_COLUMN); |
| | $this->assertCount(2, $listeners); |
| | $this->assertFalse($listeners[0][0] === $listeners[1][0]); |
| |
|
| | $this->assertEquals(2, $listeners[0][0]->getParam('column_id')); |
| | $this->assertEquals('green', $listeners[0][0]->getParam('color_id')); |
| |
|
| | $this->assertEquals(1, $listeners[1][0]->getParam('column_id')); |
| | $this->assertEquals('red', $listeners[1][0]->getParam('color_id')); |
| | } |
| |
|
| | public function testRemoveEvents() |
| | { |
| | $projectModel = new ProjectModel($this->container); |
| | $actionModel = new ActionModel($this->container); |
| | $actionTaskAssignColorColumn = new TaskAssignColorColumn($this->container); |
| | $actionManager = new ActionManager($this->container); |
| | $actionManager->register($actionTaskAssignColorColumn); |
| |
|
| | $actions = $actionManager->getAvailableActions(); |
| |
|
| | $this->assertEquals(1, $projectModel->create(array('name' =>'test'))); |
| | $this->assertEquals(1, $actionModel->create(array( |
| | 'project_id' => 1, |
| | 'event_name' => TaskModel::EVENT_CREATE, |
| | 'action_name' => key($actions), |
| | 'params' => array('column_id' => 1, 'color_id' => 'red'), |
| | ))); |
| |
|
| | $actionManager->attachEvents(); |
| | $this->dispatcher->addListener(TaskModel::EVENT_CREATE, function () {}); |
| |
|
| | $listeners = $this->dispatcher->getListeners(TaskModel::EVENT_CREATE); |
| | $this->assertCount(2, $listeners); |
| |
|
| | $actionManager->removeEvents(); |
| |
|
| | $listeners = $this->dispatcher->getListeners(TaskModel::EVENT_CREATE); |
| | $this->assertCount(1, $listeners); |
| | $this->assertNotInstanceOf(get_class($actionTaskAssignColorColumn), $listeners[0]); |
| | } |
| | } |
| |
|