mirror of
https://github.com/RayLabsHQ/gitea-mirror.git
synced 2025-12-06 19:46:44 +03:00
- Updated GitHub Actions workflow to use Bun's test runner and coverage reporting. - Added comprehensive testing documentation for the Gitea Mirror project. - Refactored test scripts in package.json to align with Bun's testing commands. - Created new test files for database, Gitea, GitHub, health, and mirroring APIs. - Implemented mock functions for API tests to handle various scenarios and responses. - Established a test setup file for consistent test environment configuration.
134 lines
3.6 KiB
TypeScript
134 lines
3.6 KiB
TypeScript
import { describe, test, expect, mock, beforeEach, afterEach } from "bun:test";
|
|
import { POST } from "./test-connection";
|
|
import { Octokit } from "@octokit/rest";
|
|
|
|
// Mock the Octokit class
|
|
mock.module("@octokit/rest", () => {
|
|
return {
|
|
Octokit: mock(function() {
|
|
return {
|
|
users: {
|
|
getAuthenticated: mock(() => Promise.resolve({
|
|
data: {
|
|
login: "testuser",
|
|
name: "Test User",
|
|
avatar_url: "https://example.com/avatar.png"
|
|
}
|
|
}))
|
|
}
|
|
};
|
|
})
|
|
};
|
|
});
|
|
|
|
describe("GitHub Test Connection API", () => {
|
|
// Mock console.error to prevent test output noise
|
|
let originalConsoleError: typeof console.error;
|
|
|
|
beforeEach(() => {
|
|
originalConsoleError = console.error;
|
|
console.error = mock(() => {});
|
|
});
|
|
|
|
afterEach(() => {
|
|
console.error = originalConsoleError;
|
|
});
|
|
|
|
test("returns 400 if token is missing", async () => {
|
|
const request = new Request("http://localhost/api/github/test-connection", {
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "application/json"
|
|
},
|
|
body: JSON.stringify({})
|
|
});
|
|
|
|
const response = await POST({ request } as any);
|
|
|
|
expect(response.status).toBe(400);
|
|
|
|
const data = await response.json();
|
|
expect(data.success).toBe(false);
|
|
expect(data.message).toBe("GitHub token is required");
|
|
});
|
|
|
|
test("returns 200 with user data on successful connection", async () => {
|
|
const request = new Request("http://localhost/api/github/test-connection", {
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "application/json"
|
|
},
|
|
body: JSON.stringify({
|
|
token: "valid-token"
|
|
})
|
|
});
|
|
|
|
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("Successfully connected to GitHub as testuser");
|
|
expect(data.user).toEqual({
|
|
login: "testuser",
|
|
name: "Test User",
|
|
avatar_url: "https://example.com/avatar.png"
|
|
});
|
|
});
|
|
|
|
test("returns 400 if username doesn't match authenticated user", async () => {
|
|
const request = new Request("http://localhost/api/github/test-connection", {
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "application/json"
|
|
},
|
|
body: JSON.stringify({
|
|
token: "valid-token",
|
|
username: "differentuser"
|
|
})
|
|
});
|
|
|
|
const response = await POST({ request } as any);
|
|
|
|
expect(response.status).toBe(400);
|
|
|
|
const data = await response.json();
|
|
expect(data.success).toBe(false);
|
|
expect(data.message).toBe("Token belongs to testuser, not differentuser");
|
|
});
|
|
|
|
test("handles authentication errors", async () => {
|
|
// Mock Octokit to throw an error
|
|
mock.module("@octokit/rest", () => {
|
|
return {
|
|
Octokit: mock(function() {
|
|
return {
|
|
users: {
|
|
getAuthenticated: mock(() => Promise.reject(new Error("Bad credentials")))
|
|
}
|
|
};
|
|
})
|
|
};
|
|
});
|
|
|
|
const request = new Request("http://localhost/api/github/test-connection", {
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "application/json"
|
|
},
|
|
body: JSON.stringify({
|
|
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");
|
|
});
|
|
});
|