From 005ed66f7e5fbfd7742828023bbd364938aadff7 Mon Sep 17 00:00:00 2001
From: Rafael <rpd17@inf.ufpr.br>
Date: Mon, 23 Apr 2018 10:24:16 -0300
Subject: [PATCH] Issue #62: Add insert

Signed-off-by: Rafael <rpd17@inf.ufpr.br>
---
 config/ci_test.yaml.example         | 81 +++++++++++++++++++----------
 src/adapter/monet.ts                |  4 ++
 src/api/controllers/collect.spec.ts | 50 +++++++++---------
 src/api/controllers/collect.ts      | 10 +---
 4 files changed, 84 insertions(+), 61 deletions(-)

diff --git a/config/ci_test.yaml.example b/config/ci_test.yaml.example
index 30192280..7426a615 100644
--- a/config/ci_test.yaml.example
+++ b/config/ci_test.yaml.example
@@ -213,69 +213,94 @@ dimensions:
         description: "A dimension of Blendb. Has 1 possible value."
 enumTypes:
     -
-        name: "enum type:0"
+        name: "enum_type_0"
         values:
-        - "test:0"
-        - "test:1"
-        - "test:2"
-        - "test:3"
+        - "male"
+        - "female"
+        - "binary"
+        - "undecided"
     -
-        name: "enum type:1"
+        name: "enum_type_1"
         values:
-        - "test:4"
-        - "test:5"
-        - "test:6"        
+        - "test_4"
+        - "test_5"
+        - "test_6"  
+        - "string"      
     -
-        name: "enum type:2"
+        name: "enum_type_2"
         values:
-        - "test:7"
-        - "test:8"
+        - "test_7"
+        - "test_8"
     -
-        name: "enum type:3"
+        name: "enum_type_3"
         values:
-        - "test:9"        
+        - "test_9"     
 sources:
     -
-        name: "source:0"
+        name: "source_0"
         description: "source with 3 entries"
         fields:
         -
-           name: "fields:0"
+           name: "fields_0"
            description: "first entry"
            dataType: "string"  
         -          
-            name: "fields:1"
+            name: "fields_1"
             description: "second entry"
             dataType: "string"
         -          
-            name: "fields:2"
+            name: "fields_2"
             description: "third entry"
             dataType: "string"          
     -
-        name: "source:1"
+        name: "source_1"
         description: "source with 2 entries"
         fields:
         -
-            name: "fields:0"
+            name: "fields_0"
             description: "first entry"            
-            dataType: "string"
+            dataType: "enum_type_0"
         -
-            name: "fields:1"
+            name: "fields_1"
             description: "second entry"            
             dataType: "string"   
     -
-        name: "source:2"
-        description: "source with one entry"
+        name: "source_2"
+        description: "source with one entry and undefined dataType"
         fields:
         -
-            name: "fields:0"
+            name: "fields_0"
             description: "first entry"
-            dataType: "string"
+            dataType: "notValid"
     -
-        name: "source:3"
+        name: "source_3"
         description: "source with one entry and without description"
         fields:
         -
-            name: "fields:3"
+            name: "fields_0"
+            dataType: "string"
+    -
+        name: "source_4"        
+        description: "source with all core types from blendb"
+        fields:
+        -
+            name: "fields_0"
+            description: "first entry"
+            dataType: "integer"
+        - 
+            name: "fields_1"
+            description: "second entry"
+            dataType: "float"    
+        -
+            name: "fields_2"
+            description: "third entry"
             dataType: "string"
+        -
+            name: "fields_3"
+            description: "fourth entry"
+            dataType: "boolean"
+        -
+            name: "fields_4"
+            description: "fifth entry"
+            dataType: "date"
 
diff --git a/src/adapter/monet.ts b/src/adapter/monet.ts
index 3d38f578..321a3872 100644
--- a/src/adapter/monet.ts
+++ b/src/adapter/monet.ts
@@ -46,7 +46,10 @@ export class MonetAdapter extends SQLAdapter {
     }
     public getDataFromView(view: View, cb: (error: Error, result?: any[]) => void): void {
         const query = this.getQueryFromView(view);
+        this.executeQuery(query, cb);
+    }
 
