github-comment-manager/test/app.js

105 lines
3.0 KiB
JavaScript

const expect = require('chai').expect
const sinon = require('sinon')
const request = require('supertest')
const sample = require('./sample')
const App = require('../src/app')
const Builds = require('../src/builds')
const Comments = require('../src/comments')
let ghc, app
describe('App', () => {
beforeEach(() => {
ghc = sinon.createStubInstance(Comments)
ghc.db = sinon.createStubInstance(Builds, {
getComments: sample.COMMENTS,
getBuilds: sample.BUILDS,
}),
app = App({ghc})
})
describe('GET /', () => {
it('should redirect to main site', async () => {
const resp = await request(app.callback()).get('/')
expect(resp.status).to.eq(302)
expect(resp.headers.location).to.eq('https://status.im/')
})
})
describe('GET /health', () => {
it('should return OK', async () => {
const resp = await request(app.callback())
.get('/health')
expect(resp.text).to.eq('OK')
expect(resp.status).to.eq(200)
})
})
describe('GET /comments', () => {
it('should return list of comments', async () => {
const resp = await request(app.callback())
.get('/comments')
expect(resp.body).to.eql({
count: sample.COMMENTS.length, comments: sample.COMMENTS
})
expect(resp.status).to.eq(200)
})
})
describe('POST /builds/:repo/:pr', () => {
it('should store the POSTed build', async () => {
const resp = await request(app.callback())
.post('/builds/REPO-1/PR-1')
.send(sample.BUILD)
expect(resp.body).to.eql({status:'ok'})
expect(resp.status).to.eq(201)
expect(ghc.db.addBuild).calledOnceWith({
repo: 'REPO-1', pr: 'PR-1', build: sample.BUILD,
})
expect(ghc.safeUpdate).calledOnceWith({
repo: 'REPO-1', pr: 'PR-1'
})
})
})
describe('GET /builds/:repo/:pr', () => {
it('should return list of builds', async () => {
const resp = await request(app.callback())
.get('/builds/REPO-1/PR-1')
expect(resp.body).to.eql({
count: sample.BUILDS.length, builds: sample.BUILDS,
})
expect(resp.status).to.eq(200)
})
})
describe('DELETE /builds/:repo/:pr', () => {
it('should delete all matching builds', async () => {
const resp = await request(app.callback())
.delete('/builds/REPO-1/PR-1')
expect(resp.body).to.eql({})
expect(resp.status).to.eq(200)
expect(ghc.db.removeBuilds).calledOnceWith({
repo: 'REPO-1', pr: 'PR-1',
})
})
})
describe('POST /builds/:repo/:pr/refresh', () => {
it('should update github comment', async () => {
const resp = await request(app.callback())
.post('/builds/REPO-1/PR-1/refresh')
.send(sample.BUILD)
expect(resp.body).to.eql({status:'ok'})
expect(resp.status).to.eq(201)
expect(ghc.db.addBuild).not.calledOnceWith({
repo: 'REPO-1', pr: 'PR-1', build: sample.BUILD
})
expect(ghc.safeUpdate).calledOnceWith({
repo: 'REPO-1', pr: 'PR-1',
})
})
})
})