]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/test/tap/update-examples.js
Adding integrated tile server
[simantics/district.git] / org.simantics.maps.server / node / node-v4.8.0-win-x64 / node_modules / npm / test / tap / update-examples.js
diff --git a/org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/test/tap/update-examples.js b/org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/test/tap/update-examples.js
new file mode 100644 (file)
index 0000000..44b615b
--- /dev/null
@@ -0,0 +1,201 @@
+var common = require('../common-tap.js')
+var test = require('tap').test
+var npm = require('../../lib/npm.js')
+var mkdirp = require('mkdirp')
+var rimraf = require('rimraf')
+var path = require('path')
+var mr = require('npm-registry-mock')
+
+var osenv = require('osenv')
+
+var requireInject = require('require-inject')
+
+var PKG_DIR = path.resolve(__dirname, 'update-examples')
+var CACHE_DIR = path.resolve(PKG_DIR, 'cache')
+
+// ** constant templates for mocks **
+var DEFAULT_PKG = {
+  'name': 'update-examples',
+  'version': '1.2.3',
+  'dependencies': {
+    'dep1': '*'
+  }
+}
+
+var DEP_PKG = {
+  name: 'dep1',
+  version: '1.1.1',
+  _from: '^1.1.1'
+}
+
+var INSTALLED = {
+  dependencies: {
+    'dep1': {
+      version: '1.1.1',
+      link: false
+    }
+  }
+}
+
+var DEP1_REGISTRY = { name: 'dep1',
+  'dist-tags': { latest: '1.2.2' },
+  versions: {
+    '1.2.2': { version: '1.2.2' },
+    '1.2.1': { version: '1.2.1' },
+    '1.2.0': { version: '1.2.0' },
+    '1.1.2': { version: '1.1.2' },
+    '1.1.1': { version: '1.1.1' },
+    '1.0.0': { version: '1.0.0' },
+    '0.4.1': { version: '0.4.1' },
+    '0.4.0': { version: '0.4.0' },
+    '0.2.0': { version: '0.2.0' }
+  }
+}
+
+var registryMocks = {
+  'get': {
+    '/dep1': [200, DEP1_REGISTRY]
+  }
+}
+
+// ** dynamic mocks, cloned from templates and modified **
+var mockServer
+var mockDepJson = clone(DEP_PKG)
+var mockInstalled = clone(INSTALLED)
+var mockParentJson = clone(DEFAULT_PKG)
+
+// target
+var installAskedFor
+
+function clone (a) {
+  return extend({}, a)
+}
+
+function extend (a, b) {
+  for (var key in b) {
+    a[key] = b[key]
+  }
+  return a
+}
+
+function resetPackage (options) {
+  rimraf.sync(CACHE_DIR)
+  mkdirp.sync(CACHE_DIR)
+
+  installAskedFor = undefined
+
+  mockParentJson = clone(DEFAULT_PKG)
+  mockInstalled = clone(INSTALLED)
+  mockDepJson = clone(DEP_PKG)
+
+  if (options.wanted) {
+    mockParentJson.dependencies.dep1 = options.wanted
+    mockDepJson._from = options.wanted
+  }
+
+  if (options.installed) {
+    mockInstalled.dependencies.dep1.version = options.installed
+    mockDepJson.version = options.installed
+  }
+}
+
+function mockReadInstalled (dir, opts, cb) {
+  cb(null, mockInstalled)
+}
+
+function mockReadJson (file, cb) {
+  cb(null, file.match(/dep1/) ? mockDepJson : mockParentJson)
+}
+
+function mockCommand (npm, name, fn) {
+  delete npm.commands[name]
+  npm.commands[name] = fn
+}
+
+test('setup', function (t) {
+  process.chdir(osenv.tmpdir())
+  mkdirp.sync(PKG_DIR)
+  process.chdir(PKG_DIR)
+
+  resetPackage({})
+
+  mr({ port: common.port, mocks: registryMocks }, function (er, server) {
+    npm.load({ cache: CACHE_DIR,
+      registry: common.registry,
+    cwd: PKG_DIR }, function (err) {
+        t.ifError(err, 'started server')
+        mockServer = server
+
+        mockCommand(npm, 'install', function mockInstall (where, what, cb) {
+          installAskedFor = what
+          cb(null)
+        })
+
+        mockCommand(npm, 'outdated', requireInject('../../lib/outdated', {
+          'read-installed': mockReadInstalled,
+          'read-package-json': mockReadJson
+        }))
+
+        t.end()
+      })
+  })
+})
+
+test('update caret dependency to latest', function (t) {
+  resetPackage({ wanted: '^1.1.1' })
+
+  npm.commands.update([], function (err) {
+    t.ifError(err)
+    t.equal('dep1@1.2.2', installAskedFor, 'should want to install dep@1.2.2')
+    t.end()
+  })
+})
+
+test('update tilde dependency to latest', function (t) {
+  resetPackage({ wanted: '~1.1.1' })
+
+  npm.commands.update([], function (err) {
+    t.ifError(err)
+    t.equal('dep1@1.1.2', installAskedFor, 'should want to install dep@1.1.2')
+    t.end()
+  })
+})
+
+test('hold tilde dependency at wanted (#6441)', function (t) {
+  resetPackage({ wanted: '~1.1.2', installed: '1.1.2' })
+
+  npm.commands.update([], function (err) {
+    t.ifError(err)
+    t.notOk(installAskedFor, 'should not want to install anything')
+    t.end()
+  })
+})
+
+test('update old caret dependency with no newer', function (t) {
+  resetPackage({ wanted: '^0.2.0', installed: '^0.2.0' })
+
+  npm.commands.update([], function (err) {
+    t.ifError(err)
+    t.equal('dep1@0.2.0', installAskedFor, 'should want to install dep@0.2.0')
+    t.end()
+  })
+})
+
+test('update old caret dependency with newer', function (t) {
+  resetPackage({ wanted: '^0.4.0', installed: '^0.4.0' })
+
+  npm.commands.update([], function (err) {
+    t.ifError(err)
+    t.equal('dep1@0.4.1', installAskedFor, 'should want to install dep@0.4.1')
+    t.end()
+  })
+})
+
+test('cleanup', function (t) {
+  mockServer.close()
+
+  process.chdir(osenv.tmpdir())
+  rimraf.sync(PKG_DIR)
+
+  t.end()
+})