Files
compras/tests/Support/AdmissionFixture.php

32 lines
1.9 KiB
PHP

<?php
use App\Enums\PurchasingRole;
use App\Models\User;
use App\Services\DocumentaryQualificationWorkflow;
use App\Services\FormalAdmission;
require_once __DIR__.'/QualificationFixture.php';
/** Synthetic data only; the underlying fixture enforces an isolated database. */
function admissionFixture(int $quorum = 2): array
{
$f = qualificationFixture();
$admin = User::factory()->create(['tenant_id' => $f['tenant']->id, 'purchasing_role' => PurchasingRole::Admin]);
$buyer = User::factory()->create(['tenant_id' => $f['tenant']->id, 'purchasing_role' => PurchasingRole::Procurement]);
auth()->guard()->setUser($f['issuer']);
$set = app(DocumentaryQualificationWorkflow::class)->define($f['issuer'], $f['r'], $f['definition']);
$assessment = $f['assessment'];
$assessment['answers'][1] = ['criterion_id' => 2, 'result' => 'met', 'evidence' => 'Referência fictícia 2', 'reason' => 'Conformidade conferida em teste isolado'];
auth()->guard()->setUser($f['analyst']);
$record = app(DocumentaryQualificationWorkflow::class)->assess($f['analyst'], $set, $assessment);
$workflow = app(FormalAdmission::class);
$policyData = ['previous_id' => 0, 'enabled' => true, 'roles' => ['finance'], 'required_count' => $quorum, 'reason' => 'Configuração exclusivamente fictícia'];
auth()->guard()->setUser($admin);
$policy = $workflow->policy($admin, $policyData);
auth()->guard()->setUser($buyer);
$adoption = $workflow->adopt($buyer, $f['r'], $policy->id, 0, 'Adopção exclusivamente fictícia');
$proposal = ['quotation_id' => $f['quote']->id, 'previous_id' => 0, 'basis_hash' => $workflow->basis($f['r'], $f['quote']->id)['hash'], 'outcome' => 'admit', 'reason' => 'Proposta exclusivamente fictícia'];
return [...$f, 'admin' => $admin, 'buyer' => $buyer, 'set' => $set, 'record' => $record, 'assessment' => $assessment, 'policy' => $policy, 'policy_data' => $policyData, 'adoption' => $adoption, 'proposal' => $proposal];
}