<?php
declare(strict_types=1);$root=$argv[1]??'';require $root.'/vendor/autoload.php';require __DIR__.'/OrderReadResponseRelatedCandidate.php';
$count=0;$check=static function($ok,$why)use(&$count){$count++;if(!$ok)throw new RuntimeException($why);};$same=static function($a,$b){return serialize($a)===serialize($b);};
foreach([false,true] as $dm){$db=new \think\DbManager();$db->setConfig(['default'=>'test','connections'=>['test'=>['type'=>$dm?\app\common\database\Dm::class:'mysql','hostname'=>'127.0.0.1','hostport'=>5238,'database'=>'UNIT_ONLY','username'=>'','password'=>'']]]);\think\Container::getInstance()->instance(\think\DbManager::class,$db);
foreach([0,0.0,0.01,12.34,99999999.99,-99999999.99,100000000,10000000000000000,1.234,INF,NAN,'0.00','12.3','00012.30',null,false,true,'bad',[]] as $i=>$value){$refund=['refund_money'=>$value,'orderData'=>['pay_price'=>$value,'order_id'=>1],'orderGoods'=>['goods_price'=>$value,'goods_weight'=>0.5,'goods_id'=>3],'user'=>['balance'=>$value,'user_id'=>2],'images'=>[],'express'=>null,'other'=>['refund_money'=>0]];$before=$refund;$expected=$refund;$normal=['0.00','0.00','0.01','12.34','99999999.99','-99999999.99'];if($dm&&isset($normal[$i])){$expected['refund_money']=$normal[$i];$expected['orderData']['pay_price']=$normal[$i];$expected['orderGoods']['goods_price']=$normal[$i];$expected['user']['balance']=$normal[$i];}$actual=\app\common\service\OrderReadResponse::refundDetail($refund);$check($same($actual,$expected),'Exact new refund paths / guarded domain '.$dm.' '.$i);$check($same($refund,$before),'Raw refund DTO unchanged');
$delivery=['total'=>1,'per_page'=>10,'data'=>[['delivery_id'=>5,'orderData'=>['pay_price'=>$value,'user'=>['balance'=>$value]],'goods'=>[['id'=>9,'delivery_num'=>0,'goods'=>['line_price'=>$value,'goods_weight'=>0.5]]],'eorder_html'=>'']]];$before=$delivery;$expected=$delivery;if($dm&&isset($normal[$i])){$expected['data'][0]['orderData']['pay_price']=$normal[$i];$expected['data'][0]['orderData']['user']['balance']=$normal[$i];$expected['data'][0]['goods'][0]['goods']['line_price']=$normal[$i];}$check($same(\app\common\service\OrderReadResponse::deliveryList($delivery),$expected),'Exact delivery paths / non-amount fields');$check($same($delivery,$before),'Raw delivery DTO unchanged');}
foreach([[],['data'=>[]],['data'=>null],['data'=>(object)[]],['data'=>[[]]],['data'=>[['user'=>null,'orderData'=>null,'orderGoods'=>null,'goods'=>[],'refund_money'=>null]]]] as $page){$check($same(\app\common\service\OrderReadResponse::deliveryList($page),$page),'Empty delivery shape');$check($same(\app\common\service\OrderReadResponse::refundList($page),$page),'Empty refund shape');}
$d=__DIR__.'/private-evidence/'.($dm?'C':'B');foreach(file($d.'/private-wire.jsonl',FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES) as $line){$w=json_decode($line,true);$body=json_decode($w['raw'],true);if($body['status']!==200)continue;$before=$body['data'];$value=$before;if(isset($value['list']))$value['list']=strpos($w['path'],'delivery')!==false?\app\common\service\OrderReadResponse::deliveryList($value['list']):\app\common\service\OrderReadResponse::refundList($value['list']);elseif(strpos($w['path'],'refund')!==false)$value['detail']=\app\common\service\OrderReadResponse::refundDetail($value['detail']);if(!$dm)$check($same($value,$before),'Actual entire MySQL DTO exactly unchanged');$check($same($body['data'],$before),'Actual raw capture unchanged');}
$check($db->getQueryTimes()===0,'Real connector objects no SQL');}
// Existing methods must remain byte-identical; the original six-GET suite also runs separately.
$oldFile=dirname(__DIR__).'/parallel-ai-order-recharge-read-20261011/OrderReadResponseCandidate.php';$check(hash_file('sha256',$oldFile)==='f8160a47fd4cf0121293f27f30e6d68eb6edd89d455392e339e41e369a2e651c','Frozen previous helper identity');$old=file_get_contents($oldFile);$new=file_get_contents(__DIR__.'/OrderReadResponseRelatedCandidate.php');$prefix=substr($old,0,strrpos($old,"\n}"));$check(strpos($new,$prefix)===0,'All previous fields/gates/three DTO method source bytes preserved');echo json_encode(['assertions'=>$count,'PDO_opens'=>0,'old_methods_byte_identical'=>true]),"\n";
