From 11306e6314625f5d6f8affb1df4ecd7a69836da6 Mon Sep 17 00:00:00 2001 From: long <452591453@qq.com> Date: Mon, 12 Oct 2026 15:18:37 +0800 Subject: [PATCH] fix(followup-audio): handle unsigned zero menu sort during permission migration --- server/sql/2026_10_12_followup_audio_permission.sql | 2 +- server/tests/FollowupAudioPermissionTest.php | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/server/sql/2026_10_12_followup_audio_permission.sql b/server/sql/2026_10_12_followup_audio_permission.sql index 6e0ed56d8..5865d4bfa 100644 --- a/server/sql/2026_10_12_followup_audio_permission.sql +++ b/server/sql/2026_10_12_followup_audio_permission.sql @@ -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' diff --git a/server/tests/FollowupAudioPermissionTest.php b/server/tests/FollowupAudioPermissionTest.php index 82ea1cb2f..9885734e3 100644 --- a/server/tests/FollowupAudioPermissionTest.php +++ b/server/tests/FollowupAudioPermissionTest.php @@ -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'); }