UNPKG

admin-mongo

Version:

A Web user interface to administer MongoDB databases built using Express

215 lines (192 loc) 8.18 kB
/* global it, describe, toEJSON */ var request = require('supertest'); var assert = require('chai').assert; var jsdom = require('mocha-jsdom'); var fs = require('fs'); var conn_name = 'TestConnection'; var db_name = 'NewTestDB'; var coll_name = 'NewTestCollection'; var user_name = 'TestNewUser'; const app = require('../app'); var agent = request.agent(app); describe('Add connection, database and collection', function(){ it('Add a new connection', function(done){ agent .post('/config/add_config') .send({0: conn_name, 1: 'mongodb://localhost:27017', 2: '{}'}) .expect(200) .expect({'msg': 'Config successfully added'}, done); }); it('Add a database', function(done){ agent .post('/database/' + conn_name + '/db_create') .send({'db_name': db_name}) .expect(200) .expect({'msg': 'Database successfully created'}, done); }); it('Add a collection', function(done){ agent .post('/collection/' + conn_name + '/' + db_name + '/coll_create') .send({'collection_name': coll_name}) .expect(200) .expect({'msg': 'Collection successfully created'}, done); }); }); describe('User tests', function(){ it('Create a user', function(done){ var json = { 'username': user_name, 'user_password': 'test', 'roles_text': 'read' }; agent .post('/users/' + conn_name + '/' + db_name + '/user_create') .send(json) .expect(200) .expect({'msg': 'User successfully created'}, done); }); it('Delete a user', function(done){ agent .post('/users/' + conn_name + '/' + db_name + '/user_delete') .send({'username': user_name}) .expect(200) .expect({'msg': 'User successfully deleted'}, done); }); }); // as this requires JSDOM to properly test document adding/validation // these tests only support Nodejs 4 or above as per JSDOM's requirements if(process.version.substring(1, 2) >= 4){ describe('Document tests', function(){ var oid_doc_id = ''; var doc_id; jsdom({ src: fs.readFileSync('./public/js/toEJSON.js', 'utf-8') }); it('Add a document', function(done){ var dte = new Date(); var json = '{"NewTestDocument":"Test Data","NewTestDateToday": ISODate("' + dte.toISOString() + '"),"NewTestDate5Days": ISODate("' + new Date(dte.setDate(dte.getDate() - 5)).toISOString() + '")}'; var strJSON = toEJSON.serializeString(json); agent .post('/document/' + conn_name + '/' + db_name + '/' + coll_name + '/insert_doc') .send({'objectData': strJSON}) .expect(200) .end(function(err, result){ assert.equal(result.body.msg, 'Document successfully added'); oid_doc_id = result.body.doc_id; done(); }); }); it('Find document using ObjectID', function(done){ var qryJson = "{'_id': ObjectId('" + oid_doc_id + "')}"; var strJSON = toEJSON.serializeString(qryJson); agent .post('/api/' + conn_name + '/' + db_name + '/' + coll_name + '/1') .send({'query': strJSON}) .expect(200) .end(function(err, result){ assert.equal(result.body.data[0]._id, oid_doc_id); done(); }); }); it('Find document using non existant ObjectID', function(done){ var qryJson = '{"_id": ObjectId("56a97ed3f718fe9a4f59948c")}'; var strJSON = toEJSON.serializeString(qryJson); agent .post('/api/' + conn_name + '/' + db_name + '/' + coll_name + '/1') .send({'query': strJSON}) .expect(200) .end(function(err, result){ assert.equal(result.body.data.length, 0); done(); }); }); it('Send in an incorrect syntax query', function(done){ var qryJson = '{"_id": ObjectId("56a97ed3f718fe9a4f59948cds")}'; var strJSON = toEJSON.serializeString(qryJson); agent .post('/api/' + conn_name + '/' + db_name + '/' + coll_name + '/1') .send({'query': strJSON}) .expect(200) .end(function(err, result){ assert.equal(result.body.validQuery, false); done(); }); }); it('Find document using valid date', function(done){ var qryJson = '{"NewTestDateToday" : {"$gte": ISODate("2013-10-01T00:00:00.000Z")}}'; var strJSON = toEJSON.serializeString(qryJson); agent .post('/api/' + conn_name + '/' + db_name + '/' + coll_name + '/1') .send({'query': strJSON}) .expect(200) .end(function(err, result){ assert.equal(result.body.data[0]._id, oid_doc_id); done(); }); }); it('Find document using invalid date', function(done){ var qryJson = '{"NewTestDateToday" : {"$lte": ISODate("2013-10-01T00:00:00.000Z")}}'; var strJSON = toEJSON.serializeString(qryJson); agent .post('/api/' + conn_name + '/' + db_name + '/' + coll_name + '/1') .send({'query': strJSON}) .expect(200) .end(function(err, result){ assert.equal(result.body.data.length, 0); done(); }); }); it('Find document using string values', function(done){ var json = {'NewTestDocument': 'Test Data'}; var strJSON = JSON.stringify(json); agent .post('/api/' + conn_name + '/' + db_name + '/' + coll_name + '/1') .send({'query': strJSON}) .expect(200) .end(function(err, res){ assert.equal(res.body.data[0].NewTestDocument, 'Test Data'); doc_id = res.body.data[0]._id; done(); }); }); it('Delete our new document', function(done){ agent .post('/document/' + conn_name + '/' + db_name + '/' + coll_name + '/doc_delete') .send({'doc_id': doc_id}) .expect(200) .expect({'msg': 'Document successfully deleted'}, done); }); }); }else{ console.warn('*** Document tests cannot be completed. Please update your Nodejs version to v4 or above ***'.red); } describe('Remove and remove collection and connection', function(){ it('Rename the collection', function(done){ agent .post('/collection/' + conn_name + '/' + db_name + '/' + coll_name + '/coll_name_edit') .send({'new_collection_name': coll_name + 'Changed'}) .expect(200) .expect({'msg': 'Collection successfully renamed'}, done); }); it('Remove the collection', function(done){ agent .post('/collection/' + conn_name + '/' + db_name + '/coll_delete') .send({'collection_name': coll_name + 'Changed'}) .expect(200) .expect({'coll_name': coll_name + 'Changed', 'msg': 'Collection successfully deleted'}, done); }); it('Remove the database', function(done){ agent .post('/database/' + conn_name + '/db_delete') .send({'db_name': db_name}) .expect(200) .expect({'db_name': db_name, 'msg': 'Database successfully deleted'}, done); }); it('Remove the connection', function(done){ agent .post('/config/drop_config') .send({'curr_config': conn_name}) .expect(200) .expect({'msg': 'Config successfully deleted'}, done); }); });