feature/71-basic-cli #104
5 changed files with 72 additions and 9 deletions
|
@ -16,6 +16,7 @@
|
||||||
"placeholder"
|
"placeholder"
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"commander": "^11.1.0",
|
||||||
"glob-parent": "^6.0.0",
|
"glob-parent": "^6.0.0",
|
||||||
"got-cjs": "^12.5.4",
|
"got-cjs": "^12.5.4",
|
||||||
"linqts": "^1.14.4"
|
"linqts": "^1.14.4"
|
||||||
|
@ -23,6 +24,7 @@
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc",
|
"build": "tsc",
|
||||||
"start": "ts-node app.ts",
|
"start": "ts-node app.ts",
|
||||||
|
"cli": "ts-node src/cli.ts",
|
||||||
"test": "jest",
|
"test": "jest",
|
||||||
"lint": "eslint .",
|
"lint": "eslint .",
|
||||||
"release": "np --no-publish"
|
"release": "np --no-publish"
|
||||||
|
|
9
src/cli.ts
Normal file
9
src/cli.ts
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
import { Command } from "commander";
|
||||||
|
const program = new Command();
|
||||||
|
|
||||||
|
program
|
||||||
|
.name('random-bunny')
|
||||||
|
.description('Get a random image url from a subreddit of your choosing')
|
||||||
|
.version('2.2');
|
||||||
|
|
||||||
|
program.parse();
|
54
tests/cli.test.ts
Normal file
54
tests/cli.test.ts
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
import { exec } from "child_process";
|
||||||
|
import path from "path";
|
||||||
|
|
||||||
|
describe('version', () => {
|
||||||
|
test('GIVEN -V flag is supplied, EXPECT version returned', async () => {
|
||||||
|
const result = await cli(['-V'], '.');
|
||||||
|
|
||||||
|
expect(result.code).toBe(0);
|
||||||
|
expect(result.stdout).toBe('2.2\n');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('GIVEN --version is supplied, EXPECT version returned', async () => {
|
||||||
|
const result = await cli(['--version'], '.');
|
||||||
|
|
||||||
|
expect(result.code).toBe(0);
|
||||||
|
expect(result.stdout).toBe('2.2\n');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('help', () => {
|
||||||
|
test('GIVEN -h is supplied, EXPECT help returned', async () => {
|
||||||
|
const result = await cli(['-h'], '.');
|
||||||
|
|
||||||
|
expect(result.code).toBe(0);
|
||||||
|
expect(result.stdout.split('\n')[0]).toBe('Usage: random-bunny [options]');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('GIVEN --help is supplied, EXPECT help returned', async () => {
|
||||||
|
const result = await cli(['--help'], '.');
|
||||||
|
|
||||||
|
expect(result.code).toBe(0);
|
||||||
|
expect(result.stdout.split('\n')[0]).toBe('Usage: random-bunny [options]');
|
||||||
|
});
|
||||||
|
})
|
||||||
|
|
||||||
|
function cli(args: string[], cwd: string): Promise<cliResult> {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
exec(`node ${path.resolve('./dist/cli.js')} ${args.join(' ')}`,
|
||||||
|
{ cwd },
|
||||||
|
(error, stdout, stderr) => { resolve({
|
||||||
|
code: error && error.code ? error.code : 0,
|
||||||
|
error,
|
||||||
|
stdout,
|
||||||
|
stderr });
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
interface cliResult {
|
||||||
|
code: number,
|
||||||
|
error: any,
|
||||||
|
stdout: string,
|
||||||
|
stderr: string,
|
||||||
|
}
|
|
@ -1,7 +1,7 @@
|
||||||
import { ErrorCode } from "../src/constants/ErrorCode";
|
import { ErrorCode } from "../src/constants/ErrorCode";
|
||||||
import ErrorMessages from "../src/constants/ErrorMessages";
|
import ErrorMessages from "../src/constants/ErrorMessages";
|
||||||
import randomBunny from "../src/index";
|
import randomBunny from "../src/index";
|
||||||
import fetch, { CancelableRequest } from "got-cjs";
|
import fetch from "got-cjs";
|
||||||
|
|
||||||
jest.mock('got-cjs');
|
jest.mock('got-cjs');
|
||||||
const fetchMock = jest.mocked(fetch);
|
const fetchMock = jest.mocked(fetch);
|
||||||
|
|
14
yarn.lock
14
yarn.lock
|
@ -839,14 +839,7 @@
|
||||||
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.14.tgz#74a97a5573980802f32c8e47b663530ab3b6b7d1"
|
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.14.tgz#74a97a5573980802f32c8e47b663530ab3b6b7d1"
|
||||||
integrity sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==
|
integrity sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==
|
||||||
|
|
||||||
"@types/node@*":
|
"@types/node@*", "@types/node@^20.0.0":
|
||||||
version "20.8.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.7.tgz#ad23827850843de973096edfc5abc9e922492a25"
|
|
||||||
integrity sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==
|
|
||||||
dependencies:
|
|
||||||
undici-types "~5.25.1"
|
|
||||||
|
|
||||||
"@types/node@^20.0.0":
|
|
||||||
version "20.8.7"
|
version "20.8.7"
|
||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.7.tgz#ad23827850843de973096edfc5abc9e922492a25"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.7.tgz#ad23827850843de973096edfc5abc9e922492a25"
|
||||||
integrity sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==
|
integrity sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==
|
||||||
|
@ -1586,6 +1579,11 @@ commander-version@^1.1.0:
|
||||||
"@bconnorwhite/module" "^2.0.2"
|
"@bconnorwhite/module" "^2.0.2"
|
||||||
commander "^6.1.0"
|
commander "^6.1.0"
|
||||||
|
|
||||||
|
commander@^11.1.0:
|
||||||
|
version "11.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906"
|
||||||
|
integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==
|
||||||
|
|
||||||
commander@^6.1.0:
|
commander@^6.1.0:
|
||||||
version "6.2.1"
|
version "6.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"
|
resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"
|
||||||
|
|
Loading…
Reference in a new issue