• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1var fs = require('fs')
2var path = require('path')
3
4var test = require('tap').test
5var common = require('../common-tap')
6var mr = require('npm-registry-mock')
7
8var pkg = common.pkg
9
10var server
11
12function setup () {
13  fs.writeFileSync(
14    path.join(pkg, 'package.json'),
15    JSON.stringify({
16      name: '@bigco/publish-organized',
17      version: '1.2.5'
18    }, null, 2),
19    'ascii')
20}
21
22test('setup', function (t) {
23  setup()
24  mr({port: common.port, throwOnUnmatched: true}, function (err, s) {
25    t.ifError(err, 'registry mocked successfully')
26    server = s
27    t.end()
28  })
29})
30
31test('npm publish should honor scoping', function (t) {
32  server.filteringRequestBody(verify)
33    .put('/@bigco%2fpublish-organized', true)
34    .reply(201, {ok: true})
35
36  var configuration = [
37    'progress=false',
38    'cache=' + common.cache,
39    'registry=http://nonexistent.lvh.me',
40    '//localhost:' + common.port + '/:username=username',
41    '//localhost:' + common.port + '/:_password=' + Buffer.from('password').toString('base64'),
42    '//localhost:' + common.port + '/:email=' + 'ogd@aoaioxxysz.net',
43    '@bigco:registry=' + common.registry
44  ]
45  var configFile = path.join(pkg, '.npmrc')
46
47  fs.writeFileSync(configFile, configuration.join('\n') + '\n')
48
49  common.npm(['publish'], {'cwd': pkg, nodeExecPath: process.execPath}, function (err, code, stdout, stderr) {
50    if (err) throw err
51    t.is(code, 0, 'published without error')
52    server.done()
53    t.end()
54  })
55
56  function verify (body) {
57    t.doesNotThrow(function () {
58      var parsed = JSON.parse(body)
59      var current = parsed.versions['1.2.5']
60      t.equal(
61        current._npmVersion,
62        require(path.resolve(__dirname, '../../package.json')).version,
63        'npm version is correct'
64      )
65
66      t.equal(
67        current._nodeVersion,
68        process.versions.node,
69        'node version is correct'
70      )
71    }, 'converted body back into object')
72
73    return true
74  }
75})
76
77test('cleanup', function (t) {
78  server.close()
79  process.chdir(__dirname)
80  t.end()
81})
82