var fs = require("fs") var path = require("path") var test = require("tap").test var mkdirp = require("mkdirp") var rimraf = require("rimraf") var nock = require("nock") var npm = require("../../") var common = require("../common-tap.js") var pkg = path.join(__dirname, "prepublish_package") // TODO: nock uses setImmediate, breaks 0.8: replace with mockRegistry if (!global.setImmediate) { global.setImmediate = function () { var args = [arguments[0], 0].concat([].slice.call(arguments, 1)) setTimeout.apply(this, args) } } test("setup", function (t) { mkdirp(path.join(pkg, "cache"), next) function next () { process.chdir(pkg) fs.writeFile( path.join(pkg, "package.json"), JSON.stringify({ name: "@bigco/publish-organized", version: "1.2.5" }), "ascii", function (er) { t.ifError(er) t.pass("setup done") t.end() } ) } }) test("npm publish should honor scoping", function (t) { var put = nock(common.registry) .put("/@bigco%2fpublish-organized") .reply(201, verify) var configuration = { cache : path.join(pkg, "cache"), loglevel : "silent", registry : "http://nonexistent.lvh.me", "//localhost:1337/:username" : "username", "//localhost:1337/:_password" : new Buffer("password").toString("base64"), "//localhost:1337/:email" : "ogd@aoaioxxysz.net" } npm.load(configuration, onload) function onload (er) { t.ifError(er, "npm bootstrapped successfully") npm.config.set("@bigco:registry", common.registry) npm.commands.publish([], false, function (er) { t.ifError(er, "published without error") put.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 {ok: true} } }) test("cleanup", function (t) { process.chdir(__dirname) rimraf(pkg, function (er) { t.ifError(er) t.end() }) })