mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
3.7 KiB
136 lines
3.7 KiB
'use strict'
|
|
|
|
require('../common-tap.js')
|
|
var test = require('tap').test
|
|
var mkdirp = require('mkdirp')
|
|
var rimraf = require('rimraf')
|
|
var path = require('path')
|
|
var ms = require('mississippi')
|
|
var Tacks = require('tacks')
|
|
var File = Tacks.File
|
|
|
|
var _createCacheEntryStream = require('../../lib/search/all-package-metadata.js')._createCacheEntryStream
|
|
|
|
var PKG_DIR = path.resolve(__dirname, 'create-cache-entry-stream')
|
|
var CACHE_DIR = path.resolve(PKG_DIR, 'cache')
|
|
|
|
function setup () {
|
|
mkdirp.sync(CACHE_DIR)
|
|
}
|
|
|
|
function cleanup () {
|
|
rimraf.sync(PKG_DIR)
|
|
}
|
|
|
|
test('createCacheEntryStream basic', function (t) {
|
|
setup()
|
|
var cachePath = path.join(CACHE_DIR, '.cache.json')
|
|
var fixture = new Tacks(File({
|
|
'_updated': 1234,
|
|
bar: {
|
|
name: 'bar',
|
|
version: '1.0.0'
|
|
},
|
|
foo: {
|
|
name: 'foo',
|
|
version: '1.0.0'
|
|
}
|
|
}))
|
|
fixture.create(cachePath)
|
|
_createCacheEntryStream(cachePath, 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'
|
|
}])
|
|
cleanup()
|
|
t.done()
|
|
})
|
|
})
|
|
})
|
|
|
|
test('createCacheEntryStream empty cache', function (t) {
|
|
setup()
|
|
var cachePath = path.join(CACHE_DIR, '.cache.json')
|
|
var fixture = new Tacks(File({}))
|
|
fixture.create(cachePath)
|
|
_createCacheEntryStream(cachePath, function (err, stream, latest) {
|
|
t.ok(err, 'returned an error because there was no _updated')
|
|
t.match(err.message, /Empty or invalid stream/, 'useful error message')
|
|
t.notOk(stream, 'no stream returned')
|
|
t.notOk(latest, 'no latest returned')
|
|
cleanup()
|
|
t.done()
|
|
})
|
|
})
|
|
|
|
test('createCacheEntryStream no entry cache', function (t) {
|
|
setup()
|
|
var cachePath = path.join(CACHE_DIR, '.cache.json')
|
|
var fixture = new Tacks(File({
|
|
'_updated': 1234
|
|
}))
|
|
fixture.create(cachePath)
|
|
_createCacheEntryStream(cachePath, 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, [], 'no results')
|
|
cleanup()
|
|
t.done()
|
|
})
|
|
})
|
|
})
|
|
|
|
test('createCacheEntryStream missing cache', function (t) {
|
|
setup()
|
|
var cachePath = path.join(CACHE_DIR, '.cache.json')
|
|
_createCacheEntryStream(cachePath, function (err, stream, latest) {
|
|
t.ok(err, 'returned an error because there was no cache')
|
|
t.equals(err.code, 'ENOENT', 'useful error message')
|
|
t.notOk(stream, 'no stream returned')
|
|
t.notOk(latest, 'no latest returned')
|
|
cleanup()
|
|
t.done()
|
|
})
|
|
})
|
|
|
|
test('createCacheEntryStream bad syntax', function (t) {
|
|
setup()
|
|
var cachePath = path.join(CACHE_DIR, '.cache.json')
|
|
var fixture = new Tacks(File('{"_updated": 1234, uh oh'))
|
|
fixture.create(cachePath)
|
|
_createCacheEntryStream(cachePath, 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) {
|
|
t.ok(err, 'stream errored')
|
|
t.match(err.message, /Invalid JSON/i, 'explains there\'s a syntax error')
|
|
t.deepEquals(results, [], 'no results')
|
|
cleanup()
|
|
t.done()
|
|
})
|
|
})
|
|
})
|
|
|