feat: Allow dynamically adding CLI parameters in configs

This commit is contained in:
Joachim Van Herwegen
2022-04-13 17:06:46 +02:00
parent e6519992bf
commit bedab907f9
7 changed files with 159 additions and 30 deletions

View File

@@ -4,6 +4,7 @@ import { YargsCliExtractor } from '../../../../src/init/cli/YargsCliExtractor';
const error = jest.spyOn(console, 'error').mockImplementation(jest.fn());
const log = jest.spyOn(console, 'log').mockImplementation(jest.fn());
const exit = jest.spyOn(process, 'exit').mockImplementation(jest.fn() as any);
describe('A YargsCliExtractor', (): void => {
const parameters: YargsArgOptions = {
baseUrl: { alias: 'b', requiresArg: true, type: 'string' },
@@ -41,6 +42,16 @@ describe('A YargsCliExtractor', (): void => {
await expect(extractor.handle(argv)).resolves.toEqual(expect.objectContaining({}));
});
it('combines parameters and extra parameters.', async(): Promise<void> => {
extractor = new YargsCliExtractor(parameters, {}, { test: { alias: 't', requiresArg: true, type: 'string' }});
const argv = [ 'node', 'script', '-b', 'http://localhost:3000/', '-p', '3000', '-t', 'test' ];
await expect(extractor.handle(argv)).resolves.toEqual(expect.objectContaining({
baseUrl: 'http://localhost:3000/',
port: 3000,
test: 'test',
}));
});
it('prints usage if defined.', async(): Promise<void> => {
extractor = new YargsCliExtractor(parameters, { usage: 'node ./bin/server.js [args]' });
const argv = [ 'node', 'script', '--help' ];

View File

@@ -5,22 +5,22 @@ describe('A CombinedSettingsResolver', (): void => {
const values = { test: 'data' };
const varPort = 'urn:solid-server:default:variable:port';
const varLog = 'urn:solid-server:default:variable:loggingLevel';
let computerPort: jest.Mocked<SettingsExtractor>;
let computerLog: jest.Mocked<SettingsExtractor>;
let resolverPort: jest.Mocked<SettingsExtractor>;
let resolverLog: jest.Mocked<SettingsExtractor>;
let resolver: CombinedSettingsResolver;
beforeEach(async(): Promise<void> => {
computerPort = {
resolverPort = {
handleSafe: jest.fn().mockResolvedValue(3000),
} as any;
computerLog = {
resolverLog = {
handleSafe: jest.fn().mockResolvedValue('info'),
} as any;
resolver = new CombinedSettingsResolver({
[varPort]: computerPort,
[varLog]: computerLog,
[varPort]: resolverPort,
[varLog]: resolverLog,
});
});
@@ -32,7 +32,7 @@ describe('A CombinedSettingsResolver', (): void => {
});
it('rethrows the error if something goes wrong.', async(): Promise<void> => {
computerPort.handleSafe.mockRejectedValueOnce(new Error('bad data'));
resolverPort.handleSafe.mockRejectedValueOnce(new Error('bad data'));
await expect(resolver.handle(values)).rejects.toThrow(`Error in computing value for variable ${varPort}: bad data`);
});
});