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, 'publish-access-unscoped') // 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'), function () { var configuration = { cache: path.join(pkg, 'cache'), loglevel: 'silent', registry: common.registry } npm.load(configuration, next) }) function next (er) { t.ifError(er, 'npm loaded successfully') process.chdir(pkg) fs.writeFile( path.join(pkg, 'package.json'), JSON.stringify({ name: 'publish-access', version: '1.2.5' }), 'ascii', function (er) { t.ifError(er) t.pass('setup done') t.end() } ) } }) test('unscoped packages can be explicitly set as public', function (t) { var put = nock(common.registry) .put('/publish-access') .reply(201, verify) npm.config.set('access', 'public') 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) t.equal(parsed.access, 'public', 'access level 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() }) })