+    private executeQuery(query: string, cb: (error: Error, result?: any[]) => void): void {
         let pool: any = new MDB(this.config);
         pool.connect();
         pool.query(query).then((result: MonetResult) => {
@@ -81,6 +84,7 @@ export class MonetAdapter extends SQLAdapter {
 
     public insertIntoSource(source: Source, data: any[], cb: (err: Error, result: any[]) =>  void): void {
         const query = this.getQueryFromSource(source, data);
+        this.executeQuery(query, cb);
     }
 
     protected typeCast(quotedValue: string, dt: string): string {
diff --git a/src/api/controllers/collect.spec.ts b/src/api/controllers/collect.spec.ts
index 10d0fb5a..dfa07840 100644
--- a/src/api/controllers/collect.spec.ts
+++ b/src/api/controllers/collect.spec.ts
@@ -27,17 +27,7 @@ import { Fixture as FixPostgres } from "../../../test/postgres/fixture";
 import { Fixture as FixMonet } from "../../../test/monet/fixture";
 import { MonetAdapter, MonetConfig } from "../../adapter/monet";
 import { PostgresAdapter } from "../../adapter/postgres";
-import { Source } from "../../core/source";
 
-// criar de certa forma tabela e depois excluir apos o teste...???
-// comando direto no bd
-// extrair as outras informações que estão contida no err
-
-// Criar função que acessa o banco e executa as duas query que voce
-// CREATE TABLE source_0 (fields_0 text,fields_1 text, fields_2 text);
-// DROP TABLE source_0;
-// CREATE TABLE source_1 (fields_0 text,fields_1 text);
-// DROP TABLE source_1;
 describe("API collect controller", () => {
     // Initializing
     let config: any;
@@ -55,6 +45,26 @@ describe("API collect controller", () => {
                 done();
             });
         }
+        else if (config.adapter === "monet") {
+            fixture = new FixMonet(config.connection);
+            fixture.load(config.loadViews, config.struct.create, (err) => {
+                if (err) {
+                    throw err;
+                }
+                let parsedConfig: MonetConfig = {
+                    user: config.connection.user,
+                    dbname: config.connection.database,
+                    password: config.connection.password,
+                    host: config.connection.host,
+                    port: config.connection.port
+                };
+                adapter = new MonetAdapter(parsedConfig);
+                done();
+            });
+        }
+        else {
+            this.skip();
+        }
     });
     it("should respond 500 since the req.params.class does not exist on Sources", (done) => {
         request(server)
@@ -148,7 +158,7 @@ describe("API collect controller", () => {
 
                 const message = "Query execution failed: " +
                 "Could not construct query with the paramters given.";
-                const error = "The element 'nope' isn't a type integer";
+                const error = "The value 'nope' isn't a type integer";
                 expect(res.body).to.be.an("object");
                 expect(res.body).to.have.property("message");
                 expect(res.body.message).to.be.eql(message);
@@ -167,7 +177,7 @@ describe("API collect controller", () => {
 
                 const message = "Query execution failed: " +
                 "Could not construct query with the paramters given.";
-                const error = "The element 'notafloat' isn't a type float";
+                const error = "The value 'notafloat' isn't a type float";
                 expect(res.body).to.be.an("object");
                 expect(res.body).to.have.property("message");
                 expect(res.body.message).to.be.eql(message);
@@ -186,7 +196,7 @@ describe("API collect controller", () => {
 
                 const message = "Query execution failed: " +
                 "Could not construct query with the paramters given.";
-                const error = "The element '1' isn't a type string";
+                const error = "The value '1' isn't a type string";
                 expect(res.body).to.be.an("object");
                 expect(res.body).to.have.property("message");
                 expect(res.body.message).to.be.eql(message);
@@ -205,7 +215,7 @@ describe("API collect controller", () => {
 
                 const message = "Query execution failed: " +
                 "Could not construct query with the paramters given.";
-                const error = "The element 'notaboolean' isn't a type boolean";
+                const error = "The value 'notaboolean' isn't a type boolean";
                 expect(res.body).to.be.an("object");
                 expect(res.body).to.have.property("message");
                 expect(res.body.message).to.be.eql(message);
@@ -224,7 +234,7 @@ describe("API collect controller", () => {
 
                 const message = "Query execution failed: " +
                 "Could not construct query with the paramters given.";
-                const error = "The element '1999-25-25' isn't a type date";
+                const error = "The value '1999-25-25' isn't a type date";
                 expect(res.body).to.be.an("object");
                 expect(res.body).to.have.property("message");
                 expect(res.body.message).to.be.eql(message);
@@ -266,14 +276,4 @@ describe("API collect controller", () => {
         })
         .end(done);
     });
-    // it("should respond 500 since source_9999 does not exist on postgres", (done) => {
-        // let source: Source;
-        // source = "['name': 'source_9999','description':'nothing herer ', 'fields' : [{'name' : 'field_0', 'description':'nothing here', 'dataType' : 'string'}]]";
-        // let query: any = "[{'fields_0': 'batata }]";
-        // adapter.insertIntoSource(null, query, (err, result) => {
-        // 
-        // });
-        //
-        // done();
-    // });
 });
diff --git a/src/api/controllers/collect.ts b/src/api/controllers/collect.ts
index 4f3847ad..41f5c640 100644
--- a/src/api/controllers/collect.ts
+++ b/src/api/controllers/collect.ts
@@ -40,7 +40,6 @@ export class CollectCtrl {
                 else {
                     return true;
                 }
-
             },
             "float": function(value: any) {
                 let float = parseFloat(value);
@@ -51,7 +50,6 @@ export class CollectCtrl {
                 else {
                     return true;
                 }
-
             },
             "string": function(value: any) {
                 let str: string = typeof(value);
@@ -62,7 +60,6 @@ export class CollectCtrl {
                 else{
                     return false;
                 }
-
             },
             "date": function(value: any) {
                 let test = Date.parse(value);
@@ -73,7 +70,6 @@ export class CollectCtrl {
                 else {
                     return true;
                 }
-
             },
             "boolean": function(value: any) {
                 let bool = typeof(value);
@@ -84,9 +80,7 @@ export class CollectCtrl {
                 else{
                     return false;
                 }
-
             }
-            // preciso de um valor para quando o elemento não for encontrado
         };
 
         let fields: string[] = [];
@@ -99,7 +93,7 @@ export class CollectCtrl {
         const id: string = req.params.class;
         try {
             source = req.engine.getSourceByName(id);
-            // If source does not exist them return throw error
+            // If source does not exist them return error
 
             fields = source.fields.map((item) => item.name);
 
@@ -117,7 +111,7 @@ export class CollectCtrl {
             if (Validador[dataType[i]] !== undefined){
                 if (!Validador[dataType[i]](data[i]) === true){
                     throw new Error(
-                        "The element '" +  data[i] +
+                        "The value '" +  data[i] +
                         "' isn't a type " + dataType[i]);
                 }
 
-- 
GitLab