mirror of
https://github.com/coderaiser/cloudcmd.git
synced 2026-01-23 10:45:47 +00:00
248 lines
5.7 KiB
JavaScript
248 lines
5.7 KiB
JavaScript
'use strict';
|
|
|
|
const path = require('path');
|
|
|
|
const test = require('tape');
|
|
const diff = require('sinon-called-with-diff');
|
|
const sinon = diff(require('sinon'));
|
|
const currify = require('currify');
|
|
const clean = require('clear-module');
|
|
const request = require('request');
|
|
const {promisify} = require('es6-promisify');
|
|
|
|
const DIR = '../../server/';
|
|
const cloudcmdPath = DIR + 'cloudcmd';
|
|
const beforePath = '../before';
|
|
|
|
const config = require(DIR + 'config');
|
|
const cloudcmd = require(cloudcmdPath);
|
|
const {connect} = require(beforePath);
|
|
const {
|
|
_getPrefix,
|
|
_auth,
|
|
_replacePrefix,
|
|
} = cloudcmd;
|
|
|
|
const get = promisify(request);
|
|
|
|
test('cloudcmd: args: no', (t) => {
|
|
const fn = () => cloudcmd();
|
|
|
|
t.doesNotThrow(fn, /plugins should be an array!/, 'should throw when plugins not an array');
|
|
t.end();
|
|
});
|
|
|
|
test('cloudcmd: args: plugins: error', (t) => {
|
|
const fn = () => cloudcmd({
|
|
plugins: ''
|
|
});
|
|
|
|
t.throws(fn, /plugins should be an array!/, 'should throw when plugins not an array');
|
|
t.end();
|
|
});
|
|
|
|
test('cloudcmd: defaults: config', (t) => {
|
|
const configDialog = config('configDialog');
|
|
|
|
config('configDialog', false);
|
|
cloudcmd();
|
|
t.notOk(config('configDialog'), 'should not override config with defaults');
|
|
|
|
config('configDialog', configDialog);
|
|
|
|
t.end();
|
|
});
|
|
|
|
test('cloudcmd: defaults: console', (t) => {
|
|
const console = config('console');
|
|
config('console', false);
|
|
cloudcmd();
|
|
t.notOk(config('console'), 'should not override config with defaults');
|
|
|
|
config('console', console);
|
|
|
|
t.end();
|
|
});
|
|
|
|
test('cloudcmd: getPrefix', (t) => {
|
|
const value = 'hello';
|
|
const result = _getPrefix(value);
|
|
|
|
t.equal(result, value, 'should equal');
|
|
t.end();
|
|
});
|
|
|
|
test('cloudcmd: getPrefix: function', (t) => {
|
|
const value = 'hello';
|
|
const fn = () => value;
|
|
const result = _getPrefix(fn);
|
|
|
|
t.equal(result, value, 'should equal');
|
|
t.end();
|
|
});
|
|
|
|
test('cloudcmd: getPrefix: function: empty', (t) => {
|
|
const value = null;
|
|
const fn = () => value;
|
|
const result = _getPrefix(fn);
|
|
|
|
t.equal(result, '', 'should equal');
|
|
t.end();
|
|
});
|
|
|
|
test('cloudcmd: replacePrefix', (t) => {
|
|
const url = '/hello';
|
|
const prefix = url;
|
|
const result = _replacePrefix(url, prefix);
|
|
|
|
t.equal(result, '/', 'should equal');
|
|
t.end();
|
|
});
|
|
|
|
test('cloudcmd: replaceDist', (t) => {
|
|
const {NODE_ENV} = process.env;
|
|
process.env.NODE_ENV = 'development';
|
|
|
|
clean(cloudcmdPath);
|
|
|
|
const {_replaceDist} = require(cloudcmdPath);
|
|
|
|
const url = '/dist/hello';
|
|
const result = _replaceDist(url);
|
|
const expected = '/dist-dev/hello';
|
|
|
|
process.env.NODE_ENV = NODE_ENV;
|
|
|
|
t.equal(result, expected, 'should equal');
|
|
t.end();
|
|
});
|
|
|
|
test('cloudcmd: replaceDist: !isDev', (t) => {
|
|
const url = '/dist/hello';
|
|
const cloudcmdPath = DIR + 'cloudcmd';
|
|
|
|
const reset = cleanNodeEnv();
|
|
|
|
clean(cloudcmdPath);
|
|
const {_replaceDist} = require(cloudcmdPath);
|
|
|
|
const result = _replaceDist(url);
|
|
const expected = url;
|
|
|
|
reset();
|
|
|
|
t.equal(result, expected, 'should equal');
|
|
t.end();
|
|
});
|
|
|
|
test('cloudcmd: auth: reject', (t) => {
|
|
const auth = config('auth');
|
|
const accept = sinon.stub();
|
|
const reject = sinon.stub();
|
|
const username = 'root';
|
|
const password = 'toor';
|
|
|
|
const set = credentials();
|
|
const reset = set('hello', 'world');
|
|
config('auth', true);
|
|
|
|
_auth(accept, reject, username, password);
|
|
|
|
config('auth', auth);
|
|
reset();
|
|
|
|
t.ok(reject.called, 'should accept');
|
|
t.end();
|
|
});
|
|
|
|
test('cloudcmd: auth: accept', (t) => {
|
|
const auth = config('auth');
|
|
const accept = sinon.stub();
|
|
const reject = sinon.stub();
|
|
const username = 'root';
|
|
const password = 'toor';
|
|
|
|
const set = credentials();
|
|
const reset = set(username, password);
|
|
config('auth', true);
|
|
|
|
_auth(accept, reject, username, password);
|
|
|
|
config('auth', auth);
|
|
reset();
|
|
|
|
t.ok(accept.called, 'should accept');
|
|
t.end();
|
|
});
|
|
|
|
test('cloudcmd: auth: accept: no auth', (t) => {
|
|
const auth = config('auth');
|
|
const accept = sinon.stub();
|
|
const reject = sinon.stub();
|
|
const username = 'root';
|
|
const password = 'toor';
|
|
|
|
config('auth', false);
|
|
_auth(accept, reject, username, password);
|
|
config('auth', auth);
|
|
|
|
t.ok(accept.called, 'should accept');
|
|
t.end();
|
|
});
|
|
|
|
function credentials() {
|
|
const username = config('username');
|
|
const password = config('password');
|
|
|
|
const reset = () => {
|
|
config('username', username);
|
|
config('password', password);
|
|
};
|
|
|
|
const set = currify((fn, a, b) => {
|
|
config('username', a);
|
|
config('password', b);
|
|
|
|
return fn;
|
|
});
|
|
|
|
return set(reset);
|
|
}
|
|
|
|
test('cloudcmd: getIndexPath: production', (t) => {
|
|
const isDev = false;
|
|
const name = path.join(__dirname, '..', '..', 'dist', 'index.html');
|
|
|
|
t.equal(cloudcmd._getIndexPath(isDev), name);
|
|
t.end();
|
|
});
|
|
|
|
test('cloudcmd: getIndexPath: development', (t) => {
|
|
const isDev = true;
|
|
const name = path.join(__dirname, '..', '..', 'dist-dev', 'index.html');
|
|
|
|
t.equal(cloudcmd._getIndexPath(isDev), name);
|
|
t.end();
|
|
});
|
|
|
|
test('cloudcmd: sw', async (t) => {
|
|
const {port, done} = await connect();
|
|
const {statusCode}= await get(`http://localhost:${port}/sw.js`);
|
|
|
|
await done();
|
|
|
|
t.equal(statusCode, 200, 'should return sw');
|
|
t.end();
|
|
});
|
|
|
|
function cleanNodeEnv() {
|
|
const {NODE_ENV} = process.env;
|
|
process.env.NODE_ENV = '';
|
|
|
|
const reset = () => {
|
|
process.env.NODE_ENV = NODE_ENV;
|
|
};
|
|
|
|
return reset;
|
|
}
|
|
|