fix: Fix issue when there are multiple values for the same CLI parameter

* fix: added check for multiple values for the same option

* Update test/unit/init/CliRunner.test.ts

Co-authored-by: Ruben Verborgh <ruben@verborgh.org>

* fix: made CliRunner.run sync

Co-authored-by: Ruben Verborgh <ruben@verborgh.org>
This commit is contained in:
Arne Vandoorslaer
2021-03-05 11:00:24 +01:00
committed by GitHub
parent 12ace1b556
commit dd5b496f1d
2 changed files with 72 additions and 11 deletions

View File

@@ -31,10 +31,15 @@ describe('CliRunner', (): void => {
});
it('starts the server with default settings.', async(): Promise<void> => {
await new CliRunner().run({
new CliRunner().run({
argv: [ 'node', 'script' ],
});
// Wait until initializer has been called, because we can't await CliRunner.run.
await new Promise((resolve): void => {
setImmediate(resolve);
});
expect(ComponentsManager.build).toHaveBeenCalledTimes(1);
expect(ComponentsManager.build).toHaveBeenCalledWith({
dumpErrorState: true,
@@ -64,7 +69,7 @@ describe('CliRunner', (): void => {
});
it('accepts abbreviated flags.', async(): Promise<void> => {
await new CliRunner().run({
new CliRunner().run({
argv: [
'node', 'script',
'-b', 'http://pod.example/',
@@ -79,6 +84,11 @@ describe('CliRunner', (): void => {
],
});
// Wait until initializer has been called, because we can't await CliRunner.run.
await new Promise((resolve): void => {
setImmediate(resolve);
});
expect(ComponentsManager.build).toHaveBeenCalledTimes(1);
expect(ComponentsManager.build).toHaveBeenCalledWith({
dumpErrorState: true,
@@ -105,7 +115,7 @@ describe('CliRunner', (): void => {
});
it('accepts full flags.', async(): Promise<void> => {
await new CliRunner().run({
new CliRunner().run({
argv: [
'node', 'script',
'--baseUrl', 'http://pod.example/',
@@ -120,6 +130,11 @@ describe('CliRunner', (): void => {
],
});
// Wait until initializer has been called, because we can't await CliRunner.run.
await new Promise((resolve): void => {
setImmediate(resolve);
});
expect(ComponentsManager.build).toHaveBeenCalledTimes(1);
expect(ComponentsManager.build).toHaveBeenCalledWith({
dumpErrorState: true,
@@ -147,10 +162,15 @@ describe('CliRunner', (): void => {
it('exits with output to stderr when instantiation fails.', async(): Promise<void> => {
manager.instantiate.mockRejectedValueOnce(new Error('Fatal'));
await new CliRunner().run({
new CliRunner().run({
argv: [ 'node', 'script' ],
});
// Wait until initializer has been called, because we can't await CliRunner.run.
await new Promise((resolve): void => {
setImmediate(resolve);
});
expect(write).toHaveBeenCalledTimes(2);
expect(write).toHaveBeenNthCalledWith(1,
expect.stringMatching(/^Error: could not instantiate server from .*config-default\.json/u));
@@ -163,7 +183,12 @@ describe('CliRunner', (): void => {
it('exits without output to stderr when initialization fails.', async(): Promise<void> => {
initializer.handleSafe.mockRejectedValueOnce(new Error('Fatal'));
await new CliRunner().run();
new CliRunner().run();
// Wait until initializer has been called, because we can't await CliRunner.run.
await new Promise((resolve): void => {
setImmediate(resolve);
});
expect(write).toHaveBeenCalledTimes(0);
@@ -171,34 +196,65 @@ describe('CliRunner', (): void => {
});
it('exits when unknown options are passed to the main executable.', async(): Promise<void> => {
await new CliRunner().run({
new CliRunner().run({
argv: [
'node', 'script', '--foo',
],
});
// Wait until initializer has been called, because we can't await CliRunner.run.
await new Promise((resolve): void => {
setImmediate(resolve);
});
expect(exit).toHaveBeenCalledTimes(1);
expect(exit).toHaveBeenCalledWith(1);
});
it('exits when no value is passed to the main executable for an argument.', async(): Promise<void> => {
await new CliRunner().run({
new CliRunner().run({
argv: [
'node', 'script', '-s',
],
});
// Wait until initializer has been called, because we can't await CliRunner.run.
await new Promise((resolve): void => {
setImmediate(resolve);
});
expect(exit).toHaveBeenCalledTimes(1);
expect(exit).toHaveBeenCalledWith(1);
});
it('exits when unknown parameters are passed to the main executable.', async(): Promise<void> => {
await new CliRunner().run({
new CliRunner().run({
argv: [
'node', 'script', 'foo', 'bar', 'foo.txt', 'bar.txt',
],
});
// Wait until initializer has been called, because we can't await CliRunner.run.
await new Promise((resolve): void => {
setImmediate(resolve);
});
expect(exit).toHaveBeenCalledTimes(1);
expect(exit).toHaveBeenCalledWith(1);
});
it('exits when multiple values for a parameter are passed.', async(): Promise<void> => {
new CliRunner().run({
argv: [
'node', 'script', '-ll',
],
});
// Wait until initializer has been called, because we can't await CliRunner.run.
await new Promise((resolve): void => {
setImmediate(resolve);
});
expect(exit).toHaveBeenCalledTimes(1);
expect(exit).toHaveBeenCalledWith(1);
});