const assert = require ( "assert" ) ;
const fs = require ( "fs" ) ;
const path = require ( "path" ) ;
const root = path . resolve ( _ _dirname , ".." ) ;
const read = ( file ) => fs . readFileSync ( path . join ( root , file ) , "utf8" ) ;
const taskPage = read ( "src/views/teacherEnd/task/index.vue" ) ;
const sidebar = read ( "src/layout/components/Sidebar/index.vue" ) ;
const api = read ( "src/api/teacher.js" ) ;
assert ( taskPage . includes ( "listClassTrainingTasks" ) , "task allocation must use training tasks as its data source" ) ;
assert ( taskPage . includes ( "listClassTrainingTasks" ) , "task allocation must load training tasks for the selected teaching class" ) ;
assert ( taskPage . includes ( "await listClassTrainingTasks(classId.value, { enabledOnly: false })" ) , "class task loading must request disabled and enabled tasks" ) ;
assert ( taskPage . includes ( "tasks.value = [];\n const res = await listClassTrainingTasks" ) , "class task loading must clear prior class rows before requesting the selected class" ) ;
assert ( taskPage . includes ( "getTaskPublication" ) , "task allocation must load the selected class publication state" ) ;
assert ( taskPage . includes ( "tasks.value.map((task) => task.taskKey)" ) , "an unconfigured class must default to all tasks selected" ) ;
assert ( taskPage . includes ( "保存发布配置" ) , "task allocation must require an explicit save" ) ;
assert ( api . includes ( "selectTaskPublicationByClassId" ) , "publication API missing" ) ;
assert ( sidebar . includes ( "filterStudentCourseNavigation" ) , "student menu must be filtered by published training tasks" ) ;
assert ( sidebar . includes ( "publishedTaskKeys" ) , "student menu must retain published task keys" ) ;
console . log ( "task publication front-end contract passed" ) ;