createUser('admin'); $this->assertTrue($admin->can('create', new Job())); } /** @test */ public function a_worker_cannot_create_job_on_a_project() { $worker = $this->createUser('worker'); $this->assertFalse($worker->can('create', new Job())); } /** @test */ public function an_admin_can_view_job_on_a_project() { $admin = $this->createUser('admin'); $job = factory(Job::class)->create(); $this->assertTrue($admin->can('view', $job)); } /** @test */ public function a_worker_only_can_view_jobs_that_has_been_assigned_to_them() { $worker = $this->createUser('worker'); $job = factory(Job::class)->create(); // Worker cannot view the job $this->assertFalse($worker->can('view', $job)); // Assign the job to the worker $job->worker_id = $worker->id; $job->save(); // Worker can view the job $this->assertTrue($worker->can('view', $job)); } /** @test */ public function only_admin_can_update_job() { $admin = $this->createUser('admin'); $worker = $this->createUser('worker'); $job = factory(Job::class)->create(['worker_id' => $worker->id]); $this->assertTrue($admin->can('update', $job)); $this->assertFalse($worker->can('update', $job)); } /** @test */ public function only_admin_can_delete_job() { $admin = $this->createUser('admin'); $worker = $this->createUser('worker'); $job = factory(Job::class)->create(['worker_id' => $worker->id]); $this->assertTrue($admin->can('update', $job)); $this->assertFalse($worker->can('update', $job)); } /** @test */ public function only_admin_can_see_job_pricings() { $admin = $this->createUser('admin'); $worker = $this->createUser('worker'); $job = factory(Job::class)->create(['worker_id' => $worker->id]); $this->assertTrue($admin->can('see-pricings', $job)); $this->assertFalse($worker->can('see-pricings', $job)); } }