diff --git a/app/Policies/Projects/ProjectPolicy.php b/app/Policies/Projects/ProjectPolicy.php index ef4f4f6..a8ec269 100644 --- a/app/Policies/Projects/ProjectPolicy.php +++ b/app/Policies/Projects/ProjectPolicy.php @@ -147,4 +147,31 @@ class ProjectPolicy { return $user->hasRole('admin'); } + + /** + * Determine whether the user can view project comments. + * + * @param \App\Entities\Users\User $user + * @param \App\Entities\Projects\Project $project + * @return bool + */ + public function viewComments(User $user, Project $project) + { + // Admin and project workers can commenting on their project. + return $user->hasRole('admin') + || ($user->hasRole('worker') && $user->projects->contains($project->id)); + } + + /** + * Determine whether the user can add comment to a project. + * + * @param \App\Entities\Users\User $user + * @param \App\Entities\Projects\Project $project + * @return bool + */ + public function commentOn(User $user, Project $project) + { + // Admin and project workers can commenting on their project. + return $this->viewComments($user, $project); + } } diff --git a/tests/Unit/Policies/ProjectPolicyTest.php b/tests/Unit/Policies/ProjectPolicyTest.php index 659ff6f..6d711af 100644 --- a/tests/Unit/Policies/ProjectPolicyTest.php +++ b/tests/Unit/Policies/ProjectPolicyTest.php @@ -141,4 +141,36 @@ class ProjectPolicyTest extends TestCase $this->assertTrue($admin->can('see-pricings', $project)); $this->assertFalse($worker->can('see-pricings', $project)); } + + /** @test */ + public function admin_and_worker_view_project_comment_list() + { + $admin = $this->createUser('admin'); + $worker = $this->createUser('worker'); + + $project = factory(Project::class)->create(); + $job = factory(Job::class)->create([ + 'project_id' => $project->id, + 'worker_id' => $worker->id, + ]); + + $this->assertTrue($admin->can('view-comments', $project)); + $this->assertTrue($worker->can('view-comments', $project)); + } + + /** @test */ + public function admin_and_project_workers_can_add_comment_to_project() + { + $admin = $this->createUser('admin'); + $worker = $this->createUser('worker'); + + $project = factory(Project::class)->create(); + $job = factory(Job::class)->create([ + 'project_id' => $project->id, + 'worker_id' => $worker->id, + ]); + + $this->assertTrue($admin->can('comment-on', $project)); + $this->assertTrue($worker->can('comment-on', $project)); + } }