| 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) |