Skip to content
Snippets Groups Projects
Commit a0bcb0ed authored by João Victor Tozatti Risso's avatar João Victor Tozatti Risso
Browse files

Implement route for UC408


- Add /location/educational/school_level route to query enrollments per school level;
- Add basic test case for the route. For now, it only checks if the format of the response is the expected one.

Signed-off-by: default avatarJoão Victor Tozatti Risso <jvtr12@inf.ufpr.br>
parent 71db7dcc
No related branches found
No related tags found
2 merge requests!116Release v1.0.0,!27Implement UC201 - Select Location
Pipeline #
...@@ -45,43 +45,43 @@ function schoolYearIdToStr(schoolYearId) ...@@ -45,43 +45,43 @@ function schoolYearIdToStr(schoolYearId)
schoolYearStr = 'Pré-escola'; schoolYearStr = 'Pré-escola';
break; break;
case 31: case 31:
schoolYearStr = 'EF-AI 1 Ano'; schoolYearStr = '1 Ano';
break; break;
case 32: case 32:
schoolYearStr = 'EF-AI 2 Ano - 1 Serie'; schoolYearStr = '2 Ano - 1 Serie';
break; break;
case 33: case 33:
schoolYearStr = 'EF-AI 3 Ano - 2 Serie'; schoolYearStr = '3 Ano - 2 Serie';
break; break;
case 34: case 34:
schoolYearStr = 'EF-AI 4 Ano - 3 Serie'; schoolYearStr = '4 Ano - 3 Serie';
break; break;
case 35: case 35:
schoolYearStr = 'EF-AI 5 Ano - 4 Serie'; schoolYearStr = '5 Ano - 4 Serie';
break; break;
case 41: case 41:
schoolYearStr = 'EF-AF 6 Ano - 5 Serie'; schoolYearStr = '6 Ano - 5 Serie';
break; break;
case 42: case 42:
schoolYearStr = 'EF-AF 7 Ano - 6 Serie'; schoolYearStr = '7 Ano - 6 Serie';
break; break;
case 43: case 43:
schoolYearStr = 'EF-AF 8 Ano - 7 Serie'; schoolYearStr = '8 Ano - 7 Serie';
break; break;
case 44: case 44:
schoolYearStr = 'EF-AF 9 Ano - 8 Serie'; schoolYearStr = '9 Ano - 8 Serie';
break; break;
case 51: case 51:
schoolYearStr = 'EM 1 Série'; schoolYearStr = '1 Ano'; // equivalent to 'EM 1 Série'
break; break;
case 52: case 52:
schoolYearStr = 'EM 2 Série'; schoolYearStr = '2 Ano'; // equivalent to 'EM 2 Série'
break; break;
case 53: case 53:
schoolYearStr = 'EM 3 Série'; schoolYearStr = '3 Ano'; // equivalent to 'EM 3 Série'
break; break;
case 54: case 54:
schoolYearStr = 'EM 4 Série'; schoolYearStr = '4 Ano'; // equivalent to 'EM 4 Série'
break; break;
case 61: case 61:
schoolYearStr = 'EJA AI'; schoolYearStr = 'EJA AI';
...@@ -987,8 +987,11 @@ locationApp.get('/educational/city/:id', (req, res, next) => { ...@@ -987,8 +987,11 @@ locationApp.get('/educational/city/:id', (req, res, next) => {
}); });
}, response('location')); }, response('location'));
/* TODO: fix response format to nest objects by year locationApp.get('/educational/school_level', (req, res, next) => {
locationApp.get('/educational/per_year', (req, res, next) => { const enrollmentsPerSchoolLevelYearQry = squel.select()
.field('MAX(turma.ano_censo)', 'census_year')
.from('turma');
const enrollmentsPerSchoolLevelQry = squel.select() const enrollmentsPerSchoolLevelQry = squel.select()
.field('COALESCE(SUM(turma.num_matriculas), 0)', 'total') .field('COALESCE(SUM(turma.num_matriculas), 0)', 'total')
.field('turma.ano_censo', 'census_year') .field('turma.ano_censo', 'census_year')
...@@ -996,6 +999,7 @@ locationApp.get('/educational/per_year', (req, res, next) => { ...@@ -996,6 +999,7 @@ locationApp.get('/educational/per_year', (req, res, next) => {
.field('etapa_ensino.desc_etapa', 'school_level') .field('etapa_ensino.desc_etapa', 'school_level')
.from('turma') .from('turma')
.from('etapa_ensino') .from('etapa_ensino')
.where(`turma.ano_censo IN (${enrollmentsPerSchoolLevelYearQry.toString()})`)
.where('turma.fk_etapa_ensino_id = etapa_ensino.pk_etapa_ensino_id') .where('turma.fk_etapa_ensino_id = etapa_ensino.pk_etapa_ensino_id')
.where('turma.fk_tipo_turma_id <= 3') .where('turma.fk_tipo_turma_id <= 3')
.group('etapa_ensino.desc_etapa') .group('etapa_ensino.desc_etapa')
...@@ -1005,24 +1009,40 @@ locationApp.get('/educational/per_year', (req, res, next) => { ...@@ -1005,24 +1009,40 @@ locationApp.get('/educational/per_year', (req, res, next) => {
.order('turma.serie_ano') .order('turma.serie_ano')
.order('turma.ano_censo'); .order('turma.ano_censo');
const queryLabels = [ "enrollment_per_school_level" ]; const queryLabels = [ 'enrollment_per_school_level', 'enrollment_census_year' ];
const querySet = [ enrollmentsPerSchoolLevelQry ]; const querySet = [ enrollmentsPerSchoolLevelQry, enrollmentsPerSchoolLevelYearQry ];
// wait until all queries finish or one of them fail // wait until all queries finish or one of them fail
Promise.all(dbExecAll(querySet)).then((queryResults) => { Promise.all(dbExecAll(querySet, enrollmentsPerSchoolLevelYearQry)).then((queryResults) => {
const result = queryResults[0]; const result = queryResults[0];
let response = {}; const censusYear = queryResults[1][0]['census_year'];
let school_levels = {};
for(let i = 0; i < result.length; ++i) { for(let i = 0; i < result.length; ++i) {
log.debug(result[i]);
const school_year = schoolYearIdToStr(result[i].school_year); const school_year = schoolYearIdToStr(result[i].school_year);
const school_level = result[i].school_level; const school_level = result[i].school_level;
const census_year = result[i].census_year; const census_year = result[i].census_year;
if (typeof response[school_level] === "undefined") { if (typeof school_levels[school_level] === 'undefined') {
response[school_level] = {}; school_levels[school_level] = {};
} }
if (typeof response[school_level][school_year] === "undefined") { school_levels[school_level][school_year] = parseInt(result[i].total, 10);
response[school_level][school_year] = {}; }
let response = [];
for(let level in school_levels) {
if (school_levels.hasOwnProperty(level)) {
let sclevel = {};
sclevel["degree"] = level;
sclevel["census_year"] = parseInt(censusYear, 10);
sclevel["table"] = [];
for(let school_year in school_levels[level]) {
if (school_levels[level].hasOwnProperty(school_year)) {
let enrollment = { 'title' : school_year,
'value' : school_levels[level][school_year] };
sclevel["table"].push(enrollment);
}
}
response.push(sclevel);
} }
response[school_level][school_year] = parseInt(result[i].total, 10);
} }
req.result = response; req.result = response;
next(); next();
...@@ -1031,6 +1051,5 @@ locationApp.get('/educational/per_year', (req, res, next) => { ...@@ -1031,6 +1051,5 @@ locationApp.get('/educational/per_year', (req, res, next) => {
next(error); next(error);
}); });
}, response('location')); }, response('location'));
*/
module.exports = locationApp; module.exports = locationApp;
...@@ -446,4 +446,33 @@ describe('test location', () => { ...@@ -446,4 +446,33 @@ describe('test location', () => {
done(); done();
}); });
}).timeout(testTimeout); }).timeout(testTimeout);
it('should return the correct format of enrollments per school level', (done) => {
chai.request(server)
.get('/api/v1/location/educational/school_level')
.end((err, res) => {
res.should.have.status(200);
// test response format
res.should.be.json;
// test for result attribute in the response
res.body.should.have.property('result');
res.body.result.should.be.a('array');
// test response attributes for school
res.body.result.forEach((row) => {
row.should.be.a('object');
row.should.have.property('degree');
row.should.have.property('census_year');
row.should.have.property('table');
row.table.should.be.a('array');
row.table.forEach((tableRow) => {
tableRow.should.be.a('object');
tableRow.should.have.property('title');
tableRow.should.have.property('value');
tableRow.title.should.be.a('String');
tableRow.value.should.be.a('Number');
});
});
done();
});
}).timeout(testTimeout);
}); });
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