diff options
Diffstat (limited to 'deps/npm/test/tap/all-package-metadata-update-stream-unit.js')
-rw-r--r-- | deps/npm/test/tap/all-package-metadata-update-stream-unit.js | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/deps/npm/test/tap/all-package-metadata-update-stream-unit.js b/deps/npm/test/tap/all-package-metadata-update-stream-unit.js new file mode 100644 index 0000000000..b9cf337eb9 --- /dev/null +++ b/deps/npm/test/tap/all-package-metadata-update-stream-unit.js @@ -0,0 +1,176 @@ +'use strict' + +var common = require('../common-tap.js') +var npm = require('../../') +var test = require('tap').test +var mkdirp = require('mkdirp') +var rimraf = require('rimraf') +var path = require('path') +var mr = require('npm-registry-mock') +var ms = require('mississippi') + +var _createEntryUpdateStream = require('../../lib/search/all-package-metadata.js')._createEntryUpdateStream + +var ALL = common.registry + '/-/all' +var PKG_DIR = path.resolve(__dirname, 'create-entry-update-stream') +var CACHE_DIR = path.resolve(PKG_DIR, 'cache') + +var server + +function setup () { + mkdirp.sync(CACHE_DIR) +} + +function cleanup () { + rimraf.sync(PKG_DIR) +} + +test('setup', function (t) { + mr({port: common.port, throwOnUnmatched: true}, function (err, s) { + t.ifError(err, 'registry mocked successfully') + npm.load({ cache: CACHE_DIR, registry: common.registry }, function (err) { + t.ifError(err, 'npm loaded successfully') + server = s + t.pass('all set up') + t.done() + }) + }) +}) + +test('createEntryUpdateStream full request', function (t) { + setup() + server.get('/-/all').once().reply(200, { + '_updated': 1234, + 'bar': { name: 'bar', version: '1.0.0' }, + 'foo': { name: 'foo', version: '1.0.0' } + }, { + date: Date.now() // should never be used. + }) + _createEntryUpdateStream(ALL, {}, 600, 0, function (err, stream, latest) { + if (err) throw err + t.equals(latest, 1234, '`latest` correctly extracted') + t.ok(stream, 'returned a stream') + var results = [] + stream.on('data', function (pkg) { + results.push(pkg) + }) + ms.finished(stream, function (err) { + if (err) throw err + t.deepEquals(results, [{ + name: 'bar', + version: '1.0.0' + }, { + name: 'foo', + version: '1.0.0' + }]) + server.done() + cleanup() + t.end() + }) + }) +}) + +test('createEntryUpdateStream partial update', function (t) { + setup() + var now = Date.now() + server.get('/-/all/since?stale=update_after&startkey=1234').once().reply(200, { + 'bar': { name: 'bar', version: '1.0.0' }, + 'foo': { name: 'foo', version: '1.0.0' } + }, { + date: (new Date(now)).toISOString() + }) + _createEntryUpdateStream(ALL, {}, 600, 1234, function (err, stream, latest) { + if (err) throw err + t.equals(latest, now, '`latest` correctly extracted from header') + t.ok(stream, 'returned a stream') + var results = [] + stream.on('data', function (pkg) { + results.push(pkg) + }) + ms.finished(stream, function (err) { + if (err) throw err + t.deepEquals(results, [{ + name: 'bar', + version: '1.0.0' + }, { + name: 'foo', + version: '1.0.0' + }]) + server.done() + cleanup() + t.end() + }) + }) +}) + +test('createEntryUpdateStream authed request', function (t) { + setup() + var token = 'thisisanauthtoken' + server.get('/-/all', { authorization: 'Bearer ' + token }).once().reply(200, { + '_updated': 1234, + 'bar': { name: 'bar', version: '1.0.0' }, + 'foo': { name: 'foo', version: '1.0.0' } + }, { + date: Date.now() // should never be used. + }) + _createEntryUpdateStream(ALL, { token: token }, 600, 0, function (err, stream, latest) { + if (err) throw err + t.equals(latest, 1234, '`latest` correctly extracted') + t.ok(stream, 'returned a stream') + var results = [] + stream.on('data', function (pkg) { + results.push(pkg) + }) + ms.finished(stream, function (err) { + if (err) throw err + t.deepEquals(results, [{ + name: 'bar', + version: '1.0.0' + }, { + name: 'foo', + version: '1.0.0' + }]) + server.done() + cleanup() + t.end() + }) + }) +}) + +test('createEntryUpdateStream bad auth', function (t) { + setup() + var token = 'thisisanauthtoken' + server.get('/-/all', { authorization: 'Bearer ' + token }).once().reply(401, { + error: 'unauthorized search request' + }) + _createEntryUpdateStream(ALL, { token: token }, 600, 0, function (err, stream, latest) { + t.ok(err, 'got an error from auth failure') + t.notOk(stream, 'no stream returned') + t.notOk(latest, 'no latest returned') + t.match(err, /unauthorized/, 'failure message from request used') + server.done() + cleanup() + t.end() + }) +}) + +test('createEntryUpdateStream not stale', function (t) { + setup() + var now = Date.now() + var staleness = 600 + _createEntryUpdateStream(ALL, {}, staleness, now, function (err, stream, latest) { + t.ifError(err, 'completed successfully') + t.notOk(stream, 'no stream returned') + t.notOk(latest, 'no latest returned') + server.done() + cleanup() + t.end() + }) +}) + +test('cleanup', function (t) { + cleanup() + server.close() + t.pass('all done') + t.done() +}) |