diff --git a/app/Entities/Projects/Task.php b/app/Entities/Projects/Task.php index 4b209cd..c9167bf 100755 --- a/app/Entities/Projects/Task.php +++ b/app/Entities/Projects/Task.php @@ -14,6 +14,7 @@ class Task extends Model protected $dispatchesEvents = [ 'created' => 'App\Events\Tasks\Created', 'updated' => 'App\Events\Tasks\Updated', + 'deleted' => 'App\Events\Tasks\Deleted', ]; protected $guarded = ['id', 'created_at', 'updated_at']; diff --git a/app/Events/Tasks/Deleted.php b/app/Events/Tasks/Deleted.php new file mode 100644 index 0000000..a7b613e --- /dev/null +++ b/app/Events/Tasks/Deleted.php @@ -0,0 +1,15 @@ +task = $task; + } +} diff --git a/app/Listeners/Jobs/LogJobTaskDeletionActivity.php b/app/Listeners/Jobs/LogJobTaskDeletionActivity.php new file mode 100644 index 0000000..d1684bf --- /dev/null +++ b/app/Listeners/Jobs/LogJobTaskDeletionActivity.php @@ -0,0 +1,30 @@ +task; + $jobId = $task->job_id; + + $activityEntry = [ + 'type' => 'task_deleted', + 'parent_id' => null, + 'user_id' => auth()->id(), + 'object_id' => $jobId, + 'object_type' => 'jobs', + 'data' => [ + 'name' => $task->name, + 'description' => $task->description, + 'progress' => $task->progress, + ], + ]; + + Activity::create($activityEntry); + } +} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 0888522..7f0ce06 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -34,6 +34,9 @@ class EventServiceProvider extends ServiceProvider 'App\Events\Tasks\Updated' => [ 'App\Listeners\Tasks\LogTaskUpdateActivity', ], + 'App\Events\Tasks\Deleted' => [ + 'App\Listeners\Jobs\LogJobTaskDeletionActivity', + ], ]; /** diff --git a/tests/Unit/Models/ActivityTest.php b/tests/Unit/Models/ActivityTest.php index ed0afc6..7ca2b56 100644 --- a/tests/Unit/Models/ActivityTest.php +++ b/tests/Unit/Models/ActivityTest.php @@ -162,4 +162,27 @@ class ActivityTest extends TestCase ]), ]); } + + /** @test */ + public function it_records_task_deletion_activities() + { + $admin = $this->adminUserSigningIn(); + $project = factory(Project::class)->create(); + $job = factory(Job::class)->create(['project_id' => $project->id]); + $task = factory(Task::class)->create(['job_id' => $job->id]); + $task->delete(); + + $this->seeInDatabase('user_activities', [ + 'type' => 'task_deleted', + 'parent_id' => null, + 'user_id' => $admin->id, + 'object_id' => $job->id, + 'object_type' => 'jobs', + 'data' => json_encode([ + 'name' => $task->name, + 'description' => $task->description, + 'progress' => $task->progress, + ]), + ]); + } }