Browse Source
Merge pull request #24 from beaussan/feat/fix-tests
Merge pull request #24 from beaussan/feat/fix-tests
add add dep and fix testspull/25/head
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 268 additions and 25 deletions
-
1.prettierignore
-
44src/commands/add/dep.ts
-
5src/commands/add/prettier.ts
-
5src/commands/add/tailwind.ts
-
45src/tests/add/__snapshots__/dep.spec.ts.snap
-
145src/tests/add/dep.spec.ts
-
10src/tests/add/prettier.spec.ts
-
10src/tests/add/tailwind.spec.ts
-
2src/tests/wall.spec.ts
-
21src/utls/base-add-command.spec.ts
-
5src/utls/base-add-command.ts
@ -0,0 +1,44 @@ |
|||||
|
// import {flags} from '@oclif/command'
|
||||
|
import { BaseCommand } from '../../utls/base-command'; |
||||
|
import { BaseAddCommand } from '../../utls/base-add-command'; |
||||
|
import { flags } from '@oclif/command'; |
||||
|
|
||||
|
export default class Dep extends BaseAddCommand { |
||||
|
static description = 'proxy to yarn add, plus gitmoji commit'; |
||||
|
|
||||
|
static examples = [ |
||||
|
`$ nbx add:dep -D eslint`, |
||||
|
`$ nbx add:dep --dev eslint`, |
||||
|
`$ nbx add:dep chalk`, |
||||
|
]; |
||||
|
|
||||
|
static flags = { |
||||
|
...BaseCommand.flags, |
||||
|
dev: flags.boolean({ default: false, char: 'D', description: 'install as a dev dependency' }), |
||||
|
}; |
||||
|
|
||||
|
static args = [{ name: 'dep', description: 'The dependency to install', required: true }]; |
||||
|
|
||||
|
async run() { |
||||
|
if (!this.hasDirPackageJson()) { |
||||
|
this.error('There is no package.json not found in the current folder'); |
||||
|
} |
||||
|
const { |
||||
|
args: { dep }, |
||||
|
flags: { dev }, |
||||
|
} = this.parse(Dep); |
||||
|
|
||||
|
if ((dev && this.hasDevDependencyInPackageJson(dep)) || this.hasDependencyInPackageJson(dep)) { |
||||
|
if (this.hasDevDependencyInPackageJson(dep)) { |
||||
|
this.error(`${dep} is already installed in this project.`); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
await this.initGit(); |
||||
|
if (dev) { |
||||
|
await this.addDevDependency(dep, true); |
||||
|
} else { |
||||
|
await this.addDependency(dep, true); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,45 @@ |
|||||
|
// Jest Snapshot v1, https://goo.gl/fbAQLP |
||||
|
|
||||
|
exports[`dep should fail if dependancy is already in package.json 1`] = `[Error: Config not found. Tried to look for a .nbxrc, .nbxrc.json, .nbxrc.yaml, .nbxrc.yml, .nbxrc.js]`; |
||||
|
|
||||
|
exports[`dep should fail if dev dependancy is already in package.json 1`] = `[Error: chalk is already installed in this project.]`; |
||||
|
|
||||
|
exports[`dep should fail if no package.json found 1`] = `[Error: There is no package.json not found in the current folder]`; |
||||
|
|
||||
|
exports[`dep should print help correctly 1`] = ` |
||||
|
Array [ |
||||
|
"proxy to yarn add, plus gitmoji commit |
||||
|
", |
||||
|
"USAGE |
||||
|
$ nbx add:dep DEP |
||||
|
|
||||
|
ARGUMENTS |
||||
|
DEP The dependency to install |
||||
|
|
||||
|
OPTIONS |
||||
|
-D, --dev install as a dev dependency |
||||
|
-h, --help show CLI help |
||||
|
-v, --verbose Verbose output |
||||
|
--[no-]spinner Enable spinner in cli output, true by default |
||||
|
|
||||
|
EXAMPLES |
||||
|
$ nbx add:dep -D eslint |
||||
|
$ nbx add:dep --dev eslint |
||||
|
$ nbx add:dep chalk", |
||||
|
"", |
||||
|
] |
||||
|
`; |
||||
|
|
||||
|
exports[`dep should work with a dev dependency 1`] = ` |
||||
|
Array [ |
||||
|
"Adding chalk as a dev dependency", |
||||
|
"The step was done without any error.", |
||||
|
] |
||||
|
`; |
||||
|
|
||||
|
exports[`dep should work with dependency 1`] = ` |
||||
|
Array [ |
||||
|
"Adding chalk as a dependency", |
||||
|
"The step was done without any error.", |
||||
|
] |
||||
|
`; |
||||
@ -0,0 +1,145 @@ |
|||||
|
import { filesystem, system } from 'gluegun'; |
||||
|
const stripANSI = require('strip-ansi'); |
||||
|
import * as latestVersion from 'latest-version'; |
||||
|
import Dep from '../../commands/add/dep'; |
||||
|
|
||||
|
jest.setTimeout(90000); |
||||
|
|
||||
|
/* eslint-disable no-console,max-nested-callbacks,@typescript-eslint/ban-ts-ignore */ |
||||
|
let consoleLogOutput: string[]; |
||||
|
let execPath: string; |
||||
|
const originalCwd = process.cwd(); |
||||
|
const originalLog = console.log; |
||||
|
|
||||
|
beforeEach(async () => { |
||||
|
consoleLogOutput = []; |
||||
|
console.log = (x: any) => consoleLogOutput.push(stripANSI(x)); |
||||
|
|
||||
|
const tmpDirName = `${new Date().getTime()}-${Math.random() * 100}-add-nbx-test`; |
||||
|
execPath = filesystem.path('/', 'tmp', tmpDirName); |
||||
|
filesystem.dir(execPath); |
||||
|
process.chdir(execPath); |
||||
|
}); |
||||
|
afterEach(() => { |
||||
|
console.log = originalLog; |
||||
|
process.chdir(originalCwd); |
||||
|
jest.restoreAllMocks(); |
||||
|
filesystem.remove(execPath); |
||||
|
}); |
||||
|
|
||||
|
const initWithConfigAndCommit = async () => { |
||||
|
await system.run('git init'); |
||||
|
filesystem.write('.nbxrc', { git: { user: 'aaa', email: 'bbb' } }); |
||||
|
filesystem.write('package.json', {}); |
||||
|
await system.run('touch yarn.lock'); |
||||
|
await system.run('echo node_modules > .gitignore'); |
||||
|
await system.run('git add * .nbxrc .gitignore'); |
||||
|
try { |
||||
|
await system.run('git config user.email "you@example.com"'); |
||||
|
await system.run('git config user.name "Your Name"'); |
||||
|
} catch {} |
||||
|
await system.run('git commit -m "init state"'); |
||||
|
}; |
||||
|
|
||||
|
describe('dep', () => { |
||||
|
it('should print help correctly', async () => { |
||||
|
try { |
||||
|
await Dep.run(['-h']); |
||||
|
} catch {} |
||||
|
expect(consoleLogOutput).toMatchSnapshot(); |
||||
|
}); |
||||
|
it('should fail if no package.json found', async () => { |
||||
|
expect.assertions(1); |
||||
|
try { |
||||
|
filesystem.remove('package.json'); |
||||
|
await Dep.run(['chalk', '--no-spinner']); |
||||
|
// eslint-disable-next-line unicorn/catch-error-name
|
||||
|
} catch (e) { |
||||
|
expect(e).toMatchSnapshot(); |
||||
|
} |
||||
|
}); |
||||
|
it('should fail if dependancy is already in package.json', async () => { |
||||
|
expect.assertions(1); |
||||
|
try { |
||||
|
filesystem.write('package.json', { dependencies: { chalk: '2.3.2' } }); |
||||
|
await Dep.run(['chalk', '--no-spinner']); |
||||
|
// eslint-disable-next-line unicorn/catch-error-name
|
||||
|
} catch (e) { |
||||
|
expect(e).toMatchSnapshot(); |
||||
|
} |
||||
|
}); |
||||
|
it('should fail if dev dependancy is already in package.json', async () => { |
||||
|
expect.assertions(1); |
||||
|
try { |
||||
|
filesystem.write('package.json', { devDependencies: { chalk: '2.3.2' } }); |
||||
|
await Dep.run(['chalk', '--dev', '--no-spinner']); |
||||
|
// eslint-disable-next-line unicorn/catch-error-name
|
||||
|
} catch (e) { |
||||
|
expect(e).toMatchSnapshot(); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
it('should work with dependency', async () => { |
||||
|
await initWithConfigAndCommit(); |
||||
|
const latestChalk = await latestVersion('chalk'); |
||||
|
|
||||
|
await Dep.run(['chalk', '--no-spinner']); |
||||
|
|
||||
|
const packageJson = filesystem.read('package.json', 'json'); |
||||
|
expect(consoleLogOutput).toMatchSnapshot(); |
||||
|
expect(packageJson).toStrictEqual({ |
||||
|
dependencies: { |
||||
|
chalk: latestChalk, |
||||
|
}, |
||||
|
}); |
||||
|
const after = await system.run('git log --name-status --format="%s"'); |
||||
|
const afterSlitted = after |
||||
|
.split('\n') |
||||
|
.map(val => val.trim()) |
||||
|
.map(val => stripANSI(val)) |
||||
|
.filter(val => val !== ''); |
||||
|
|
||||
|
expect(afterSlitted).toStrictEqual([ |
||||
|
`:heavy_plus_sign: add chalk@${latestChalk} as a dependency`, |
||||
|
'M\tpackage.json', |
||||
|
'M\tyarn.lock', |
||||
|
'init state', |
||||
|
'A\t.gitignore', |
||||
|
'A\t.nbxrc', |
||||
|
'A\tpackage.json', |
||||
|
'A\tyarn.lock', |
||||
|
]); |
||||
|
}); |
||||
|
|
||||
|
it('should work with a dev dependency', async () => { |
||||
|
await initWithConfigAndCommit(); |
||||
|
const latestChalk = await latestVersion('chalk'); |
||||
|
|
||||
|
await Dep.run(['chalk', '-D', '--no-spinner']); |
||||
|
|
||||
|
const packageJson = filesystem.read('package.json', 'json'); |
||||
|
expect(consoleLogOutput).toMatchSnapshot(); |
||||
|
expect(packageJson).toStrictEqual({ |
||||
|
devDependencies: { |
||||
|
chalk: latestChalk, |
||||
|
}, |
||||
|
}); |
||||
|
const after = await system.run('git log --name-status --format="%s"'); |
||||
|
const afterSlitted = after |
||||
|
.split('\n') |
||||
|
.map(val => val.trim()) |
||||
|
.map(val => stripANSI(val)) |
||||
|
.filter(val => val !== ''); |
||||
|
|
||||
|
expect(afterSlitted).toStrictEqual([ |
||||
|
`:heavy_plus_sign: add chalk@${latestChalk} as a dev dependency`, |
||||
|
'M\tpackage.json', |
||||
|
'M\tyarn.lock', |
||||
|
'init state', |
||||
|
'A\t.gitignore', |
||||
|
'A\t.nbxrc', |
||||
|
'A\tpackage.json', |
||||
|
'A\tyarn.lock', |
||||
|
]); |
||||
|
}); |
||||
|
}); |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue