-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
test: unit tests for createEntryUpdateStream
Credit: @zkat PR-URL: npm/npm#13746 Reviewed-By: @othiym23
- Loading branch information
Showing
1 changed file
with
176 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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() | ||
}) |