All checks were successful
Build and Publish Docker Image / build-and-push (push) Successful in 50s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
25 lines
1.1 KiB
TypeScript
25 lines
1.1 KiB
TypeScript
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<InviteResponse>("/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);
|
|
});
|