commit5
tests / ci (push) Canceled after 0s

This commit is contained in:
2026-10-29 22:03:09 +02:00
parent 57f6b3cc36
commit 413c201d97
54 changed files with 2753 additions and 14 deletions
+30
View File
@@ -24,6 +24,36 @@ function procurementPayload(int $center, string $price = '100.00', string $tax =
];
}
test('request navigation separates own requests from the complete authorised list', function () {
$this->actingAs($this->requester)->post('/requisicoes', procurementPayload($this->center->id))->assertRedirect();
$admin = procurementUser($this->tenant, $this->department, PurchasingRole::Admin);
$this->actingAs($admin)->post('/requisicoes', procurementPayload($this->center->id))->assertRedirect();
$own = Requisition::query()->where('requester_id', $admin->id)->sole();
$this->get('/requisicoes?view=all')->assertOk()->assertInertia(fn (Assert $page) => $page->where('requisitions.total', 2));
$this->get('/requisicoes?view=mine&status=draft')->assertOk()->assertInertia(fn (Assert $page) => $page->where('requisitions.total', 1)->where('requisitions.data.0.id', $own->id)->where('filters.view', 'mine'));
$foreign = Tenant::query()->create(['name' => 'Empresa externa']);
$department = Department::query()->create(['tenant_id' => $foreign->id, 'name' => 'Outro departamento']);
$outsider = procurementUser($foreign, $department, PurchasingRole::Admin);
$this->actingAs($outsider)->get('/requisicoes?view=all')->assertOk()->assertInertia(fn (Assert $page) => $page->where('requisitions.total', 0));
});
test('approval navigation uses eligibility and keeps personal decisions separate', function () {
$head = procurementUser($this->tenant, $this->department, PurchasingRole::DepartmentHead);
$this->actingAs($this->requester)->post('/requisicoes', procurementPayload($this->center->id))->assertRedirect();
$request = Requisition::query()->sole();
$this->post('/requisicoes/'.$request->id.'/submeter')->assertRedirect();
$this->actingAs($head)->post('/requisicoes', procurementPayload($this->center->id))->assertRedirect();
$own = Requisition::query()->where('requester_id', $head->id)->sole();
$this->post('/requisicoes/'.$own->id.'/submeter')->assertRedirect();
$this->get('/requisicoes?view=approvals')->assertOk()->assertInertia(fn (Assert $page) => $page->where('requisitions.total', 1)->where('requisitions.data.0.id', $request->id));
$this->get('/requisicoes?view=decided')->assertOk()->assertInertia(fn (Assert $page) => $page->where('requisitions.total', 0));
$this->post('/requisicoes/'.$request->id.'/decidir', ['decision' => 'approved'])->assertRedirect();
$this->get('/requisicoes?view=approvals')->assertOk()->assertInertia(fn (Assert $page) => $page->where('requisitions.total', 0));
$this->get('/requisicoes?view=decided')->assertOk()->assertInertia(fn (Assert $page) => $page->where('requisitions.total', 1)->where('requisitions.data.0.id', $request->id));
$this->actingAs($this->requester)->get('/requisicoes?view=decided')->assertOk()->assertInertia(fn (Assert $page) => $page->where('requisitions.total', 0));
$this->getJson('/requisicoes?view=unrestricted')->assertUnprocessable();
});
beforeEach(function () {
$this->tenant = Tenant::query()->create(['name' => 'Empresa A']);
$this->department = Department::query()->create(['tenant_id' => $this->tenant->id, 'name' => 'Operações']);