diff --git a/app/Http/Controllers/Api/AssetsController.php b/app/Http/Controllers/Api/AssetsController.php index f64e68621d..997b27a413 100644 --- a/app/Http/Controllers/Api/AssetsController.php +++ b/app/Http/Controllers/Api/AssetsController.php @@ -5,6 +5,8 @@ namespace App\Http\Controllers\Api; use App\Events\CheckoutableCheckedIn; use App\Http\Requests\StoreAssetRequest; use App\Http\Traits\MigratesLegacyLocations; +use App\Models\CheckoutAcceptance; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Http\JsonResponse; use Illuminate\Support\Facades\Crypt; use Illuminate\Support\Facades\Gate; @@ -919,6 +921,19 @@ class AssetsController extends Controller } } + // Get all pending Acceptances for this asset and delete them + CheckoutAcceptance::pending() + ->whereHasMorph( + 'checkoutable', + [Asset::class], + function (Builder $query) use ($asset) { + $query->where('id', $asset->id); + }) + ->get() + ->map(function ($acceptance) { + $acceptance->delete(); + }); + if ($asset->save()) { event(new CheckoutableCheckedIn($asset, $target, Auth::user(), $request->input('note'), $checkin_at, $originalValues)); diff --git a/tests/Feature/Api/Assets/AssetCheckinTest.php b/tests/Feature/Api/Assets/AssetCheckinTest.php index befac2e4ce..e4f443ce30 100644 --- a/tests/Feature/Api/Assets/AssetCheckinTest.php +++ b/tests/Feature/Api/Assets/AssetCheckinTest.php @@ -4,6 +4,7 @@ namespace Tests\Feature\Api\Assets; use App\Events\CheckoutableCheckedIn; use App\Models\Asset; +use App\Models\CheckoutAcceptance; use App\Models\LicenseSeat; use App\Models\Location; use App\Models\Statuslabel; @@ -130,7 +131,14 @@ class AssetCheckinTest extends TestCase public function testPendingCheckoutAcceptancesAreClearedUponCheckin() { - $this->markTestIncomplete('Not currently in controller'); + $asset = Asset::factory()->assignedToUser()->create(); + + $acceptance = CheckoutAcceptance::factory()->for($asset, 'checkoutable')->pending()->create(); + + $this->actingAsForApi(User::factory()->checkinAssets()->create()) + ->postJson(route('api.asset.checkin', $asset)); + + $this->assertFalse($acceptance->exists(), 'Acceptance was not deleted'); } public function testCheckinTimeAndActionLogNoteCanBeSet()