You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.8 KiB
57 lines
1.8 KiB
import { describe, it, expect } from "bun:test";
|
|
|
|
const BASE = process.env.TEST_BASE_URL ?? "http://127.0.0.1:3000";
|
|
|
|
function parseCookie(res: Response): string {
|
|
const raw = res.headers.get("set-cookie");
|
|
if (!raw) return "";
|
|
return raw.split(";")[0] ?? "";
|
|
}
|
|
|
|
(process.env.TEST_INTEGRATION ? describe : describe.skip)("auth over HTTP", () => {
|
|
it("register → me → verify → patch", async () => {
|
|
const email = `u${Date.now()}@example.com`;
|
|
const reg = await fetch(`${BASE}/api/auth/register`, {
|
|
method: "POST",
|
|
headers: { "content-type": "application/json" },
|
|
body: JSON.stringify({
|
|
email,
|
|
password: "password123",
|
|
name: "T",
|
|
age: 30,
|
|
}),
|
|
});
|
|
expect(reg.status).toBe(200);
|
|
const regJson = (await reg.json()) as {
|
|
user: { emailVerified: boolean };
|
|
_testTokens?: { verify?: string };
|
|
};
|
|
expect(regJson.user.emailVerified).toBe(false);
|
|
const cookie = parseCookie(reg);
|
|
expect(cookie.length).toBeGreaterThan(5);
|
|
|
|
const me1 = await fetch(`${BASE}/api/me`, { headers: { cookie } });
|
|
expect(me1.status).toBe(200);
|
|
|
|
const patch1 = await fetch(`${BASE}/api/me`, {
|
|
method: "PATCH",
|
|
headers: { cookie, "content-type": "application/json" },
|
|
body: JSON.stringify({ name: "T2" }),
|
|
});
|
|
expect(patch1.status).toBe(403);
|
|
|
|
const verify = await fetch(`${BASE}/api/auth/verify-email`, {
|
|
method: "POST",
|
|
headers: { "content-type": "application/json" },
|
|
body: JSON.stringify({ token: regJson._testTokens?.verify }),
|
|
});
|
|
expect(verify.status).toBe(200);
|
|
|
|
const patch2 = await fetch(`${BASE}/api/me`, {
|
|
method: "PATCH",
|
|
headers: { cookie, "content-type": "application/json" },
|
|
body: JSON.stringify({ name: "T2" }),
|
|
});
|
|
expect(patch2.status).toBe(200);
|
|
});
|
|
});
|
|
|