Skip to content

Commit

Permalink
add tests tests tests
Browse files Browse the repository at this point in the history
  • Loading branch information
lipp committed Jan 14, 2016
1 parent b0c3897 commit ac765ba
Show file tree
Hide file tree
Showing 27 changed files with 5,466 additions and 33 deletions.
3 changes: 2 additions & 1 deletion api-server.docker
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
FROM nodesource/node:LTS
FROM nodesource/wheezy:LTS
RUN apt-get update -y && apt-get install libkrb5-dev -y
ADD package.json package.json
RUN npm install
ADD . .
Expand Down
Empty file added assets/favicon.ico
Empty file.
Empty file added assets/robots.txt
Empty file.
5 changes: 5 additions & 0 deletions bin/api-server.js
Original file line number Diff line number Diff line change
@@ -1,2 +1,7 @@
var apiServer = require('../lib/api-server')
apiServer.init(3420)
console.log('api-server started')
process.on('SIGTERM', function () {
console.log('api-server shutdown')
process.exit(0)
})
5 changes: 5 additions & 0 deletions bin/doc-worker.js
Original file line number Diff line number Diff line change
@@ -1,2 +1,7 @@
var docWorker = require('../lib/doc-worker')
docWorker.init('./git-root')
console.log('doc-worker started')
process.on('SIGTERM', function () {
console.log('doc-worker shutdown')
process.exit(0)
})
4 changes: 4 additions & 0 deletions bin/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,9 @@ require('../lib/server').init(8080, function (err) {
process.exit(1)
} else {
console.log('running on port 8080')
process.on('SIGTERM', function () {
console.log('server shutdown')
process.exit(0)
})
}
})
1 change: 1 addition & 0 deletions docker-compose-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,5 @@ web-server:
restart: always
environment:
- NODE_ENV=dev
- HOST_NAME=192.168.99.100

11 changes: 11 additions & 0 deletions docker-compose-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
redis:
image: redis
command: redis-server --appendonly yes
ports:
- 6379:6379

mongodb:
image: mongo
ports:
- 27017:27017

7 changes: 4 additions & 3 deletions lib/api-server.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,10 @@ module.exports.init = function (port) {

githubHandler.on('push', function (event) {
var data = event.payload
console.log('pushing to inbox:', data.repository.full_name, data.ref)
inbox.add(data)
if (data.ref.indexOf('refs/heads/') === 0) {
console.log('pushing to inbox:', data.repository.full_name, data.ref)
inbox.add(data)
}
})

githubHandler.on('create', function (event) {
Expand All @@ -30,4 +32,3 @@ module.exports.init = function (port) {

return app
}

2 changes: 1 addition & 1 deletion lib/models/doclet.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ docletSchema.statics.createFromGitHubEvent = function (event, data, done) {
_.each(obj, function (value, key) {
doclet.set(key, value)
})
doclet.update(done)
doclet.save(done)
} else if (err || !doclet) {
new Doclet(obj).save(done)
}
Expand Down
41 changes: 24 additions & 17 deletions lib/models/repo.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ repoSchema.methods.enableWebHook = function (done) {
}

repoSchema.methods.disableWebHook = function (done) {
this.changeWebHook(true, done)
this.changeWebHook(false, done)
}

repoSchema.methods.syncHook = function (auth, done) {
Expand All @@ -64,7 +64,11 @@ repoSchema.methods.syncHook = function (auth, done) {
return
} else {
self.set('webhook', hook || false)
self.save(done)
// this does not work... WHY?
// self.save(done)
self.save(function (err, repo) {
done(err, repo)
})
}
})
}
Expand All @@ -89,14 +93,16 @@ repoSchema.statics.createFromGitHub = function (ghRepo, auth, done) {

repoSchema.statics.syncOrCreate = function (ghRepo, auth, done) {
Repo.findById(ghRepo.full_name, function (err, repo) {
if (repo) {
if (err) {
done(err)
} else if (repo) {
repo.set('stars', ghRepo.stargazers_count)
repo.set('private', ghRepo.private)
repo.set('description', ghRepo.description || '')
repo.set('synced_at', new Date().getTime())
repo.set('permissions', ghRepo.permissions)
repo.syncHook(auth, done)
} else if (err || !repo) {
} else {
Repo.createFromGitHub(ghRepo, auth, done)
}
})
Expand All @@ -110,29 +116,24 @@ repoSchema.statics.findByUser = function (user, auth, done) {
}
var olds = {}

var sync = function (done) {
var sync = function (syncDone) {
var syncFns = ghRepos.map(function (ghRepo) {
return function (done) {
console.log('sync', ghRepo.full_name)
delete olds[ghRepo.full_name]
Repo.syncOrCreate(ghRepo, auth, done)
}
})
async.parallel(syncFns, done)
async.parallel(syncFns, syncDone)
}

var getOlds = function (done) {
console.log('olds')
Repo.find({}, function (err, repos) {
if (err) {
done(err)
} else {
var getOlds = function (getOldsDone) {
async.waterfall([
Repo.find.bind(Repo, {}),
async.wrapSync(function (repos) {
repos.forEach(function (repo) {
olds[repo._id] = false
})
done()
}
})
})], getOldsDone)
}

var removeOlds = Repo.remove.bind(Repo, {_id: {$in: _.keys(olds)}})
Expand All @@ -141,7 +142,13 @@ repoSchema.statics.findByUser = function (user, auth, done) {
getOlds,
sync,
removeOlds
], done)
], function (err, results) {
if (err) {
done(err)
} else {
done(null, results[1])
}
})
})
}

