From 930ef3fd1121bd97b03b0a2a1e4bec745ab26230 Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Wed, 30 Oct 2024 12:22:59 -0700 Subject: [PATCH] Work on tests for activity logging --- app/Models/ReportTemplate.php | 28 ++++ .../ReportTemplateActivityLoggingTest.php | 144 ++++++++++++++++++ 2 files changed, 172 insertions(+) create mode 100644 tests/Unit/Models/ReportTemplates/ReportTemplateActivityLoggingTest.php diff --git a/app/Models/ReportTemplate.php b/app/Models/ReportTemplate.php index 5c371a82df..e22554ace2 100644 --- a/app/Models/ReportTemplate.php +++ b/app/Models/ReportTemplate.php @@ -44,6 +44,34 @@ class ReportTemplate extends Model $builder->where('created_by', auth()->id()); } }); + + static::created(function (ReportTemplate $reportTemplate) { + $logAction = new Actionlog([ + 'item_type' => ReportTemplate::class, + 'item_id' => $reportTemplate->id, + 'created_by' => auth()->id(), + ]); + + $logAction->logaction('created'); + }); + + static::updated(function (ReportTemplate $reportTemplate) { + $changed = []; + + foreach ($reportTemplate->getDirty() as $key => $value) { + $changed[$key] = [ + 'old' => $reportTemplate->getOriginal($key), + 'new' => $reportTemplate->getAttribute($key), + ]; + } + + $logAction = new Actionlog(); + $logAction->item_type = ReportTemplate::class; + $logAction->item_id = $reportTemplate->id; + $logAction->created_by = auth()->id(); + $logAction->log_meta = json_encode($changed); + $logAction->logaction('update'); + }); } /** diff --git a/tests/Unit/Models/ReportTemplates/ReportTemplateActivityLoggingTest.php b/tests/Unit/Models/ReportTemplates/ReportTemplateActivityLoggingTest.php new file mode 100644 index 0000000000..49929a9b07 --- /dev/null +++ b/tests/Unit/Models/ReportTemplates/ReportTemplateActivityLoggingTest.php @@ -0,0 +1,144 @@ +create(); + + $user = User::factory()->create(); + $this->actingAs($user); + $reportTemplateWithActingUser = ReportTemplate::factory()->create(); + + $this->assertDatabaseHas('action_logs', [ + 'created_by' => null, + 'action_type' => 'created', + 'target_id' => null, + 'target_type' => null, + 'item_type' => ReportTemplate::class, + 'item_id' => $reportTemplate->id, + ]); + + $this->assertDatabaseHas('action_logs', [ + 'created_by' => $user->id, + 'action_type' => 'created', + 'target_id' => null, + 'target_type' => null, + 'item_type' => ReportTemplate::class, + 'item_id' => $reportTemplateWithActingUser->id, + ]); + } + + public function testUpdatingReportTemplateIsLogged() + { + $reportTemplate = ReportTemplate::factory()->create([ + 'name' => 'Name A', + 'options' => [ + 'company' => '1', + 'location' => '1', + 'by_company_id' => ['1'], + 'by_location_id' => ['17'], + ], + ]); + + $reportTemplate->update([ + 'name' => 'Another Name', + 'options' => [ + 'company' => '1', + 'by_company_id' => ['1'], + ], + ]); + + $user = User::factory()->create(); + $this->actingAs($user); + $reportTemplateWithActingUser = ReportTemplate::factory()->create([ + 'name' => 'Name B', + 'options' => [ + 'company' => '1', + 'location' => '1', + 'by_company_id' => ['1'], + 'by_location_id' => ['17'], + ], + ]); + $reportTemplateWithActingUser->update([ + 'name' => 'Something Else', + 'options' => [ + 'company' => '1', + 'by_company_id' => ['1'], + ], + ]); + + $this->assertDatabaseHas('action_logs', [ + 'created_by' => null, + 'action_type' => 'update', + 'target_id' => null, + 'target_type' => null, + 'item_type' => ReportTemplate::class, + 'item_id' => $reportTemplate->id, + 'log_meta' => json_encode([ + 'name' => [ + 'old' => 'Name A', + 'new' => 'Another Name' + ], + 'options' => [ + 'old' => [ + 'company' => '1', + 'location' => '1', + 'by_company_id' => ['1'], + 'by_location_id' => ['17'], + ], + 'new' => [ + 'company' => '1', + 'by_company_id' => ['1'], + ], + ], + ]), + ]); + + $this->assertDatabaseHas('action_logs', [ + 'created_by' => $user->id, + 'action_type' => 'update', + 'target_id' => null, + 'target_type' => null, + 'item_type' => ReportTemplate::class, + 'item_id' => $reportTemplateWithActingUser->id, + 'log_meta' => json_encode([ + 'name' => [ + 'old' => 'Name B', + 'new' => 'Something Else' + ], + 'options' => [ + 'old' => [ + 'company' => '1', + 'location' => '1', + 'by_company_id' => ['1'], + 'by_location_id' => ['17'], + ], + 'new' => [ + 'company' => '1', + 'by_company_id' => ['1'], + ], + ], + ]), + ]); + } + + public function testDeletingReportTemplateIsLogged() + { + $this->markTestIncomplete(); + } + + public function testLogsScopedProperly() + { + $this->markTestIncomplete(); + } +}