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.
 
 
 
 
 
 

189 lines
4.7 KiB

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"
}
}
}