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.
 
 
 
 
 
 

130 lines
3.5 KiB

'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 fs = require('fs')
var ms = require('mississippi')
var _createCacheWriteStream = require('../../lib/search/all-package-metadata.js')._createCacheWriteStream
var PKG_DIR = path.resolve(__dirname, 'create-cache-write-stream')
var CACHE_DIR = path.resolve(PKG_DIR, 'cache')
function setup () {
mkdirp.sync(CACHE_DIR)
}
function cleanup () {
rimraf.sync(PKG_DIR)
}
function fromArray (array) {
var idx = 0
return ms.from.obj(function (size, next) {
next(null, array[idx++] || null)
})
}
test('setup', function (t) {
// This is pretty much only used for `getCacheStat` in the implementation
npm.load({ cache: CACHE_DIR, registry: common.registry }, function (err) {
t.ifError(err, 'npm successfully loaded')
t.done()
})
})
test('createCacheEntryStream basic', function (t) {
setup()
var cachePath = path.join(CACHE_DIR, '.cache.json')
var latest = 12345
var src = [
{ name: 'bar', version: '1.0.0' },
{ name: 'foo', version: '1.0.0' }
]
var srcStream = fromArray(src)
_createCacheWriteStream(cachePath, latest, function (err, stream) {
if (err) throw err
t.ok(stream, 'returned a stream')
stream = ms.pipeline.obj(srcStream, 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'
}])
var fileData = JSON.parse(fs.readFileSync(cachePath))
t.ok(fileData, 'cache contents written to the right file')
t.deepEquals(fileData, {
'_updated': latest,
bar: {
name: 'bar',
version: '1.0.0'
},
foo: {
name: 'foo',
version: '1.0.0'
}
}, 'cache contents based on what was written')
cleanup()
t.done()
})
})
})
test('createCacheEntryStream no entries', function (t) {
cleanup() // wipe out the cache dir
var cachePath = path.join(CACHE_DIR, '.cache.json')
var latest = 12345
var src = []
var srcStream = fromArray(src)
_createCacheWriteStream(cachePath, latest, function (err, stream) {
if (err) throw err
t.ok(stream, 'returned a stream')
stream = ms.pipeline.obj(srcStream, stream)
stream.resume()
ms.finished(stream, function (err) {
if (err) throw err
var fileData = JSON.parse(fs.readFileSync(cachePath))
t.ok(fileData, 'cache file exists and has stuff in it')
cleanup()
t.done()
})
})
})
test('createCacheEntryStream missing cache dir', function (t) {
setup()
var cachePath = path.join(CACHE_DIR, '.cache.json')
var latest = 12345
var src = []
var srcStream = fromArray(src)
_createCacheWriteStream(cachePath, latest, function (err, stream) {
if (err) throw err
t.ok(stream, 'returned a stream')
stream = ms.pipeline.obj(srcStream, stream)
stream.on('data', function (pkg) {
t.notOk(pkg, 'stream should not have output any data')
})
ms.finished(stream, function (err) {
if (err) throw err
var fileData = JSON.parse(fs.readFileSync(cachePath))
t.ok(fileData, 'cache contents written to the right file')
t.deepEquals(fileData, {
'_updated': latest
}, 'cache still contains `_updated`')
cleanup()
t.done()
})
})
})