/ opencodehub / tests / e2e / api-smoke.spec.ts
Swadhin Biswas test(e2e): fix 19 failing Playwright tests + a11y/UX/accessibility polish · 6/4/2026
aa23026
59 lines · 2.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import { expect, test } from "@playwright/test";

test.describe("API Smoke Tests", () => {
  test("search API returns 200 for valid query", async ({ request }) => {
    const res = await request.get("/api/search?q=test");
    expect(res.status()).toBe(200);
    const json = await res.json();
    const results = json?.data?.results ?? json?.results;
    expect(results).toBeDefined();
    expect(Array.isArray(results)).toBe(true);
  });

  test("search API returns empty for short query", async ({ request }) => {
    const res = await request.get("/api/search?q=a");
    expect(res.status()).toBe(200);
    const json = await res.json();
    const results = json?.data?.results ?? json?.results ?? [];
    expect(results).toEqual([]);
  });

  test("auth me API returns 401 without token", async ({ request }) => {
    const res = await request.get("/api/auth/me");
    expect(res.status()).toBe(401);
  });

  test("user API returns 401 without token", async ({ request }) => {
    const res = await request.get("/api/user");
    expect(res.status()).toBe(401);
  });

  test("notifications API returns 401 without token", async ({ request }) => {
    const res = await request.get("/api/notifications");
    expect(res.status()).toBe(401);
  });

  test("login API rejects empty body", async ({ request }) => {
    const res = await request.post("/api/auth/login", {
      data: {},
      headers: { "Content-Type": "application/json" },
    });
    // 400 = validation, 401 = auth, 403 = CSRF
    expect([400, 401, 403]).toContain(res.status());
  });

  test("register API rejects invalid data", async ({ request }) => {
    const res = await request.post("/api/auth/register", {
      data: { username: "a" }, // too short, missing fields
      headers: { "Content-Type": "application/json" },
    });
    // 400 = validation, 422 = unprocessable, 403 = CSRF
    expect([400, 422, 403]).toContain(res.status());
  });

  test("CSRF token endpoint exists", async ({ request }) => {
    const res = await request.get("/api/auth/csrf-token");
    expect([200, 404]).toContain(res.status());
  });
});