完成50%

This commit is contained in:
2026-07-23 08:23:59 +08:00
parent 9b0ad62df4
commit f1edc6b533
218 changed files with 24318 additions and 5514 deletions
+88
View File
@@ -0,0 +1,88 @@
"use strict";
const assert = require("assert");
const fs = require("fs");
const path = require("path");
const toDataModuleUrl = (source) =>
`data:text/javascript;base64,${Buffer.from(source).toString("base64")}`;
const run = async () => {
const sessionPath = path.join(__dirname, "../utils/session.js");
const contextPath = path.join(__dirname, "../utils/genealogy-context.js");
const contextUrl = toDataModuleUrl(fs.readFileSync(contextPath, "utf8"));
const originalSessionSource = fs.readFileSync(sessionPath, "utf8");
const sessionSource = originalSessionSource.replace(
/from\s+["']\.\/genealogy-context\.js["']\s*;/,
`from "${contextUrl}";`,
);
assert.notStrictEqual(
sessionSource,
originalSessionSource,
"session 必须消费唯一的当前家谱上下文所有者",
);
const storage = new Map();
const removals = [];
globalThis.uni = {
getStorageSync: (key) => storage.get(key) || "",
setStorageSync: (key, value) => storage.set(key, value),
removeStorageSync: (key) => {
removals.push(key);
storage.delete(key);
},
};
const { session } = await import(toDataModuleUrl(sessionSource));
assert.throws(
() => session.saveToken(""),
/会话令牌/,
"空令牌不能覆盖现有会话",
);
session.saveToken("token-1");
globalThis.uni.setStorageSync("jiapu_current_genealogy_id", "genealogy-1");
assert.strictEqual(session.getToken(), "token-1");
session.saveToken("token-1");
assert.strictEqual(
globalThis.uni.getStorageSync("jiapu_current_genealogy_id"),
"genealogy-1",
"同一会话重复保存不得清掉用户当前家谱",
);
session.saveToken("token-2");
assert.strictEqual(session.getToken(), "token-2");
assert.strictEqual(
globalThis.uni.getStorageSync("jiapu_current_genealogy_id"),
"",
"账号令牌变化必须先清理旧账号的家谱上下文",
);
globalThis.uni.setStorageSync("jiapu_current_genealogy_id", "genealogy-2");
session.clear();
assert.deepStrictEqual(
removals,
[
"jiapu_current_genealogy_id",
"jiapu_current_genealogy_invalidated",
"jiapu_current_genealogy_id",
"jiapu_current_genealogy_invalidated",
"jiapu_token",
"jiapu_current_genealogy_id",
"jiapu_current_genealogy_invalidated",
],
"换账号与退出必须按唯一 owner 清理旧家谱上下文",
);
assert.strictEqual(session.getToken(), "");
assert.strictEqual(globalThis.uni.getStorageSync("jiapu_current_genealogy_id"), "");
assert.strictEqual(globalThis.uni.getStorageSync("jiapu_current_genealogy_invalidated"), "");
process.stdout.write("SESSION-RUNTIME-SMOKE PASS\n");
};
run().catch((error) => {
process.stderr.write(`${error.stack || error.message}\n`);
process.exit(1);
});