heroku-debug
Version:
debugging plugin for the CLI
111 lines (99 loc) • 3.3 kB
JavaScript
/* global describe it before */
let app = require('../server')
let request = require('supertest-as-promised').agent(app.listen())
let user = require('../lib/user')
let co = require('co')
let url = require('url')
let crypto = require('crypto')
let fs = require('fs')
let config = require('../config')
let expect = require('unexpected')
// make sure this user is in the htpasswd file
const testUser = {name: 'test', password: 'test'}
function * deleteItems (prefix) {
let items = yield config.storage.list(prefix)
for (let item of items) {
console.log(`deleting ${item}`)
yield config.storage.delete(item)
}
}
function bearer (token) {
return function (request) {
request.set('Authorization', `Bearer ${token}`)
}
}
['fs', 's3'].forEach(storage => {
describe(storage, () => {
before(() => {
let Storage = require('../lib/storage/' + storage)
config.storage = new Storage()
})
describe('packages', () => {
let token
describe('GET /:package (package metadata)', () => {
it('returns a package', () => {
return request.get('/mocha')
.accept('json')
.expect(200)
.then((r) => expect(r.body.name, 'to equal', 'mocha'))
})
})
describe('GET /:package/-/:filename (package tarball)', () => {
before(co.wrap(function * () {
yield deleteItems('tarballs/mocha')
}))
it('returns a package tarball', () => {
return request.get('/mocha')
.accept('json')
.expect(200)
.then((r) => r.body.versions['1.0.0'].dist)
.then((dist) => {
return new Promise(resolve => {
let req = request.get(url.parse(dist.tarball).path)
let hash = crypto.createHash('sha1')
hash.setEncoding('hex')
req.pipe(hash)
req.on('end', () => {
hash.end()
let sha = hash.read()
expect(sha, 'to equal', dist.shasum)
resolve()
})
})
})
})
})
describe('PUT /:package (npm publish)', () => {
before(co.wrap(function * () {
token = yield user.authenticate(testUser)
yield deleteItems('tarballs/elephant-sample')
yield deleteItems('packages/elephant-sample')
}))
it('adds a package', () => {
return request.put('/mocha')
.use(bearer(token))
.send({
name: 'elephant-sample',
'dist-tags': {latest: '1.0.0'},
versions: {
'1.0.0': {
dist: {
shasum: '13ac99afb9147d64649e62077a192f32b37c846d',
tarball: 'http://localhost:3000/elephant-sample/-/elephant-sample-1.0.0.tgz'
}
}
},
_attachments: {
'elephant-sample-1.0.0.tgz': {
content_type: 'application/octet-stream',
data: fs.readFileSync('./test/fixtures/elephant-sample.tar.gz', {encoding: 'base64'})
}
}
})
.expect(200)
})
})
})
})
})