fix: resolve CI test failures and timeouts

- Update Bun version in CI to match local version (1.2.16)
- Add bunfig.toml with 5s test timeout to prevent hanging tests
- Mock setTimeout globally in test setup to avoid timing issues
- Add NODE_ENV check to skip delays during tests
- Fix missing exports in config-encryption mock
- Remove retryDelay in tests to ensure immediate execution

These changes ensure tests run consistently between local and CI environments
This commit is contained in:
Arunavo Ray
2025-07-27 20:27:33 +05:30
parent 5d5429ac71
commit 3a9b8380d4
6 changed files with 47 additions and 14 deletions

View File

@@ -38,27 +38,17 @@ import { repoStatusEnum } from "@/types/Repository";
describe("Enhanced Gitea Operations", () => {
let originalFetch: typeof global.fetch;
let originalTimeout: typeof global.setTimeout;
beforeEach(() => {
originalFetch = global.fetch;
originalTimeout = global.setTimeout;
// Clear mocks
mockCreateMirrorJob.mockClear();
mockDb.insert.mockClear();
mockDb.update.mockClear();
// Mock setTimeout for consistent timing in tests
global.setTimeout = ((fn: Function, delay: number) => {
// Execute immediately in tests to avoid timing issues
fn();
return 0;
}) as any;
});
afterEach(() => {
global.fetch = originalFetch;
global.setTimeout = originalTimeout;
});
describe("getGiteaRepoInfo", () => {
@@ -196,7 +186,7 @@ describe("Enhanced Gitea Operations", () => {
orgName: "starred",
config,
maxRetries: 3,
retryDelay: 10,
retryDelay: 0, // No delay in tests
});
expect(orgId).toBe(999);
@@ -248,6 +238,7 @@ describe("Enhanced Gitea Operations", () => {
const orgId = await getOrCreateGiteaOrgEnhanced({
orgName: "neworg",
config,
retryDelay: 0, // No delay in tests
});
expect(orgId).toBe(777);

View File

@@ -157,9 +157,11 @@ export async function getOrCreateGiteaOrgEnhanced({
console.log(`[Org Creation] Organization creation failed due to duplicate. Will retry check.`);
// Wait before retry with exponential backoff
const delay = retryDelay * Math.pow(2, attempt);
const delay = process.env.NODE_ENV === 'test' ? 0 : retryDelay * Math.pow(2, attempt);
console.log(`[Org Creation] Waiting ${delay}ms before retry...`);
await new Promise(resolve => setTimeout(resolve, delay));
if (delay > 0) {
await new Promise(resolve => setTimeout(resolve, delay));
}
continue; // Retry the loop
}
}

View File

@@ -6,10 +6,18 @@ import type { Config, Repository } from "./db/schema";
describe("Mirror Sync Error Handling", () => {
let originalFetch: typeof global.fetch;
let originalSetTimeout: typeof global.setTimeout;
let mockDbUpdate: any;
beforeEach(() => {
originalFetch = global.fetch;
originalSetTimeout = global.setTimeout;
// Mock setTimeout to avoid delays in tests
global.setTimeout = ((fn: Function) => {
Promise.resolve().then(() => fn());
return 0;
}) as any;
// Mock database update operations
mockDbUpdate = mock(() => ({
@@ -24,6 +32,7 @@ describe("Mirror Sync Error Handling", () => {
afterEach(() => {
global.fetch = originalFetch;
global.setTimeout = originalSetTimeout;
});
describe("Mirror sync API errors", () => {