import { createUser, db, get, post, test } from "../helpers.ts"; import type { InviteResponse } from "../../../shared/user.ts"; import { assertEquals, assertMatch } from "@std/assert"; test("invites: anyone signed in can make one; it validates until used or stale", async () => { const user = await createUser(); assertEquals((await post("/api/invites")).status, 401); const res = await post("/api/invites", { auth: user.auth }); assertEquals(res.status, 201); const token = res.data.token; assertMatch(token, /^[A-Za-z0-9_-]{22}$/); assertEquals((await get(`/api/invites/${token}`)).status, 200); assertEquals((await get(`/api/invites/unknown`)).status, 404); db.prepare(`UPDATE invites SET used_at = ? WHERE token = ?;`).run( new Date().toISOString(), token, ); assertEquals((await get(`/api/invites/${token}`)).status, 404); db.prepare( `UPDATE invites SET used_at = NULL, created_at = ? WHERE token = ?;`, ) .run(new Date(Date.now() - 8 * 86400_000).toISOString(), token); assertEquals((await get(`/api/invites/${token}`)).status, 404); });