--- /dev/null
+var fs = require("fs")
+var path = require("path")
+
+var test = require('tap').test
+var mkdirp = require('mkdirp')
+var rimraf = require('rimraf')
+var common = require('../common-tap')
+var mr = require('npm-registry-mock')
+
+var pkg = path.join(__dirname, "prepublish_package")
+
+var server
+
+function setup () {
+ cleanup()
+ mkdirp.sync(path.join(pkg, 'cache'))
+
+ fs.writeFileSync(
+ path.join(pkg, 'package.json'),
+ JSON.stringify({
+ name: '@bigco/publish-organized',
+ version: '1.2.5'
+ }, null, 2),
+ 'ascii')
+}
+
+test('setup', function (t) {
+ setup()
+ mr({port: common.port, throwOnUnmatched: true}, function (err, s) {
+ t.ifError(err, 'registry mocked successfully')
+ server = s
+ t.end()
+ })
+})
+
+test('npm publish should honor scoping', function (t) {
+ server.filteringRequestBody(verify)
+ .put('/@bigco%2fpublish-organized', true)
+ .reply(201, {ok: true})
+
+ var configuration = [
+ 'progress=false',
+ 'cache=' + path.join(pkg, 'cache'),
+ 'registry=http://nonexistent.lvh.me',
+ '//localhost:1337/:username=username',
+ '//localhost:1337/:_password=' + new Buffer('password').toString('base64'),
+ '//localhost:1337/:email=' + 'ogd@aoaioxxysz.net',
+ '@bigco:registry=' + common.registry
+ ]
+ var configFile = path.join(pkg, '.npmrc')
+
+ fs.writeFileSync(configFile, configuration.join('\n') + '\n')
+
+ common.npm(['publish'], {'cwd': pkg}, function (err, code, stdout, stderr) {
+ if (err) throw err
+ t.is(code, 0, 'published without error')
+ server.done()
+ t.end()
+ })
+
+ function verify (body) {
+ t.doesNotThrow(function () {
+ var parsed = JSON.parse(body)
+ var current = parsed.versions["1.2.5"]
+ t.equal(
+ current._npmVersion,
+ require(path.resolve(__dirname, "../../package.json")).version,
+ "npm version is correct"
+ )
+
+ t.equal(
+ current._nodeVersion,
+ process.versions.node,
+ "node version is correct"
+ )
+ }, "converted body back into object")
+
+ return true
+ }
+})
+
+test('cleanup', function (t) {
+ server.close()
+ t.end()
+ cleanup()
+})
+
+function cleanup () {
+ process.chdir(__dirname)
+ rimraf.sync(pkg)
+}