• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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