115 lines
3.8 KiB
JavaScript
115 lines
3.8 KiB
JavaScript
const MongoClient = require('mongodb').MongoClient;
|
|
const GridStore = require('mongodb').GridStore;
|
|
|
|
const GridStoreAdapter = require('../lib/Adapters/Files/GridStoreAdapter')
|
|
.GridStoreAdapter;
|
|
const Config = require('../lib/Config');
|
|
const FilesController = require('../lib/Controllers/FilesController').default;
|
|
|
|
// Small additional tests to improve overall coverage
|
|
describe_only_db('mongo')('GridStoreAdapter', () => {
|
|
it('should properly instanciate the GridStore when deleting a file', async done => {
|
|
const databaseURI = 'mongodb://localhost:27017/parse';
|
|
const config = Config.get(Parse.applicationId);
|
|
const gridStoreAdapter = new GridStoreAdapter(databaseURI);
|
|
const db = await gridStoreAdapter._connect();
|
|
await db.dropDatabase();
|
|
const filesController = new FilesController(
|
|
gridStoreAdapter,
|
|
Parse.applicationId,
|
|
{}
|
|
);
|
|
|
|
// save original unlink before redefinition
|
|
const originalUnlink = GridStore.prototype.unlink;
|
|
|
|
let gridStoreMode;
|
|
|
|
// new unlink method that will capture the mode in which GridStore was opened
|
|
GridStore.prototype.unlink = function() {
|
|
// restore original unlink during first call
|
|
GridStore.prototype.unlink = originalUnlink;
|
|
|
|
gridStoreMode = this.mode;
|
|
|
|
return originalUnlink.call(this);
|
|
};
|
|
|
|
filesController
|
|
.createFile(config, 'myFilename.txt', 'my file content', 'text/plain')
|
|
.then(myFile => {
|
|
return MongoClient.connect(databaseURI)
|
|
.then(client => {
|
|
const database = client.db(client.s.options.dbName);
|
|
// Verify the existance of the fs.files document
|
|
return database
|
|
.collection('fs.files')
|
|
.count()
|
|
.then(count => {
|
|
expect(count).toEqual(1);
|
|
return { database, client };
|
|
});
|
|
})
|
|
.then(({ database, client }) => {
|
|
// Verify the existance of the fs.files document
|
|
return database
|
|
.collection('fs.chunks')
|
|
.count()
|
|
.then(count => {
|
|
expect(count).toEqual(1);
|
|
return client.close();
|
|
});
|
|
})
|
|
.then(() => {
|
|
return filesController.deleteFile(config, myFile.name);
|
|
});
|
|
})
|
|
.then(() => {
|
|
return MongoClient.connect(databaseURI)
|
|
.then(client => {
|
|
const database = client.db(client.s.options.dbName);
|
|
// Verify the existance of the fs.files document
|
|
return database
|
|
.collection('fs.files')
|
|
.count()
|
|
.then(count => {
|
|
expect(count).toEqual(0);
|
|
return { database, client };
|
|
});
|
|
})
|
|
.then(({ database, client }) => {
|
|
// Verify the existance of the fs.files document
|
|
return database
|
|
.collection('fs.chunks')
|
|
.count()
|
|
.then(count => {
|
|
expect(count).toEqual(0);
|
|
return client.close();
|
|
});
|
|
});
|
|
})
|
|
.then(() => {
|
|
// Verify that gridStore was opened in read only mode
|
|
expect(gridStoreMode).toEqual('r');
|
|
|
|
done();
|
|
})
|
|
.catch(fail);
|
|
});
|
|
|
|
it('handleShutdown, close connection', done => {
|
|
const databaseURI = 'mongodb://localhost:27017/parse';
|
|
const gridStoreAdapter = new GridStoreAdapter(databaseURI);
|
|
|
|
gridStoreAdapter._connect().then(db => {
|
|
expect(db.serverConfig.connections().length > 0).toEqual(true);
|
|
expect(db.serverConfig.s.connected).toEqual(true);
|
|
gridStoreAdapter.handleShutdown().then(() => {
|
|
expect(db.serverConfig.connections().length > 0).toEqual(false);
|
|
expect(db.serverConfig.s.connected).toEqual(false);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|