UNPKG

4.39 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var Debug = require('debug');
4var portfinder = require("portfinder");
5var os = require("os");
6var path = require("path");
7var fs = require("fs-extra");
8var mongodb_prebuilt_1 = require("mongodb-prebuilt");
9var mockgoose_helper_1 = require("./mockgoose-helper");
10//const uuidV4 = require('uuid/v4');
11var uuidV4 = require('uuid/v4');
12var Mockgoose = (function () {
13 function Mockgoose(mongooseObj) {
14 this.mongodHelper = new mongodb_prebuilt_1.MongodHelper();
15 this.debug = Debug('Mockgoose');
16 this.helper = new mockgoose_helper_1.MockgooseHelper(mongooseObj, this);
17 this.mongooseObj = mongooseObj;
18 this.mongooseObj.mocked = true;
19 }
20 Mockgoose.prototype.prepareStorage = function () {
21 var _this = this;
22 return new Promise(function (resolve, reject) {
23 var tempDBPathPromise = _this.getTempDBPath();
24 var openPortPromise = _this.getOpenPort();
25 Promise.all([tempDBPathPromise, openPortPromise]).then(function (promiseValues) {
26 var dbPath = promiseValues[0];
27 var openPort = promiseValues[1].toString();
28 var storageEngine = _this.getMemoryStorageName();
29 var mongodArgs = [
30 '--port', openPort,
31 '--storageEngine', storageEngine,
32 '--dbpath', dbPath
33 ];
34 _this.debug("@prepareStorage mongod args, " + mongodArgs);
35 _this.mongodHelper.mongoBin.commandArguments = mongodArgs;
36 _this.mongodHelper.run().then(function () {
37 var connectionString = _this.getMockConnectionString(openPort);
38 _this.mockConnectCalls(connectionString);
39 resolve();
40 }, function (e) {
41 throw e;
42 // return this.prepareStorage();
43 });
44 });
45 });
46 };
47 Mockgoose.prototype.getMockConnectionString = function (port) {
48 var dbName = 'mockgoose-temp-db-' + uuidV4();
49 var connectionString = "mongodb://localhost:" + port + "/" + dbName;
50 return connectionString;
51 };
52 Mockgoose.prototype.mockConnectCalls = function (connection) {
53 var createConnection = new ConnectionWrapper('createConnection', this.mongooseObj, connection);
54 this.mongooseObj.createConnection = function () { return createConnection.run(arguments); };
55 var connect = new ConnectionWrapper('connect', this.mongooseObj, connection);
56 this.mongooseObj.connect = function () { return connect.run(arguments); };
57 };
58 Mockgoose.prototype.getOpenPort = function () {
59 return new Promise(function (resolve, reject) {
60 portfinder.getPort({ port: 27017 }, function (err, port) {
61 if (err) {
62 reject(err);
63 }
64 else {
65 resolve(port);
66 }
67 });
68 });
69 };
70 // todo: add support to mongodb-download or prebuilt to return version
71 Mockgoose.prototype.getMemoryStorageName = function () {
72 return "ephemeralForTest";
73 };
74 Mockgoose.prototype.getTempDBPath = function () {
75 return new Promise(function (resolve, reject) {
76 var tempDir = path.resolve(os.tmpdir(), "mockgoose", Date.now().toString());
77 fs.ensureDir(tempDir, function (err) {
78 if (err)
79 throw err;
80 resolve(tempDir);
81 });
82 });
83 };
84 return Mockgoose;
85}());
86exports.Mockgoose = Mockgoose;
87var ConnectionWrapper = (function () {
88 function ConnectionWrapper(functionName, mongoose, connectionString) {
89 this.functionName = functionName;
90 this.mongoose = mongoose;
91 this.functionCode = mongoose[functionName];
92 this.connectionString = connectionString;
93 }
94 ConnectionWrapper.prototype.run = function (args) {
95 this.originalArguments = args;
96 var mockedArgs = args;
97 mockedArgs[0] = this.connectionString;
98 return this.functionCode.apply(this.mongoose, mockedArgs);
99 };
100 return ConnectionWrapper;
101}());
102exports.ConnectionWrapper = ConnectionWrapper;
103//# sourceMappingURL=/Users/winfinit/workspace/personal/Mockgoose/mockgoose.js.map
\No newline at end of file