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.
130 lines
3.5 KiB
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()
|
|
})
|
|
})
|
|
})
|
|
|