summaryrefslogtreecommitdiff
path: root/deps/npm/test/tap/publish.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/test/tap/publish.js')
-rw-r--r--deps/npm/test/tap/publish.js174
1 files changed, 174 insertions, 0 deletions
diff --git a/deps/npm/test/tap/publish.js b/deps/npm/test/tap/publish.js
new file mode 100644
index 0000000000..765cfb07c6
--- /dev/null
+++ b/deps/npm/test/tap/publish.js
@@ -0,0 +1,174 @@
+'use strict'
+
+const BB = require('bluebird')
+
+const common = require('../common-tap')
+const fs = require('fs')
+const mkdirp = require('mkdirp')
+const mr = BB.promisify(require('npm-registry-mock'))
+const path = require('path')
+const rimraf = require('rimraf')
+const test = require('tap').test
+
+const testDir = path.join(__dirname, 'publish_test_package')
+
+function setup () {
+ cleanup()
+ mkdirp.sync(path.join(testDir, 'cache'))
+
+ fs.writeFileSync(
+ path.join(testDir, 'package.json'),
+ JSON.stringify({
+ name: 'publish-organized',
+ version: '1.2.5'
+ }, null, 2),
+ 'utf8'
+ )
+
+ fs.writeFileSync(
+ path.join(testDir, 'index.js'),
+ 'hello',
+ 'utf8'
+ )
+}
+
+let port = common.port
+function withServer (cb) {
+ return mr({port: port++, throwOnUnmatched: true})
+ .tap(cb)
+ .then((server) => {
+ server.done()
+ return server.close()
+ })
+}
+
+test('basic npm publish', (t) => {
+ setup()
+ return withServer((server) => {
+ server.filteringRequestBody(verify)
+ .put('/publish-organized', true)
+ .reply(201, {ok: true})
+
+ return common.npm([
+ 'publish',
+ '--no-color',
+ '--cache', path.join(testDir, 'cache'),
+ '--registry=' + common.registry.replace(common.port, server.port),
+ `--//localhost:${server.port}/:username=username`,
+ `--//localhost:${server.port}/:_password=` + Buffer.from('password').toString('base64'),
+ `--//localhost:${server.port}/:email=` + 'ogd@aoaioxxysz.net'
+ ], {'cwd': testDir})
+ .spread((code, stdout, stderr) => {
+ t.comment(stdout)
+ t.comment(stderr)
+ t.is(code, 0, 'published without error')
+ })
+
+ function verify (body) {
+ t.doesNotThrow(() => {
+ const parsed = JSON.parse(body)
+ const 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('npm publish --dry-run', (t) => {
+ setup()
+ return common.npm([
+ 'publish',
+ '--dry-run',
+ '--registry=https://example.registry/fake',
+ '--cache', path.join(testDir, 'cache'),
+ '--loglevel=notice',
+ '--no-color'
+ ], {'cwd': testDir})
+ .spread((code, stdout, stderr) => {
+ t.comment(stdout)
+ t.comment(stderr)
+ t.is(code, 0, 'published without error')
+ t.match(stderr, /notice\s+\d+[a-z]+\s+package\.json/gi, 'mentions package.json')
+ t.match(stderr, /notice\s+\d+[a-z]+\s+index\.js/gi, 'mentions index.js')
+ })
+})
+
+test('npm publish --json', (t) => {
+ setup()
+ return withServer((server) => {
+ server.filteringRequestBody(() => true)
+ .put('/publish-organized', true)
+ .reply(201, {ok: true})
+ return common.npm([
+ 'publish',
+ '--json',
+ '--registry', common.registry.replace(common.port, server.port),
+ '--cache', path.join(testDir, 'cache')
+ ], {'cwd': testDir})
+ .spread((code, stdout, stderr) => {
+ t.comment(stdout)
+ t.comment(stderr)
+ t.is(code, 0, 'published without error')
+ t.similar(JSON.parse(stdout), {
+ name: 'publish-organized',
+ version: '1.2.5',
+ files: [
+ {path: 'package.json'},
+ {path: 'index.js'}
+ ],
+ entryCount: 2
+ }, 'JSON output reflects package contents')
+ t.equal(stderr.trim(), '', 'nothing on stderr')
+ })
+ })
+})
+
+test('npm publish --dry-run --json', (t) => {
+ setup()
+ return common.npm([
+ 'publish',
+ '--dry-run',
+ '--json',
+ '--registry=https://example.registry/fake',
+ '--cache', path.join(testDir, 'cache'),
+ '--loglevel=notice',
+ '--no-color'
+ ], {'cwd': testDir})
+ .spread((code, stdout, stderr) => {
+ t.comment(stdout)
+ t.comment(stderr)
+ t.is(code, 0, 'published without error')
+ t.similar(JSON.parse(stdout), {
+ name: 'publish-organized',
+ version: '1.2.5',
+ files: [
+ {path: 'package.json'},
+ {path: 'index.js'}
+ ],
+ entryCount: 2
+ }, 'JSON output reflects package contents')
+ t.equal(stderr.trim(), '', 'nothing on stderr')
+ })
+})
+
+test('cleanup', (t) => {
+ cleanup()
+ t.end()
+})
+
+function cleanup () {
+ process.chdir(__dirname)
+ rimraf.sync(testDir)
+}