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 npm = require('../../lib/npm.js') 10var tar = require('tar') 11var mkdirp = require('mkdirp') 12var testdir = common.pkg 13var packed = path.join(testdir, 'packed') 14 15var fixture = new Tacks( 16 Dir({ 17 'package.json': File({ 18 name: 'bundled-transitive-deps', 19 version: '1.0.0', 20 dependencies: { 21 'a': '1.0.0', 22 '@c/d': '1.0.0' 23 }, 24 bundleDependencies: [ 25 'a', 26 '@c/d' 27 ] 28 }), 29 node_modules: Dir({ 30 'a': Dir({ 31 'package.json': File({ 32 name: 'a', 33 version: '1.0.0', 34 dependencies: { 35 'b': '1.0.0' 36 } 37 }) 38 }), 39 'b': Dir({ 40 'package.json': File({ 41 name: 'b', 42 version: '1.0.0' 43 }) 44 }), 45 '@c/d': Dir({ 46 'package.json': File({ 47 name: '@c/d', 48 version: '1.0.0' 49 }), 50 'node_modules': Dir({ 51 'e': Dir({ 52 'package.json': File({ 53 name: 'e', 54 version: '1.0.0' 55 }) 56 }) 57 }) 58 }) 59 }) 60 }) 61) 62 63function setup () { 64 cleanup() 65 fixture.create(testdir) 66} 67 68function cleanup () { 69 fixture.remove(testdir) 70} 71 72test('setup', function (t) { 73 setup() 74 npm.load({}, t.end) 75}) 76 77function exists (t, filename) { 78 t.doesNotThrow(filename + ' exists', function () { 79 fs.statSync(filename) 80 }) 81} 82 83test('bundled-transitive-deps', function (t) { 84 common.npm(['pack'], {cwd: testdir}, thenCheckPack) 85 function thenCheckPack (err, code, stdout, stderr) { 86 if (err) throw err 87 var tarball = stdout.trim() 88 t.comment(stderr.trim()) 89 t.is(code, 0, 'pack successful') 90 mkdirp.sync(packed) 91 tar.extract({ 92 file: path.join(testdir, tarball), 93 cwd: packed, 94 strip: 1, 95 sync: true 96 }) 97 var transitivePackedDep = path.join(packed, 'node_modules', 'b') 98 exists(t, transitivePackedDep) 99 var nestedScopedDep = path.join(packed, 'node_modules', '@c', 'd', 'node_modules', 'e') 100 exists(t, nestedScopedDep) 101 t.end() 102 } 103}) 104 105test('cleanup', function (t) { 106 cleanup() 107 t.end() 108}) 109