// @ts-check /** * @typedef {import('mongodb').MongoClient} MongoClient * @typedef {import('mongodb-legacy').MongoClient} LegacyMongoClient */ /** * Delete all data from the test Mongo database * * This doesn't drop the collections, so indexes are preserved. * * @param {MongoClient | LegacyMongoClient} mongoClient */ async function cleanupTestDatabase(mongoClient) { ensureTestDatabase(mongoClient) const db = mongoClient.db() const allCollections = await db.collections() const collections = allCollections.filter( coll => coll.collectionName !== 'migrations' ) await Promise.all(collections.map(coll => coll.deleteMany({}))) } /** * Drop the test Monto database * * This drops the whole database, including indexes. * * @param {MongoClient | LegacyMongoClient } mongoClient */ async function dropTestDatabase(mongoClient) { ensureTestDatabase(mongoClient) await mongoClient.db().dropDatabase() } /** * Ensure that the given client is connected to a test database. * * This should be called before performing destructive operations on the test * database. * * @param {MongoClient | LegacyMongoClient } mongoClient */ function ensureTestDatabase(mongoClient) { const dbName = mongoClient.db().databaseName const env = process.env.NODE_ENV if (dbName !== 'test-overleaf' || env !== 'test') { throw new Error( `Refusing to clear database '${dbName}' in environment '${env}'` ) } } module.exports = { cleanupTestDatabase, dropTestDatabase }