From 2afcc1e384a521f38d7f0286c20b9e0b0d59545d Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Wed, 16 Jul 2025 12:25:37 -0700 Subject: [PATCH 01/11] Add basic tests around asset request index --- app/Models/CheckoutRequest.php | 2 ++ database/factories/CheckoutRequestFactory.php | 23 +++++++++++++++ .../Requests/Ui/AssetRequestIndexTest.php | 28 +++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 database/factories/CheckoutRequestFactory.php create mode 100644 tests/Feature/Requests/Ui/AssetRequestIndexTest.php diff --git a/app/Models/CheckoutRequest.php b/app/Models/CheckoutRequest.php index d6a85f2972..42512d8fda 100644 --- a/app/Models/CheckoutRequest.php +++ b/app/Models/CheckoutRequest.php @@ -2,11 +2,13 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class CheckoutRequest extends Model { + use HasFactory; use SoftDeletes; protected $fillable = ['user_id']; protected $table = 'checkout_requests'; diff --git a/database/factories/CheckoutRequestFactory.php b/database/factories/CheckoutRequestFactory.php new file mode 100644 index 0000000000..41fb285baa --- /dev/null +++ b/database/factories/CheckoutRequestFactory.php @@ -0,0 +1,23 @@ + Asset::factory(), + 'requestable_type' => Asset::class, + 'quantity' => 1, + 'user_id' => User::factory(), + ]; + } +} diff --git a/tests/Feature/Requests/Ui/AssetRequestIndexTest.php b/tests/Feature/Requests/Ui/AssetRequestIndexTest.php new file mode 100644 index 0000000000..474b1c5c26 --- /dev/null +++ b/tests/Feature/Requests/Ui/AssetRequestIndexTest.php @@ -0,0 +1,28 @@ +actingAs(User::factory()->create()) + ->get(route('assets.requested')) + ->assertForbidden(); + } + + public function test_can_view_request_asset_request_index() + { + $checkoutRequest = CheckoutRequest::factory()->create(); + + $this->actingAs(User::factory()->viewAssets()->create()) + ->get(route('assets.requested')) + ->assertOk() + ->assertViewHas('requestedItems') + ->assertSeeText($checkoutRequest->requestedItem->asset_tag); + } +} From a5bea3115465f76679d66c323e4f9db43d329740 Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Wed, 16 Jul 2025 12:38:08 -0700 Subject: [PATCH 02/11] Scaffold tests --- tests/Unit/Models/CheckoutRequestTest.php | 66 +++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 tests/Unit/Models/CheckoutRequestTest.php diff --git a/tests/Unit/Models/CheckoutRequestTest.php b/tests/Unit/Models/CheckoutRequestTest.php new file mode 100644 index 0000000000..4d4d8cbc9b --- /dev/null +++ b/tests/Unit/Models/CheckoutRequestTest.php @@ -0,0 +1,66 @@ +markTestIncomplete(); + + $checkoutRequest = CheckoutRequest::factory()->create(); + + $requestedAsset = $checkoutRequest->requestedItem; + + $this->assertInstanceOf(Asset::class, $requestedAsset); + + $requestedAsset->delete(); + + $this->assertSoftDeleted($checkoutRequest->fresh()); + } + + public function test_checkout_request_deleted_when_requested_asset_force_deleted() + { + $this->markTestIncomplete(); + + $checkoutRequest = CheckoutRequest::factory()->create(); + + $requestedAsset = $checkoutRequest->requestedItem; + + $this->assertInstanceOf(Asset::class, $requestedAsset); + + $requestedAsset->forceDelete(); + + $this->assertDatabaseMissing('checkout_requests', ['id' => $checkoutRequest->id]); + } + + public function test_checkout_request_soft_deleted_when_requesting_user_soft_deleted() + { + $this->markTestIncomplete(); + + $checkoutRequest = CheckoutRequest::factory()->create(); + + $requestingUser = $checkoutRequest->requestingUser; + + $requestingUser->delete(); + + $this->assertSoftDeleted($checkoutRequest->fresh()); + } + + public function test_checkout_request_deleted_when_requesting_user_force_deleted() + { + $this->markTestIncomplete(); + + $checkoutRequest = CheckoutRequest::factory()->create(); + + $requestingUser = $checkoutRequest->requestingUser; + + $requestingUser->forceDelete(); + + $this->assertDatabaseMissing('checkout_requests', ['id' => $checkoutRequest->id]); + } +} From 856ba52f3673e77833ffd4aa8f9ec84797a08bfd Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Wed, 16 Jul 2025 12:43:56 -0700 Subject: [PATCH 03/11] Delete requests when asset is deleted --- app/Models/Asset.php | 11 +++++++++++ tests/Unit/Models/CheckoutRequestTest.php | 4 ---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/app/Models/Asset.php b/app/Models/Asset.php index 0f6becd835..e63108f787 100644 --- a/app/Models/Asset.php +++ b/app/Models/Asset.php @@ -204,6 +204,17 @@ class Asset extends Depreciable 'model.manufacturer' => ['name'], ]; + protected static function booted(): void + { + static::forceDeleted(function (Asset $asset) { + $asset->requests()->forceDelete(); + }); + + static::softDeleted(function (Asset $asset) { + $asset->requests()->delete(); + }); + } + // To properly set the expected checkin as Y-m-d public function setExpectedCheckinAttribute($value) { diff --git a/tests/Unit/Models/CheckoutRequestTest.php b/tests/Unit/Models/CheckoutRequestTest.php index 4d4d8cbc9b..71e1215b3a 100644 --- a/tests/Unit/Models/CheckoutRequestTest.php +++ b/tests/Unit/Models/CheckoutRequestTest.php @@ -10,8 +10,6 @@ class CheckoutRequestTest extends TestCase { public function test_checkout_request_soft_deleted_when_requested_asset_soft_deleted() { - $this->markTestIncomplete(); - $checkoutRequest = CheckoutRequest::factory()->create(); $requestedAsset = $checkoutRequest->requestedItem; @@ -25,8 +23,6 @@ class CheckoutRequestTest extends TestCase public function test_checkout_request_deleted_when_requested_asset_force_deleted() { - $this->markTestIncomplete(); - $checkoutRequest = CheckoutRequest::factory()->create(); $requestedAsset = $checkoutRequest->requestedItem; From c926358e040a3fd3e631fe988c2765911d0199cb Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Wed, 16 Jul 2025 13:11:59 -0700 Subject: [PATCH 04/11] Delete requests when user is deleted --- app/Models/User.php | 11 +++++++++++ tests/Unit/Models/CheckoutRequestTest.php | 6 ++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/app/Models/User.php b/app/Models/User.php index 1cb00cece5..e9a1a28728 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -183,6 +183,17 @@ class User extends SnipeModel implements AuthenticatableContract, AuthorizableCo ); } + protected static function booted(): void + { + static::forceDeleted(function (User $user) { + CheckoutRequest::where(['user_id' => $user->id])->forceDelete(); + }); + + static::softDeleted(function (User $user) { + CheckoutRequest::where(['user_id' => $user->id])->delete(); + }); + } + public function isAvatarExternal() { diff --git a/tests/Unit/Models/CheckoutRequestTest.php b/tests/Unit/Models/CheckoutRequestTest.php index 71e1215b3a..4b06ef38c6 100644 --- a/tests/Unit/Models/CheckoutRequestTest.php +++ b/tests/Unit/Models/CheckoutRequestTest.php @@ -36,11 +36,9 @@ class CheckoutRequestTest extends TestCase public function test_checkout_request_soft_deleted_when_requesting_user_soft_deleted() { - $this->markTestIncomplete(); - $checkoutRequest = CheckoutRequest::factory()->create(); - $requestingUser = $checkoutRequest->requestingUser; + $requestingUser = $checkoutRequest->user; $requestingUser->delete(); @@ -53,7 +51,7 @@ class CheckoutRequestTest extends TestCase $checkoutRequest = CheckoutRequest::factory()->create(); - $requestingUser = $checkoutRequest->requestingUser; + $requestingUser = $checkoutRequest->user; $requestingUser->forceDelete(); From d04b3f0907c99db47beea564ae1a6c06d0a100c3 Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Wed, 16 Jul 2025 13:15:06 -0700 Subject: [PATCH 05/11] Enable test --- tests/Unit/Models/CheckoutRequestTest.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/Unit/Models/CheckoutRequestTest.php b/tests/Unit/Models/CheckoutRequestTest.php index 4b06ef38c6..a01945cac1 100644 --- a/tests/Unit/Models/CheckoutRequestTest.php +++ b/tests/Unit/Models/CheckoutRequestTest.php @@ -47,8 +47,6 @@ class CheckoutRequestTest extends TestCase public function test_checkout_request_deleted_when_requesting_user_force_deleted() { - $this->markTestIncomplete(); - $checkoutRequest = CheckoutRequest::factory()->create(); $requestingUser = $checkoutRequest->user; From 35682d11f0a297133602be78b84f7d7f6484cc5e Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Wed, 16 Jul 2025 14:49:45 -0700 Subject: [PATCH 06/11] Add command to clean checkout requests --- .../Commands/CleanOldCheckoutRequests.php | 74 +++++++++++++++++++ .../Console/CleanOldCheckoutRequestsTest.php | 60 +++++++++++++++ 2 files changed, 134 insertions(+) create mode 100644 app/Console/Commands/CleanOldCheckoutRequests.php create mode 100644 tests/Feature/Console/CleanOldCheckoutRequestsTest.php diff --git a/app/Console/Commands/CleanOldCheckoutRequests.php b/app/Console/Commands/CleanOldCheckoutRequests.php new file mode 100644 index 0000000000..a96a58a349 --- /dev/null +++ b/app/Console/Commands/CleanOldCheckoutRequests.php @@ -0,0 +1,74 @@ + function ($query) { + $query->withTrashed(); + }, + 'requestedItem' => function ($query) { + $query->withTrashed(); + }, + ])->get(); + + $this->info("Processing {$requests->count()} checkout requests"); + + $this->withProgressBar($requests, function ($request) { + if ($this->shouldForceDelete($request)) { + $request->forceDelete(); + $this->deletions++; + return; + } + + if ($this->shouldSoftDelete($request)) { + $request->delete(); + $this->deletions++; + return; + } + + $this->skips++; + }); + + $this->info("Final deletion count: $this->deletions, and skip count: $this->skips"); + + return 0; + } + + private function shouldForceDelete(CheckoutRequest $request) + { + // check if the requestable or user relationship is null + return !$request->requestable || !$request->user; + } + + private function shouldSoftDelete(CheckoutRequest $request) + { + return $request->requestable->trashed() || $request->user->trashed(); + } +} diff --git a/tests/Feature/Console/CleanOldCheckoutRequestsTest.php b/tests/Feature/Console/CleanOldCheckoutRequestsTest.php new file mode 100644 index 0000000000..ce3a62bea4 --- /dev/null +++ b/tests/Feature/Console/CleanOldCheckoutRequestsTest.php @@ -0,0 +1,60 @@ +create(); + + $requestForSoftDeletedAsset = CheckoutRequest::factory()->create(); + $this->assertInstanceOf(Asset::class, $requestForSoftDeletedAsset->requestedItem); + Model::withoutEvents(fn() => $requestForSoftDeletedAsset->requestedItem->delete()); + + $this->artisan('snipeit:clean-old-checkout-requests')->assertExitCode(0); + + $this->assertNotSoftDeleted($validRequest); + $this->assertSoftDeleted($requestForSoftDeletedAsset->fresh()); + } + + public function test_clean_old_checkout_requests_command_for_missing_asset() + { + $validRequest = CheckoutRequest::factory()->create(); + $missingAsset = CheckoutRequest::factory()->create(['requestable_id' => 99999999]); + + $this->artisan('snipeit:clean-old-checkout-requests')->assertExitCode(0); + + $this->assertNotSoftDeleted($validRequest); + $this->assertDatabaseMissing('checkout_requests', ['requestable_id' => $missingAsset->requestable_id]); + } + + public function test_clean_old_checkout_requests_command_for_soft_deleted_user() + { + $validRequest = CheckoutRequest::factory()->create(); + + $requestForSoftDeletedUser = CheckoutRequest::factory()->create(); + Model::withoutEvents(fn() => $requestForSoftDeletedUser->user->delete()); + + $this->artisan('snipeit:clean-old-checkout-requests')->assertExitCode(0); + + $this->assertNotSoftDeleted($validRequest); + $this->assertSoftDeleted($requestForSoftDeletedUser->fresh()); + } + + public function test_clean_old_checkout_requests_command_for_missing_user() + { + $validRequest = CheckoutRequest::factory()->create(); + $missingUser = CheckoutRequest::factory()->create(['user_id' => 99999999]); + + $this->artisan('snipeit:clean-old-checkout-requests')->assertExitCode(0); + + $this->assertNotSoftDeleted($validRequest); + $this->assertDatabaseMissing('checkout_requests', ['user_id' => $missingUser->user_id]); + } +} From dd79c3f2d67875504786906f26777954b303526f Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Wed, 16 Jul 2025 16:47:28 -0700 Subject: [PATCH 07/11] Scaffold tests --- tests/Feature/Console/CleanOldCheckoutRequestsTest.php | 10 ++++++++++ tests/Unit/Models/CheckoutRequestTest.php | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/tests/Feature/Console/CleanOldCheckoutRequestsTest.php b/tests/Feature/Console/CleanOldCheckoutRequestsTest.php index ce3a62bea4..a80abc9d2b 100644 --- a/tests/Feature/Console/CleanOldCheckoutRequestsTest.php +++ b/tests/Feature/Console/CleanOldCheckoutRequestsTest.php @@ -34,6 +34,16 @@ class CleanOldCheckoutRequestsTest extends TestCase $this->assertDatabaseMissing('checkout_requests', ['requestable_id' => $missingAsset->requestable_id]); } + public function test_clean_old_checkout_requests_command_for_soft_deleted_model() + { + $this->markTestIncomplete(); + } + + public function test_clean_old_checkout_requests_command_for_missing_model() + { + $this->markTestIncomplete(); + } + public function test_clean_old_checkout_requests_command_for_soft_deleted_user() { $validRequest = CheckoutRequest::factory()->create(); diff --git a/tests/Unit/Models/CheckoutRequestTest.php b/tests/Unit/Models/CheckoutRequestTest.php index a01945cac1..68461d13d1 100644 --- a/tests/Unit/Models/CheckoutRequestTest.php +++ b/tests/Unit/Models/CheckoutRequestTest.php @@ -34,6 +34,16 @@ class CheckoutRequestTest extends TestCase $this->assertDatabaseMissing('checkout_requests', ['id' => $checkoutRequest->id]); } + public function test_checkout_request_soft_deleted_when_requested_model_soft_deleted() + { + $this->markTestIncomplete(); + } + + public function test_checkout_request_deleted_when_requested_model_force_deleted() + { + $this->markTestIncomplete(); + } + public function test_checkout_request_soft_deleted_when_requesting_user_soft_deleted() { $checkoutRequest = CheckoutRequest::factory()->create(); From 7a456185c6de6ecfacd65fd1dd6d0fff5f5f4d27 Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Wed, 16 Jul 2025 16:57:03 -0700 Subject: [PATCH 08/11] Add explicit state for assets --- database/factories/CheckoutRequestFactory.php | 10 ++++++++++ .../Console/CleanOldCheckoutRequestsTest.php | 17 ++++++++--------- tests/Unit/Models/CheckoutRequestTest.php | 13 ++++--------- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/database/factories/CheckoutRequestFactory.php b/database/factories/CheckoutRequestFactory.php index 41fb285baa..3000db6105 100644 --- a/database/factories/CheckoutRequestFactory.php +++ b/database/factories/CheckoutRequestFactory.php @@ -20,4 +20,14 @@ class CheckoutRequestFactory extends Factory 'user_id' => User::factory(), ]; } + + public function forAsset() + { + return $this->state(function (array $attributes) { + return [ + 'requestable_id' => Asset::factory(), + 'requestable_type' => Asset::class, + ]; + }); + } } diff --git a/tests/Feature/Console/CleanOldCheckoutRequestsTest.php b/tests/Feature/Console/CleanOldCheckoutRequestsTest.php index a80abc9d2b..ccf11bf4a8 100644 --- a/tests/Feature/Console/CleanOldCheckoutRequestsTest.php +++ b/tests/Feature/Console/CleanOldCheckoutRequestsTest.php @@ -11,10 +11,9 @@ class CleanOldCheckoutRequestsTest extends TestCase { public function test_clean_old_checkout_requests_command_for_soft_deleted_asset() { - $validRequest = CheckoutRequest::factory()->create(); + $validRequest = CheckoutRequest::factory()->forAsset()->create(); - $requestForSoftDeletedAsset = CheckoutRequest::factory()->create(); - $this->assertInstanceOf(Asset::class, $requestForSoftDeletedAsset->requestedItem); + $requestForSoftDeletedAsset = CheckoutRequest::factory()->forAsset()->create(); Model::withoutEvents(fn() => $requestForSoftDeletedAsset->requestedItem->delete()); $this->artisan('snipeit:clean-old-checkout-requests')->assertExitCode(0); @@ -25,8 +24,8 @@ class CleanOldCheckoutRequestsTest extends TestCase public function test_clean_old_checkout_requests_command_for_missing_asset() { - $validRequest = CheckoutRequest::factory()->create(); - $missingAsset = CheckoutRequest::factory()->create(['requestable_id' => 99999999]); + $validRequest = CheckoutRequest::factory()->forAsset()->create(); + $missingAsset = CheckoutRequest::factory()->forAsset()->create(['requestable_id' => 99999999]); $this->artisan('snipeit:clean-old-checkout-requests')->assertExitCode(0); @@ -46,9 +45,9 @@ class CleanOldCheckoutRequestsTest extends TestCase public function test_clean_old_checkout_requests_command_for_soft_deleted_user() { - $validRequest = CheckoutRequest::factory()->create(); + $validRequest = CheckoutRequest::factory()->forAsset()->create(); - $requestForSoftDeletedUser = CheckoutRequest::factory()->create(); + $requestForSoftDeletedUser = CheckoutRequest::factory()->forAsset()->create(); Model::withoutEvents(fn() => $requestForSoftDeletedUser->user->delete()); $this->artisan('snipeit:clean-old-checkout-requests')->assertExitCode(0); @@ -59,8 +58,8 @@ class CleanOldCheckoutRequestsTest extends TestCase public function test_clean_old_checkout_requests_command_for_missing_user() { - $validRequest = CheckoutRequest::factory()->create(); - $missingUser = CheckoutRequest::factory()->create(['user_id' => 99999999]); + $validRequest = CheckoutRequest::factory()->forAsset()->create(); + $missingUser = CheckoutRequest::factory()->forAsset()->create(['user_id' => 99999999]); $this->artisan('snipeit:clean-old-checkout-requests')->assertExitCode(0); diff --git a/tests/Unit/Models/CheckoutRequestTest.php b/tests/Unit/Models/CheckoutRequestTest.php index 68461d13d1..55ed5b473f 100644 --- a/tests/Unit/Models/CheckoutRequestTest.php +++ b/tests/Unit/Models/CheckoutRequestTest.php @@ -2,7 +2,6 @@ namespace Tests\Unit\Models; -use App\Models\Asset; use App\Models\CheckoutRequest; use Tests\TestCase; @@ -10,12 +9,10 @@ class CheckoutRequestTest extends TestCase { public function test_checkout_request_soft_deleted_when_requested_asset_soft_deleted() { - $checkoutRequest = CheckoutRequest::factory()->create(); + $checkoutRequest = CheckoutRequest::factory()->forAsset()->create(); $requestedAsset = $checkoutRequest->requestedItem; - $this->assertInstanceOf(Asset::class, $requestedAsset); - $requestedAsset->delete(); $this->assertSoftDeleted($checkoutRequest->fresh()); @@ -23,12 +20,10 @@ class CheckoutRequestTest extends TestCase public function test_checkout_request_deleted_when_requested_asset_force_deleted() { - $checkoutRequest = CheckoutRequest::factory()->create(); + $checkoutRequest = CheckoutRequest::factory()->forAsset()->create(); $requestedAsset = $checkoutRequest->requestedItem; - $this->assertInstanceOf(Asset::class, $requestedAsset); - $requestedAsset->forceDelete(); $this->assertDatabaseMissing('checkout_requests', ['id' => $checkoutRequest->id]); @@ -46,7 +41,7 @@ class CheckoutRequestTest extends TestCase public function test_checkout_request_soft_deleted_when_requesting_user_soft_deleted() { - $checkoutRequest = CheckoutRequest::factory()->create(); + $checkoutRequest = CheckoutRequest::factory()->forAsset()->create(); $requestingUser = $checkoutRequest->user; @@ -57,7 +52,7 @@ class CheckoutRequestTest extends TestCase public function test_checkout_request_deleted_when_requesting_user_force_deleted() { - $checkoutRequest = CheckoutRequest::factory()->create(); + $checkoutRequest = CheckoutRequest::factory()->forAsset()->create(); $requestingUser = $checkoutRequest->user; From 3547fa723cf17b72c20c8d8d9910bca1513ceee1 Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Wed, 16 Jul 2025 17:04:14 -0700 Subject: [PATCH 09/11] Delete requests when asset model is deleted --- app/Models/AssetModel.php | 10 +++++++++- database/factories/CheckoutRequestFactory.php | 11 +++++++++++ .../Console/CleanOldCheckoutRequestsTest.php | 1 - tests/Unit/Models/CheckoutRequestTest.php | 16 ++++++++++++++-- 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/app/Models/AssetModel.php b/app/Models/AssetModel.php index bdb87d4f75..c73e4492ac 100755 --- a/app/Models/AssetModel.php +++ b/app/Models/AssetModel.php @@ -98,8 +98,16 @@ class AssetModel extends SnipeModel 'manufacturer' => ['name'], ]; + protected static function booted(): void + { + static::forceDeleted(function (AssetModel $assetModel) { + $assetModel->requests()->forceDelete(); + }); - + static::softDeleted(function (AssetModel $assetModel) { + $assetModel->requests()->delete(); + }); + } /** * Establishes the model -> assets relationship diff --git a/database/factories/CheckoutRequestFactory.php b/database/factories/CheckoutRequestFactory.php index 3000db6105..5363b5e281 100644 --- a/database/factories/CheckoutRequestFactory.php +++ b/database/factories/CheckoutRequestFactory.php @@ -3,6 +3,7 @@ namespace Database\Factories; use App\Models\Asset; +use App\Models\AssetModel; use App\Models\CheckoutRequest; use App\Models\User; use Illuminate\Database\Eloquent\Factories\Factory; @@ -30,4 +31,14 @@ class CheckoutRequestFactory extends Factory ]; }); } + + public function forAssetModel() + { + return $this->state(function (array $attributes) { + return [ + 'requestable_id' => AssetModel::factory(), + 'requestable_type' => AssetModel::class, + ]; + }); + } } diff --git a/tests/Feature/Console/CleanOldCheckoutRequestsTest.php b/tests/Feature/Console/CleanOldCheckoutRequestsTest.php index ccf11bf4a8..f77a61e021 100644 --- a/tests/Feature/Console/CleanOldCheckoutRequestsTest.php +++ b/tests/Feature/Console/CleanOldCheckoutRequestsTest.php @@ -2,7 +2,6 @@ namespace Tests\Feature\Console; -use App\Models\Asset; use App\Models\CheckoutRequest; use Illuminate\Database\Eloquent\Model; use Tests\TestCase; diff --git a/tests/Unit/Models/CheckoutRequestTest.php b/tests/Unit/Models/CheckoutRequestTest.php index 55ed5b473f..7eceafadfd 100644 --- a/tests/Unit/Models/CheckoutRequestTest.php +++ b/tests/Unit/Models/CheckoutRequestTest.php @@ -31,12 +31,24 @@ class CheckoutRequestTest extends TestCase public function test_checkout_request_soft_deleted_when_requested_model_soft_deleted() { - $this->markTestIncomplete(); + $checkoutRequest = CheckoutRequest::factory()->forAssetModel()->create(); + + $requestedAssetModel = $checkoutRequest->requestedItem; + + $requestedAssetModel->delete(); + + $this->assertSoftDeleted($checkoutRequest->fresh()); } public function test_checkout_request_deleted_when_requested_model_force_deleted() { - $this->markTestIncomplete(); + $checkoutRequest = CheckoutRequest::factory()->forAssetModel()->create(); + + $requestedAsset = $checkoutRequest->requestedItem; + + $requestedAsset->forceDelete(); + + $this->assertDatabaseMissing('checkout_requests', ['id' => $checkoutRequest->id]); } public function test_checkout_request_soft_deleted_when_requesting_user_soft_deleted() From 960edd4adf1d4e854fc3c1c72fc65d851ffc97d5 Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Wed, 16 Jul 2025 17:11:00 -0700 Subject: [PATCH 10/11] Improve clarity --- .../Console/CleanOldCheckoutRequestsTest.php | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/tests/Feature/Console/CleanOldCheckoutRequestsTest.php b/tests/Feature/Console/CleanOldCheckoutRequestsTest.php index f77a61e021..27f4ee4723 100644 --- a/tests/Feature/Console/CleanOldCheckoutRequestsTest.php +++ b/tests/Feature/Console/CleanOldCheckoutRequestsTest.php @@ -8,27 +8,33 @@ use Tests\TestCase; class CleanOldCheckoutRequestsTest extends TestCase { + private CheckoutRequest $validRequest; + + protected function setUp(): void + { + parent::setUp(); + + $this->validRequest = CheckoutRequest::factory()->forAsset()->create(); + } + public function test_clean_old_checkout_requests_command_for_soft_deleted_asset() { - $validRequest = CheckoutRequest::factory()->forAsset()->create(); - $requestForSoftDeletedAsset = CheckoutRequest::factory()->forAsset()->create(); Model::withoutEvents(fn() => $requestForSoftDeletedAsset->requestedItem->delete()); $this->artisan('snipeit:clean-old-checkout-requests')->assertExitCode(0); - $this->assertNotSoftDeleted($validRequest); + $this->assertNotSoftDeleted($this->validRequest); $this->assertSoftDeleted($requestForSoftDeletedAsset->fresh()); } public function test_clean_old_checkout_requests_command_for_missing_asset() { - $validRequest = CheckoutRequest::factory()->forAsset()->create(); $missingAsset = CheckoutRequest::factory()->forAsset()->create(['requestable_id' => 99999999]); $this->artisan('snipeit:clean-old-checkout-requests')->assertExitCode(0); - $this->assertNotSoftDeleted($validRequest); + $this->assertNotSoftDeleted($this->validRequest); $this->assertDatabaseMissing('checkout_requests', ['requestable_id' => $missingAsset->requestable_id]); } @@ -44,25 +50,23 @@ class CleanOldCheckoutRequestsTest extends TestCase public function test_clean_old_checkout_requests_command_for_soft_deleted_user() { - $validRequest = CheckoutRequest::factory()->forAsset()->create(); $requestForSoftDeletedUser = CheckoutRequest::factory()->forAsset()->create(); Model::withoutEvents(fn() => $requestForSoftDeletedUser->user->delete()); $this->artisan('snipeit:clean-old-checkout-requests')->assertExitCode(0); - $this->assertNotSoftDeleted($validRequest); + $this->assertNotSoftDeleted($this->validRequest); $this->assertSoftDeleted($requestForSoftDeletedUser->fresh()); } public function test_clean_old_checkout_requests_command_for_missing_user() { - $validRequest = CheckoutRequest::factory()->forAsset()->create(); $missingUser = CheckoutRequest::factory()->forAsset()->create(['user_id' => 99999999]); $this->artisan('snipeit:clean-old-checkout-requests')->assertExitCode(0); - $this->assertNotSoftDeleted($validRequest); + $this->assertNotSoftDeleted($this->validRequest); $this->assertDatabaseMissing('checkout_requests', ['user_id' => $missingUser->user_id]); } } From 0102599708ca34bf41312e0ab9822d9ba3bdf7ec Mon Sep 17 00:00:00 2001 From: Marcus Moore Date: Wed, 16 Jul 2025 17:20:28 -0700 Subject: [PATCH 11/11] Implement tests --- .../Console/CleanOldCheckoutRequestsTest.php | 24 +++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/tests/Feature/Console/CleanOldCheckoutRequestsTest.php b/tests/Feature/Console/CleanOldCheckoutRequestsTest.php index 27f4ee4723..b1bdf8e603 100644 --- a/tests/Feature/Console/CleanOldCheckoutRequestsTest.php +++ b/tests/Feature/Console/CleanOldCheckoutRequestsTest.php @@ -30,27 +30,37 @@ class CleanOldCheckoutRequestsTest extends TestCase public function test_clean_old_checkout_requests_command_for_missing_asset() { - $missingAsset = CheckoutRequest::factory()->forAsset()->create(['requestable_id' => 99999999]); + $requestForMissingAsset = CheckoutRequest::factory()->forAsset()->create(['requestable_id' => 99999999]); $this->artisan('snipeit:clean-old-checkout-requests')->assertExitCode(0); $this->assertNotSoftDeleted($this->validRequest); - $this->assertDatabaseMissing('checkout_requests', ['requestable_id' => $missingAsset->requestable_id]); + $this->assertDatabaseMissing('checkout_requests', ['requestable_id' => $requestForMissingAsset->requestable_id]); } public function test_clean_old_checkout_requests_command_for_soft_deleted_model() { - $this->markTestIncomplete(); + $requestForSoftDeletedAssetModel = CheckoutRequest::factory()->forAssetModel()->create(); + Model::withoutEvents(fn() => $requestForSoftDeletedAssetModel->requestedItem->delete()); + + $this->artisan('snipeit:clean-old-checkout-requests')->assertExitCode(0); + + $this->assertNotSoftDeleted($this->validRequest); + $this->assertSoftDeleted($requestForSoftDeletedAssetModel->fresh()); } public function test_clean_old_checkout_requests_command_for_missing_model() { - $this->markTestIncomplete(); + $requestForMissingModel = CheckoutRequest::factory()->forAssetModel()->create(['requestable_id' => 99999999]); + + $this->artisan('snipeit:clean-old-checkout-requests')->assertExitCode(0); + + $this->assertNotSoftDeleted($this->validRequest); + $this->assertDatabaseMissing('checkout_requests', ['requestable_id' => $requestForMissingModel->requestable_id]); } public function test_clean_old_checkout_requests_command_for_soft_deleted_user() { - $requestForSoftDeletedUser = CheckoutRequest::factory()->forAsset()->create(); Model::withoutEvents(fn() => $requestForSoftDeletedUser->user->delete()); @@ -62,11 +72,11 @@ class CleanOldCheckoutRequestsTest extends TestCase public function test_clean_old_checkout_requests_command_for_missing_user() { - $missingUser = CheckoutRequest::factory()->forAsset()->create(['user_id' => 99999999]); + $requestForMissingUser = CheckoutRequest::factory()->forAsset()->create(['user_id' => 99999999]); $this->artisan('snipeit:clean-old-checkout-requests')->assertExitCode(0); $this->assertNotSoftDeleted($this->validRequest); - $this->assertDatabaseMissing('checkout_requests', ['user_id' => $missingUser->user_id]); + $this->assertDatabaseMissing('checkout_requests', ['user_id' => $requestForMissingUser->user_id]); } }