fix(followup-audio): handle unsigned zero menu sort during permission migration
This commit is contained in:
@@ -5,7 +5,7 @@ INSERT INTO zyt_system_menu (
|
||||
pid, type, name, icon, sort, perms, paths, component,
|
||||
selected, params, is_cache, is_show, is_disable, create_time, update_time
|
||||
)
|
||||
SELECT d.pid, 'A', '回访录音', '', GREATEST(MAX(d.sort) - 1, 0),
|
||||
SELECT d.pid, 'A', '回访录音', '', GREATEST(CAST(MAX(d.sort) AS SIGNED) - 1, 0),
|
||||
'tcm.diagnosis/followupAudio', '', '', '', '', 0, 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
|
||||
FROM zyt_system_menu AS d
|
||||
WHERE d.perms = 'tcm.diagnosis/dailyRecord' AND d.type = 'A'
|
||||
|
||||
@@ -146,7 +146,7 @@ try {
|
||||
// Migration runs against realistic menu columns in this database only; no shared fixture changes.
|
||||
$pdo->exec("ALTER TABLE zyt_system_menu MODIFY id INT NOT NULL AUTO_INCREMENT,
|
||||
ADD pid INT NOT NULL DEFAULT 0, ADD type CHAR(1) NOT NULL DEFAULT 'A', ADD name VARCHAR(100) NOT NULL DEFAULT '',
|
||||
ADD icon VARCHAR(100) NOT NULL DEFAULT '', ADD sort INT NOT NULL DEFAULT 0,
|
||||
ADD icon VARCHAR(100) NOT NULL DEFAULT '', ADD sort INT UNSIGNED NOT NULL DEFAULT 0,
|
||||
ADD paths VARCHAR(200) NOT NULL DEFAULT '', ADD component VARCHAR(200) NOT NULL DEFAULT '',
|
||||
ADD selected VARCHAR(200) NOT NULL DEFAULT '', ADD params VARCHAR(200) NOT NULL DEFAULT '',
|
||||
ADD is_cache INT NOT NULL DEFAULT 0, ADD is_show INT NOT NULL DEFAULT 1,
|
||||
@@ -156,9 +156,9 @@ try {
|
||||
$pdo->exec("INSERT INTO zyt_system_menu (id,pid,type,name,sort,perms,is_disable) VALUES
|
||||
(182,0,'C','Synthetic first diagnosis page',0,'tcm.diagnosis/lists',0),
|
||||
(191,0,'C','Synthetic second diagnosis page',0,'firstvisit.myPatient/lists',0),
|
||||
(192,191,'A','日常记录',59,'tcm.diagnosis/dailyRecord',0)");
|
||||
(192,191,'A','日常记录',0,'tcm.diagnosis/dailyRecord',0)");
|
||||
$grants = $pdo->query('SELECT role_id,menu_id FROM zyt_system_role_menu ORDER BY role_id,menu_id')->fetchAll(PDO::FETCH_ASSOC);
|
||||
$migrationFile = dirname(__DIR__) . '/sql/2026_10_12_followup_audio_permission.sql';
|
||||
$migrationFile = getenv('FOLLOWUP_AUDIO_TEST_MENU_MIGRATION') ?: dirname(__DIR__) . '/sql/2026_10_12_followup_audio_permission.sql';
|
||||
$migration = file_get_contents($migrationFile);
|
||||
$expect(is_string($migration), 'permission migration exists');
|
||||
$migration = preg_replace('/^\s*(?:--|#).*$/m', '', $migration);
|
||||
@@ -167,9 +167,10 @@ try {
|
||||
foreach (explode(';', $migration) as $sql) {
|
||||
if (trim($sql) !== '') { $statement = $pdo->query($sql); $statement->closeCursor(); }
|
||||
}
|
||||
$menus = $pdo->query("SELECT pid,type,name,perms,is_disable,is_show FROM zyt_system_menu
|
||||
$menus = $pdo->query("SELECT pid,type,name,sort,perms,is_disable,is_show FROM zyt_system_menu
|
||||
WHERE perms='tcm.diagnosis/followupAudio' AND pid IN (182,191) ORDER BY pid,id")->fetchAll(PDO::FETCH_ASSOC);
|
||||
$expect(count($menus) === 2 && array_map('intval', array_column($menus, 'pid')) === [182, 191], 'migration creates exactly one recording node per daily parent');
|
||||
$expect(array_map('intval', array_column($menus, 'sort')) === [58, 0], 'unsigned zero sort never underflows');
|
||||
foreach ($menus as $menu) {
|
||||
$expect($menu['type'] === 'A' && $menu['name'] === '回访录音' && (int) $menu['is_disable'] === 0 && (int) $menu['is_show'] === 1, 'migration node is assignable');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user