105 lines
3.0 KiB
JavaScript
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',
|
|
})
|
|
})
|
|
})
|
|
})
|