1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-03-09 00:18:26 +01:00

chore: Make options more testable

This commit is contained in:
ivaosthu 2019-05-22 09:29:56 +02:00
parent 0e6f5acdd1
commit 5ae61e6fc3
2 changed files with 57 additions and 36 deletions

View File

@ -6,48 +6,48 @@ const { defaultLogProvider, validateLogProvider } = require('./logger');
const isDev = () => process.env.NODE_ENV === 'development'; const isDev = () => process.env.NODE_ENV === 'development';
const THIRTY_DAYS = 30 * 24 * 60 * 60 * 1000; const THIRTY_DAYS = 30 * 24 * 60 * 60 * 1000;
const DEFAULT_OPTIONS = { function defaultOptions() {
databaseUrl: return {
process.env.DATABASE_URL || process.env.DATABASE_HOST databaseUrl: defaultDatabaseUrl(),
? defaultDatabaseUrl() databaseSchema: 'public',
: undefined, port: process.env.HTTP_PORT || process.env.PORT || 4242,
databaseSchema: 'public', host: process.env.HTTP_HOST,
port: process.env.HTTP_PORT || process.env.PORT || 4242, pipe: undefined,
host: process.env.HTTP_HOST, baseUriPath: process.env.BASE_URI_PATH || '',
pipe: undefined, serverMetrics: true,
baseUriPath: process.env.BASE_URI_PATH || '', enableLegacyRoutes: true,
serverMetrics: true, extendedPermissions: false,
enableLegacyRoutes: true, publicFolder,
extendedPermissions: false, enableRequestLogger: isDev(),
publicFolder, secret: 'UNLEASH-SECRET',
enableRequestLogger: isDev(), sessionAge: THIRTY_DAYS,
secret: 'UNLEASH-SECRET', adminAuthentication: 'unsecure',
sessionAge: THIRTY_DAYS, ui: {},
adminAuthentication: 'unsecure', importFile: undefined,
ui: {}, dropBeforeImport: false,
importFile: undefined, getLogger: defaultLogProvider,
dropBeforeImport: false, };
getLogger: defaultLogProvider, }
};
function defaultDatabaseUrl() { function defaultDatabaseUrl() {
const dbUsername = process.env.DATABASE_USERNAME || 'unleash_user'; if (process.env.DATABASE_URL) {
const dbPassword = process.env.DATABASE_PASSWORD || 'passord'; return process.env.DATABASE_URL;
const dbHost = process.env.DATABASE_HOST || 'localhost'; } else if (isDev() || process.env.DATABASE_HOST) {
const dbPort = process.env.DATABASE_PORT || 5432; const dbUsername = process.env.DATABASE_USERNAME || 'unleash_user';
const dbName = process.env.DATABASE_NAME || 'unleash'; const dbPassword = process.env.DATABASE_PASSWORD || 'passord';
const sslSupport = process.env.DATABASE_SSL || 'true'; const dbHost = process.env.DATABASE_HOST || 'localhost';
return `postgres://${dbUsername}:${dbPassword}@${dbHost}:${dbPort}/${dbName}?ssl=${sslSupport}`; const dbPort = process.env.DATABASE_PORT || 5432;
const dbName = process.env.DATABASE_NAME || 'unleash';
const sslSupport = process.env.DATABASE_SSL || 'true';
return `postgres://${dbUsername}:${dbPassword}@${dbHost}:${dbPort}/${dbName}?ssl=${sslSupport}`;
} else {
return undefined;
}
} }
module.exports = { module.exports = {
createOptions: opts => { createOptions: opts => {
const options = Object.assign({}, DEFAULT_OPTIONS, opts); const options = Object.assign({}, defaultOptions(), opts);
// If we are running in development we should assume local db
if (isDev() && !options.databaseUrl) {
options.databaseUrl = defaultDatabaseUrl();
}
if (!options.databaseUrl) { if (!options.databaseUrl) {
throw new Error( throw new Error(

View File

@ -13,6 +13,7 @@ test('should require DATABASE_URI', t => {
}); });
test('should set default databaseUrl for develpment', t => { test('should set default databaseUrl for develpment', t => {
delete process.env.NODE_ENV;
process.env.NODE_ENV = 'development'; process.env.NODE_ENV = 'development';
const { createOptions } = require('./options'); const { createOptions } = require('./options');
@ -24,6 +25,26 @@ test('should set default databaseUrl for develpment', t => {
); );
}); });
test('should use DATABASE_URL from env', t => {
const databaseUrl = 'postgres://u:p@localhost:5432/name';
delete process.env.NODE_ENV;
process.env.DATABASE_URL = databaseUrl;
const { createOptions } = require('./options');
const options = createOptions({});
t.true(options.databaseUrl === databaseUrl);
});
test('should use databaseUrl from options', t => {
const databaseUrl = 'postgres://u:p@localhost:5432/name';
const { createOptions } = require('./options');
const options = createOptions({ databaseUrl });
t.true(options.databaseUrl === databaseUrl);
});
test('should not override provided options', t => { test('should not override provided options', t => {
process.env.DATABASE_URL = 'test'; process.env.DATABASE_URL = 'test';
process.env.NODE_ENV = 'production'; process.env.NODE_ENV = 'production';