Skip to content
Snippets Groups Projects
Commit 6c1963d4 authored by Vytor Calixto's avatar Vytor Calixto :space_invader:
Browse files

Merge branch 'issue/20' into 'development'

Add istanbul to gulp task test

The tests will fail if less then 75% of the code isn't covered

Closes simcaq/SCRUM#20

See merge request !22
parents d27e2c3d 7250b792
No related branches found
No related tags found
1 merge request!22Add istanbul to gulp task test
Pipeline #
...@@ -19,8 +19,7 @@ run_tests: ...@@ -19,8 +19,7 @@ run_tests:
- mv config.json.example config.json - mv config.json.example config.json
- sed -i -e 's/false/true/g' config.json - sed -i -e 's/false/true/g' config.json
- gulp build - gulp build
- cd build/ - gulp test
- mocha
tags: tags:
- node - node
cache: cache:
......
# SIMCAQ # SIMCAQ
[![build status](https://gitlab.c3sl.ufpr.br/simcaq/simcaq-node/badges/development/build.svg)](https://gitlab.c3sl.ufpr.br/simcaq/simcaq-node/commits/development)
[![coverage report](https://gitlab.c3sl.ufpr.br/simcaq/simcaq-node/badges/development/coverage.svg)](https://gitlab.c3sl.ufpr.br/simcaq/simcaq-node/commits/development)
# Dependencies # Dependencies
...@@ -16,9 +18,9 @@ Previous versions of Node.js do not support ECMAScript6, it is recommended to us ...@@ -16,9 +18,9 @@ Previous versions of Node.js do not support ECMAScript6, it is recommended to us
> nvm use v4.5.0 > nvm use v4.5.0
4) Install babel and gulp globally 4) Install the global dependencies
> npm install --global gulp gulp-cli babel babel-cli babel-core babel-register mocha gulp-mocha gulp-eslint > npm install --global gulp gulp-cli babel babel-cli babel-core babel-register mocha gulp-mocha gulp-eslint istanbul
5) Install project dependencies 5) Install project dependencies
......
require('babel-core/register');
const fs = require('fs'); const fs = require('fs');
const gulp = require('gulp'); const gulp = require('gulp');
...@@ -8,6 +10,8 @@ const eslint = require('gulp-eslint'); ...@@ -8,6 +10,8 @@ const eslint = require('gulp-eslint');
const mocha = require('gulp-mocha'); const mocha = require('gulp-mocha');
const istanbul = require('gulp-istanbul');
const nodemon = require('gulp-nodemon'); const nodemon = require('gulp-nodemon');
const Cache = require('gulp-file-cache'); const Cache = require('gulp-file-cache');
...@@ -61,14 +65,26 @@ gulp.task('docco', () => { ...@@ -61,14 +65,26 @@ gulp.task('docco', () => {
gulp.task('doc', ['docco']); gulp.task('doc', ['docco']);
gulp.task('test', () => { gulp.task('pre-test', () => {
return gulp.src(['build/**/*.js', '!build/{test,test/**}'])
.pipe(istanbul())
.pipe(istanbul.hookRequire());
});
gulp.task('test', ['pre-test'], () => {
process.chdir('build'); process.chdir('build');
gulp.src('test/test.js', {read: false}) gulp.src('test/test.js', {read: false})
.pipe(mocha()) .pipe(mocha())
.once('error', () => { .pipe(istanbul.writeReports())
.pipe(istanbul.enforceThresholds({
thresholds: {
global: 80
}
}))
.on('error', () => {
process.exit(1); process.exit(1);
}) })
.once('end', () => { .on('end', () => {
process.exit(); process.exit();
}); });
}); });
......
...@@ -48,11 +48,6 @@ enrollmentApp.get('/adm_dependency', (req, res, next) => { ...@@ -48,11 +48,6 @@ enrollmentApp.get('/adm_dependency', (req, res, next) => {
next(); next();
}, query, response('adm_dependency')); }, query, response('adm_dependency'));
enrollmentApp.get('/data', (req, res, next) => {
req.sql = squel.select().from('turmas');
next();
}, query, response('data'));
// Parse the filters and dimensions parameter in the query // Parse the filters and dimensions parameter in the query
enrollmentApp.use('/', parseParams('filter', [ enrollmentApp.use('/', parseParams('filter', [
'min_year', 'min_year',
......
...@@ -37,8 +37,8 @@ schoolApp.get('/:id', (req, res, next) => { ...@@ -37,8 +37,8 @@ schoolApp.get('/:id', (req, res, next) => {
schoolApp.get('/state/:id', (req, res, next) => { schoolApp.get('/state/:id', (req, res, next) => {
req.sql.from('escolas') req.sql.from('escolas')
.field('pk_escola_id') .field('pk_escola_id')
.field('nome_entidade', 'name') .field('nome_entidade')
.field('ano_censo', 'year') .field('ano_censo')
.field('fk_cod_estado') .field('fk_cod_estado')
.field('fk_cod_municipio') .field('fk_cod_municipio')
.where('fk_cod_estado = ?', parseInt(req.params.id, 10)); .where('fk_cod_estado = ?', parseInt(req.params.id, 10));
...@@ -49,8 +49,8 @@ schoolApp.get('/state/:id', (req, res, next) => { ...@@ -49,8 +49,8 @@ schoolApp.get('/state/:id', (req, res, next) => {
schoolApp.get('/city/:id', (req, res, next) => { schoolApp.get('/city/:id', (req, res, next) => {
req.sql.from('escolas') req.sql.from('escolas')
.field('pk_escola_id') .field('pk_escola_id')
.field('nome_entidade', 'name') .field('nome_entidade')
.field('ano_censo', 'year') .field('ano_censo')
.field('fk_cod_estado') .field('fk_cod_estado')
.field('fk_cod_municipio') .field('fk_cod_municipio')
.where('fk_cod_municipio = ?', parseInt(req.params.id, 10)); .where('fk_cod_municipio = ?', parseInt(req.params.id, 10));
......
...@@ -18,3 +18,6 @@ app.set('ip', process.env.IP || config.get('ip') || '127.0.0.1'); ...@@ -18,3 +18,6 @@ app.set('ip', process.env.IP || config.get('ip') || '127.0.0.1');
const server = app.listen(app.get('port'), () => { const server = app.listen(app.get('port'), () => {
log.info(`Express server listening on port ${server.address().port}`); log.info(`Express server listening on port ${server.address().port}`);
}); });
// For testing
module.exports = server;
process.env.NODE_ENV = 'test';
const chai = require('chai'); const chai = require('chai');
const dirtyChai = require('dirty-chai'); const dirtyChai = require('dirty-chai');
chai.use(dirtyChai); chai.use(dirtyChai);
const chaiXml = require('chai-xml');
chai.use(chaiXml);
const chaiHttp = require('chai-http'); const chaiHttp = require('chai-http');
const assert = chai.assert; const assert = chai.assert;
...@@ -18,7 +24,62 @@ const server = require(`${libs}/app`); ...@@ -18,7 +24,62 @@ const server = require(`${libs}/app`);
chai.use(chaiHttp); chai.use(chaiHttp);
describe('API is running', () => {
it('should respond it\'s running', (done) => {
chai.request(server)
.get('/api/v1')
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('msg');
done();
})
});
});
describe('request enrollments', () => { describe('request enrollments', () => {
it('should list the year range', (done) => {
chai.request(server)
.get('/api/v1/enrollment/year_range')
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('result');
res.body.result.should.be.a('array');
res.body.result[0].should.have.property('start_year');
res.body.result[0].should.have.property('end_year');
done();
});
});
it('should list the education level', (done) => {
chai.request(server)
.get('/api/v1/enrollment/education_level')
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('result');
res.body.result.should.be.a('array');
res.body.result[0].should.have.property('id');
res.body.result[0].should.have.property('name');
done();
});
});
it('should list the administrative dependencies', (done) => {
chai.request(server)
.get('/api/v1/enrollment/adm_dependency ')
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('result');
res.body.result.should.be.a('array');
res.body.result[0].should.have.property('id');
res.body.result[0].should.have.property('name');
done();
});
});
it('should list enrollments', (done) => { it('should list enrollments', (done) => {
chai.request(server) chai.request(server)
.get('/api/v1/enrollment') .get('/api/v1/enrollment')
...@@ -32,6 +93,84 @@ describe('request enrollments', () => { ...@@ -32,6 +93,84 @@ describe('request enrollments', () => {
done(); done();
}); });
}); });
it('should list enrollments with valid filters', (done) => {
chai.request(server)
.get('/api/v1/enrollment?filter=min_year:2010,state:41')
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('result');
res.body.result.should.be.a('array');
res.body.result[0].should.have.property('name');
res.body.result[0].should.have.property('total');
done();
});
});
it('should list enrollments with invalid filters', (done) => {
chai.request(server)
.get('/api/v1/enrollment?filter=foo:2010,bar:41')
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('result');
res.body.result.should.be.a('array');
res.body.result[0].should.have.property('name');
res.body.result[0].should.have.property('total');
done();
});
});
it('should list enrollments with valid dimensions', (done) => {
chai.request(server)
.get('/api/v1/enrollment?dims=region,state,adm_dependency_id,location_id&filter=min_year:2014,region:4')
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('result');
res.body.result.should.be.a('array');
res.body.result[0].should.have.property('region_name');
res.body.result[0].should.have.property('state_name');
res.body.result[0].should.have.property('adm_dependency_name');
res.body.result[0].should.have.property('total');
done();
});
});
it('should list enrollments with invalid dimensions', (done) => {
chai.request(server)
.get('/api/v1/enrollment?dims=foo,bar')
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('result');
res.body.result.should.be.a('array');
res.body.result[0].should.have.property('name');
res.body.result[0].should.have.property('total');
done();
});
});
it('should list enrollments with valid dimensions and filters', (done) => {
chai.request(server)
.get('/api/v1/enrollment?dims=region,state,education_level_id,school&filter=min_year:2013,max_year:2014,city:3287')
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('result');
res.body.result.should.be.a('array');
res.body.result[0].should.have.property('region_name');
res.body.result[0].should.have.property('state_name');
res.body.result[0].should.have.property('school_name');
res.body.result[0].should.have.property('education_level');
res.body.result[0].should.have.property('total');
res.body.result[0].should.have.property('year');
done();
});
});
}); });
describe('request regions', () => { describe('request regions', () => {
...@@ -161,4 +300,99 @@ describe('request cities', () => { ...@@ -161,4 +300,99 @@ describe('request cities', () => {
done(); done();
}); });
}); });
it('should list all cities from a state', (done) => {
chai.request(server)
.get('/api/v1/city/state/41')
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('result');
res.body.result.should.be.a('array');
res.body.result[0].should.have.property('pk_municipio_id');
res.body.result[0].should.have.property('fk_estado_id');
res.body.result[0].should.have.property('nome');
res.body.result[0].should.have.property('codigo_ibge');
done();
})
})
});
describe('request schools', () => {
it('should list a school by id', (done) => {
chai.request(server)
.get('/api/v1/school/185588')
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('result');
res.body.result.should.be.a('array');
res.body.result[0].should.have.property('pk_escola_id');
res.body.result[0].should.have.property('ano_censo');
res.body.result[0].should.have.property('cod_entidade');
res.body.result[0].should.have.property('nome_entidade');
done();
});
});
it('should list all schools from a state', (done) => {
chai.request(server)
.get('/api/v1/school/state/41')
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('result');
res.body.result.should.be.a('array');
res.body.result[0].should.have.property('pk_escola_id');
res.body.result[0].should.have.property('ano_censo');
res.body.result[0].should.have.property('nome_entidade');
done();
});
});
it('should list all schools from a city', (done) => {
chai.request(server)
.get('/api/v1/school/city/3287')
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('result');
res.body.result.should.be.a('array');
res.body.result[0].should.have.property('pk_escola_id');
res.body.result[0].should.have.property('ano_censo');
res.body.result[0].should.have.property('nome_entidade');
done();
})
})
});
describe('test response', () => {
it('should list all regions in json', (done) => {
chai.request(server)
.get('/api/v1/region')
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
done();
});
});
it('should list all regions in xml', (done) => {
chai.request(server)
.get('/api/v1/region?format=xml')
.end((err, res) => {
res.should.have.status(200);
res.should.be.xml;
done();
});
});
it('should list all regions in csv', (done) => {
chai.request(server)
.get('/api/v1/region?format=csv')
.end((err, res) => {
res.should.have.status(200);
done();
});
});
}); });
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment