const assert = require("assert"); const fs = require("fs"); const path = require("path"); const root = path.resolve(__dirname, ".."); const api = fs.readFileSync(path.join(root, "src/api/schoolProductConfig.js"), "utf8"); const router = fs.readFileSync(path.join(root, "src/router/index.js"), "utf8"); const sidebar = fs.readFileSync(path.join(root, "src/layout/components/Sidebar/index.vue"), "utf8"); const platformSchool = fs.readFileSync(path.join(root, "src/views/platformAdmin/school/index.vue"), "utf8"); const teacherClass = fs.readFileSync(path.join(root, "src/views/teacherEnd/class/index.vue"), "utf8"); const teacherRoutes = router.slice(router.indexOf("export const teacherRoutes"), router.indexOf("export const platformAdminRoutes")); assert(/\/api\/school-product-config\/current/.test(api), "school users must load their product configuration"); assert(/\/product-config`/.test(api), "platform admins must update a school's product configuration"); assert(/requiresAdminClass:\s*true/.test(router), "administrative organization routes must be marked for configuration gating"); assert(/path: "\/school"[\s\S]*?requiresAdminClass:\s*true/.test(teacherRoutes), "teacher faculty menu must be gated"); assert(/path: "\/major"[\s\S]*?requiresAdminClass:\s*true/.test(teacherRoutes), "teacher major menu must be gated"); assert(/path: "\/teacher"[\s\S]*?requiresAdminClass:\s*true/.test(teacherRoutes), "teacher account menu must be gated"); assert(/filterRoutesByOrganizationMode/.test(sidebar), "sidebar must remove unavailable administrative organization routes"); assert(/filterRoutesByOrganizationMode\(teacherRoutes\)/.test(sidebar), "teacher menus must be filtered by organization mode"); assert(/watch\(\s*\(\) => userStore\.schoolProductConfig\?\.organizationMode/.test(sidebar), "sidebar must refresh when the asynchronous school configuration arrives"); assert(/organizationMode/.test(platformSchool) && /updatePlatformSchoolProductConfig/.test(platformSchool), "platform school editor must manage organization mode"); assert(/行政班管理/.test(platformSchool), "platform school editor must expose administrative-class management controls"); assert(/v-model="productConfig\.facultyManagementEnabled"/.test(platformSchool), "platform school editor must configure faculty management with a switch"); assert(/v-model="productConfig\.majorManagementEnabled"/.test(platformSchool), "platform school editor must configure major management with a switch"); assert(/v-model="productConfig\.adminClassManagementEnabled"/.test(platformSchool), "platform school editor must configure administrative classes with a switch"); assert(/requiresFacultyManagement/.test(router) && /requiresMajorManagement/.test(router), "teacher routes must declare their management capability"); assert(/adminClassManagementEnabled/.test(teacherClass), "teacher class page must derive administrative-class controls from the switch"); assert(/isTeacherRosterMode/.test(teacherClass), "teacher class page must recognize teacher-managed roster mode"); console.log("School product configuration is represented in the API, routes, sidebar, and platform editor.");