• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1var fs = require('graceful-fs')
2var path = require('path')
3
4var mr = require('npm-registry-mock')
5var test = require('tap').test
6
7var common = require('../common-tap.js')
8var server
9
10var pkg = common.pkg
11
12var EXEC_OPTS = { cwd: pkg }
13
14var json = {
15  name: 'outdated-json',
16  author: 'Rockbert',
17  version: '0.0.0',
18  dependencies: {
19    underscore: '~1.3.1'
20  },
21  devDependencies: {
22    request: '~0.9.0'
23  }
24}
25
26var expected = {
27  underscore: {
28    current: '1.3.3',
29    wanted: '1.3.3',
30    latest: '1.5.1',
31    location: 'node_modules' + path.sep + 'underscore'
32  },
33  request: {
34    current: '0.9.5',
35    wanted: '0.9.5',
36    latest: '2.27.0',
37    location: 'node_modules' + path.sep + 'request'
38  }
39}
40
41test('setup', function (t) {
42  fs.writeFileSync(
43    path.join(pkg, 'package.json'),
44    JSON.stringify(json, null, 2)
45  )
46  process.chdir(pkg)
47  mr({ port: common.port }, function (er, s) {
48    t.ifError(er, 'mock registry should never fail to start')
49    server = s
50    common.npm(
51      [
52        '--registry', common.registry,
53        '--silent',
54        'install'
55      ],
56      EXEC_OPTS,
57      function (err, code) {
58        t.ifError(err, 'npm install ran without issue')
59        t.notOk(code, 'npm install ran without raising error code')
60
61        t.end()
62      }
63    )
64  })
65})
66
67test('it should log json data', function (t) {
68  common.npm(
69    [
70      '--registry', common.registry,
71      '--silent',
72      '--json',
73      'outdated'
74    ],
75    EXEC_OPTS,
76    function (err, code, stdout) {
77      t.ifError(err, 'npm outdated ran without error')
78      t.is(code, 1, 'npm outdated exited with code 1')
79      var out
80      t.doesNotThrow(function () {
81        out = JSON.parse(stdout)
82      }, 'output correctly parsed as JSON')
83      t.deepEqual(out, expected)
84
85      t.end()
86    }
87  )
88})
89
90test('it should log json data even when the list is empty', function (t) {
91  common.npm(
92    [
93      'rm',
94      'request',
95      'underscore'
96    ],
97    EXEC_OPTS,
98    function (er, code, stdout) {
99      t.ifError(er, 'run without error')
100      t.is(code, 0, 'successful exit status')
101      common.npm(
102        [
103          '--registry', common.registry,
104          '--silent',
105          '--json',
106          'outdated'
107        ],
108        EXEC_OPTS,
109        function (er, code, stdout) {
110          t.ifError(er, 'run without error')
111          t.is(code, 0, 'successful exit status')
112          t.same(JSON.parse(stdout), {}, 'got an empty object printed')
113          t.end()
114        }
115      )
116    }
117  )
118})
119
120test('cleanup', function (t) {
121  server.close()
122  t.end()
123})
124