diff options
-rw-r--r-- | lib/cache.js | 8 | ||||
-rw-r--r-- | test/fixtures/scoped-underscore-1.3.1.tgz | bin | 0 -> 55415 bytes | |||
-rw-r--r-- | test/tap/shrinkwrap-scoped-auth.js | 108 |
3 files changed, 115 insertions, 1 deletions
diff --git a/lib/cache.js b/lib/cache.js index 1c5495405..357063551 100644 --- a/lib/cache.js +++ b/lib/cache.js @@ -82,6 +82,7 @@ var npm = require("./npm.js") , npa = require("npm-package-arg") , getStat = require("./cache/get-stat.js") , cachedPackageRoot = require("./cache/cached-package-root.js") + , mapToRegistry = require("./utils/map-to-registry.js") cache.usage = "npm cache add <tarball file>" + "\nnpm cache add <folder>" @@ -289,7 +290,12 @@ function add (args, where, cb) { addLocal(p, null, cb) break case "remote": - addRemoteTarball(p.spec, {name : p.name}, null, null, cb) + // get auth, if possible + mapToRegistry(spec, npm.config, function (err, uri, auth) { + if (err) return cb(err) + + addRemoteTarball(p.spec, {name : p.name}, null, auth, cb) + }) break case "git": addRemoteGit(p.spec, false, cb) diff --git a/test/fixtures/scoped-underscore-1.3.1.tgz b/test/fixtures/scoped-underscore-1.3.1.tgz Binary files differnew file mode 100644 index 000000000..d98a34599 --- /dev/null +++ b/test/fixtures/scoped-underscore-1.3.1.tgz diff --git a/test/tap/shrinkwrap-scoped-auth.js b/test/tap/shrinkwrap-scoped-auth.js new file mode 100644 index 000000000..d6bb6b8d6 --- /dev/null +++ b/test/tap/shrinkwrap-scoped-auth.js @@ -0,0 +1,108 @@ +var resolve = require("path").resolve +var writeFileSync = require("graceful-fs").writeFileSync + +var mkdirp = require("mkdirp") +var mr = require("npm-registry-mock") +var osenv = require("osenv") +var rimraf = require("rimraf") +var test = require("tap").test + +var common = require("../common-tap.js") +var toNerfDart = require("../../lib/config/nerf-dart.js") + +var pkg = resolve(__dirname, "shrinkwrap-scoped-auth") +var outfile = resolve(pkg, "_npmrc") +var modules = resolve(pkg, "node_modules") +var tarballPath = "/scoped-underscore/-/scoped-underscore-1.3.1.tgz" +var tarballURL = common.registry + tarballPath +var tarball = resolve(__dirname, "../fixtures/scoped-underscore-1.3.1.tgz") + +var server + +var EXEC_OPTS = { + cwd : pkg +} + +function mocks (server) { + var auth = "Bearer 0xabad1dea" + server.get(tarballPath, { authorization : auth }).replyWithFile(200, tarball) + server.get(tarballPath).reply(401, { + error : "unauthorized", + reason : "You are not authorized to access this db." + }) +} + +test("setup", function (t) { + mr({ port : common.port, mocks : mocks }, function (s) { + server = s + t.ok(s, "set up mock registry") + setup() + t.end() + }) +}) + +test("authed npm install with shrinkwrapped scoped package", function (t) { + common.npm( + [ + "install", + "--loglevel", "silent", + "--fetch-retries", 0, + "--userconfig", outfile + ], + EXEC_OPTS, + function (err, code, stdout, stderr) { + t.ifError(err, "test runner executed without error") + t.equal(code, 0, "npm install exited OK") + t.notOk(stderr, "no output on stderr") + t.equal( + stdout, + "@scoped/underscore@1.3.1 node_modules/@scoped/underscore\n", + "module installed where expected" + ) + + t.end() + } + ) +}) + +test("cleanup", function (t) { + server.close() + cleanup() + t.end() +}) + +var contents = "@scoped:registry="+common.registry+"\n" + + toNerfDart(common.registry)+":_authToken=0xabad1dea\n" + +var json = { + name : "test-package-install", + version : "1.0.0" +} + +var shrinkwrap = { + name : "test-package-install", + version : "1.0.0", + dependencies : { + "@scoped/underscore" : { + resolved : tarballURL, + from : ">=1.3.1 <2", + version : "1.3.1" + } + } +} + +function setup () { + cleanup() + mkdirp.sync(modules) + writeFileSync(resolve(pkg, "package.json"), JSON.stringify(json, null, 2)+"\n") + writeFileSync(outfile, contents) + writeFileSync( + resolve(pkg, "npm-shrinkwrap.json"), + JSON.stringify(shrinkwrap, null, 2)+"\n" + ) +} + +function cleanup() { + process.chdir(osenv.tmpdir()) + rimraf.sync(pkg) +} |