Skip to content

Commit

Permalink
test: unit tests for createEntryUpdateStream
Browse files Browse the repository at this point in the history
Credit: @zkat
PR-URL: npm/npm#13746
Reviewed-By: @othiym23
  • Loading branch information
zkat committed Oct 13, 2016
1 parent 50f4ec8 commit 70b4bc2
Showing 1 changed file with 176 additions and 0 deletions.
176 changes: 176 additions & 0 deletions test/tap/all-package-metadata-update-stream-unit.js
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()
})

0 comments on commit 70b4bc2

Please sign in to comment.