Fix tests

This commit is contained in:
Arunavo Ray
2025-07-17 13:05:18 +05:30
parent 39bfb1e2d1
commit bde1f7b5d6
3 changed files with 117 additions and 52 deletions

View File

@@ -4,61 +4,68 @@ import fs from "fs";
import path from "path";
import { migrate } from "drizzle-orm/bun-sqlite/migrator";
// Define the database URL - for development we'll use a local SQLite file
const dataDir = path.join(process.cwd(), "data");
// Ensure data directory exists
if (!fs.existsSync(dataDir)) {
fs.mkdirSync(dataDir, { recursive: true });
}
// Skip database initialization in test environment
let db: ReturnType<typeof drizzle>;
const dbPath = path.join(dataDir, "gitea-mirror.db");
if (process.env.NODE_ENV !== "test") {
// Define the database URL - for development we'll use a local SQLite file
const dataDir = path.join(process.cwd(), "data");
// Ensure data directory exists
if (!fs.existsSync(dataDir)) {
fs.mkdirSync(dataDir, { recursive: true });
}
// Create an empty database file if it doesn't exist
if (!fs.existsSync(dbPath)) {
fs.writeFileSync(dbPath, "");
}
const dbPath = path.join(dataDir, "gitea-mirror.db");
// Create SQLite database instance using Bun's native driver
let sqlite: Database;
try {
sqlite = new Database(dbPath);
console.log("Successfully connected to SQLite database using Bun's native driver");
} catch (error) {
console.error("Error opening database:", error);
throw error;
}
// Create an empty database file if it doesn't exist
if (!fs.existsSync(dbPath)) {
fs.writeFileSync(dbPath, "");
}
// Create drizzle instance with the SQLite client
export const db = drizzle({ client: sqlite });
/**
* Run Drizzle migrations
*/
function runDrizzleMigrations() {
// Create SQLite database instance using Bun's native driver
let sqlite: Database;
try {
console.log("🔄 Checking for pending migrations...");
// Check if migrations table exists
const migrationsTableExists = sqlite
.query("SELECT name FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'")
.get();
if (!migrationsTableExists) {
console.log("📦 First time setup - running initial migrations...");
}
// Run migrations using Drizzle migrate function
migrate(db, { migrationsFolder: "./drizzle" });
console.log("✅ Database migrations completed successfully");
sqlite = new Database(dbPath);
console.log("Successfully connected to SQLite database using Bun's native driver");
} catch (error) {
console.error("Error running migrations:", error);
console.error("Error opening database:", error);
throw error;
}
// Create drizzle instance with the SQLite client
db = drizzle({ client: sqlite });
/**
* Run Drizzle migrations
*/
function runDrizzleMigrations() {
try {
console.log("🔄 Checking for pending migrations...");
// Check if migrations table exists
const migrationsTableExists = sqlite
.query("SELECT name FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'")
.get();
if (!migrationsTableExists) {
console.log("📦 First time setup - running initial migrations...");
}
// Run migrations using Drizzle migrate function
migrate(db, { migrationsFolder: "./drizzle" });
console.log("✅ Database migrations completed successfully");
} catch (error) {
console.error("❌ Error running migrations:", error);
throw error;
}
}
// Run Drizzle migrations after db is initialized
runDrizzleMigrations();
}
// Run Drizzle migrations after db is initialized
runDrizzleMigrations();
export { db };
// Export all table definitions from schema
export {

View File

@@ -480,6 +480,9 @@ export async function getOrCreateGiteaOrg({
try {
console.log(`Attempting to get or create Gitea organization: ${orgName}`);
// Decrypt config tokens for API usage
const decryptedConfig = decryptConfigTokens(config as Config);
const orgRes = await fetch(
`${config.giteaConfig.url}/api/v1/orgs/${orgName}`,
{

View File

@@ -3,16 +3,71 @@
* This file is automatically loaded before running tests
*/
import { afterEach, beforeEach } from "bun:test";
import { mock } from "bun:test";
// Clean up after each test
afterEach(() => {
// Add any cleanup logic here
// Set NODE_ENV to test
process.env.NODE_ENV = "test";
// Mock the database module to prevent real database access during tests
mock.module("@/lib/db", () => {
const mockDb = {
select: () => ({
from: () => ({
where: () => ({
limit: () => Promise.resolve([])
})
})
}),
insert: () => ({
values: () => Promise.resolve()
}),
update: () => ({
set: () => ({
where: () => Promise.resolve()
})
}),
delete: () => ({
where: () => Promise.resolve()
})
};
return {
db: mockDb,
users: {},
events: {},
configs: {},
repositories: {},
mirrorJobs: {},
organizations: {},
sessions: {},
accounts: {},
verificationTokens: {},
oauthApplications: {},
oauthAccessTokens: {},
oauthConsent: {},
ssoProviders: {}
};
});
// Setup before each test
beforeEach(() => {
// Add any setup logic here
// Mock drizzle-orm to prevent database migrations from running
mock.module("drizzle-orm/bun-sqlite/migrator", () => {
return {
migrate: () => {}
};
});
// Mock config encryption utilities
mock.module("@/lib/utils/config-encryption", () => {
return {
decryptConfigTokens: (config: any) => {
// Return the config as-is for tests
return config;
},
encryptConfigTokens: (config: any) => {
// Return the config as-is for tests
return config;
}
};
});
// Add DOM testing support if needed