|
|
<?php |
|
|
|
|
|
require_once __DIR__.'/BaseProcedureTest.php'; |
|
|
|
|
|
class ProcedureAuthorizationTest extends BaseProcedureTest |
|
|
{ |
|
|
public function testApiCredentialDoNotHaveAccessToUserCredentialProcedure() |
|
|
{ |
|
|
$this->expectException('JsonRPC\Exception\AccessDeniedException'); |
|
|
$this->app->getMe(); |
|
|
} |
|
|
|
|
|
public function testUserCredentialDoNotHaveAccessToAdminProcedures() |
|
|
{ |
|
|
$this->expectException('JsonRPC\Exception\AccessDeniedException'); |
|
|
$this->user->getUser(1); |
|
|
} |
|
|
|
|
|
public function testManagerCredentialDoNotHaveAccessToAdminProcedures() |
|
|
{ |
|
|
$this->expectException('JsonRPC\Exception\AccessDeniedException'); |
|
|
$this->user->getAllProjects(); |
|
|
} |
|
|
|
|
|
public function testUserCredentialDoNotHaveAccessToManagerProcedures() |
|
|
{ |
|
|
$this->expectException('JsonRPC\Exception\AccessDeniedException'); |
|
|
$this->user->createProject('Team project creation are only for app managers'); |
|
|
} |
|
|
|
|
|
public function testAppManagerCanCreateTeamProject() |
|
|
{ |
|
|
$this->assertNotFalse($this->manager->createProject('Team project created by app manager')); |
|
|
} |
|
|
|
|
|
public function testAdminManagerCanCreateTeamProject() |
|
|
{ |
|
|
$projectId = $this->admin->createProject('Team project created by admin'); |
|
|
$this->assertNotFalse($projectId); |
|
|
|
|
|
$this->expectException('JsonRPC\Exception\AccessDeniedException'); |
|
|
$this->assertNotNull($this->manager->getProjectById($projectId)); |
|
|
} |
|
|
|
|
|
public function testProjectManagerCanUpdateHisProject() |
|
|
{ |
|
|
$projectId = $this->manager->createProject(array( |
|
|
'name' => 'Team project can be updated', |
|
|
'owner_id' => $this->managerUserId, |
|
|
)); |
|
|
|
|
|
$this->assertNotFalse($projectId); |
|
|
$this->assertEquals('project-manager', $this->app->getProjectUserRole($projectId, $this->managerUserId)); |
|
|
$this->assertNotNull($this->manager->getProjectById($projectId)); |
|
|
|
|
|
$this->assertTrue($this->manager->updateProject($projectId, 'My team project have been updated')); |
|
|
} |
|
|
|
|
|
public function testProjectAuthorizationForbidden() |
|
|
{ |
|
|
$projectId = $this->manager->createProject('A team project without members'); |
|
|
$this->assertNotFalse($projectId); |
|
|
|
|
|
$this->expectException('JsonRPC\Exception\AccessDeniedException'); |
|
|
$this->user->getProjectById($projectId); |
|
|
} |
|
|
|
|
|
public function testProjectAuthorizationGranted() |
|
|
{ |
|
|
$projectId = $this->manager->createProject(array( |
|
|
'name' => 'A team project with members', |
|
|
'owner_id' => $this->managerUserId, |
|
|
)); |
|
|
|
|
|
$this->assertNotFalse($projectId); |
|
|
|
|
|
$this->assertTrue($this->manager->addProjectUser($projectId, $this->userUserId)); |
|
|
$this->assertNotNull($this->user->getProjectById($projectId)); |
|
|
} |
|
|
|
|
|
public function testActionAuthorizationForbidden() |
|
|
{ |
|
|
$projectId = $this->manager->createProject(array( |
|
|
'name' => 'Test Project', |
|
|
'owner_id' => $this->managerUserId, |
|
|
)); |
|
|
|
|
|
$this->assertNotFalse($projectId); |
|
|
|
|
|
$actionId = $this->manager->createAction($projectId, 'task.move.column', '\Kanboard\Action\TaskCloseColumn', array('column_id' => 1)); |
|
|
$this->assertNotFalse($actionId); |
|
|
|
|
|
$this->expectException('JsonRPC\Exception\AccessDeniedException'); |
|
|
$this->user->removeAction($projectId); |
|
|
} |
|
|
|
|
|
public function testActionAuthorizationForbiddenBecauseNotProjectManager() |
|
|
{ |
|
|
$projectId = $this->manager->createProject(array( |
|
|
'name' => 'Test Project', |
|
|
'owner_id' => $this->managerUserId, |
|
|
)); |
|
|
|
|
|
$this->assertNotFalse($projectId); |
|
|
|
|
|
$actionId = $this->manager->createAction($projectId, 'task.move.column', '\Kanboard\Action\TaskCloseColumn', array('column_id' => 1)); |
|
|
$this->assertNotFalse($actionId); |
|
|
|
|
|
$this->assertTrue($this->manager->addProjectUser($projectId, $this->userUserId, 'project-member')); |
|
|
|
|
|
$this->expectException('JsonRPC\Exception\AccessDeniedException'); |
|
|
$this->user->removeAction($actionId); |
|
|
} |
|
|
|
|
|
public function testActionAuthorizationGranted() |
|
|
{ |
|
|
$projectId = $this->manager->createProject(array( |
|
|
'name' => 'Test Project', |
|
|
'owner_id' => $this->managerUserId, |
|
|
)); |
|
|
|
|
|
$this->assertNotFalse($projectId); |
|
|
|
|
|
$actionId = $this->manager->createAction($projectId, 'task.move.column', '\Kanboard\Action\TaskCloseColumn', array('column_id' => 1)); |
|
|
$this->assertNotFalse($actionId); |
|
|
|
|
|
$this->assertTrue($this->manager->addProjectUser($projectId, $this->userUserId, 'project-manager')); |
|
|
$this->assertTrue($this->user->removeAction($actionId)); |
|
|
} |
|
|
|
|
|
public function testCategoryAuthorizationForbidden() |
|
|
{ |
|
|
$projectId = $this->manager->createProject(array( |
|
|
'name' => 'Test Project', |
|
|
'owner_id' => $this->managerUserId, |
|
|
)); |
|
|
|
|
|
$this->assertNotFalse($projectId); |
|
|
|
|
|
$categoryId = $this->manager->createCategory($projectId, 'Test'); |
|
|
$this->assertNotFalse($categoryId); |
|
|
|
|
|
$this->expectException('JsonRPC\Exception\AccessDeniedException'); |
|
|
$this->user->removeCategory($categoryId); |
|
|
} |
|
|
|
|
|
public function testCategoryAuthorizationForbiddenBecauseNotProjectManager() |
|
|
{ |
|
|
$projectId = $this->manager->createProject(array( |
|
|
'name' => 'Test Project', |
|
|
'owner_id' => $this->managerUserId, |
|
|
)); |
|
|
|
|
|
$this->assertNotFalse($projectId); |
|
|
|
|
|
$categoryId = $this->manager->createCategory($projectId, 'Test'); |
|
|
$this->assertNotFalse($categoryId); |
|
|
|
|
|
$this->assertTrue($this->manager->addProjectUser($projectId, $this->userUserId, 'project-member')); |
|
|
$this->expectException('JsonRPC\Exception\AccessDeniedException'); |
|
|
$this->user->removeCategory($categoryId); |
|
|
} |
|
|
|
|
|
public function testCategoryAuthorizationGranted() |
|
|
{ |
|
|
$projectId = $this->manager->createProject(array( |
|
|
'name' => 'Test Project', |
|
|
'owner_id' => $this->managerUserId, |
|
|
)); |
|
|
|
|
|
$this->assertNotFalse($projectId); |
|
|
|
|
|
$categoryId = $this->manager->createCategory($projectId, 'Test'); |
|
|
$this->assertNotFalse($categoryId); |
|
|
|
|
|
$this->assertTrue($this->manager->addProjectUser($projectId, $this->userUserId, 'project-manager')); |
|
|
$this->assertTrue($this->user->removeCategory($categoryId)); |
|
|
} |
|
|
|
|
|
public function testColumnAuthorizationForbidden() |
|
|
{ |
|
|
$projectId = $this->manager->createProject(array( |
|
|
'name' => 'Test Project', |
|
|
'owner_id' => $this->managerUserId, |
|
|
)); |
|
|
|
|
|
$this->assertNotFalse($projectId); |
|
|
|
|
|
$columnId = $this->manager->addColumn($projectId, 'Test'); |
|
|
$this->assertNotFalse($columnId); |
|
|
|
|
|
$this->expectException('JsonRPC\Exception\AccessDeniedException'); |
|
|
$this->user->removeColumn($columnId); |
|
|
} |
|
|
|
|
|
public function testColumnAuthorizationForbiddenBecauseNotProjectManager() |
|
|
{ |
|
|
$projectId = $this->manager->createProject(array( |
|
|
'name' => 'Test Project', |
|
|
'owner_id' => $this->managerUserId, |
|
|
)); |
|
|
|
|
|
$this->assertNotFalse($projectId); |
|
|
|
|
|
$columnId = $this->manager->addColumn($projectId, 'Test'); |
|
|
$this->assertNotFalse($columnId); |
|
|
|
|
|
$this->assertTrue($this->manager->addProjectUser($projectId, $this->userUserId, 'project-member')); |
|
|
$this->expectException('JsonRPC\Exception\AccessDeniedException'); |
|
|
$this->user->removeColumn($columnId); |
|
|
} |
|
|
|
|
|
public function testColumnAuthorizationGranted() |
|
|
{ |
|
|
$projectId = $this->manager->createProject(array( |
|
|
'name' => 'Test Project', |
|
|
'owner_id' => $this->managerUserId, |
|
|
)); |
|
|
|
|
|
$this->assertNotFalse($projectId); |
|
|
|
|
|
$columnId = $this->manager->addColumn($projectId, 'Test'); |
|
|
$this->assertNotFalse($columnId); |
|
|
|
|
|
$this->assertTrue($this->manager->addProjectUser($projectId, $this->userUserId, 'project-manager')); |
|
|
$this->assertTrue($this->user->removeColumn($columnId)); |
|
|
} |
|
|
|
|
|
public function testCommentAuthorizationForbidden() |
|
|
{ |
|
|
$projectId = $this->manager->createProject(array( |
|
|
'name' => 'Test Project', |
|
|
'owner_id' => $this->managerUserId, |
|
|
)); |
|
|
|
|
|
$this->assertNotFalse($projectId); |
|
|
$this->assertTrue($this->manager->addProjectUser($projectId, $this->userUserId, 'project-viewer')); |
|
|
|
|
|
$taskId = $this->manager->createTask('My Task', $projectId); |
|
|
$this->assertNotFalse($taskId); |
|
|
|
|
|
$commentId = $this->manager->createComment($taskId, $this->userUserId, 'My comment'); |
|
|
$this->assertNotFalse($commentId); |
|
|
|
|
|
$this->expectException('JsonRPC\Exception\AccessDeniedException'); |
|
|
$this->user->updateComment($commentId, 'something else'); |
|
|
} |
|
|
|
|
|
public function testCommentAuthorizationGranted() |
|
|
{ |
|
|
$projectId = $this->manager->createProject(array( |
|
|
'name' => 'Test Project', |
|
|
'owner_id' => $this->managerUserId, |
|
|
)); |
|
|
|
|
|
$this->assertNotFalse($projectId); |
|
|
$this->assertTrue($this->manager->addProjectUser($projectId, $this->userUserId, 'project-member')); |
|
|
|
|
|
$taskId = $this->user->createTask('My Task', $projectId); |
|
|
$this->assertNotFalse($taskId); |
|
|
|
|
|
$commentId = $this->user->createComment($taskId, $this->userUserId, 'My comment'); |
|
|
$this->assertNotFalse($commentId); |
|
|
|
|
|
$this->assertTrue($this->user->updateComment($commentId, 'something else')); |
|
|
} |
|
|
|
|
|
public function testSubtaskAuthorizationForbidden() |
|
|
{ |
|
|
$projectId = $this->manager->createProject(array( |
|
|
'name' => 'Test Project', |
|
|
'owner_id' => $this->managerUserId, |
|
|
)); |
|
|
|
|
|
$this->assertNotFalse($projectId); |
|
|
$this->assertTrue($this->manager->addProjectUser($projectId, $this->userUserId, 'project-viewer')); |
|
|
|
|
|
$taskId = $this->manager->createTask('My Task', $projectId); |
|
|
$this->assertNotFalse($taskId); |
|
|
|
|
|
$subtaskId = $this->manager->createSubtask($taskId, 'My subtask'); |
|
|
$this->assertNotFalse($subtaskId); |
|
|
|
|
|
$this->expectException('JsonRPC\Exception\AccessDeniedException'); |
|
|
$this->user->removeSubtask($subtaskId); |
|
|
} |
|
|
|
|
|
public function testSubtaskAuthorizationGranted() |
|
|
{ |
|
|
$projectId = $this->manager->createProject(array( |
|
|
'name' => 'Test Project', |
|
|
'owner_id' => $this->managerUserId, |
|
|
)); |
|
|
|
|
|
$this->assertNotFalse($projectId); |
|
|
$this->assertTrue($this->manager->addProjectUser($projectId, $this->userUserId, 'project-member')); |
|
|
|
|
|
$taskId = $this->user->createTask('My Task', $projectId); |
|
|
$this->assertNotFalse($taskId); |
|
|
|
|
|
$subtaskId = $this->manager->createSubtask($taskId, 'My subtask'); |
|
|
$this->assertNotFalse($subtaskId); |
|
|
|
|
|
$this->assertTrue($this->user->removeSubtask($subtaskId)); |
|
|
} |
|
|
} |
|
|
|