feat: add Snipe-IT asset synchronization

This commit is contained in:
2026-08-04 16:15:09 +01:00
parent 604180b735
commit 077015f17a
37 changed files with 1302 additions and 26 deletions

View File

@@ -0,0 +1,57 @@
<?php
use App\Domain\Identity\Enums\RoleName;
use App\Domain\Identity\Models\Role;
use App\Jobs\SyncSnipeAssets;
use App\Models\User;
use Illuminate\Support\Facades\Queue;
use Inertia\Testing\AssertableInertia as Assert;
it('permite ao administrador consultar o diagnóstico Snipe-IT', function () {
$administrator = User::factory()->create();
$administrator->roles()->attach(Role::query()->create([
'name' => RoleName::Administrator->value,
'description' => 'Administração do portal.',
]));
config()->set('services.snipe_it.url', 'https://inventory.example.test');
config()->set('services.snipe_it.read_token', 'configured-token');
$this->actingAs($administrator)
->get(route('admin.snipe-it.index'))
->assertOk()
->assertInertia(fn (Assert $page) => $page
->component('admin/snipe-it')
->where('configured', true)
->where('assets.total', 0)
->has('syncRuns', 0));
});
it('impede um requisitante de consultar o diagnóstico', function () {
$requester = User::factory()->create();
$requester->roles()->attach(Role::query()->create([
'name' => RoleName::Requester->value,
'description' => 'Requisitante.',
]));
$this->actingAs($requester)
->get(route('admin.snipe-it.index'))
->assertForbidden();
});
it('coloca a sincronização manual na fila', function () {
Queue::fake();
$administrator = User::factory()->create();
$administrator->roles()->attach(Role::query()->create([
'name' => RoleName::Administrator->value,
'description' => 'Administração do portal.',
]));
$this->actingAs($administrator)
->post(route('admin.snipe-it.sync'))
->assertRedirect()
->assertSessionHas('success');
Queue::assertPushed(SyncSnipeAssets::class);
});