diff --git a/spec/DatabaseAdapter.spec.js b/spec/DatabaseAdapter.spec.js new file mode 100644 index 0000000000..0f43a16bcf --- /dev/null +++ b/spec/DatabaseAdapter.spec.js @@ -0,0 +1,23 @@ +'use strict'; + +let DatabaseAdapter = require('../src/DatabaseAdapter'); + +describe('DatabaseAdapter', () => { + it('options and URI are available to adapter', done => { + DatabaseAdapter.setAppDatabaseURI('optionsTest', 'mongodb://localhost:27017/optionsTest'); + DatabaseAdapter.setAppDatabaseOptions('optionsTest', {foo: "bar"}); + let optionsTestDatabaseConnection = DatabaseAdapter.getDatabaseConnection('optionsTest'); + + expect(optionsTestDatabaseConnection instanceof Object).toBe(true); + expect(optionsTestDatabaseConnection.adapter._options instanceof Object).toBe(true); + expect(optionsTestDatabaseConnection.adapter._options.foo).toBe("bar"); + + DatabaseAdapter.setAppDatabaseURI('noOptionsTest', 'mongodb://localhost:27017/noOptionsTest'); + let noOptionsTestDatabaseConnection = DatabaseAdapter.getDatabaseConnection('noOptionsTest'); + + expect(noOptionsTestDatabaseConnection instanceof Object).toBe(true); + expect(noOptionsTestDatabaseConnection.adapter._options instanceof Object).toBe(false); + + done(); + }); +}); diff --git a/spec/helper.js b/spec/helper.js index e2daa6ed25..74f9dbbde0 100644 --- a/spec/helper.js +++ b/spec/helper.js @@ -26,7 +26,7 @@ var defaultConfiguration = { collectionPrefix: 'test_', fileKey: 'test', push: { - 'ios': { + 'ios': { cert: 'prodCert.pem', key: 'prodKey.pem', production: true, @@ -81,7 +81,7 @@ afterEach(function(done) { Parse.User.logOut().then(() => { return clearData(); }).then(() => { - DatabaseAdapter.clearDatabaseURIs(); + DatabaseAdapter.clearDatabaseSettings(); done(); }, (error) => { console.log('error in clearData', error); diff --git a/src/Adapters/Storage/Mongo/MongoStorageAdapter.js b/src/Adapters/Storage/Mongo/MongoStorageAdapter.js index e3d5949360..d3d2bc7e37 100644 --- a/src/Adapters/Storage/Mongo/MongoStorageAdapter.js +++ b/src/Adapters/Storage/Mongo/MongoStorageAdapter.js @@ -10,12 +10,14 @@ const MongoSchemaCollectionName = '_SCHEMA'; export class MongoStorageAdapter { // Private _uri: string; + _options: Object; // Public connectionPromise; database; - constructor(uri: string) { + constructor(uri: string, options: Object) { this._uri = uri; + this._options = options; } connect() { @@ -23,7 +25,7 @@ export class MongoStorageAdapter { return this.connectionPromise; } - this.connectionPromise = MongoClient.connect(this._uri).then(database => { + this.connectionPromise = MongoClient.connect(this._uri, this._options).then(database => { this.database = database; }); return this.connectionPromise; diff --git a/src/DatabaseAdapter.js b/src/DatabaseAdapter.js index 6663f36bfc..51403ba3cf 100644 --- a/src/DatabaseAdapter.js +++ b/src/DatabaseAdapter.js @@ -24,6 +24,7 @@ let adapter = MongoStorageAdapter; let dbConnections = {}; let databaseURI = DefaultDatabaseURI; let appDatabaseURIs = {}; +let appDatabaseOptions = {}; function setAdapter(databaseAdapter) { adapter = databaseAdapter; @@ -37,10 +38,15 @@ function setAppDatabaseURI(appId, uri) { appDatabaseURIs[appId] = uri; } +function setAppDatabaseOptions(appId: string, options: Object) { + appDatabaseOptions[appId] = options; +} + //Used by tests -function clearDatabaseURIs() { +function clearDatabaseSettings() { appDatabaseURIs = {}; dbConnections = {}; + appDatabaseOptions = {}; } function getDatabaseConnection(appId: string, collectionPrefix: string) { @@ -50,7 +56,7 @@ function getDatabaseConnection(appId: string, collectionPrefix: string) { var dbURI = (appDatabaseURIs[appId] ? appDatabaseURIs[appId] : databaseURI); - let storageAdapter = new adapter(dbURI); + let storageAdapter = new adapter(dbURI, appDatabaseOptions[appId]); dbConnections[appId] = new DatabaseController(storageAdapter, { collectionPrefix: collectionPrefix }); @@ -62,7 +68,8 @@ module.exports = { getDatabaseConnection: getDatabaseConnection, setAdapter: setAdapter, setDatabaseURI: setDatabaseURI, + setAppDatabaseOptions: setAppDatabaseOptions, setAppDatabaseURI: setAppDatabaseURI, - clearDatabaseURIs: clearDatabaseURIs, + clearDatabaseSettings: clearDatabaseSettings, defaultDatabaseURI: databaseURI }; diff --git a/src/index.js b/src/index.js index 131f1f691a..2e4d553f1c 100644 --- a/src/index.js +++ b/src/index.js @@ -84,6 +84,7 @@ function ParseServer({ push, loggerAdapter, databaseURI = DatabaseAdapter.defaultDatabaseURI, + databaseOptions, cloud, collectionPrefix = '', clientKey, @@ -120,6 +121,10 @@ function ParseServer({ DatabaseAdapter.setAppDatabaseURI(appId, databaseURI); } + if (databaseOptions) { + DatabaseAdapter.setAppDatabaseOptions(appId, databaseOptions); + } + if (cloud) { addParseCloud(); if (typeof cloud === 'function') {