Expand Down
4 changes: 4 additions & 0 deletions lib/routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,10 @@ Routes.prototype.user = function (req, res) {
}
var data = results[0]
var owner = results[1]
if (!owner) {
res.status(404).send('not found')
return
}
var doclets = data.map(function (row) {
return viewParams.getApiParams(row)
})
Expand Down
10 changes: 7 additions & 3 deletions lib/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ var GitHubStrategy = require('passport-github2').Strategy
var User = require('./models/user')
var mongoose = require('mongoose')
var services = require('./services')
var morgan = require('morgan')

var Routes = require('./routes').Routes

Expand All @@ -18,11 +19,13 @@ var GITHUB_CLIENT_SECRET = '1bc0158227cf2c460a8298816d40c9bd6dc18df7'
var init = function (port, initDone) {
mongoose.connect('mongodb://' + services.mongodb.host + '/app')

passport.serializeUser(function (user, done) {
var id = user.profile.id
passport.serializeUser(function (ghUser, done) {
var id = ghUser.profile.id
User.findOne({passportId: id}, function (err, user) {
if (err) {
User.createFromGitHubPassport(user, function (err) {
done(err)
} else if (!user) {
User.createFromGitHubPassport(ghUser, function (err) {
done(err, id)
})
} else {
Expand All @@ -47,6 +50,7 @@ var init = function (port, initDone) {
initDone = initDone || function () {}
var app = express()
app.enable('strict routing')
app.use(morgan('dev'))
app.use(bodyParser.urlencoded({ extended: true }))
app.use(bodyParser.json())
app.use(methodOverride())
Expand Down
9 changes: 6 additions & 3 deletions lib/services.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ if (process.env.TRAVIS) {
redis: {
host: 'localhost',
port: redis_port
}
},
self: 'localhost'
}
} else if (process.env.TEST) {
module.exports = {
Expand All @@ -21,7 +22,8 @@ if (process.env.TRAVIS) {
redis: {
host: '192.168.99.100',
port: redis_port
}
},
self: 'localhost'
}
} else {
module.exports = {
Expand All @@ -32,6 +34,7 @@ if (process.env.TRAVIS) {
redis: {
host: 'redis',
port: redis_port
}
},
self: process.env.HOST_NAME
}
}
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
"method-override": "^2.3.5",
"moment": "^2.11.0",
"mongoose": "^4.3.4",
"morgan": "^1.6.1",
"normalize.css": "^3.0.3",
"passport": "^0.3.2",
"passport-github2": "^0.1.9",
Expand Down
69 changes: 69 additions & 0 deletions test/api-server_spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/* global describe it before beforeEach */
var assert = require('assert')
var apiServer = require('../lib/api-server')
var request = require('request')
var Bull = require('bull')
var services = require('../lib/services')
var async = require('async')
var path = require('path')
var fs = require('fs')

var replayGitHubEvent = function (eventDir, done) {
var payload = fs.readFileSync(path.join(__dirname, 'fixtures/events', eventDir, 'payload.json'))
var headers = require(path.join(__dirname, 'fixtures/events', eventDir, 'headers.js'))
request({
url: 'http://localhost:9876/github/callback',
method: headers.method,
body: payload,
headers: headers
}, done)
}

describe('The api-server module', function () {
this.timeout(4000)

var inbox

before(function (done) {
apiServer.init(9876)
inbox = new Bull('inbox', services.redis.port, services.redis.host)
inbox.on('ready', done)
})

beforeEach(function (done) {
var cleaners = ['completed', 'waiting', 'delayed', 'failed'].map(function (type) {
return async.asyncify(inbox.clean.bind(inbox, 0, type))
})
async.series(cleaners, done)
})

it('HTTP POST Push Event to /github/callback created inbox entry', function (done) {
replayGitHubEvent('acme-push', function (err, res) {
assert(!err)
assert.equal(res.statusCode, 200)
setTimeout(function () {
inbox.count()
.then(function (count) {
assert.equal(count, 1)
done()
})
.catch(done)
}, 300)
})
})

it('HTTP POST Create Event to /github/callback created inbox entry', function (done) {
replayGitHubEvent('acme-tag', function (err, res) {
assert(!err)
assert.equal(res.statusCode, 200)
setTimeout(function () {
inbox.count()
.then(function (count) {
assert.equal(count, 1)
done()
})
.catch(done)
}, 100)
})
})
})
73 changes: 73 additions & 0 deletions test/doc-worker_spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
/* global describe it before beforeEach after */
var assert = require('assert')
var Doclet = require('../lib/models/doclet')
var services = require('../lib/services')
var mongoose = require('mongoose')
var Bull = require('bull')
var fs = require('fs')
var fse = require('fs-extra')
var path = require('path')
var docWorker = require('../lib/doc-worker')

var loadGitHubEvent = function (eventDir) {
var payload = fs.readFileSync(path.join(__dirname, 'fixtures/events', eventDir, 'payload.json'))
return JSON.parse(payload)
}

var tmpPath = path.join(__dirname, 'git-temp')

describe('The doc-worker module', function () {
this.timeout(10000)
var inbox

before(function (done) {
docWorker.init(tmpPath)
inbox = new Bull('inbox', services.redis.port, services.redis.host)
inbox.on('ready', done)
})

after(function (done) {
fse.removeSync(tmpPath)
mongoose.connection.close(done)
})

beforeEach(function (done) {
Doclet.remove({}, done)
})

it('pushing a push event to the inbox will create a doclet', function (done) {
var event = loadGitHubEvent('acme-push')
inbox.add(event)
setTimeout(function () {
Doclet.findById('lipp/acme-jsdoc-example/master', function (err, doclet) {
if (err) {
done(err)
} else {
assert(doclet)
inbox.count().then(function (count) {
assert.equal(count, 0)
done()
})
}
})
}, 3000)
})

it('pushing a push event to the inbox will create a doclet', function (done) {
var event = loadGitHubEvent('acme-push')
inbox.add(event)
setTimeout(function () {
Doclet.findById('lipp/acme-jsdoc-example/master', function (err, doclet) {
if (err) {
done(err)
} else {
assert(doclet)
inbox.count().then(function (count) {
assert.equal(count, 0)
done()
})
}
})
}, 3000)
})
})
Loading

0 comments on commit ac765ba

Please sign in to comment.