| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- // @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 }
|