You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

141 lines
3.0 KiB

// verify that prepublishOnly runs _only_ on publish
var join = require('path').join
var mr = require('npm-registry-mock')
var test = require('tap').test
var Tacks = require('tacks')
var File = Tacks.File
var Dir = Tacks.Dir
var common = require('../common-tap')
var pkg = join(__dirname, 'prepublish_package')
var cachedir = join(pkg, 'cache')
var tmpdir = join(pkg, 'tmp')
var env = {
'npm_config_cache': cachedir,
'npm_config_tmp': tmpdir,
'npm_config_prefix': pkg,
'npm_config_global': 'false'
}
for (var i in process.env) {
if (!/^npm_config_/.test(i)) {
env[i] = process.env[i]
}
}
var server
var fixture = new Tacks(Dir({
cache: Dir(),
tmp: Dir(),
'.npmrc': File([
'progress=false',
'registry=' + common.registry,
'//localhost:1337/:username=username',
'//localhost:1337/:_authToken=deadbeeffeed'
].join('\n') + '\n'),
helper: Dir({
'script.js': File([
'#!/usr/bin/env node\n',
'console.log("ok")\n'
].join('\n') + '\n'
),
'package.json': File({
name: 'helper',
version: '6.6.6',
bin: './script.js'
})
}),
'package.json': File({
name: 'npm-test-prepublish-only',
version: '1.2.5',
dependencies: {
'helper': 'file:./helper'
},
scripts: {
build: 'helper',
prepublishOnly: 'npm run build'
}
})
}))
test('setup', function (t) {
cleanup()
fixture.create(pkg)
mr({port: common.port, throwOnUnmatched: true}, function (err, s) {
t.ifError(err, 'registry mocked successfully')
server = s
common.npm(
[
'install',
'--loglevel', 'error',
'--cache', cachedir,
'--tmp', tmpdir
],
{
cwd: pkg,
env: env
},
function (err, code, stdout, stderr) {
t.equal(code, 0, 'install exited OK')
t.ifErr(err, 'installed successfully')
t.notOk(stderr, 'got stderr data:' + JSON.stringify('' + stderr))
t.end()
}
)
})
})
test('test', function (t) {
server.filteringRequestBody(function () { return true })
.put('/npm-test-prepublish-only', true)
.reply(201, {ok: true})
common.npm(
[
'publish',
'--loglevel', 'warn'
],
{
cwd: pkg,
env: env
},
function (err, code, stdout, stderr) {
t.equal(code, 0, 'publish ran without error')
t.ifErr(err, 'published successfully')
t.notOk(stderr, 'got stderr data:' + JSON.stringify('' + stderr))
var c = stdout.trim()
var regex = new RegExp(
'> npm-test-prepublish-only@1.2.5 prepublishOnly [^\\r\\n]+\\r?\\n' +
'> npm run build\\r?\\n' +
'\\r?\\n' +
'\\r?\\n' +
'> npm-test-prepublish-only@1.2.5 build [^\\r\\n]+\\r?\\n' +
'> helper\\r?\\n' +
'\\r?\\n' +
'ok\\r?\\n' +
'\\+ npm-test-prepublish-only@1.2.5', 'ig'
)
t.match(c, regex)
t.end()
}
)
})
test('cleanup', function (t) {
cleanup()
server.close()
t.pass('cleaned up')
t.end()
})
function cleanup () {
fixture.remove(pkg)
}