feat(cli): lock captures effective description; list shows it; new commands surface view with origin and collision reporting
This commit is contained in:
@@ -100,3 +100,52 @@ Harness::it('destino explícito sobreescribe la regla', function () {
|
||||
$dest = Destination::relative('src/Libs/Crypto.php', '/proj', '/proj/src', ['src/Libs/Crypto.php' => 'elsewhere/Crypto.php']);
|
||||
eq('elsewhere/Crypto.php', $dest);
|
||||
});
|
||||
|
||||
Harness::it('el lock persiste la descripción y tolera locks sin el campo', function () {
|
||||
$dir = tmpdir();
|
||||
$lock = Lock::empty();
|
||||
$lock->setComponent('db:sql', [
|
||||
'package' => 'db',
|
||||
'version' => '1.0.0',
|
||||
'mode' => 'copy',
|
||||
'description' => 'SQL',
|
||||
'files' => [],
|
||||
]);
|
||||
$lock->save($dir);
|
||||
|
||||
eq('SQL', Lock::load($dir)->component('db:sql')['description'], 'roundtrip de description');
|
||||
|
||||
$raw = json_decode((string) file_get_contents($dir . '/.duckbrain/lock.json'), true);
|
||||
unset($raw['components']['db:sql']['description']);
|
||||
file_put_contents($dir . '/.duckbrain/lock.json', json_encode($raw));
|
||||
|
||||
eq(null, Lock::load($dir)->component('db:sql')['description'], 'lock antiguo sin campo se lee tolerante');
|
||||
|
||||
rrmdir($dir);
|
||||
});
|
||||
|
||||
Harness::it('add captura la descripción efectiva del catálogo en el lock', function () {
|
||||
$root = tmpdir('proj');
|
||||
$tool = tmpdir('tool');
|
||||
write_file($tool . '/packages/mix/duckbrain.json', json_encode([
|
||||
'name' => 'mix',
|
||||
'version' => '1.0.0',
|
||||
'description' => 'Descripción del paquete',
|
||||
'components' => [
|
||||
'own' => ['files' => ['src/Libs/Own.php'], 'description' => 'Descripción propia'],
|
||||
'inh' => ['files' => ['src/Libs/Inh.php']],
|
||||
],
|
||||
'default' => ['own', 'inh'],
|
||||
]));
|
||||
write_file($tool . '/packages/mix/src/Libs/Own.php', "<?php\n");
|
||||
write_file($tool . '/packages/mix/src/Libs/Inh.php', "<?php\n");
|
||||
|
||||
(new Toolbox\Installer($root, $tool, new Toolbox\Console()))->add(['mix'], ['yes' => true]);
|
||||
|
||||
$lock = Lock::load($root);
|
||||
eq('Descripción propia', $lock->component('mix:own')['description'], 'propia gana en el lock');
|
||||
eq('Descripción del paquete', $lock->component('mix:inh')['description'], 'sin propia, hereda del paquete');
|
||||
|
||||
rrmdir($root);
|
||||
rrmdir($tool);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user