统一单入口 Go 工程与前端依赖目录,增加后台供应商配置、候选审核、计划预算、成交冲正、持仓复盘和站内通知。接入策略版本、Python 回测、可配置 A 股公开行情及 zap 文件轮转日志,补充迁移、契约与验证。
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
import {test} from "node:test"
|
||||
import assert from "node:assert/strict"
|
||||
import {createStorageQueue,parseSession} from "../src/lib/session-data.ts"
|
||||
const valid={access_token:"a".repeat(43),expires_at:"2026-12-01T10:00:00Z",user:{id:"7f8fd1ca-30e8-4dfb-82a9-8655fbd354ac",display_name:"测试用户",status:"ACTIVE"}}
|
||||
test("session restoration requires a valid app credential and active identity",()=>{
|
||||
assert.deepEqual(parseSession(valid),valid)
|
||||
for(const value of [null,{}, {...valid,access_token:"admin cookie"},{...valid,expires_at:"invalid"},{...valid,user:{...valid.user,status:"DISABLED"}},{...valid,user:{...valid.user,id:"other"}}])assert.equal(parseSession(value),null)
|
||||
})
|
||||
test("ordered secret storage prevents expiration cleanup from erasing a newer login",async()=>{
|
||||
const persist=createStorageQueue();let stored="old-session";const operations:string[]=[]
|
||||
let release:()=>void=()=>{}
|
||||
const barrier=new Promise<void>(resolve=>{release=resolve})
|
||||
const clear=persist(async()=>{await barrier;stored="";operations.push("clear")})
|
||||
const login=persist(async()=>{stored="new-session";operations.push("save")})
|
||||
release();await Promise.all([clear,login]);assert.deepEqual(operations,["clear","save"]);assert.equal(stored,"new-session")
|
||||
})
|
||||
test("a failed storage operation does not prevent later recovery",async()=>{
|
||||
const persist=createStorageQueue();await assert.rejects(persist(async()=>{throw new Error("storage failure")}))
|
||||
let recovered=false;await persist(async()=>{recovered=true});assert.equal(recovered,true)
|
||||
})
|
||||
Reference in New Issue
Block a user