From 0a326cefadcdc9f58651103e2d2ad2cd548ec529 Mon Sep 17 00:00:00 2001
From: Victor Picussa <vp16@inf.ufpr.br>
Date: Thu, 24 May 2018 10:05:41 -0300
Subject: [PATCH] [dailyChargeAmount]Median, STD, 1 Quartile and 3 Quartile
 done

---
 src/libs/routes/dailyChargeAmount.js |   8 +-
 src/test/dailyChargeAmount.js        | 159 +++++++++++++++++++++++++++
 2 files changed, 165 insertions(+), 2 deletions(-)
 create mode 100644 src/test/dailyChargeAmount.js

diff --git a/src/libs/routes/dailyChargeAmount.js b/src/libs/routes/dailyChargeAmount.js
index 5935372e..b8b3726b 100644
--- a/src/libs/routes/dailyChargeAmount.js
+++ b/src/libs/routes/dailyChargeAmount.js
@@ -289,7 +289,11 @@ dailyChargeAmount.get('/', rqf.parse(), rqf.build(), (req, res, next) => {
         req.sql.from('turma')
         .field('turma.ano_censo', 'year')
         .field('turma.etapa_resumida', 'education_level_short_id')
-        .field('AVG(turma.duracao_turma)/60', 'average_class_duration')
+        .field('AVG(turma.duracao_turma)/60.0', 'average_class_duration')
+        .field('MEDIAN(turma.duracao_turma)/60.0', 'median_class_duration')
+        .field('STDDEV_POP(turma.duracao_turma)/60.0', 'std_class_duration')
+        .field('QUANTILE(turma.duracao_turma, 0.25)/60.0', 'fstqt_class_duration')
+        .field('QUANTILE(turma.duracao_turma, 0.75)/60.0', 'thdqt_class_duration')
         .group('turma.ano_censo')
         .group('turma.etapa_resumida')
         .order('turma.ano_censo')
@@ -345,7 +349,7 @@ dailyChargeAmount.get('/average', rqf.parse(), rqf.build(), (req, res, next) =>
         req.sql.from('turma')
         .field('turma.ano_censo', 'year')
         .field('turma.etapas_mod_ensino_segmento_id', 'education_level_mod_id')
-        .field('AVG(turma.duracao_turma)/60', 'average_class_duration')
+        .field('AVG(turma.duracao_turma)/60.0', 'average_class_duration')
         .group('turma.ano_censo')
         .group('turma.etapas_mod_ensino_segmento_id')
         .order('turma.ano_censo')
diff --git a/src/test/dailyChargeAmount.js b/src/test/dailyChargeAmount.js
new file mode 100644
index 00000000..92e2b59a
--- /dev/null
+++ b/src/test/dailyChargeAmount.js
@@ -0,0 +1,159 @@
+process.env.NODE_ENV = 'test';
+
+const chai = require('chai');
+
+const dirtyChai = require('dirty-chai');
+
+chai.use(dirtyChai);
+
+const chaiXml = require('chai-xml');
+
+chai.use(chaiXml);
+
+const chaiHttp = require('chai-http');
+
+const assert = chai.assert;
+
+const expect = chai.expect;
+
+const should = chai.should(); // actually call the function
+
+const libs = `${process.cwd()}/libs`;
+
+const server = require(`${libs}/app`);
+
+chai.use(chaiHttp);
+describe('request daily charge amount', () => {
+    it('should list the year range', (done) => {
+        chai.request(server)
+            .get('/api/v1/dailyChargeAmount/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 year range', (done) => {
+        chai.request(server)
+            .get('/api/v1/dailyChargeAmount/years')
+            .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('year');
+                done();
+            });
+    });
+
+    it('should list the locations', (done) => {
+        chai.request(server)
+            .get('/api/v1/dailyChargeAmount/location')
+            .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 education level short', (done) => {
+        chai.request(server)
+            .get('/api/v1/dailyChargeAmount/education_level_short')
+            .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 education level mod', (done) => {
+        chai.request(server)
+            .get('/api/v1/dailyChargeAmount/education_level_mod')
+            .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 dimensions of education_level_short', (done) => {
+        chai.request(server)
+            .get('/api/v1/dailyChargeAmount?dims=education_level_short&filter=min_year:"2015",max_year:"2015",integral_time:"0",period:["3"]')
+            .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('year');
+                res.body.result[0].should.have.property('education_level_short_id');
+                res.body.result[0].should.have.property('education_level_short_name');
+                res.body.result[0].should.have.property('average_class_duration');
+                res.body.result[0].should.have.property('median_class_duration');
+                res.body.result[0].should.have.property('std_class_duration');
+                res.body.result[0].should.have.property('fstqt_class_duration');
+                res.body.result[0].should.have.property('thdqt_class_duration');
+                done();
+            });
+    });
+
+    it('should list the filter of education level mod', (done) => {
+        chai.request(server)
+            .get('/api/v1/dailyChargeAmount/average?filter=education_level_mod:["3","4","5","6"],integral_time:"0",period:["3"]')
+            .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('year');
+                res.body.result[0].should.have.property('education_level_mod_id');
+                res.body.result[0].should.have.property('education_level_mod_name');
+                res.body.result[0].should.have.property('average_class_duration');
+                done();
+            });
+    });
+
+    it('should return 400 with no filters', (done) => {
+        chai.request(server)
+            .get('/api/v1/dailyChargeAmount')
+            .end((err, res) => {
+                res.should.have.status(400);
+                res.should.be.json;
+                res.body.should.have.property('error');
+                res.body.error.should.be.equal('Wrong/No filter specified');
+                done();
+            })
+    });
+
+    it('should return 400 with no filters', (done) => {
+        chai.request(server)
+            .get('/api/v1/dailyChargeAmount/average?filter=education_level_mod:["3","4","5","6"]')
+            .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('year');
+                res.body.result[0].should.have.property('education_level_mod_id');
+                res.body.result[0].should.have.property('education_level_mod_name');
+                res.body.result[0].should.have.property('average_class_duration');
+                done();
+            });
+    });
+});
-- 
GitLab