1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var Debug = require('debug');
|
4 | var portfinder = require("portfinder");
|
5 | var os = require("os");
|
6 | var path = require("path");
|
7 | var fs = require("fs-extra");
|
8 | var mongodb_prebuilt_1 = require("mongodb-prebuilt");
|
9 | var mockgoose_helper_1 = require("./mockgoose-helper");
|
10 |
|
11 | var uuidV4 = require('uuid/v4');
|
12 | var 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 |
|
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 |
|
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 | }());
|
86 | exports.Mockgoose = Mockgoose;
|
87 | var 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 | }());
|
102 | exports.ConnectionWrapper = ConnectionWrapper;
|
103 |
|
\ | No newline at end of file |