完成50%
This commit is contained in:
@@ -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);
|
||||
});
|
||||
Reference in New Issue
Block a user