• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict'
2var fs = require('fs')
3var path = require('path')
4var test = require('tap').test
5var Tacks = require('tacks')
6var File = Tacks.File
7var Dir = Tacks.Dir
8var common = require('../common-tap.js')
9var testdir = path.join(__dirname, path.basename(__filename, '.js'))
10
11var fixture = new Tacks(
12  Dir({
13    node_modules: Dir({
14      'a': Dir({
15        'package.json': File({
16          _requested: {
17            rawSpec: 'file:///mods/a'
18          },
19          dependencies: {
20            'b': 'file:///mods/b'
21          },
22          name: 'a',
23          version: '1.0.0'
24        })
25      }),
26      'b': Dir({
27        'package.json': File({
28          _requested: {
29            rawSpec: 'file:///mods/b'
30          },
31          dependencies: {
32            'a': 'file:///mods/a'
33          },
34          name: 'b',
35          version: '1.0.0'
36        })
37      })
38    }),
39    'package.json': File({
40      name: 'test',
41      version: '1.0.0',
42      devDependencies: {
43        'a': 'file:///mods/a'
44      }
45    })
46  })
47)
48
49var expectedShrinkwrap = {
50  name: 'test',
51  version: '1.0.0',
52  dependencies: {
53    a: {
54      version: '1.0.0',
55      dev: true
56    },
57    b: {
58      version: '1.0.0',
59      dev: true
60    }
61  }
62}
63
64function setup () {
65  cleanup()
66  fixture.create(testdir)
67}
68
69function cleanup () {
70  fixture.remove(testdir)
71}
72
73function readJson (file) {
74  try {
75    var contents = fs.readFileSync(file)
76    return JSON.parse(contents)
77  } catch (ex) {
78    return ex
79  }
80}
81
82test('setup', function (t) {
83  setup()
84  t.end()
85})
86
87test('shrinkwrap cycle in dev deps', function (t) {
88  common.npm(['shrinkwrap', '--only=prod'], {cwd: testdir}, function (err, code, stdout, stderr) {
89    if (err) throw err
90    t.is(code, 0, 'result code = ok')
91    t.comment(stdout.trim())
92    t.comment(stderr.trim())
93    var actualShrinkwrap = readJson(path.join(testdir, 'npm-shrinkwrap.json'))
94    t.isDeeply(actualShrinkwrap, expectedShrinkwrap, 'shrinkwrap is right')
95    t.end()
96  })
97})
98
99test('cleanup', function (t) {
100  cleanup()
101  t.end()
102})
103