feat: simplify testing structure into api and e2e categories
This commit is contained in:
41
__tests__/api/api.test.ts
Normal file
41
__tests__/api/api.test.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
import { describe, expect, it } from "bun:test";
|
||||
import api from "@/api";
|
||||
|
||||
describe("API Integration", () => {
|
||||
it("should return 200 for health check", async () => {
|
||||
const response = await api.handle(
|
||||
new Request("http://localhost/api/health"),
|
||||
);
|
||||
expect(response.status).toBe(200);
|
||||
const data = await response.json();
|
||||
expect(data).toEqual({ ok: true });
|
||||
});
|
||||
|
||||
it("should return 401 for protected session endpoint without cookies", async () => {
|
||||
const response = await api.handle(
|
||||
new Request("http://localhost/api/session"),
|
||||
);
|
||||
// Since session requires authentication, it should either return 401 or null data
|
||||
const data = await response.json();
|
||||
expect(data.data).toBe(null);
|
||||
});
|
||||
|
||||
it("should return 401 or 422 for protected apikey endpoint without auth", async () => {
|
||||
const response = await api.handle(
|
||||
new Request("http://localhost/api/apikey/"),
|
||||
);
|
||||
// 401 is intended, 422 is returned by Elysia when the error response doesn't match the schema
|
||||
expect([401, 422]).toContain(response.status);
|
||||
});
|
||||
|
||||
it("should return 401 for profile update without auth", async () => {
|
||||
const response = await api.handle(
|
||||
new Request("http://localhost/api/profile/update", {
|
||||
method: "POST",
|
||||
body: JSON.stringify({ name: "New Name" }),
|
||||
headers: { "Content-Type": "application/json" },
|
||||
}),
|
||||
);
|
||||
expect([401, 422]).toContain(response.status);
|
||||
});
|
||||
});
|
||||
23
__tests__/api/database.test.ts
Normal file
23
__tests__/api/database.test.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
import { describe, expect, it } from "bun:test";
|
||||
import { prisma } from "@/utils/db";
|
||||
|
||||
describe("Database Integration", () => {
|
||||
it("should connect to the database and query users", async () => {
|
||||
// Try to count users to verify connection
|
||||
const count = await prisma.user.count();
|
||||
expect(typeof count).toBe("number");
|
||||
});
|
||||
|
||||
it("should be able to find a user by email (if exists)", async () => {
|
||||
const adminEmail =
|
||||
process.env.ADMIN_EMAIL || "kurosakiblackangel@gmail.com";
|
||||
const user = await prisma.user.findUnique({
|
||||
where: { email: adminEmail },
|
||||
});
|
||||
|
||||
// We don't fail if user doesn't exist, but if it does, it should match
|
||||
if (user) {
|
||||
expect(user.email).toBe(adminEmail);
|
||||
}
|
||||
});
|
||||
});
|
||||
23
__tests__/api/features.test.ts
Normal file
23
__tests__/api/features.test.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
import { describe, expect, it } from "bun:test";
|
||||
import { getEnv } from "@/utils/env";
|
||||
|
||||
describe("Feature Utilities", () => {
|
||||
describe("getEnv Utility", () => {
|
||||
it("should return default value if env is not found", () => {
|
||||
const val = getEnv("NON_EXISTENT_KEY", "fallback");
|
||||
expect(val).toBe("fallback");
|
||||
});
|
||||
|
||||
it("should return value from process.env if available", () => {
|
||||
// Mock process.env
|
||||
const originalEnv = { ...process.env };
|
||||
process.env.TEST_ENV_KEY = "test-value";
|
||||
|
||||
const val = getEnv("TEST_ENV_KEY");
|
||||
expect(val).toBe("test-value");
|
||||
|
||||
// Clean up
|
||||
delete process.env.TEST_ENV_KEY;
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user