@@ -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']);
|
||||
|
||||
Reference in New Issue
Block a user