[fix]:[FL-55][ATP模型管理和线路管理菜单冲突]
Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
@@ -163,7 +163,7 @@ SYNTHETIC_LEGACY_MENU_ROWS: list[dict[str, Any]] = [
|
||||
"menu_label": "ATP模型管理",
|
||||
"menu_type": "MENU",
|
||||
"parent_id": None,
|
||||
"url": "/admin/power-lines/atp-viewer",
|
||||
"url": "/admin/atp-models",
|
||||
"menu_icon": "Experiment",
|
||||
"seq": 55,
|
||||
"state": "ENABLED",
|
||||
|
||||
@@ -299,7 +299,7 @@ DEFAULT_MENUS: list[dict[str, object]] = [
|
||||
{
|
||||
"code": "admin.atp_models",
|
||||
"name": "ATP模型管理",
|
||||
"path": "/admin/power-lines/atp-viewer",
|
||||
"path": "/admin/atp-models",
|
||||
"icon": "Experiment",
|
||||
"parent_code": None,
|
||||
"type": "menu",
|
||||
|
||||
@@ -20,7 +20,7 @@ from api.app.core.database import Base, get_db, init_db
|
||||
from api.app.core.dependencies import CurrentUser, get_current_user
|
||||
from api.app.models.menu import Menu
|
||||
from api.app.models.user import User
|
||||
from api.app.services.legacy_authz_service import DEFAULT_ADMIN_PERMISSION_CODES
|
||||
from api.app.services.legacy_authz_service import DEFAULT_ADMIN_PERMISSION_CODES, SYNTHETIC_LEGACY_MENU_ROWS
|
||||
from api.app.services.seed_service import DEFAULT_MENUS, DEFAULT_PERMISSIONS, DEFAULT_ROLES, SeedDefaultsResult, seed_defaults
|
||||
from api.app.services.topic_registry import TOPIC_RULES
|
||||
|
||||
@@ -93,6 +93,11 @@ class LegacyQuizCleanupContractTest(unittest.TestCase):
|
||||
self.assertNotIn("question_bank.read", DEFAULT_ROLES["admin"]["permissions"])
|
||||
self.assertNotIn("question_bank.manage", DEFAULT_ROLES["admin"]["permissions"])
|
||||
|
||||
def test_legacy_authz_uses_standalone_atp_models_menu_url(self) -> None:
|
||||
atp_menu = next(row for row in SYNTHETIC_LEGACY_MENU_ROWS if row["menu_id"] == "admin.atp_models")
|
||||
|
||||
self.assertEqual(atp_menu["url"], "/admin/atp-models")
|
||||
|
||||
|
||||
class SeedDefaultsServiceTest(DatabaseFixtureTestCase):
|
||||
def setUp(self) -> None:
|
||||
@@ -151,6 +156,15 @@ class SeedDefaultsServiceTest(DatabaseFixtureTestCase):
|
||||
self.assertTrue(result.overwrote_existing)
|
||||
self.assertGreater(result.summary["menus"].overwritten, 0)
|
||||
|
||||
def test_seed_defaults_use_standalone_atp_models_path(self) -> None:
|
||||
self._run_seed()
|
||||
|
||||
menu = self._load_menu("admin.atp_models")
|
||||
default_menu = DEFAULT_MENU_BY_CODE["admin.atp_models"]
|
||||
|
||||
self.assertEqual(str(default_menu["path"]), "/admin/atp-models")
|
||||
self.assertEqual(menu.path, "/admin/atp-models")
|
||||
|
||||
|
||||
class SeedDefaultsEndpointTest(DatabaseFixtureTestCase):
|
||||
def setUp(self) -> None:
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
import PowerLinesAtpViewerPage from "../power-lines/atp-viewer/page";
|
||||
|
||||
export default function AtpModelsPage() {
|
||||
return <PowerLinesAtpViewerPage />;
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
import assert from "node:assert/strict";
|
||||
import test from "node:test";
|
||||
|
||||
import { normalizeAppRoutePath } from "./app-route-path.ts";
|
||||
|
||||
test("normalizeAppRoutePath maps legacy ATP viewer routes to the standalone ATP models route", () => {
|
||||
assert.equal(normalizeAppRoutePath("/admin/power-lines/atp-viewer"), "/atp-models");
|
||||
assert.equal(normalizeAppRoutePath("/power-lines/atp-viewer"), "/atp-models");
|
||||
assert.equal(normalizeAppRoutePath("/admin/atp-models"), "/atp-models");
|
||||
});
|
||||
@@ -6,6 +6,7 @@ const APP_ROUTE_ALIASES: Record<string, string> = {
|
||||
"/menu": "/menus",
|
||||
"/system-param": "/system-params",
|
||||
"/power-line": "/power-lines",
|
||||
"/power-lines/atp-viewer": "/atp-models",
|
||||
"/lightning-current": "/lightning-currents",
|
||||
"/worker": "/workers",
|
||||
"/tower-model": "/tower-models",
|
||||
|
||||
Reference in New Issue
Block a user