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,
|
pid, type, name, icon, sort, perms, paths, component,
|
||||||
selected, params, is_cache, is_show, is_disable, create_time, update_time
|
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()
|
'tcm.diagnosis/followupAudio', '', '', '', '', 0, 1, 0, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()
|
||||||
FROM zyt_system_menu AS d
|
FROM zyt_system_menu AS d
|
||||||
WHERE d.perms = 'tcm.diagnosis/dailyRecord' AND d.type = 'A'
|
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.
|
// 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,
|
$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 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 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 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,
|
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
|
$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),
|
(182,0,'C','Synthetic first diagnosis page',0,'tcm.diagnosis/lists',0),
|
||||||
(191,0,'C','Synthetic second diagnosis page',0,'firstvisit.myPatient/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);
|
$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);
|
$migration = file_get_contents($migrationFile);
|
||||||
$expect(is_string($migration), 'permission migration exists');
|
$expect(is_string($migration), 'permission migration exists');
|
||||||
$migration = preg_replace('/^\s*(?:--|#).*$/m', '', $migration);
|
$migration = preg_replace('/^\s*(?:--|#).*$/m', '', $migration);
|
||||||
@@ -167,9 +167,10 @@ try {
|
|||||||
foreach (explode(';', $migration) as $sql) {
|
foreach (explode(';', $migration) as $sql) {
|
||||||
if (trim($sql) !== '') { $statement = $pdo->query($sql); $statement->closeCursor(); }
|
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);
|
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(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) {
|
foreach ($menus as $menu) {
|
||||||
$expect($menu['type'] === 'A' && $menu['name'] === '回访录音' && (int) $menu['is_disable'] === 0 && (int) $menu['is_show'] === 1, 'migration node is assignable');
|
$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