funcunit
Version:
<!-- @hide title
111 lines (93 loc) • 3.33 kB
JavaScript
var ghdownload = require('../lib/github-download')
, testutil = require('testutil')
, fs =require('fs-extra')
, path = require('path')
, nock = require('nock')
var TEST_DIR = null
describe('github-download', function() {
beforeEach(function() {
if (fs.existsSync(TEST_DIR)) fs.removeSync(TEST_DIR)
TEST_DIR = testutil.createTestDir('github-download')
})
describe('> when input is an object with user and repo', function() {
it('should download the latest copy of master', function(done) {
var input = {user: 'jprichardson', repo: 'node-batchflow'}
TEST(path.join(TEST_DIR, '1'), input, done)
})
})
describe('> when input is an relative Github repo', function() {
it('should download the latest copy of master', function(done) {
var input = 'jprichardson/node-batchflow'
TEST(path.join(TEST_DIR, '2'), input, done)
})
})
describe('> when input is git path Github repo', function() {
it('should download the latest copy of master', function(done) {
var input = 'git@github.com:jprichardson/node-batchflow.git'
TEST(path.join(TEST_DIR, '3'), input, done)
})
})
describe('> when Github API limit has been reached', function() {
it('should download the zip of the repo', function(done) {
var input = {user: 'jprichardson', repo: 'node-batchflow'}
var scope = nock('https://api.github.com/')
.filteringPath(function(path) {
return '*';
})
.get('*')
.reply(403, {message: "API Rate Limit Exceeded for $IP"})
TEST(path.join(TEST_DIR, '4'), input, done)
})
})
})
function TEST (outputDir, input, done) {
var files = []
, dirs = []
, zip = null
//console.log('OD: ' + outputDir)
if (!fs.existsSync(outputDir)) {
fs.removeSync(outputDir)
fs.mkdirsSync(outputDir)
}
ghdownload(input, outputDir)
.on('dir', function(dir) {
//console.log('D: ' + dir)
dirs.push(dir)
})
.on('file', function(file) {
//console.log('F: ' + file)
files.push(file)
})
.on('zip', function(zipUrl) {
zip = zipUrl
})
.on('error', function(err) {
throw err
done(err) //shouldn't happen
})
.on('end', function() {
if (!zip) { //file and dir events dont get emitted on zip
T (files.length > 10)
T (dirs.length >= 2)
}
var items = []
//console.log('OD2: ' + outputDir)
items = items.concat(fs.readdirSync(outputDir))
items = items.concat(fs.readdirSync(path.join(outputDir, 'lib')))
items = items.concat(fs.readdirSync(path.join(outputDir, 'test')))
//console.dir(items)
T (fs.existsSync(path.join(outputDir, '.gitignore')))
T (fs.existsSync(path.join(outputDir, '.travis.yml')))
T (fs.existsSync(path.join(outputDir, 'CHANGELOG.md')))
T (fs.existsSync(path.join(outputDir, 'LICENSE')))
T (fs.existsSync(path.join(outputDir, 'README.md')))
T (fs.existsSync(path.join(outputDir, 'package.json')))
T (fs.existsSync(path.join(outputDir, 'lib/batchflow.js')))
T (fs.existsSync(path.join(outputDir, 'test/batchflow.test.js')))
T (fs.existsSync(path.join(outputDir, 'test/mocha.opts')))
T (fs.readFileSync(path.join(outputDir,'LICENSE'), 'utf8').indexOf('jprichardson@gmail.com') > 0)
setTimeout(function() {
done()
},20)
})
}