diff options
Diffstat (limited to 'deps/npm/test/need-npm5-update/need-only-update-save-optional/update-save.js')
-rw-r--r-- | deps/npm/test/need-npm5-update/need-only-update-save-optional/update-save.js | 219 |
1 files changed, 219 insertions, 0 deletions
diff --git a/deps/npm/test/need-npm5-update/need-only-update-save-optional/update-save.js b/deps/npm/test/need-npm5-update/need-only-update-save-optional/update-save.js new file mode 100644 index 0000000000..f01fa0f542 --- /dev/null +++ b/deps/npm/test/need-npm5-update/need-only-update-save-optional/update-save.js @@ -0,0 +1,219 @@ +var fs = require('graceful-fs') +var path = require('path') + +var mkdirp = require('mkdirp') +var mr = require('npm-registry-mock') +var osenv = require('osenv') +var rimraf = require('rimraf') +var test = require('tap').test + +var common = require('../common-tap.js') +var server + +var pkg = path.resolve(__dirname, 'update-save') +var cache = path.resolve(pkg, 'cache') + +var EXEC_OPTS = { + cwd: pkg, + stdio: 'ignore', + env: { + npm_config_registry: common.registry, + npm_config_loglevel: 'verbose', + npm_config_save_prefix: '^' + } +} + +var json = { + name: 'update-save-example', + version: '1.2.3', + dependencies: { + mkdirp: '~0.3.0' + }, + devDependencies: { + underscore: '~1.3.1' + } +} + +function clone (a) { + return extend({}, a) +} + +function extend (a, b) { + for (var key in b) { a[key] = b[key] } + return a +} + +test('setup', function (t) { + setup() + + mr({ port: common.port }, function (er, s) { + t.ifError(er) + server = s + t.end() + }) +}) + +test('update regular dependencies only', function (t) { + setup() + + common.npm(['update', '--save'], EXEC_OPTS, function (err, code) { + t.ifError(err) + t.notOk(code, 'npm update exited with code 0') + + var pkgdata = JSON.parse(fs.readFileSync(path.join(pkg, 'package.json'), 'utf8')) + t.deepEqual( + pkgdata.dependencies, + { mkdirp: '^0.3.5' }, + 'only dependencies updated' + ) + t.deepEqual( + pkgdata.devDependencies, + json.devDependencies, + 'dev dependencies should be untouched' + ) + t.deepEqual( + pkgdata.optionalDependencies, + json.optionalDependencies, + 'optional dependencies should be untouched' + ) + + t.end() + }) +}) + +test('update devDependencies only', function (t) { + setup() + + common.npm(['update', '--save-dev'], EXEC_OPTS, function (err, code) { + t.ifError(err) + t.notOk(code, 'npm update exited with code 0') + + var pkgdata = JSON.parse(fs.readFileSync(path.join(pkg, 'package.json'), 'utf8')) + t.deepEqual( + pkgdata.dependencies, + json.dependencies, + 'dependencies should be untouched' + ) + t.deepEqual( + pkgdata.devDependencies, + { underscore: '^1.3.3' }, + 'dev dependencies should be updated' + ) + t.deepEqual( + pkgdata.optionalDependencies, + json.optionalDependencies, + 'optional dependencies should be untouched' + ) + + t.end() + }) +}) + +test('update optionalDependencies only', function (t) { + setup({ optionalDependencies: { underscore: '~1.3.1' } }) + + common.npm(['update', '--save-optional'], EXEC_OPTS, function (err, code) { + t.ifError(err) + t.notOk(code, 'npm update exited with code 0') + + var pkgdata = JSON.parse(fs.readFileSync(path.join(pkg, 'package.json'), 'utf8')) + t.deepEqual( + pkgdata.dependencies, + json.dependencies, + 'dependencies should be untouched' + ) + t.deepEqual( + pkgdata.devDependencies, + json.devDependencies, + 'dev dependencies should be untouched' + ) + t.deepEqual( + pkgdata.optionalDependencies, + { underscore: '^1.3.3' }, + 'optional dependencies should be updated' + ) + + t.end() + }) +}) + +test('optionalDependencies are merged into dependencies during --save', function (t) { + var cloned = setup({ optionalDependencies: { underscore: '~1.3.1' } }) + + common.npm(['update', '--save'], EXEC_OPTS, function (err, code) { + t.ifError(err) + t.notOk(code, 'npm update exited with code 0') + + var pkgdata = JSON.parse(fs.readFileSync(path.join(pkg, 'package.json'), 'utf8')) + t.deepEqual( + pkgdata.dependencies, + { mkdirp: '^0.3.5' }, + 'dependencies should not include optional dependencies' + ) + t.deepEqual( + pkgdata.devDependencies, + cloned.devDependencies, + 'dev dependencies should be untouched' + ) + t.deepEqual( + pkgdata.optionalDependencies, + cloned.optionalDependencies, + 'optional dependencies should be untouched' + ) + + t.end() + }) +}) + +test('semver prefix is replaced with configured save-prefix', function (t) { + setup() + + common.npm(['update', '--save', '--save-prefix', '~'], EXEC_OPTS, function (err, code) { + t.ifError(err) + t.notOk(code, 'npm update exited with code 0') + + var pkgdata = JSON.parse(fs.readFileSync(path.join(pkg, 'package.json'), 'utf8')) + t.deepEqual( + pkgdata.dependencies, + { mkdirp: '~0.3.5' }, + 'dependencies should be updated' + ) + t.deepEqual( + pkgdata.devDependencies, + json.devDependencies, + 'dev dependencies should be untouched' + ) + t.deepEqual( + pkgdata.optionalDependencies, + json.optionalDependencies, + 'optional dependencies should be updated' + ) + + t.end() + }) +}) + +test('cleanup', function (t) { + server.close() + cleanup() + t.end() +}) + +function cleanup () { + process.chdir(osenv.tmpdir()) + rimraf.sync(pkg) +} + +function setup (extendWith) { + cleanup() + mkdirp.sync(cache) + process.chdir(pkg) + + var template = clone(json) + extend(template, extendWith) + fs.writeFileSync( + path.join(pkg, 'package.json'), + JSON.stringify(template, null, 2) + ) + return template +} |