feat: complete approval workflow

This commit is contained in:
2026-08-04 16:51:51 +01:00
parent c2136bc250
commit 809eab9d4a
26 changed files with 1156 additions and 41 deletions

View File

@@ -1,15 +1,22 @@
<?php
use App\Domain\Identity\Enums\RoleName;
use App\Domain\Identity\Models\Role;
use App\Domain\Inventory\Models\SnipeAsset;
use App\Domain\Reservations\Enums\ReservationItemStatus;
use App\Domain\Reservations\Enums\ReservationStatus;
use App\Models\User;
use App\Notifications\ReservationSubmittedNotification;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Notification;
uses(RefreshDatabase::class);
it('cria uma pré-reserva auditada com vários equipamentos', function () {
Notification::fake();
$user = User::factory()->create();
$approver = User::factory()->create();
$approver->roles()->attach(Role::create(['name' => RoleName::Approver->value]));
$assets = SnipeAsset::factory()->count(2)->create();
$startsAt = now()->addDays(2)->startOfHour();
$endsAt = $startsAt->addHours(3);
@@ -31,6 +38,8 @@ it('cria uma pré-reserva auditada com vários equipamentos', function () {
$this->assertDatabaseCount('reservation_items', 2);
$this->assertDatabaseHas('reservation_items', ['status' => ReservationItemStatus::Held->value]);
$this->assertDatabaseHas('audit_logs', ['event' => 'reservation.submitted', 'actor_id' => $user->id]);
Notification::assertSentTo($approver, ReservationSubmittedNotification::class);
Notification::assertNotSentTo($user, ReservationSubmittedNotification::class);
});
it('recusa um período que conflita com uma pré-reserva', function () {