Files
SGF/tests/Support/IndustrialCostFixture.php
T
2026-10-27 13:57:09 +02:00

19 lines
2.4 KiB
PHP

<?php
namespace Tests\Support;
use App\Modules\Industry\IndustrialCosts;
use App\Shared\Context\CompanyContext;
use Illuminate\Support\Str;
final class IndustrialCostFixture {
public static function create(?array $base=null,bool $criterion=true): array {
IndustrialCosts::guard();$f=$base??DocumentPreviewFixture::create();
foreach(['manager'=>['view','prepare'],'reader'=>['view','validate']] as $who=>$rights)foreach($rights as $r)IdentityFixture::grant($f[$who]->id,$f['tenant'],$f['company'],'industrial_costs.'.$r,$f['unit']);
$c=app(IndustrialCosts::class);$key=fn()=>(string)Str::uuid();$select=fn($who)=>app(CompanyContext::class)->selectFor($f[$who]->id,$f['tenant'],$f['company'],$f['unit']);$select('manager');
$lot=$c->open($f['manager']->id,['reference'=>'LOT-TEST-'.Str::uuid(),'product_reference'=>'PROD-TEST-'.Str::uuid(),'product_name'=>'Produto industrial sintético','centre'=>'Centro Fabrico A — ensaio','period_start'=>'2026-10-01','period_end'=>'2026-10-31','currency'=>'MZN'],$key())['id'];$refs=[];
$add=function($kind,$data)use(&$refs,$c,$f,$lot,$select,$key){$select('manager');$id=$c->input($lot,$f['manager']->id,['kind'=>$kind,'source_ref'=>'IND-TEST-'.strtoupper($kind).'-'.Str::uuid(),'version'=>1,'previous_id'=>null,'data'=>$data,'evidence'=>'Origem/pressuposto industrial exclusivamente sintético.'],$key())['id'];$select('reader');$c->decide($lot,$f['reader']->id,['type'=>'input','id'=>$id,'version'=>1,'decision'=>'approved','reason'=>'Validação de dados sintéticos de custo, não verificação técnica real.'],$key());$refs[$kind]=['id'=>$id,'version'=>1];return $id;};
foreach(['material'=>['20','KG'],'labour'=>['300','MIN'],'pool'=>['600','MZN'],'machine'=>['5','HM'],'production'=>['10','UN']] as $kind=>[$quantity,$unit])$add($kind,['quantity'=>$quantity,'unit'=>$unit,'event_date'=>'2026-10-27']+($kind==='production'?['completed'=>true]:[]));
foreach(['material'=>['50','KG'],'labour'=>['100','H']] as $kind=>[$amount,$unit])$add($kind.'_rate',['source_id'=>$refs[$kind]['id'],'source_version'=>1,'amount'=>$amount,'currency'=>'MZN','unit'=>$unit]);
$criterionData=['pool_id'=>$refs['pool']['id'],'pool_version'=>1,'machine_id'=>$refs['machine']['id'],'machine_version'=>1,'capacity'=>'10','driver_unit'=>'HM','hypothesis'=>'synthetic_only'];
if($criterion)$add('criterion',$criterionData);$select('manager');return $f+compact('lot','refs','criterionData');
}
}