Skip to content

Commit

Permalink
🐛 Fix current working directory error (#46)
Browse files Browse the repository at this point in the history
  • Loading branch information
kefranabg committed Jun 15, 2019
1 parent e888726 commit 6c184ba
Show file tree
Hide file tree
Showing 6 changed files with 110 additions and 43 deletions.
49 changes: 11 additions & 38 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@
"boxen": "^4.0.0",
"date-fns": "^1.30.1",
"ejs": "^2.6.1",
"git-repo-name": "^1.0.1",
"inquirer": "^6.3.1",
"load-json-file": "^6.0.0",
"lodash": "^4.17.11",
"ora": "^3.4.0",
"project-name": "^1.0.0",
"yargs": "^13.2.4"
},
"devDependencies": {
Expand Down
5 changes: 2 additions & 3 deletions src/project-infos.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
const getProjectName = require('project-name')
const isNil = require('lodash/isNil')
const get = require('lodash/get')
const has = require('lodash/has')
const ora = require('ora')
const { execSync } = require('child_process')

const { getPackageJson } = require('./utils')
const { getPackageJson, getProjectName } = require('./utils')

const GITHUB_URL = 'https://github.com/'

Expand Down Expand Up @@ -103,7 +102,7 @@ const getProjectInfos = async () => {
const spinner = ora('Gathering project infos').start()

const packageJson = await getPackageJson()
const name = getProjectName()
const name = getProjectName(packageJson)
const description = get(packageJson, 'description', undefined)
const engines = get(packageJson, 'engines', undefined)
const author = get(packageJson, 'author', undefined)
Expand Down
3 changes: 2 additions & 1 deletion src/project-infos.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ jest.mock('child_process', () => ({
execSync: jest.fn()
}))
jest.mock('./utils', () => ({
getPackageJson: jest.fn()
getPackageJson: jest.fn(),
getProjectName: jest.fn(() => 'readme-md-generator')
}))

const succeed = jest.fn()
Expand Down
38 changes: 38 additions & 0 deletions src/utils.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
const loadJsonFile = require('load-json-file')
const boxen = require('boxen')
const path = require('path')
const getReposName = require('git-repo-name')

const END_MSG = `README.md was successfully generated.
Thanks for using readme-md-generator!`
Expand All @@ -17,6 +19,41 @@ const BOXEN_CONFIG = {
*/
const showEndMessage = () => process.stdout.write(boxen(END_MSG, BOXEN_CONFIG))

/**
* Get package json name property
*
* @param {Object} packageJson
*/
const getPackageJsonName = (packageJson = {}) => {
return packageJson.name || undefined
}

/**
* Get git repository name
*
* @param {String} cwd
*/
const getGitRepositoryName = cwd => {
try {
return getReposName.sync({ cwd })
// eslint-disable-next-line no-empty
} catch (err) {
return undefined
}
}

/**
* Get project name
*/
const getProjectName = packageJson => {
const cwd = process.cwd()
return (
getPackageJsonName(packageJson) ||
getGitRepositoryName(cwd) ||
path.basename(cwd)
)
}

/**
* Get package.json content
*/
Expand All @@ -31,6 +68,7 @@ const getPackageJson = async () => {
module.exports = {
getPackageJson,
showEndMessage,
getProjectName,
END_MSG,
BOXEN_CONFIG
}
56 changes: 56 additions & 0 deletions src/utils.spec.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
const loadJsonFile = require('load-json-file')
const boxen = require('boxen')
const path = require('path')
const getReposName = require('git-repo-name')

const realPathBasename = path.basename
const realGetReposNameSync = getReposName.sync

const {
getPackageJson,
showEndMessage,
getProjectName,
END_MSG,
BOXEN_CONFIG
} = require('./utils')
Expand Down Expand Up @@ -54,4 +61,53 @@ describe('utils', () => {
expect(process.stdout.write).toHaveBeenCalledWith(END_MSG)
})
})

describe('getProjectName', () => {
const projectName = 'readme-md-generator'

beforeEach(() => {
path.basename = jest.fn(() => projectName)
getReposName.sync = jest.fn()
})

afterEach(() => {
path.basename = realPathBasename
getReposName.sync = realGetReposNameSync
})

it('should return package.json name prop when defined', () => {
const packageJson = { name: projectName }
getReposName.sync.mockReturnValue('readme-md-generator')

const result = getProjectName(packageJson)

expect(result).toEqual(projectName)
expect(getReposName.sync).not.toHaveBeenCalled()
expect(path.basename).not.toHaveBeenCalled()
})

it('should return git repos when package.json it is not defined', () => {
const packageJson = undefined
getReposName.sync.mockReturnValue('readme-md-generator')

const result = getProjectName(packageJson)

expect(result).toEqual(projectName)
expect(getReposName.sync).toHaveBeenCalled()
expect(path.basename).not.toHaveBeenCalled()
})

it('should return folder basename when package.json and git repos name is undefined', () => {
const packageJson = undefined
getReposName.sync.mockImplementation(() => {
throw new Error('error')
})

const result = getProjectName(packageJson)

expect(result).toEqual(projectName)
expect(getReposName.sync).toHaveBeenCalled()
expect(path.basename).toHaveBeenCalled()
})
})
})

0 comments on commit 6c184ba

Please sign in to comment.