236 lines
12 KiB
TypeScript
236 lines
12 KiB
TypeScript
import type { Ord, Rec } from "../src/eid/typ.ts"
|
|
import type { Pas } from "../src/pra/pas.ts"
|
|
import { assert, assertEquals } from "https://deno.land/std@0.178.0/testing/asserts.ts"
|
|
import { coll, db } from "../src/db.ts"
|
|
import { usr_c, usr_d, usr_r, usr_u } from "../src/eid/usr.ts"
|
|
import { jwk_set } from "../src/ont/jwt.ts"
|
|
import { PasCode, PasPos, pos } from "../src/pra/pos.ts"
|
|
import { aut_c, aut_d, aut_r } from "../src/eid/aut.ts"
|
|
import { soc_c, soc_d, soc_r, soc_u } from "../src/eid/soc.ts"
|
|
import { agd_c, agd_d, agd_r, agd_u } from "../src/eid/agd.ts"
|
|
import { rec_c, rec_d, rec_f } from "../src/eid/rec.ts"
|
|
import { act_c, act_d } from "../src/eid/act.ts"
|
|
import { lim_rd, lim_re } from "../src/eid/is.ts"
|
|
import { md_c, md_d, md_r } from "../src/eid/md.ts"
|
|
import { ord_c, ord_d, ord_r } from "../src/eid/ord.ts"
|
|
import { dst_c, dst_r } from "../src/eid/dst.ts"
|
|
|
|
await db("tst", true)
|
|
await jwk_set("testkey")
|
|
|
|
const json = JSON.stringify
|
|
|
|
Deno.test("pas", async () => {
|
|
const nbr = "11111111111"
|
|
const uid = await usr_c(nbr, "四川", "成都")
|
|
assert(uid === 1)
|
|
const p: PasPos = {}
|
|
assert(null === await pos(p, "pas", ""))
|
|
assertEquals(p, { etag: null, pas: null })
|
|
assertEquals(await pos(p, "pas", json({ nbr, sms: false })), { sms: false })
|
|
const pascode = await pos(p, "pas", json({ nbr, sms: true })) as PasCode
|
|
assert(pascode && pascode.sms === false && pascode.utc && pascode.utc > 0)
|
|
const pcode = await usr_r({ _id: uid }, { pcode: 1 })
|
|
assert(pcode && pcode.pcode && pcode.pcode.code > 0)
|
|
const code = pcode.pcode.code
|
|
assert(null === await pos(p, "pas", json({ nbr, code: code + 1 })))
|
|
assertEquals(p, { etag: null, pas: null })
|
|
const pas = await pos(p, "pas", json({ nbr, code: code })) as Pas
|
|
assert(p.jwt && p.jwt.length > 0 && p.pas && p.pas.uid === uid)
|
|
const jwt = p.jwt
|
|
assertEquals(p.pas, pas)
|
|
assertEquals(await pos(p, "pas", ""), pas)
|
|
assertEquals(p, { etag: null, pas, jwt: null })
|
|
assertEquals(await pos(p, "pas", ""), null)
|
|
await pos(p, "pas", json({ nbr, code: code }))
|
|
assertEquals(p.jwt, jwt)
|
|
assertEquals(await pos(p, "pas", json({ uid: p.pas.uid })), 1)
|
|
assertEquals(p, { etag: null, pas: null, jwt: null })
|
|
assertEquals(await usr_r({ _id: uid }, { ptoken: 1 }), { _id: uid })
|
|
await usr_d(uid)
|
|
})
|
|
|
|
Deno.test("pre", async () => {
|
|
const p: PasPos = {}
|
|
const actid = ["111111", "111112", "111113"]
|
|
const nbr = ["11111111111", "11111111112", "11111111113"]
|
|
const utc = Date.now()
|
|
const [adm1, adm2] = ["四川", "成都"]
|
|
await Promise.all([
|
|
act_c({ _id: actid[0], exp: utc + 1000, act: "fund", aid: 1, msg: "msg" }),
|
|
act_c({ _id: actid[1], exp: utc + 1000, act: "fund", aid: 2, msg: "msg" }),
|
|
act_c({ _id: actid[2], exp: utc + 1000, act: "nbr", uid: 1 }),
|
|
aut_c({ _id: 1, aut: ["sup", "aut"] }),
|
|
])
|
|
assertEquals([1, null, 1, null], [
|
|
await pos({}, "pre", json({ actid: actid[0], nbr: nbr[0], adm1, adm2 })),
|
|
await pos({}, "pre", json({ actid: actid[0], nbr: nbr[0], adm1, adm2 })),
|
|
await pos({}, "pre", json({ actid: actid[2], nbr: nbr[1], adm1, adm2 })),
|
|
await pos({}, "pre", json({ actid: actid[2], nbr: nbr[1], adm1, adm2 })),
|
|
])
|
|
assertEquals({ _id: 1, nbr: nbr[1] }, await usr_r({ _id: 1 }, { nbr: 1 }))
|
|
await Promise.all([
|
|
pos(p, "pas", json({ nbr: nbr[1], sms: false })),
|
|
usr_u(1, { $set: { nam: "用户一", ref: [1, 2] } }),
|
|
])
|
|
const pcode = await usr_r({ _id: 1 }, { pcode: 1 })
|
|
await pos(p, "pas", json({ nbr: nbr[1], code: pcode?.pcode?.code }))
|
|
const jwt = p.jwt
|
|
assertEquals([2, 1, 1, 1, 1, 1, null, 1], await Promise.all([
|
|
pos({ jwt }, "pre", json({ nbr: nbr[2], adm1, adm2 })),
|
|
pos({ jwt }, "pre", json({ snam: "小组", adm1, adm2 })),
|
|
pos({ jwt }, "pre", json({ anam: "活动", adm1, adm2 })),
|
|
pos({ jwt }, "pre", json({ nam: "用户一", aut: "wsl" })),
|
|
await pos({ jwt }, "pre", json({ nam: "用户一", aut: "lit" })),
|
|
pos({ jwt }, "pre", json({ nam: "用户一", aut: "lit" })),
|
|
pos({ jwt }, "pre", json({ nam: "用户二", aut: "lit" })),
|
|
pos({ jwt }, "pre", json({ wslnam: "标题" }))
|
|
]))
|
|
assertEquals({ _id: 1, aut: ["sup", "aut", "wsl"] }, await aut_r(1))
|
|
await agd_u(1, { $set: { sec: [1, 2], uid: [1], ordutc: utc - 1000, ordlim: 2, ordlimw: 1 } })
|
|
const ord = [
|
|
await pos({}, "pre", json({ aid: 1, nbr: nbr[0], sms: false, msg: "msg" })),
|
|
await pos({}, "pre", json({ aid: 1, nbr: nbr[0], sms: false, msg: "msg" })),
|
|
await pos({}, "pre", json({ aid: 1, nbr: nbr[1], sms: false, msg: "msg" })),
|
|
] as (Ord["_id"] | null)[]
|
|
assertEquals([2, null], [ord.filter(ordid => ordid !== null).length, ord[1]])
|
|
await pos({ jwt }, "pas", json({ nbr: nbr[1], code: pcode?.pcode?.code }))
|
|
const w = [
|
|
await pos({ jwt }, "pre", json({ actid: actid[1] })),
|
|
await pos({ jwt }, "pre", json({ aid: 1, msg: "msg" })),
|
|
await pos({ jwt }, "pre", json({ aid: 1, nam: "nam", src: "httpsrc" })),
|
|
await pos({ jwt }, "pre", json({ aid: 1, nam: "nam", src: "httpsrc", utcs: utc, utce: utc + 1000 })),
|
|
] as Rec["_id"][]
|
|
assertEquals([2, 1, 1, 1], w.map(w => w.aid))
|
|
const dst = await Promise.all([
|
|
pos({ jwt }, "pre", json({ rd: lim_rd, aid: 1 })),
|
|
pos({ jwt }, "pre", json({ rd: lim_rd, aid: 2 })),
|
|
])
|
|
assertEquals([1, 1], dst)
|
|
await Promise.all([
|
|
usr_d(1), usr_d(2), soc_d(1), agd_d(1),
|
|
...ord.filter(ordid => ordid !== null).map(ordid => ord_d(ordid!)),
|
|
rec_d(coll.fund, w[0]), rec_d(coll.work, w[1]), rec_d(coll.work, w[2]), rec_d(coll.work, w[3]),
|
|
aut_d(1), ...actid.map(act_d), md_d(coll.lit, 1),
|
|
])
|
|
})
|
|
|
|
Deno.test("pro", async () => {
|
|
const p: PasPos = {}
|
|
const nbr = ["11111111111", "11111111112", "11111111113"]
|
|
const utc = Date.now()
|
|
const workid = { uid: 2, aid: 1, utc }
|
|
const rej = new Array(lim_re).fill(0).map((_, n) => n + 1)
|
|
await Promise.all([
|
|
await usr_c(nbr[0], "四川", "成都"), usr_u(1, { $set: { ref: [1, 2] } }),
|
|
await usr_c(nbr[1], "广东", "汕头"), usr_u(2, { $set: { ref: [1, 2] } }),
|
|
await usr_c(nbr[2], "广东", "汕头"), usr_u(3, { $set: { ref: [2, 3] } }),
|
|
aut_c({ _id: 1, aut: ["aud", "aut"] }), aut_c({ _id: 2, aut: ["aud", "aut"] }),
|
|
...[0, 2].map(n => pos(p, "pas", json({ nbr: nbr[n], sms: false }))),
|
|
await soc_c("团体", "四川", "成都"), soc_u(1, { $set: { ref: [1, 2] } }),
|
|
await agd_c("活动", "四川", "成都"), agd_u(1, { $set: { ref: [2], sec: [2, 3], uid: [3] } }),
|
|
rec_c(coll.work, { _id: workid, rej, ref: [1, 2], work: "work", msg: "msg" }),
|
|
])
|
|
const code = await Promise.all([1, 3].map(_id => usr_r({ _id }, { pcode: 1 })))
|
|
await pos(p, "pas", json({ nbr: nbr[0], code: code[0]?.pcode?.code }))
|
|
let jwt = p.jwt
|
|
assertEquals([null, 1, 0, 1, 1, 1, null, null], await Promise.all([
|
|
pos({ jwt }, "pro", json({ re: "rej", uid: 2, add: true })),
|
|
pos({ jwt }, "pro", json({ re: "ref", uid: 3, add: true })),
|
|
pos({ jwt }, "pro", json({ re: "ref", sid: 1, add: true })),
|
|
pos({ jwt }, "pro", json({ re: "rej", sid: 1, add: true })),
|
|
pos({ jwt }, "pro", json({ re: "ref", aid: 1, add: true })),
|
|
pos({ jwt }, "pro", json({ re: "rej", aid: 1, add: true })),
|
|
pos({ jwt }, "pro", json({ re: "rej", workid, add: true })),
|
|
pos({ jwt }, "pro", json({ re: "ref", workid, add: true })),
|
|
]))
|
|
await pos(p, "pas", json({ nbr: nbr[2], code: code[1]?.pcode?.code }))
|
|
jwt = p.jwt
|
|
assertEquals([null, null, null, null, null, null, null, 1, 1, 1], await Promise.all([
|
|
pos({ jwt }, "pro", json({ re: "ref", uid: 1, add: false })),
|
|
pos({ jwt }, "pro", json({ re: "ref", uid: 3, add: false })),
|
|
pos({ jwt }, "pro", json({ re: "rej", uid: 3, add: true })),
|
|
pos({ jwt }, "pro", json({ re: "rej", uid: 4, add: true })),
|
|
pos({ jwt }, "pro", json({ re: "ref", sid: 1, add: true })),
|
|
pos({ jwt }, "pro", json({ re: "rej", aid: 1, add: true })),
|
|
pos({ jwt }, "pro", json({ re: "rej", workid, add: true })),
|
|
pos({ jwt }, "pro", json({ re: "rej", workid, add: false })),
|
|
pos({ jwt }, "pro", json({ re: "rej", workid, add: true })),
|
|
pos({ jwt }, "pro", json({ re: "ref", workid, add: true })),
|
|
]))
|
|
await Promise.all([
|
|
...[1, 2, 3].map(usr_d),
|
|
...[1, 2, 3].map(aut_d),
|
|
soc_d(1), agd_d(1),
|
|
rec_d(coll.work, workid),
|
|
])
|
|
})
|
|
|
|
Deno.test("put", async () => {
|
|
const p: PasPos = {}
|
|
const nbr = "11111111111"
|
|
const utc = Date.now()
|
|
const ordid = { nbr, aid: 1, utc }
|
|
const workid = { uid: 1, aid: 1, utc }
|
|
await Promise.all([
|
|
await usr_c(nbr, "四川", "成都"), usr_u(1, { $set: { ref: [1, 2] } }),
|
|
await soc_c("小组", "江苏", "苏州"), soc_u(1, { $set: { ref: [1, 2] } }),
|
|
await agd_c("活动", "江苏", "苏州"), agd_u(1, { $set: { ref: [1, 2], sec: [2] } }),
|
|
await ord_c({ _id: ordid, code: 1, ord: true, msg: "msg" }),
|
|
await md_c(coll.wsl, { nam: "标题", uid: 1 }),
|
|
rec_c(coll.work, { _id: workid, ref: [], rej: [], work: "work", msg: "msg" }),
|
|
aut_c({ _id: 1, aut: ["aut", "wsl"] }),
|
|
aut_c({ _id: 2, aut: ["aut", "lit"] }),
|
|
dst_c({ _id: { rd: lim_rd }, json: "" }),
|
|
pos(p, "pas", json({ nbr, sms: false })),
|
|
])
|
|
const code = await usr_r({ _id: 1 }, { pcode: 1 })
|
|
await pos(p, "pas", json({ nbr, code: code?.pcode?.code }))
|
|
const jwt = p.jwt
|
|
const uu = { nam: "用户一", adm1: "广东", adm2: "汕头", intro: "简介" }
|
|
const su = { sid: 1, nam: "小组一", adm1: "广东", adm2: "汕头", uidlim: 8 }
|
|
const au = { aid: 1, nam: "活动一", adm1: "广东", adm2: "汕头", uidlim: 8 }
|
|
const aus = { aid: 1, intro: "简介", reslim: 10, account: "http明细", budget: 9, fund: 9, expense: 9 }
|
|
const mdu = { wslid: 1, nam: "标题二", md: "#123" }
|
|
const rd = JSON.stringify({ nam: "比赛", sale: 32 })
|
|
await Promise.all([
|
|
pos({ jwt }, "put", json(uu)),
|
|
pos({ jwt }, "put", json(su)),
|
|
pos({ jwt }, "put", json(au)),
|
|
await pos({ jwt }, "put", json({ aid: 1, rol: "sec", uid: 1, add: true })),
|
|
pos({ jwt }, "put", json(aus)),
|
|
await pos({ jwt }, "put", json({ aid: 1, rol: "res", uid: 1, add: true })),
|
|
await pos({ jwt }, "put", json({ aid: 1, rol: "res", uid: 2, add: true })),
|
|
await pos({ jwt }, "put", json({ aid: 1, rol: "uid", uid: 1, add: true })),
|
|
pos({ jwt }, "put", json({ aid: 1, rol: "uid", uid: 2, add: true })),
|
|
pos({ jwt }, "put", json({ ordid, ord: false })),
|
|
pos({ jwt }, "put", json({ workid, msg: "updated" })),
|
|
pos({ jwt }, "put", json({ aid: 1 })),
|
|
pos({ jwt }, "put", json({ rd })),
|
|
pos({ jwt }, "put", json(mdu)),
|
|
])
|
|
assertEquals({ _id: 1, ...uu }, await usr_r({ _id: 1 }, { nam: 1, adm1: 1, adm2: 1, intro: 1 }))
|
|
assertEquals({ _id: 1, nam: su.nam, uidlim: su.uidlim }, await soc_r(1, { nam: 1, uidlim: 1 }))
|
|
assertEquals({
|
|
_id: 1, nam: au.nam, intro: aus.intro,
|
|
sec: [2, 1], uid: [1], res: [],
|
|
uidlim: au.uidlim, reslim: aus.reslim,
|
|
expense: aus.expense,
|
|
}, await agd_r(1, {
|
|
nam: 1, intro: 1, sec: 1, uid: 1, res: 1, uidlim: 1, reslim: 1, expense: 1,
|
|
}))
|
|
const wsl = await md_r(coll.wsl, 1, { nam: 1, md: 1, utc: 1, utcp: 1 })
|
|
assert(wsl!.utcp > wsl!.utc)
|
|
assertEquals({ nam: mdu.nam, md: mdu.md }, { nam: wsl!.nam, md: wsl!.md })
|
|
await pos({ jwt }, "put", json({ aid: 1, rol: "uid", add: false }))
|
|
await pos({ jwt }, "put", json({ aid: 1, rol: "sec", add: false }))
|
|
assertEquals({ _id: 1, sec: [], uid: [] }, await agd_r(1, { sec: 1, uid: 1 }))
|
|
await pos({ jwt }, "put", json({ aid: 1, rol: "res", uid: 1, add: true }))
|
|
await pos({ jwt }, "put", json({ aid: 1, rol: "sec", add: true }))
|
|
assertEquals({ _id: 1, sec: [1], res: [] }, await agd_r(1, { sec: 1, res: 1 }))
|
|
assertEquals({ _id: ordid, code: 1, ord: false, msg: "msg" }, await ord_r(ordid))
|
|
assertEquals([{ _id: workid, ref: [], rej: [], work: "work", msg: "updated" }], await rec_f(coll.work, 0))
|
|
assertEquals({ _id: { rd: lim_rd }, json: rd }, await dst_r({ rd: lim_rd }))
|
|
await Promise.all([usr_d(1), soc_d(1), agd_d(1), md_d(coll.wsl, 1), ord_d(ordid), rec_d(coll.work, workid), aut_d(1)])
|
|
})
|