1
0
Fork 0
salty-dog/test/TestApp.ts

146 lines
3.2 KiB
TypeScript
Raw Normal View History

2019-11-10 03:56:49 +00:00
import { expect } from 'chai';
2019-11-14 05:07:54 +00:00
import mockFs from 'mock-fs';
2019-11-10 03:56:49 +00:00
import { main, STATUS_ERROR, STATUS_SUCCESS } from '../src/app';
2019-11-16 12:31:37 +00:00
import { readSource } from '../src/source';
2019-11-14 05:07:54 +00:00
import { describeLeaks, itLeaks } from './helpers/async';
2019-11-10 03:56:49 +00:00
const TEST_ARGS_PRE = ['node', 'test'];
const TEST_ARGS_CONFIG = ['--config-path', 'docs', '--config-name', 'config.yml'];
const TEST_ARGS_RULES = ['--rule-file', 'rules.yml', '--tag', 'test'];
const TEST_ARGS_SOURCE = ['--source', 'test.yml'];
const TEST_FILES = {
'docs': {
'config.yml': 'data: {logger: {level: debug, name: test, stream: !stream stderr}}',
2019-11-17 22:56:59 +00:00
'partial.yml': 'data: {logger: {name: test}}',
},
2019-11-16 12:31:37 +00:00
'rules.yml': `{
name: test,
rules: [{
name: test,
2019-11-17 17:55:33 +00:00
desc: test-rule,
2019-11-16 12:31:37 +00:00
level: info,
tags: [test],
check: {
type: object,
required: [foo],
properties: {
foo: {
type: number,
default: 4
}
}
}
}]
}`,
'test.yml': 'hello world',
};
2019-11-10 03:56:49 +00:00
describeLeaks('main app', async () => {
2019-11-14 05:07:54 +00:00
itLeaks('completion should succeed', async () => {
2019-11-10 03:56:49 +00:00
const status = await main(['node', 'test', 'complete']);
expect(status).to.equal(STATUS_SUCCESS);
});
2019-11-14 05:07:54 +00:00
itLeaks('should list rules and exit', async () => {
mockFs(TEST_FILES);
const status = await main([
...TEST_ARGS_PRE,
'list',
...TEST_ARGS_CONFIG,
]);
mockFs.restore();
2019-11-14 05:07:54 +00:00
expect(status).to.equal(STATUS_SUCCESS);
});
itLeaks('should load the source', async () => {
mockFs(TEST_FILES);
2019-11-14 05:07:54 +00:00
const status = await main([
...TEST_ARGS_PRE,
...TEST_ARGS_CONFIG,
...TEST_ARGS_SOURCE,
2019-11-14 05:07:54 +00:00
]);
mockFs.restore();
expect(status).to.equal(STATUS_SUCCESS);
});
itLeaks('should exit with rule errors', async () => {
mockFs(TEST_FILES);
const status = await main([
...TEST_ARGS_PRE,
...TEST_ARGS_CONFIG,
...TEST_ARGS_SOURCE,
...TEST_ARGS_RULES,
]);
mockFs.restore();
expect(status).to.equal(STATUS_ERROR);
});
itLeaks('should exit with error count', async () => {
mockFs(TEST_FILES);
const status = await main([
...TEST_ARGS_PRE,
...TEST_ARGS_CONFIG,
...TEST_ARGS_SOURCE,
...TEST_ARGS_RULES,
'--count',
]);
mockFs.restore();
expect(status).to.equal(STATUS_ERROR);
});
2019-11-16 00:56:08 +00:00
2019-11-16 12:31:37 +00:00
it('should fix up partial documents', async () => {
mockFs({
...TEST_FILES,
'test.yml': '{}',
});
const status = await main([
...TEST_ARGS_PRE,
'fix',
...TEST_ARGS_CONFIG,
...TEST_ARGS_SOURCE,
...TEST_ARGS_RULES,
'--dest', 'test-dest',
]);
const result = await readSource('test-dest');
mockFs.restore();
expect(status).to.equal(STATUS_SUCCESS);
expect(result).to.equal('foo: 4\n');
});
2019-11-17 22:56:59 +00:00
it('should validate config before running', async () => {
mockFs(TEST_FILES);
2019-11-19 12:03:48 +00:00
const [configPath, configDocs, configName] = TEST_ARGS_CONFIG;
2019-11-17 22:56:59 +00:00
const status = await main([
...TEST_ARGS_PRE,
2019-11-19 12:03:48 +00:00
configPath,
configDocs,
configName,
2019-11-17 22:56:59 +00:00
'partial.yml',
...TEST_ARGS_RULES,
...TEST_ARGS_SOURCE,
]);
mockFs.restore();
expect(status).to.equal(STATUS_ERROR);
});
2019-11-10 03:56:49 +00:00
});