1'use strict' 2var path = require('path') 3var test = require('tap').test 4var Tacks = require('tacks') 5var File = Tacks.File 6var Symlink = Tacks.Symlink 7var Dir = Tacks.Dir 8var common = require('../common-tap.js') 9var mr = require('npm-registry-mock') 10 11var testdir = common.pkg 12var bugdir = path.join(testdir, 'modules', 'bug') 13 14// This is an absolutely minimal version of the optimist included with 15// npm-registry-mock. 16var optimist = Dir({ 17 'package.json': File({ 18 dependencies: { 19 minimist: '~0.0.1', 20 wordwrap: '~0.0.2' 21 }, 22 name: 'optimist', 23 version: '0.6.0' 24 }), 25 node_modules: Dir({ 26 minimist: Dir({ 27 'package.json': File({ 28 _shasum: 'd7aa327bcecf518f9106ac6b8f003fa3bcea8566', 29 _resolve: 'foo', 30 name: 'minimist', 31 version: '0.0.5' 32 }) 33 }), 34 wordwrap: Dir({ 35 'package.json': File({ 36 _shasum: 'b79669bb42ecb409f83d583cad52ca17eaa1643f', 37 _resolve: 'foo', 38 name: 'wordwrap', 39 version: '0.0.2' 40 }) 41 }) 42 }) 43}) 44 45var fixture = new Tacks( 46 Dir({ 47 global: Dir({ 48 lib: Dir({ 49 node_modules: Dir({ 50 linked1: Symlink('../../../modules/linked1/'), 51 linked2: Symlink('../../../modules/linked2/') 52 }) 53 }) 54 }), 55 modules: Dir({ 56 bug: Dir({ 57 node_modules: Dir({ 58 linked1: Symlink('../../../global/lib/node_modules/linked1'), 59 linked2: Symlink('../../../global/lib/node_modules/linked2') 60 }), 61 'package.json': File({ 62 name: 'bug', 63 version: '10800.0.0', 64 devDependencies: { 65 optimist: '0.6.0', 66 linked1: '^1.0.0', 67 linked2: '^1.0.0' 68 } 69 }) 70 }), 71 linked1: Dir({ 72 'package.json': File({ 73 name: 'linked1', 74 version: '1.0.0', 75 devDependencies: { 76 optimist: '0.6.0' 77 } 78 }), 79 node_modules: Dir({ 80 optimist: optimist 81 }) 82 }), 83 linked2: Dir({ 84 'package.json': File({ 85 name: 'linked2', 86 version: '1.0.0', 87 devDependencies: { 88 optimist: '0.6.0', 89 linked1: '^1.0.0' 90 } 91 }), 92 node_modules: Dir({ 93 linked1: Symlink('../../../global/lib/node_modules/linked1'), 94 optimist: optimist 95 }) 96 }) 97 }) 98 }) 99) 100 101function setup () { 102 cleanup() 103 fixture.create(testdir) 104} 105 106function cleanup () { 107 fixture.remove(testdir) 108} 109 110var server 111test('setup', function (t) { 112 setup() 113 mr({port: common.port}, function (er, s) { 114 t.ifError(er) 115 server = s 116 t.end() 117 }) 118}) 119 120test('shared-linked', function (t) { 121 var options = { 122 cwd: bugdir, 123 env: Object.assign({}, process.env, { 124 npm_config_prefix: path.join(testdir, 'global') 125 }) 126 } 127 var config = [ 128 '--cache', common.cache, 129 '--registry', common.registry, 130 '--unicode', 'false' 131 ] 132 133 common.npm(config.concat(['install', '--dry-run', '--parseable']), options, function (err, code, stdout, stderr) { 134 if (err) throw err 135 t.is(code, 0) 136 var got = stdout.trim().replace(/\s+\n/g, '\n').replace(/\\/g, '/') 137 var expected = 138 'add\tminimist\t0.0.5\tnode_modules/minimist\n' + 139 'add\twordwrap\t0.0.2\tnode_modules/wordwrap\n' + 140 'add\toptimist\t0.6.0\tnode_modules/optimist' 141 t.is(got, expected, 'just an optimist install please') 142 server.done() 143 t.end() 144 }) 145}) 146 147test('cleanup', function (t) { 148 if (server) server.close() 149 cleanup() 150 t.end() 151}) 152