// verify that prepublish runs on pack and publish
var test = require('tap').test
var npm = require('../../')
var fs = require('fs')
var pkg = __dirname + '/prepublish_package'
var tmp = pkg + '/tmp'
var cache = pkg + '/cache'
var mkdirp = require('mkdirp')
var rimraf = require('rimraf')
var path = require('path')
var os = require('os')

test('setup', function (t) {
  var n = 0
  mkdirp(pkg, then())
  mkdirp(cache, then())
  mkdirp(tmp, then())
  function then (er) {
    n ++
    return function (er) {
      if (er)
        throw er
      if (--n === 0)
        next()
    }
  }

  function next () {
    fs.writeFile(pkg + '/package.json', JSON.stringify({
      name: 'npm-test-prepublish',
      version: '1.2.5',
      scripts: { prepublish: 'echo ok' }
    }), 'ascii', function (er) {
      if (er)
        throw er
      t.pass('setup done')
      t.end()
    })
  }
})

test('test', function (t) {
  var spawn = require('child_process').spawn
  var node = process.execPath
  var npm = path.resolve(__dirname, '../../cli.js')
  var env = {
    npm_config_cache: cache,
    npm_config_tmp: tmp,
    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 child = spawn(node, [npm, 'pack'], {
    cwd: pkg,
    env: env
  })
  child.stdout.setEncoding('utf8')
  child.stderr.on('data', function(chunk) {
    throw new Error('got stderr data: ' + JSON.stringify('' + chunk))
  })
  child.stdout.on('data', ondata)
  child.on('close', onend)
  var c = ''
  function ondata (chunk) {
    c += chunk
  }
  function onend () {
    c = c.trim()
    var regex = new RegExp("" +
      "> npm-test-prepublish@1.2.5 prepublish [^\\r\\n]+\\r?\\n" +
      "> echo ok\\r?\\n" +
      "\\r?\\n" +
      "ok\\r?\\n" +
      "npm-test-prepublish-1.2.5.tgz", "ig")

    t.ok(c.match(regex))
    t.end()
  }
})

test('cleanup', function (t) {
  rimraf(pkg, function(er) {
    if (er)
      throw er
    t.pass('cleaned up')
    t.end()
  })
})

