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.

137 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()
})
})
})