api#347: сохранить part в именованных наборах и процентных контрактах
This commit is contained in:
1 parent
1993f7b4b1
commit
f7d1792e23
10 files changed
+17
-13
No files matched your search
@@ -5,17 +5,17 @@ require dirname(__DIR__).'/bootstrap.php';
|
||||
use PrelandAdmin\{Config,Copy,LinkBuilder,Notes,Store,Problem};
|
||||
function partCheck(bool $ok,string $message): void {if(!$ok)throw new RuntimeException($message);echo "PASS $message\n";}
|
||||
$valid=Config::decode('{"host":"keep.example","metadata":{"keep":true},"utm":{"part":{"default":"2","weights":{"1":0,"2":100}},"unknown":{"keep":true}}}');
|
||||
Config::validate($valid,static fn()=>true);
|
||||
foreach (['{"default":"3","weights":{}}','{"default":"1","weights":{"9":1}}','{"default":"1","weights":{"2":-1}}'] as $group) {
|
||||
Config::validate($valid);
|
||||
foreach (['{"default":"3","weights":{}}','{"default":"1","weights":{"9":1}}','{"default":"1","weights":{"2":-1}}','{"default":"1","weights":{"1":1}}'] as $group) {
|
||||
$invalid=Config::decode('{"utm":{"part":'.$group.'}}');$rejected=false;
|
||||
try {Config::validate($invalid,static fn()=>true);}catch(Problem){$rejected=true;}
|
||||
try {Config::validate($invalid);}catch(Problem){$rejected=true;}
|
||||
partCheck($rejected,'invalid part enum/weights rejected');
|
||||
}
|
||||
$project=new ReflectionMethod(Copy::class,'project');$changes=$project->invoke(null,$valid);
|
||||
$target=Config::decode('{"host":"before.example","notes":"keep","utm":{"part":{"default":"1","weights":{"1":1},"metadata":"keep"},"unknown":{"keep":true}}}');
|
||||
$patched=Config::patch($target,$changes);
|
||||
partCheck($patched->utm->part->default==='2'&&$patched->utm->part->weights->{'2'}===100,'copy includes part default and weights');
|
||||
partCheck($patched->notes==='keep'&&$patched->utm->part->metadata==='keep'&&$patched->utm->unknown->keep===true,'copy preserves metadata and unknown groups');
|
||||
partCheck($patched->host==='before.example'&&$patched->notes==='keep'&&$patched->utm->part->metadata==='keep'&&$patched->utm->unknown->keep===true,'copy preserves metadata and unknown groups');
|
||||
$root=sys_get_temp_dir().'/part347-'.bin2hex(random_bytes(6));$store=new Store($root);
|
||||
$notes=new Notes($store);$old=$notes->all();unset($old['part']);$store->write('utm-notes.json',$old);
|
||||
$loaded=$notes->all();partCheck(isset($loaded['part'])&&array_diff_key($loaded,['part'=>true])===$old,'old notes gain empty part without losing notes/versions');
|
||||
|
||||
Reference in new issue
Block a user