From 2eda800a7c0845a6aca0e710151b22cb827069ea Mon Sep 17 00:00:00 2001 From: Arunavo Ray Date: Thu, 12 Jun 2025 10:24:55 +0530 Subject: [PATCH] refactor: update test files to use bun:test and remove vitest configuration --- src/pages/api/github/test-connection.test.ts | 14 ++-- src/pages/api/job/mirror-repo.test.ts | 84 ++++++++++++++------ src/tests/example.test.ts | 4 +- src/tests/setup.ts | 8 -- vitest.config.ts | 20 ----- 5 files changed, 70 insertions(+), 60 deletions(-) delete mode 100644 src/tests/setup.ts delete mode 100644 vitest.config.ts diff --git a/src/pages/api/github/test-connection.test.ts b/src/pages/api/github/test-connection.test.ts index db04639..f925838 100644 --- a/src/pages/api/github/test-connection.test.ts +++ b/src/pages/api/github/test-connection.test.ts @@ -111,7 +111,7 @@ describe("GitHub Test Connection API", () => { }) }; }); - + const request = new Request("http://localhost/api/github/test-connection", { method: "POST", headers: { @@ -121,13 +121,15 @@ describe("GitHub Test Connection API", () => { token: "invalid-token" }) }); - + const response = await POST({ request } as any); - + expect(response.status).toBe(500); - + const data = await response.json(); - expect(data.success).toBe(false); - expect(data.message).toContain("Bad credentials"); + // The createSecureErrorResponse function returns an error field, not success + // It sanitizes error messages for security, so we expect the generic message + expect(data.error).toBeDefined(); + expect(data.error).toBe("An internal server error occurred"); }); }); diff --git a/src/pages/api/job/mirror-repo.test.ts b/src/pages/api/job/mirror-repo.test.ts index 8eb882f..8c3e7ec 100644 --- a/src/pages/api/job/mirror-repo.test.ts +++ b/src/pages/api/job/mirror-repo.test.ts @@ -1,34 +1,68 @@ import { describe, test, expect, mock, beforeEach, afterEach } from "bun:test"; import type { MirrorRepoRequest } from "@/types/mirror"; +import { POST } from "./mirror-repo"; // Mock the database module const mockDb = { select: mock(() => ({ - from: mock(() => ({ - where: mock(() => ({ - limit: mock(() => Promise.resolve([{ - id: "config-id", - userId: "user-id", - githubConfig: { - token: "github-token", - preserveOrgStructure: false, - mirrorIssues: false + from: mock((table: any) => ({ + where: mock(() => { + // Return config for configs table + if (table === mockConfigs) { + return { + limit: mock(() => Promise.resolve([{ + id: "config-id", + userId: "user-id", + githubConfig: { + token: "github-token", + preserveOrgStructure: false, + mirrorIssues: false + }, + giteaConfig: { + url: "https://gitea.example.com", + token: "gitea-token", + username: "giteauser" + } + }])) + }; + } + // Return repositories for repositories table + return Promise.resolve([ + { + id: "repo-id-1", + name: "test-repo-1", + visibility: "public", + status: "pending", + organization: null, + lastMirrored: null, + errorMessage: null, + forkedFrom: null, + mirroredLocation: "" }, - giteaConfig: { - url: "https://gitea.example.com", - token: "gitea-token", - username: "giteauser" + { + id: "repo-id-2", + name: "test-repo-2", + visibility: "public", + status: "pending", + organization: null, + lastMirrored: null, + errorMessage: null, + forkedFrom: null, + mirroredLocation: "" } - }])) - })) + ]); + }) })) })) }; +const mockConfigs = {}; +const mockRepositories = {}; + mock.module("@/lib/db", () => ({ db: mockDb, - configs: {}, - repositories: {} + configs: mockConfigs, + repositories: mockRepositories })); // Mock the gitea module @@ -98,12 +132,13 @@ describe("Repository Mirroring API", () => { }) }); - const response = await mockModule.POST({ request } as any); + const response = await POST({ request } as any); expect(response.status).toBe(400); const data = await response.json(); - expect(data.error).toBe("Missing userId or repositoryIds."); + expect(data.success).toBe(false); + expect(data.message).toBe("userId and repositoryIds are required."); }); test("returns 400 if repositoryIds is missing", async () => { @@ -117,12 +152,13 @@ describe("Repository Mirroring API", () => { }) }); - const response = await mockModule.POST({ request } as any); + const response = await POST({ request } as any); expect(response.status).toBe(400); const data = await response.json(); - expect(data.error).toBe("Missing userId or repositoryIds."); + expect(data.success).toBe(false); + expect(data.message).toBe("userId and repositoryIds are required."); }); test("returns 200 and starts mirroring repositories", async () => { @@ -137,13 +173,13 @@ describe("Repository Mirroring API", () => { }) }); - const response = await mockModule.POST({ request } as any); + const response = await POST({ request } as any); expect(response.status).toBe(200); const data = await response.json(); expect(data.success).toBe(true); - expect(data.message).toBe("Repository mirroring started"); - expect(data.batchId).toBe("test-batch-id"); + expect(data.message).toBe("Mirror job started."); + expect(data.repositories).toBeDefined(); }); }); diff --git a/src/tests/example.test.ts b/src/tests/example.test.ts index 9b3fd5e..a191226 100644 --- a/src/tests/example.test.ts +++ b/src/tests/example.test.ts @@ -1,8 +1,8 @@ // example.test.ts -import { describe, it, expect } from "vitest"; +import { describe, test, expect } from "bun:test"; describe("Example Test", () => { - it("should pass", () => { + test("should pass", () => { expect(true).toBe(true); }); }); diff --git a/src/tests/setup.ts b/src/tests/setup.ts deleted file mode 100644 index c980f9c..0000000 --- a/src/tests/setup.ts +++ /dev/null @@ -1,8 +0,0 @@ -import "@testing-library/jest-dom"; -import { expect, afterEach } from "vitest"; -import { cleanup } from "@testing-library/react"; - -// Run cleanup after each test case (e.g. clearing jsdom) -afterEach(() => { - cleanup(); -}); diff --git a/vitest.config.ts b/vitest.config.ts deleted file mode 100644 index 40977ad..0000000 --- a/vitest.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { defineConfig } from 'vitest/config'; -import react from '@vitejs/plugin-react'; -import { fileURLToPath } from 'url'; -import path from 'path'; - -const __dirname = path.dirname(fileURLToPath(import.meta.url)); - -export default defineConfig({ - plugins: [react()], - test: { - environment: 'jsdom', - globals: true, - setupFiles: ['./src/tests/setup.ts'], - }, - resolve: { - alias: { - '@': path.resolve(__dirname, './src'), - }, - }, -});