var common = require ( '../common-tap.js' )
var test = require ( 'tap' ) . test
var npm = require ( '../../' )
var mkdirp = require ( 'mkdirp' )
var rimraf = require ( 'rimraf' )
var path = require ( 'path' )
var mr = require ( 'npm-registry-mock' )
var updateIndex = require ( '../../lib/cache/update-index.js' )
var PKG_DIR = path . resolve ( __ dirname , 'get-basic' )
var CACHE_DIR = path . resolve ( PKG_DIR , 'cache' )
var server
var mocks = {
basic : function ( mock ) {
mock . get ( '/-/all' ) . reply ( 200 , allMock )
} ,
auth : function ( mock ) {
var littleBobbyTablesAuth = new Buffer ( 'bobby:tables' ) . toString ( 'base64' )
var auth = 'Basic ' + littleBobbyTablesAuth
mock . get ( '/-/all' , { authorization : auth } ) . reply ( 200 , allMock )
mock . get ( '/-/all' ) . reply ( 401 , {
error : 'unauthorized' ,
reason : 'You are not authorized to access this db.'
} )
}
}
var allMock = {
'_updated' : 1411727900 + 25 ,
'generator-frontcow' : {
'name' : 'generator-frontcow' ,
'description' : 'f36b6a6123da50959741e2ce4d634f96ec668c56 This is a fake description to ensure we do not accidentally search the real npm registry or use some kind of cache' ,
'dist-tags' : {
'latest' : '0.1.19'
} ,
'maintainers' : [
{
'name' : 'bcabanes' ,
'email' : 'contact@benjamincabanes.com'
}
] ,
'homepage' : 'https://github.com/bcabanes/generator-frontcow' ,
'keywords' : [
'sass' ,
'frontend' ,
'yeoman-generator' ,
'atomic' ,
'design' ,
'sass' ,
'foundation' ,
'foundation5' ,
'atomic design' ,
'bourbon' ,
'polyfill' ,
'font awesome'
] ,
'repository' : {
'type' : 'git' ,
'url' : 'https://github.com/bcabanes/generator-frontcow'
} ,
'author' : {
'name' : 'ben' ,
'email' : 'contact@benjamincabanes.com' ,
'url' : 'https://github.com/bcabanes'
} ,
'bugs' : {
'url' : 'https://github.com/bcabanes/generator-frontcow/issues'
} ,
'license' : 'MIT' ,
'readmeFilename' : 'README.md' ,
'time' : {
'modified' : '2014-10-03T02:26:18.406Z'
} ,
'versions' : {
'0.1.19' : 'latest'
}
} ,
'marko' : {
'name' : 'marko' ,
'description' : 'Marko is an extensible, streaming, asynchronous, high performance, HTML-based templating language that can be used in Node.js or in the browser.' ,
'dist-tags' : {
'latest' : '1.2.16'
} ,
'maintainers' : [
{
'name' : 'pnidem' ,
'email' : 'pnidem@gmail.com'
} ,
{
'name' : 'philidem' ,
'email' : 'phillip.idem@gmail.com'
}
] ,
'homepage' : 'https://github.com/raptorjs/marko' ,
'keywords' : [
'templating' ,
'template' ,
'async' ,
'streaming'
] ,
'repository' : {
'type' : 'git' ,
'url' : 'https://github.com/raptorjs/marko.git'
} ,
'author' : {
'name' : 'Patrick Steele-Idem' ,
'email' : 'pnidem@gmail.com'
} ,
'bugs' : {
'url' : 'https://github.com/raptorjs/marko/issues'
} ,
'license' : 'Apache License v2.0' ,
'readmeFilename' : 'README.md' ,
'users' : {
'pnidem' : true
} ,
'time' : {
'modified' : '2014-10-03T02:27:31.775Z'
} ,
'versions' : {
'1.2.16' : 'latest'
}
}
}
function setup ( t , mock , extra ) {
mkdirp . sync ( CACHE_DIR )
mr ( { port : common . port , plugin : mock } , function ( er , s ) {
npm . load ( { cache : CACHE_DIR , registry : common . registry } , function ( err ) {
if ( extra ) {
Object . keys ( extra ) . forEach ( function ( k ) {
npm . config . set ( k , extra [ k ] , 'user' )
} )
}
t . ifError ( err , 'no error' )
server = s
t . end ( )
} )
} )
}
function cleanup ( t ) {
server . close ( function ( ) {
rimraf . sync ( PKG_DIR )
t . end ( )
} )
}
test ( 'setup basic' , function ( t ) {
setup ( t , mocks . basic )
} )
test ( 'request basic' , function ( t ) {
updateIndex ( 0 , function ( er ) {
t . ifError ( er , 'no error' )
t . end ( )
} )
} )
test ( 'cleanup basic' , cleanup )
test ( 'setup auth' , function ( t ) {
setup ( t , mocks . auth )
} )
test ( 'request auth failure' , function ( t ) {
updateIndex ( 0 , function ( er ) {
t . equals ( er . code , 'E401' , 'gotta get that auth' )
t . ok ( /^unauthorized/ . test ( er . message ) , 'unauthorized message' )
t . end ( )
} )
} )
test ( 'cleanup auth failure' , cleanup )
test ( 'setup auth' , function ( t ) {
// mimic as if alwaysAuth had been set
setup ( t , mocks . auth , {
_ auth : new Buffer ( 'bobby:tables' ) . toString ( 'base64' ) ,
'always-auth' : true
} )
} )
test ( 'request auth success' , function ( t ) {
updateIndex ( 0 , function ( er ) {
t . ifError ( er , 'no error' )
t . end ( )
} )
} )
test ( 'cleanup auth' , cleanup )