hygen
Version:
The scalable code generator that saves you time.
71 lines (68 loc) • 2.11 kB
JavaScript
jest.mock('inquirer', () => ({
prompt: null
}))
const L = require('lodash')
const { runner } = require('../index')
const path = require('path')
const dirCompare = require('dir-compare')
const opts = { compareContent: true }
const fs = require('fs-extra')
const inquirer = require('inquirer')
const Logger = require('../logger')
const logger = new Logger(console.log)
const fail = () => {
throw new Error('set up prompt in testing')
}
const dir = m => path.join(__dirname, 'metaverse', m)
const metaverse = (folder, cmds, promptResponse = null) =>
it(folder, async () => {
if (promptResponse) {
inquirer.prompt = () => Promise.resolve(promptResponse)
}
const metaDir = dir(folder)
console.log('metaverse test in:', metaDir)
const config = {
templates: '_templates',
cwd: metaDir,
exec: (action, body) => {
const opts = body && body.length > 0 ? { input: body } : {}
return require('execa').shell(action, opts)
},
logger
}
await fs.remove(path.join(metaDir, 'given'))
console.log('before', fs.readdirSync(metaDir))
for (const cmd of cmds) {
await runner(cmd, config)
}
const givenDir = path.join(metaDir, 'given')
const expectedDir = path.join(metaDir, 'expected')
console.log('after', {
[givenDir]: fs.readdirSync(givenDir),
[expectedDir]: fs.readdirSync(expectedDir)
})
const res = dirCompare.compareSync(givenDir, expectedDir, opts)
res.diffSet = L.filter(res.diffSet, d => d.state !== 'equal')
if (!res.same) {
console.log(res)
}
expect(res.same).toEqual(true)
})
describe('metaverse', () => {
beforeEach(() => {
inquirer.prompt = fail
})
metaverse(
'hygen-templates',
[
['init', 'self'],
['mailer', 'new'],
['worker', 'new', '--name', 'foo'],
['shell', 'new', '--name', 'foo'],
['inflection', 'new', '--name', 'person'],
['conditional-rendering', 'new', '--notGiven'],
['add-unless-exists', 'new', '--message', 'foo']
],
{ name: 'message', message: 'foo', overwrite: true }
)
})