var common = require('../common-tap.js') var test = require('tap').test var cacheFile = require('npm-cache-filename') var npm = require('../../') var mkdirp = require('mkdirp') var rimraf = require('rimraf') var path = require('path') var mr = require('npm-registry-mock') var fs = require('graceful-fs') function nop () {} var URI = 'https://npm.registry:8043/rewrite' var TIMEOUT = 3600 var FOLLOW = false var STALE_OK = true var TOKEN = 'lolbutts' var AUTH = { token: TOKEN } var PARAMS = { timeout: TIMEOUT, follow: FOLLOW, staleOk: STALE_OK, auth: AUTH } var PKG_DIR = path.resolve(__dirname, 'get-basic') var CACHE_DIR = path.resolve(PKG_DIR, 'cache') var BIGCO_SAMPLE = { name: '@bigco/sample', version: '1.2.3' } // mock server reference var server var mocks = { 'get': { '/@bigco%2fsample/1.2.3': [200, BIGCO_SAMPLE] } } var mapper = cacheFile(CACHE_DIR) function getCachePath (uri) { return path.join(mapper(uri), '.cache.json') } test('setup', function (t) { mkdirp.sync(CACHE_DIR) mr({port: common.port, mocks: mocks}, function (er, s) { t.ifError(er) npm.load({cache: CACHE_DIR, registry: common.registry}, function (er) { t.ifError(er) server = s t.end() }) }) }) test('get call contract', function (t) { t.throws(function () { npm.registry.get(undefined, PARAMS, nop) }, 'requires a URI') t.throws(function () { npm.registry.get([], PARAMS, nop) }, 'requires URI to be a string') t.throws(function () { npm.registry.get(URI, undefined, nop) }, 'requires params object') t.throws(function () { npm.registry.get(URI, '', nop) }, 'params must be object') t.throws(function () { npm.registry.get(URI, PARAMS, undefined) }, 'requires callback') t.throws(function () { npm.registry.get(URI, PARAMS, 'callback') }, 'callback must be function') t.end() }) test('basic request', function (t) { t.plan(9) var versioned = common.registry + '/underscore/1.3.3' npm.registry.get(versioned, PARAMS, function (er, data) { t.ifError(er, 'loaded specified version underscore data') t.equal(data.version, '1.3.3') fs.stat(getCachePath(versioned), function (er) { t.ifError(er, 'underscore 1.3.3 cache data written') }) }) var rollup = common.registry + '/underscore' npm.registry.get(rollup, PARAMS, function (er, data) { t.ifError(er, 'loaded all metadata') t.deepEqual(data.name, 'underscore') fs.stat(getCachePath(rollup), function (er) { t.ifError(er, 'underscore rollup cache data written') }) }) var scoped = common.registry + '/@bigco%2fsample/1.2.3' npm.registry.get(scoped, PARAMS, function (er, data) { t.ifError(er, 'loaded all metadata') t.equal(data.name, '@bigco/sample') fs.stat(getCachePath(scoped), function (er) { t.ifError(er, 'scoped cache data written') }) }) }) test('cleanup', function (t) { server.close() rimraf.sync(PKG_DIR) t.end() })