1'use strict' 2 3var fs = require('fs') 4var path = require('path') 5var writeFileSync = require('graceful-fs').writeFileSync 6 7var mkdirp = require('mkdirp') 8var mr = require('npm-registry-mock') 9var ssri = require('ssri') 10var test = require('tap').test 11 12var common = require('../common-tap.js') 13var toNerfDart = require('../../lib/config/nerf-dart.js') 14 15var pkg = common.pkg 16var outfile = path.resolve(pkg, '_npmrc') 17var modules = path.resolve(pkg, 'node_modules') 18var tarballPath = '/scoped-underscore/-/scoped-underscore-1.3.1.tgz' 19var tarballURL = common.registry + tarballPath 20var tarball = path.resolve(__dirname, '../fixtures/scoped-underscore-1.3.1.tgz') 21var tarballIntegrity = ssri.fromData(fs.readFileSync(tarball)).toString() 22 23function mocks (server) { 24 var auth = 'Bearer 0xabad1dea' 25 server.get(tarballPath, { authorization: auth }).replyWithFile(200, tarball) 26 server.get(tarballPath).reply(401, { 27 error: 'unauthorized', 28 reason: 'You are not authorized to access this db.' 29 }) 30} 31 32var contents = '@scoped:registry=' + common.registry + '\n' + 33 toNerfDart(common.registry) + ':_authToken=0xabad1dea\n' 34 35var json = { 36 name: 'test-package-install', 37 version: '1.0.0', 38 dependencies: { 39 '@scoped/underscore': '1.0.0' 40 } 41} 42 43var shrinkwrap = { 44 name: 'test-package-install', 45 version: '1.0.0', 46 lockfileVersion: 1, 47 dependencies: { 48 '@scoped/underscore': { 49 resolved: tarballURL, 50 integrity: tarballIntegrity, 51 version: '1.3.1' 52 } 53 } 54} 55 56test('setup', function (t) { 57 mkdirp.sync(modules) 58 writeFileSync(path.resolve(pkg, 'package.json'), JSON.stringify(json, null, 2) + '\n') 59 writeFileSync(outfile, contents) 60 writeFileSync( 61 path.resolve(pkg, 'npm-shrinkwrap.json'), 62 JSON.stringify(shrinkwrap, null, 2) + '\n' 63 ) 64 mr({ port: common.port, plugin: mocks }, function (er, s) { 65 t.parent.teardown(() => s.close()) 66 t.ok(s, 'set up mock registry') 67 t.end() 68 }) 69}) 70 71test('authed npm install with shrinkwrapped scoped package', function (t) { 72 common.npm( 73 [ 74 'install', 75 '--loglevel', 'error', 76 '--json', 77 '--fetch-retries', 0, 78 '--userconfig', outfile, 79 '--registry', common.registry 80 ], 81 {cwd: pkg, stdio: [0, 'pipe', 2]}, 82 function (err, code, stdout) { 83 if (err) throw err 84 t.equal(code, 0, 'npm install exited OK') 85 try { 86 var results = JSON.parse(stdout) 87 t.match(results, {added: [{name: '@scoped/underscore', version: '1.3.1'}]}, '@scoped/underscore installed') 88 } catch (ex) { 89 console.error('#', ex) 90 t.ifError(ex, 'stdout was valid JSON') 91 } 92 93 t.end() 94 } 95 ) 96}) 97