chore: add maintenance workflow
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
const fs = require("fs");
|
||||
const vm = require("vm");
|
||||
|
||||
const elements = new Map();
|
||||
|
||||
function element(id) {
|
||||
if (!elements.has(id)) {
|
||||
elements.set(id, {
|
||||
id,
|
||||
textContent: "",
|
||||
innerHTML: "",
|
||||
hidden: false,
|
||||
disabled: false,
|
||||
value: "",
|
||||
dataset: {},
|
||||
classList: { toggle() {} },
|
||||
setAttribute(name, value) {
|
||||
this[name] = value;
|
||||
},
|
||||
addEventListener() {},
|
||||
focus() {},
|
||||
});
|
||||
}
|
||||
return elements.get(id);
|
||||
}
|
||||
|
||||
const documentStub = {
|
||||
querySelector(selector) {
|
||||
return element(selector.replace(/^#/, ""));
|
||||
},
|
||||
querySelectorAll() {
|
||||
return [];
|
||||
},
|
||||
addEventListener() {},
|
||||
createElement(tag) {
|
||||
return element(`created-${tag}-${elements.size}`);
|
||||
},
|
||||
body: { appendChild() {} },
|
||||
execCommand() {
|
||||
return true;
|
||||
},
|
||||
};
|
||||
|
||||
const context = {
|
||||
console,
|
||||
document: documentStub,
|
||||
navigator: {},
|
||||
fetch: async () => ({ ok: true, json: async () => ({ classnotes: { mtime: 0 } }) }),
|
||||
Date,
|
||||
JSON,
|
||||
Map,
|
||||
Number,
|
||||
String,
|
||||
};
|
||||
|
||||
function assertEqual(name, actual, expected) {
|
||||
if (actual !== expected) {
|
||||
throw new Error(`${name}: got ${actual}, expected ${expected}`);
|
||||
}
|
||||
}
|
||||
|
||||
function value(expression) {
|
||||
return vm.runInContext(expression, context);
|
||||
}
|
||||
|
||||
vm.createContext(context);
|
||||
vm.runInContext(fs.readFileSync("app/static/app.js", "utf8"), context);
|
||||
|
||||
vm.runInContext(
|
||||
`
|
||||
currentRecords = [
|
||||
{ date: "2026.06.12", weekday: "星期五", time: "10:00-11:00", student: "甲", duration: "1小时0分", duration_hours: 1, teacher: "王老师", subject: "英语", _recordIndex: 0, _recordKey: "a" },
|
||||
{ date: "2026.06.12", weekday: "星期五", time: "08:00-09:00", student: "乙", duration: "1小时0分", duration_hours: 1, teacher: "王老师", subject: "英语", _recordIndex: 1, _recordKey: "b" },
|
||||
{ date: "2026.06.13", weekday: "星期六", time: "09:00-10:00", student: "丙", duration: "1小时0分", duration_hours: 1, teacher: "王老师", subject: "英语", _recordIndex: 2, _recordKey: "c" },
|
||||
{ date: "2026.06.12", weekday: "星期五", time: "07:00-08:00", student: "丁", duration: "1小时0分", duration_hours: 1, teacher: "李老师", subject: "数学", _recordIndex: 3, _recordKey: "d" },
|
||||
];
|
||||
renderGroupedRecords(currentRecords);
|
||||
`,
|
||||
context,
|
||||
);
|
||||
|
||||
assertEqual("初始日期按钮文案", value("dateSortBtn.textContent"), "日期 升序排列");
|
||||
assertEqual("初始时间按钮文案", value("timeSortBtn.textContent"), "时间 升序排列");
|
||||
assertEqual("默认组内排序", value("currentRecordOrder.join('')"), "bacd");
|
||||
|
||||
vm.runInContext("toggleRecordSort('date')", context);
|
||||
assertEqual("日期降序按钮文案", value("dateSortBtn.textContent"), "日期 降序排列");
|
||||
assertEqual("日期降序组内排序", value("currentRecordOrder.join('')"), "cbad");
|
||||
|
||||
vm.runInContext("toggleRecordSort('date'); toggleRecordSort('time')", context);
|
||||
assertEqual("时间降序按钮文案", value("timeSortBtn.textContent"), "时间 降序排列");
|
||||
assertEqual("日期升序时间降序组内排序", value("currentRecordOrder.join('')"), "abcd");
|
||||
|
||||
vm.runInContext(
|
||||
`
|
||||
correctedRecords.set("a", { ...currentRecords[0], date: "2026.06.11", weekday: "星期四", time: "07:00-08:00" });
|
||||
renderGroupedRecords(currentRecords);
|
||||
`,
|
||||
context,
|
||||
);
|
||||
assertEqual("纠错后排序仍使用显示记录", value("currentRecordOrder.join('')"), "abcd");
|
||||
|
||||
console.log("smoke test passed");
|
||||
Reference in New Issue
Block a user