This commit does a lot but it's all connected and tries to make everything more extensible and future proof. 1. CLI arguments and options from the "package.json" are no longer treated as two different things. You can now pass options either way. BREAKING CHANGE: cli arguments are now normalized to camelCase, so e.g. `options['github-url']` is now `options.githubUrl` 2. Plugins no longer receive config they need one by one, but in one huge object. This way it's easier to pass more info in the future w/o breaking existing plugins that rely on the position of the callback in the arguments array. BREAKING CHANGE: Plugins now need to read their passed options from one huge config object. Old: ```js module.exports = function (pluginConfig, foo, bar, cb) {…} ``` New: ```js // ES5 module.exports = function(pluginConfig, config, cb) { var foo = config.foo var bar = config.bar … } // ES6 module.exports = function (pluginConfig, {foo, bar}, cb) {…} ```
80 lines
1.8 KiB
JavaScript
80 lines
1.8 KiB
JavaScript
const { defaults } = require('lodash')
|
|
const test = require('tap').test
|
|
|
|
require('../mocks/registry')
|
|
const lastRelease = require('../../dist/lib/last-release')
|
|
|
|
const npm = {
|
|
registry: 'http://registry.npmjs.org/',
|
|
tag: 'latest'
|
|
}
|
|
|
|
test('last release from registry', (t) => {
|
|
t.plan(5)
|
|
|
|
t.test('get release from package name', (tt) => {
|
|
lastRelease({
|
|
pkg: {name: 'available'},
|
|
npm
|
|
}, (err, release) => {
|
|
tt.error(err)
|
|
tt.is(release.version, '1.33.7', 'version')
|
|
tt.is(release.gitHead, 'HEAD', 'gitHead')
|
|
tt.is(release.tag, 'latest', 'dist-tag')
|
|
|
|
tt.end()
|
|
})
|
|
})
|
|
|
|
t.test('get release from a tagged package\'s name', (tt) => {
|
|
lastRelease({
|
|
pkg: {name: 'tagged'},
|
|
npm: defaults({tag: 'foo'}, npm)
|
|
}, (err, release) => {
|
|
tt.error(err)
|
|
tt.is(release.version, '0.8.15', 'version')
|
|
tt.is(release.gitHead, 'bar', 'gitHead')
|
|
tt.is(release.tag, 'foo', 'dist-tag')
|
|
|
|
tt.end()
|
|
})
|
|
})
|
|
|
|
t.test('get error from an untagged package\'s name', (tt) => {
|
|
lastRelease({
|
|
pkg: {name: 'untagged'},
|
|
npm: defaults({tag: 'bar'}, npm)
|
|
}, (err) => {
|
|
tt.is(err.code, 'ENODISTTAG', 'error')
|
|
|
|
tt.end()
|
|
})
|
|
})
|
|
|
|
t.test('get release from scoped package name', (tt) => {
|
|
lastRelease({
|
|
pkg: {name: '@scoped/available'},
|
|
npm
|
|
}, (err, release) => {
|
|
tt.error(err)
|
|
tt.is(release.version, '1.33.7', 'version')
|
|
tt.is(release.gitHead, 'HEAD', 'gitHead')
|
|
tt.is(release.tag, 'latest', 'dist-tag')
|
|
|
|
tt.end()
|
|
})
|
|
})
|
|
|
|
t.test('get nothing from not yet published package name', (tt) => {
|
|
lastRelease({
|
|
pkg: {name: 'unavailable'},
|
|
npm
|
|
}, (err, release) => {
|
|
tt.error(err)
|
|
tt.is(release.version, undefined, 'no version')
|
|
|
|
tt.end()
|
|
})
|
|
})
|
|
})
|