From 0eb87d3ccc6069aff23cedfcb687eac8f6bc13ae Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sat, 6 Mar 2021 21:51:04 +0800 Subject: [PATCH] Add project creation activity log --- app/Entities/Projects/Project.php | 1 + app/Events/Projects/Created.php | 15 +++++++++++++ app/Events/Projects/Updated.php | 5 ----- .../Projects/LogProjectCreationActivity.php | 24 ++++++++++++++++++++ .../Projects/LogProjectUpdateActivity.php | 3 --- app/Providers/EventServiceProvider.php | 3 +++ tests/Unit/Models/ActivityTest.php | 26 ++++++++++++++++------ 7 files changed, 62 insertions(+), 15 deletions(-) create mode 100644 app/Events/Projects/Created.php create mode 100644 app/Listeners/Projects/LogProjectCreationActivity.php diff --git a/app/Entities/Projects/Project.php b/app/Entities/Projects/Project.php index fee1dd3..47b56e8 100755 --- a/app/Entities/Projects/Project.php +++ b/app/Entities/Projects/Project.php @@ -24,6 +24,7 @@ class Project extends Model * @var array */ protected $dispatchesEvents = [ + 'created' => 'App\Events\Projects\Created', 'updated' => 'App\Events\Projects\Updated', ]; diff --git a/app/Events/Projects/Created.php b/app/Events/Projects/Created.php new file mode 100644 index 0000000..aa78dd6 --- /dev/null +++ b/app/Events/Projects/Created.php @@ -0,0 +1,15 @@ +project = $project; + } +} diff --git a/app/Events/Projects/Updated.php b/app/Events/Projects/Updated.php index c344f38..d634086 100644 --- a/app/Events/Projects/Updated.php +++ b/app/Events/Projects/Updated.php @@ -8,11 +8,6 @@ class Updated { public $project; - /** - * Create a new event instance. - * - * @return void - */ public function __construct(Project $project) { $this->project = $project; diff --git a/app/Listeners/Projects/LogProjectCreationActivity.php b/app/Listeners/Projects/LogProjectCreationActivity.php new file mode 100644 index 0000000..a7d8455 --- /dev/null +++ b/app/Listeners/Projects/LogProjectCreationActivity.php @@ -0,0 +1,24 @@ +project; + + $activityEntry = [ + 'type' => 'project_created', + 'parent_id' => null, + 'user_id' => auth()->id(), + 'object_id' => $project->id, + 'object_type' => 'projects', + ]; + + Activity::create($activityEntry); + } +} diff --git a/app/Listeners/Projects/LogProjectUpdateActivity.php b/app/Listeners/Projects/LogProjectUpdateActivity.php index 6c5e681..af5b61a 100644 --- a/app/Listeners/Projects/LogProjectUpdateActivity.php +++ b/app/Listeners/Projects/LogProjectUpdateActivity.php @@ -15,13 +15,10 @@ class LogProjectUpdateActivity */ public function handle(Updated $event) { - // dd($event->project->fresh()->toArray(), $event->project->getOriginal(), $event->project->getDirty()); $project = $event->project; - // dd($project->getOriginal(), $project->getChanges()); $originalProject = $project->getOriginal(); $attributeChanges = $project->getChanges(); $attributeKeys = array_keys($project->getChanges()); - // dd($attributeChanges, $attributeKeys); $activityEntry = [ 'type' => 'project_updated', diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 71878ea..3d3a65a 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -13,6 +13,9 @@ class EventServiceProvider extends ServiceProvider * @var array */ protected $listen = [ + 'App\Events\Projects\Created' => [ + 'App\Listeners\Projects\LogProjectCreationActivity', + ], 'App\Events\Projects\Updated' => [ 'App\Listeners\Projects\LogProjectUpdateActivity', ], diff --git a/tests/Unit/Models/ActivityTest.php b/tests/Unit/Models/ActivityTest.php index ed98b98..a2254a4 100644 --- a/tests/Unit/Models/ActivityTest.php +++ b/tests/Unit/Models/ActivityTest.php @@ -11,7 +11,23 @@ class ActivityTest extends TestCase use RefreshDatabase; /** @test */ - public function it_records_project_data_update() + public function it_creates_project_creation_activities() + { + $admin = $this->adminUserSigningIn(); + $project = factory(Project::class)->create(['name' => 'New Project']); + + $this->seeInDatabase('user_activities', [ + 'type' => 'project_created', + 'parent_id' => null, + 'user_id' => $admin->id, + 'object_id' => $project->id, + 'object_type' => 'projects', + 'data' => null, + ]); + } + + /** @test */ + public function it_records_project_data_update_activities() { $admin = $this->adminUserSigningIn(); $project = factory(Project::class)->create(['name' => 'New Project']); @@ -26,12 +42,8 @@ class ActivityTest extends TestCase 'object_id' => $project->id, 'object_type' => 'projects', 'data' => json_encode([ - 'before' => [ - 'name' => 'New Project', - ], - 'after' => [ - 'name' => 'Updated project', - ], + 'before' => ['name' => 'New Project'], + 'after' => ['name' => 'Updated project'], 'notes' => null, ]), ]);