constructor (url, opts) { this._name = this.constructor.name this._plugins = {} this._schemas = {} this._models = {} this._url = url || DEFAULT_MONGODB_URL this._opts = opts || {} Query.bindQuery(this, mongodb.Db) for (const name in plugins) { this.plugin(name, plugins[name]) } }
lab.test('it binds db functions to a named connection using `with` and caches for subsequent use', async () => { const db = await MongoModels.connect(config.connection, config.options, 'named'); lab.expect(db).to.be.an.instanceof(Mongodb.Db); lab.expect(db.serverConfig.isConnected()).to.equal(true); class DummyModel extends MongoModels {} DummyModel.collectionName = 'dummies'; const count = await DummyModel.with('named').count({}); lab.expect(count).to.be.a.number(); const count2 = await DummyModel.with('named').count({}); lab.expect(count2).to.be.a.number(); MongoModels.disconnect('named'); lab.expect(db.serverConfig.isConnected()).to.equal(false); });
const dbFromArgs = function (args) { let db = MongoModels.dbs.default; if (args[0] instanceof Mongodb.Db) { db = args.shift(); } return db; }
lab.test('it connects to multiple databases', async () => { const connection2 = { uri: config.connection.uri, db: `${config.connection.db}2` }; const db = await MongoModels.connect(config.connection, config.options); const db2 = await MongoModels.connect(connection2, config.options, 'alt'); lab.expect(db).to.be.an.instanceof(Mongodb.Db); lab.expect(db2).to.be.an.instanceof(Mongodb.Db); lab.expect(db.serverConfig.isConnected()).to.equal(true); lab.expect(db2.serverConfig.isConnected()).to.equal(true); MongoModels.disconnect('alt'); MongoModels.disconnect(); lab.expect(db.serverConfig.isConnected()).to.equal(false); lab.expect(db2.serverConfig.isConnected()).to.equal(false); });
const insertOneStub = sinon.stub(mongodb.Db.prototype, 'collection').rejects(errorStub); const logErrorSpy = sinon.spy(Logger.prototype, 'error');
lab.test('it connects and disconnects the database', async () => { const db = await MongoModels.connect(config.connection, config.options); lab.expect(db).to.be.an.instanceof(Mongodb.Db); lab.expect(db.serverConfig.isConnected()).to.equal(true); MongoModels.disconnect(); lab.expect(db.serverConfig.isConnected()).to.equal(false); });