🎉 init: 小龙的工作空间

This commit is contained in:
大海
2026-06-06 10:40:48 +08:00
commit a188ee1426
3201 changed files with 231817 additions and 0 deletions
@@ -0,0 +1,118 @@
// User CRUD test
import { describe, it, before, after } from "node:test";
import assert from "node:assert/strict";
import { buildApp } from "../index.js";
import type { FastifyInstance } from "fastify";
let app: FastifyInstance;
let token: string;
let createdId: string;
before(async () => {
process.env.JWT_SECRET = "test-secret";
process.env.DATABASE_URL = ":memory:";
app = await buildApp();
await app.ready();
// Register and login to get a token
const regRes = await app.inject({
method: "POST",
url: "/api/auth/register",
payload: { username: `test_${Date.now()}`, password: "password123" },
});
token = regRes.json().token;
});
after(async () => {
await app.close();
});
describe("GET /api/users", () => {
it("returns empty list", async () => {
const res = await app.inject({
method: "GET",
url: "/api/users",
headers: { authorization: `Bearer ${token}` },
});
assert.equal(res.statusCode, 200);
const body = res.json();
assert.ok(Array.isArray(body.data));
});
});
describe("POST /api/users", () => {
it("creates a user", async () => {
const res = await app.inject({
method: "POST",
url: "/api/users",
headers: { authorization: `Bearer ${token}` },
payload: {
"phone": "sample-phone",
"nickname": "sample-nickname",
"avatarUrl": "sample-avatarurl"
},
});
assert.equal(res.statusCode, 201);
const body = res.json();
assert.ok(body.data.id);
createdId = body.data.id;
});
});
describe("GET /api/users/:id", () => {
it("returns the created user", async () => {
const res = await app.inject({
method: "GET",
url: `/api/users/${createdId}`,
headers: { authorization: `Bearer ${token}` },
});
assert.equal(res.statusCode, 200);
const body = res.json();
assert.equal(body.data.id, createdId);
});
it("returns 404 for nonexistent id", async () => {
const res = await app.inject({
method: "GET",
url: `/api/users/nonexistent`,
headers: { authorization: `Bearer ${token}` },
});
assert.equal(res.statusCode, 404);
});
});
describe("PUT /api/users/:id", () => {
it("updates the user", async () => {
const res = await app.inject({
method: "PUT",
url: `/api/users/${createdId}`,
headers: { authorization: `Bearer ${token}` },
payload: {
"phone": "sample-phone",
"nickname": "sample-nickname",
"avatarUrl": "sample-avatarurl"
},
});
assert.equal(res.statusCode, 200);
});
});
describe("DELETE /api/users/:id", () => {
it("deletes the user", async () => {
const res = await app.inject({
method: "DELETE",
url: `/api/users/${createdId}`,
headers: { authorization: `Bearer ${token}` },
});
assert.equal(res.statusCode, 204);
});
it("returns 404 after delete", async () => {
const res = await app.inject({
method: "GET",
url: `/api/users/${createdId}`,
headers: { authorization: `Bearer ${token}` },
});
assert.equal(res.statusCode, 404);
});
});