--- /dev/null
+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)