feat: complete equipment handover workflow
This commit is contained in:
@@ -9,6 +9,7 @@ beforeEach(function () {
|
||||
config()->set('services.snipe_it', [
|
||||
'url' => 'https://inventory.example.test',
|
||||
'read_token' => 'read-token-for-tests',
|
||||
'operational_token' => 'operational-token-for-tests',
|
||||
'timeout' => 2,
|
||||
'page_size' => 2,
|
||||
'retries' => 1,
|
||||
@@ -61,6 +62,56 @@ it('recusa erros transportados num HTTP 200', function () {
|
||||
->toThrow(SnipeItApiException::class, 'recusou a consulta');
|
||||
});
|
||||
|
||||
it('regista uma entrega com o token operacional e o destinatário Snipe-IT', function () {
|
||||
Http::fake([
|
||||
'*' => Http::response(['status' => 'success', 'payload' => ['id' => 41]], 200),
|
||||
]);
|
||||
|
||||
$payload = app(SnipeItClient::class)->checkoutHardware(41, 2, 73, '2026-08-10', 'Reserva RR-001');
|
||||
|
||||
expect($payload['status'])->toBe('success');
|
||||
|
||||
Http::assertSent(function (Request $request): bool {
|
||||
return $request->method() === 'POST'
|
||||
&& $request->url() === 'https://inventory.example.test/api/v1/hardware/41/checkout'
|
||||
&& $request->hasHeader('Authorization', 'Bearer operational-token-for-tests')
|
||||
&& $request->data() === [
|
||||
'status_id' => 2,
|
||||
'checkout_to_type' => 'user',
|
||||
'assigned_user' => 73,
|
||||
'expected_checkin' => '2026-08-10',
|
||||
'note' => 'Reserva RR-001',
|
||||
];
|
||||
});
|
||||
});
|
||||
|
||||
it('regista uma devolução com estado e localização no Snipe-IT', function () {
|
||||
Http::fake([
|
||||
'*' => Http::response(['status' => 'success', 'payload' => ['id' => 41]], 200),
|
||||
]);
|
||||
|
||||
app(SnipeItClient::class)->checkinHardware(41, 2, 9, 'Devolvido sem danos');
|
||||
|
||||
Http::assertSent(function (Request $request): bool {
|
||||
return $request->method() === 'POST'
|
||||
&& $request->url() === 'https://inventory.example.test/api/v1/hardware/41/checkin'
|
||||
&& $request->data() === [
|
||||
'status_id' => 2,
|
||||
'location_id' => 9,
|
||||
'note' => 'Devolvido sem danos',
|
||||
];
|
||||
});
|
||||
});
|
||||
|
||||
it('recusa erros operacionais transportados num HTTP 200', function () {
|
||||
Http::fake([
|
||||
'*' => Http::response(['status' => 'error', 'messages' => 'Asset is not deployable'], 200),
|
||||
]);
|
||||
|
||||
expect(fn () => app(SnipeItClient::class)->checkoutHardware(41, 2, 73, '2026-08-10'))
|
||||
->toThrow(SnipeItApiException::class, 'recusou a entrega');
|
||||
});
|
||||
|
||||
/** @return array<string, mixed> */
|
||||
function snipeClientRow(int $id): array
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user