From b3b5b1df385ef0b4d0c19832bedb5ab68905941a Mon Sep 17 00:00:00 2001
From: Vytor Calixto <vytorcalixto@gmail.com>
Date: Tue, 7 Mar 2017 10:26:32 -0300
Subject: [PATCH] :bug: Fix bug in reqQueryFields when repeating values in
 query parameters

---
 src/libs/middlewares/reqQueryFields.js | 28 ++++++++++++++------------
 src/test/enrollment.js                 |  2 +-
 2 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/src/libs/middlewares/reqQueryFields.js b/src/libs/middlewares/reqQueryFields.js
index c5fc1747..1fe597d3 100644
--- a/src/libs/middlewares/reqQueryFields.js
+++ b/src/libs/middlewares/reqQueryFields.js
@@ -174,35 +174,37 @@ class ReqQueryFields {
         // "Constrói" o SQL
         return (req, res, next) => {
             // Foreach no campos
-            Object.keys(this.fields).map((key, index) => {
+            let hasJoined = {};
+            Object.keys(this.fields).forEach((key) => {
                 // Campo
                 let field = this.fields[key];
                 log.debug(field);
                 // `param` aqui é o atributo no objeto `req` (dims, filter, search, ...)
                 let param = req[field.name];
-                log.debug('param');
-                log.debug(param);
+                // log.debug('param');
+                // log.debug(param);
                 // Fazemos um foreach nos parametros dentro do atributo
-                Object.keys(param).map((k, i) => {
+                Object.keys(param).forEach((k) => {
                     let values = _.merge(this.fieldValues, field.values);
-                    log.debug('ValueS');
-                    log.debug(values);
-                    log.debug('k');
-                    log.debug(k);
+                    // log.debug('ValueS');
+                    // log.debug(values);
+                    // log.debug('k');
+                    // log.debug(k);
                     if(typeof values[k] !== 'undefined') {
                         // Clonamos para não alterar o original
                         let value = _.clone(values[k]);
-                        log.debug(value);
+                        // log.debug('value');
+                        // log.debug(value);
+                        // log.debug(hasJoined);
                         // Checa se não fizemos o join para este valor e se é necessário fazer
-                        if(!value.hasJoined && typeof value.join !== 'undefined') {
+                        if(!hasJoined[value.name] && typeof value.join !== 'undefined') {
                             let foreignTable = '';
                             if(value.join.foreignTable) foreignTable = value.join.foreignTable+'.';
                             // Fazemos o join
                             req.sql.join(value.table, null, foreignTable+value.join.foreign+'='+value.table+'.'+value.join.primary);
                             // Marcamos o join como feito para não ter problemas
-                            value.hasJoined = true;
-                            if(typeof this.fieldValues !== 'undefined' && typeof this.fieldValues[k] !== 'undefined') this.fieldValues[k].hasJoined = true;
-                            if(typeof field.values !== 'undefined' && typeof field.values[k] !== 'undefined') field.values[k].hasJoined = true;
+                            hasJoined[value.name] = true;
+                            // values[k].hasJoined = true;
                         }
                         // Se o valor é um campo a ser incluído no SELECT
                         if(typeof field.field !== 'undefined' && field.field) {
diff --git a/src/test/enrollment.js b/src/test/enrollment.js
index 6d4c35b2..b40c2de8 100644
--- a/src/test/enrollment.js
+++ b/src/test/enrollment.js
@@ -47,7 +47,7 @@ describe('request enrollments', () => {
                 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('description');
+                res.body.result[0].should.have.property('name');
                 done();
             });
     });
-- 
GitLab