Skip to content

Commit

Permalink
Merge pull request #655 from ibnc/custom_imposters
Browse files Browse the repository at this point in the history
custom imposters repository
  • Loading branch information
bbyars committed Oct 19, 2021
2 parents 3fb2e12 + 41d49ca commit 7bc7fd5
Show file tree
Hide file tree
Showing 5 changed files with 78 additions and 3 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ node_modules/
.DS_Store
mb*.log
*.pid
*.swp
*.swo
/dist/
!scripts/dist/
mountebank.iml
Expand Down
6 changes: 6 additions & 0 deletions src/cli/cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,12 @@ const fs = require('fs-extra'),
type: 'string',
global: false
},
impostersRepository: {
description: 'path to custom imposters repository',
nargs: 1,
type: 'string',
global: false
},
pidfile: {
default: 'mb.pid',
description: 'where the pid is stored for the stop command',
Expand Down
29 changes: 26 additions & 3 deletions src/models/impostersRepository.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,35 @@
* @returns {Object} - the repository
*/
function create (config, logger) {
if (config.datadir) {
if (config.impostersRepository) {
const fs = require('fs-extra'),
path = require('path'),
filename = path.resolve(path.relative(process.cwd(), config.impostersRepository));

if (fs.existsSync(filename)) {
try {
return require(filename).create(config, logger);
}
catch (e) {
logger.error(`An error occured while creating custom impostersRepository:\n ${e}`);
return {};
}
}
else {
logger.warn(`Imposters Respository ${filename} does not exist. The default will be used`);
return this.inMemory();
}
}
else if (config.datadir) {
return require('./filesystemBackedImpostersRepository').create(config, logger);
}
else {
return require('./inMemoryImpostersRepository').create();
return this.inMemory();
}
}

module.exports = { create };
function inMemory () {
return require('./inMemoryImpostersRepository').create();
}

module.exports = { create, inMemory };
10 changes: 10 additions & 0 deletions test/fakes/fakeImpostersRepository.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
'use strict';


function create () {
return { fake: 'fake' };
}

module.exports = {
create
};
34 changes: 34 additions & 0 deletions test/models/impostersRepositoryTest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
'use strict';

const assert = require('assert'),
FakeLogger = require('../fakes/fakeLogger'),
impostersRepository = require('../../src/models/impostersRepository');

describe('ImpostersRepository', function () {
describe('#create', function () {
describe('custom impostersRepository', function () {
let logger;

beforeEach(function () {
logger = FakeLogger.create();
impostersRepository.inMemory = require('../mock').mock();
});

it('should return the custom impostersRepository', function () {
const config = {
impostersRepository: 'test/fakes/fakeImpostersRepository.js'
};
assert.deepEqual(impostersRepository.create(config, logger), require('../fakes/fakeImpostersRepository.js').create());
assert.ok(!impostersRepository.inMemory.wasCalled());
});

it('should default to inMemory if the custom impostersRepository does not exist', function () {
const config = {
impostersRepository: '../doesnotexist'
};
impostersRepository.create(config, logger);
assert.ok(impostersRepository.inMemory.wasCalled());
});
});
});
});

0 comments on commit 7bc7fd5

Please sign in to comment.