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
function setup ( t , mock ) {
mkdirp . sync ( CACHE_DIR )
mr ( { port : common . port , plugin : mock } , function ( er , s ) {
npm . load ( { cache : CACHE_DIR , registry : common . registry } , function ( err ) {
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 ( "http://localhost:1337/-/all" , { } , 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 ( "http://localhost:1337/-/all" , { } , function ( er ) {
t . ok ( er . code , "E401" )
t . ok ( /^unauthorized/ . test ( er . message ) , "unauthorized message" )
t . end ( )
} )
} )
test ( "request auth success" , function ( t ) {
// mimic as if alwaysAuth had been set
var params = {
auth : {
username : "bobby" ,
password : "tables" ,
alwaysAuth : true
}
}
updateIndex ( "http://localhost:1337/-/all" , params , function ( er ) {
t . ifError ( er , "no error" )
t . end ( )
} )
} )
test ( "cleanup auth" , cleanup )
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"
}
}
}