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()