From 1b95b2983263e94de6368030c414f2acc5b6d1a9 Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Thu, 3 Apr 2025 16:12:13 -0700 Subject: [PATCH] Add tests for deleting asset via ui --- tests/Feature/Assets/Ui/DeleteAssetTest.php | 86 +++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 tests/Feature/Assets/Ui/DeleteAssetTest.php diff --git a/tests/Feature/Assets/Ui/DeleteAssetTest.php b/tests/Feature/Assets/Ui/DeleteAssetTest.php new file mode 100644 index 000000000..a12e9e2cd --- /dev/null +++ b/tests/Feature/Assets/Ui/DeleteAssetTest.php @@ -0,0 +1,86 @@ +actingAs(User::factory()->create()) + ->delete(route('hardware.destroy', Asset::factory()->create())) + ->assertForbidden(); + } + + public function testCanDeleteAsset() + { + $asset = Asset::factory()->create(); + + $this->actingAs(User::factory()->deleteAssets()->create()) + ->delete(route('hardware.destroy', $asset)) + ->assertRedirectToRoute('hardware.index') + ->assertSessionHas('success'); + + $this->assertSoftDeleted($asset); + } + + public function testActionLogEntryMadeWhenAssetDeleted() + { + $actor = User::factory()->deleteAssets()->create(); + + $asset = Asset::factory()->create(); + + $this->actingAs($actor)->delete(route('hardware.destroy', $asset)); + + $this->assertDatabaseHas('action_logs', [ + 'created_by' => $actor->id, + 'action_type' => 'delete', + 'target_id' => null, + 'target_type' => null, + 'item_type' => Asset::class, + 'item_id' => $asset->id, + ]); + } + + public function testAssetIsCheckedInWhenDeleted() + { + Event::fake(); + + $assignedUser = User::factory()->create(); + $asset = Asset::factory()->assignedToUser($assignedUser)->create(); + + $this->assertTrue($assignedUser->assets->contains($asset)); + + $this->actingAs(User::factory()->deleteAssets()->create()) + ->delete(route('hardware.destroy', $asset)); + + $this->assertFalse( + $assignedUser->fresh()->assets->contains($asset), + 'Asset still assigned to user after deletion' + ); + + Event::assertDispatched(CheckoutableCheckedIn::class); + } + + public function testImageIsDeletedWhenAssetDeleted() + { + Storage::fake('public'); + + $asset = Asset::factory()->create(['image' => 'image.jpg']); + + Storage::disk('public')->put('assets/image.jpg', 'content'); + + Storage::disk('public')->assertExists('assets/image.jpg'); + + $this->actingAs(User::factory()->deleteAssets()->create()) + ->delete(route('hardware.destroy', $asset)); + + Storage::disk('public')->assertMissing('assets/image.jpg'); + } +}