UNPKG

@imigueldiaz/mongodb-labeler

Version:

A MongoDB-based labeling system for content moderation with cryptographic signing

69 lines (68 loc) 2.24 kB
import { MongoMemoryServer } from 'mongodb-memory-server'; import { MongoClient } from 'mongodb'; import { vi, beforeAll, afterAll, afterEach } from 'vitest'; // Inicialización de variables globales let mongoClient = null; // Initialize MongoDB Memory Server before all tests beforeAll(async () => { // Initialize global mocks globalThis.mockFindLabelsError = false; globalThis.mockLabels = undefined; // Mock XRPC Error vi.mock("@atproto/xrpc", () => ({ // eslint-disable-next-line @typescript-eslint/naming-convention XRPCError: class XRPCError extends Error { constructor(status, message) { super(message); this.name = "XRPCError"; this.status = status; } }, })); try { globalThis.__MONGOD__ = await MongoMemoryServer.create({ instance: { dbName: 'vitest', storageEngine: 'wiredTiger' } }); console.log('MongoDB Memory Server started successfully'); mongoClient = await MongoClient.connect(globalThis.__MONGOD__.getUri()); } catch (error) { console.error('Failed to start MongoDB Memory Server:', error); throw error; } }); // Cleanup after all tests afterAll(async () => { try { if (mongoClient) { await mongoClient.close(true); mongoClient = null; } await new Promise(resolve => setTimeout(resolve, 1000)); if (globalThis.__MONGOD__) { await globalThis.__MONGOD__.stop({ doCleanup: true }); console.log('MongoDB Memory Server stopped successfully'); } } catch (error) { console.error('Failed to stop MongoDB Memory Server:', error); throw error; } }); // Helper function to get MongoDB URI with type safety export function getMongodUri() { const mongod = globalThis.__MONGOD__; if (!mongod) { throw new Error('MongoDB Memory Server is not initialized'); } return mongod.getUri(); } // Hooks para limpieza entre tests afterEach(() => { globalThis.mockFindLabelsError = false; globalThis.mockLabels = undefined; vi.clearAllMocks(); });