noalyss-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Noalyss-commit] [noalyss] 01/03: Noalyss_SQL New function to get all in


From: Dany De Bontridder
Subject: [Noalyss-commit] [noalyss] 01/03: Noalyss_SQL New function to get all indexed by the primary key Create PHPUNIT for Noalyss_SQL
Date: Sat, 21 Sep 2019 06:58:08 -0400 (EDT)

sparkyx pushed a commit to branch master
in repository noalyss.

commit 90ddcae3d92f2f1a1576ae390ba83165139cbe2b
Author: Dany De Bontridder <address@hidden>
Date:   Sat Sep 21 12:36:46 2019 +0200

    Noalyss_SQL New function to get all indexed by the primary key
    Create PHPUNIT for Noalyss_SQL
---
 include/lib/noalyss_sql.class.php               |  48 ++++
 unit-test/include/lib/Noalyss_SQLTest.class.php | 311 ++++++++++++++++++++++++
 unit-test/test-file.sh                          |   2 +-
 3 files changed, 360 insertions(+), 1 deletion(-)

diff --git a/include/lib/noalyss_sql.class.php 
b/include/lib/noalyss_sql.class.php
index aa40129..1eb466d 100644
--- a/include/lib/noalyss_sql.class.php
+++ b/include/lib/noalyss_sql.class.php
@@ -426,6 +426,54 @@ abstract class Noalyss_SQL extends Data_SQL
         
         return $sql;
     }
+    /**
+     * @brief Get all the row and use the p_key_code are the key value of 
array. 
+     * The key column is usually the primary key or any unique key. 
+     * the returns looks like
+     * @code
+       [ID1]=>array( ["PRIMARYKEY"=>"ID1" 
+                       , "VALUE" => 2]);
+       [ID2]=>array( ["PRIMARYKEY"=>"ID2" 
+                      , "VALUE" => 2]);
+      @endcode
+     * @note It should be used only for small tables: the array is build row 
by row
+     * @param string $p_key_col existing and unique key 
+     * @param string $p_cond sql cond 
+     * @param array $p_array array of value for the SQL condition
+     */
+    public function get_all_to_array($p_key_col,$p_cond="",$p_array=NULL)
+    {
+        $ret=$this->seek($p_cond, $p_array);
+        if ($ret==FALSE)
+            return array();
+        $a_array=Database::fetch_all($ret);
+        $nb_array=count($a_array);
+        $a_result=array();
+        try
+        {
+            for ($i=0; $i<$nb_array; $i++)
+            {
+                if (!isset($a_array[$i][$p_key_col]))
+                {
+                    throw new Exception("col not found ".$p_key_col);
+                }
+                $key=$a_array[$i][$p_key_col];
+                if ( isset ($a_result[$key]) ){
+                    throw new Exception ("duplicate found col : $key");
+                }
+                $a_result[$key]=$a_array[$i];
+            }
+        }
+        catch (Exception $exc)
+        {
+            echo $exc->getMessage();
+            record_log($exc->getMessage());
+            record_log($exc->getTraceAsString());
+            throw $exc;
+        }
+        return $a_result;
+    }
+
 }
 
 ?>
diff --git a/unit-test/include/lib/Noalyss_SQLTest.class.php 
b/unit-test/include/lib/Noalyss_SQLTest.class.php
new file mode 100644
index 0000000..31aa6c0
--- /dev/null
+++ b/unit-test/include/lib/Noalyss_SQLTest.class.php
@@ -0,0 +1,311 @@
+<?php
+
+/*
+ *   This file is part of NOALYSS.
+ *
+ *   PhpCompta is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation; either version 2 of the License, or
+ *   (at your option) any later version.
+ *
+ *   PhpCompta is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with PhpCompta; if not, write to the Free Software
+ *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+// Copyright (2002-2019) Author Dany De Bontridder <address@hidden>
+
+/**
+ * @file
+ * @brief Test file for Noalyss_SQL , which is an abstract class
+ */
+use PHPUnit\Framework\TestCase;
+
+require_once NOALYSS_INCLUDE."/database/poste_analytique_sql.class.php";
+
+class Noalyss_SQLTest extends TestCase
+{
+
+    /**
+     * @var Poste_analytique_SQL
+     */
+    protected $object;
+
+    /**
+     * Sets up the fixture, for example, opens a network connection.
+     * This method is called before a test is executed.
+     */
+    protected function setUp()
+    {
+        global $g_connection;
+        $this->object=new Poste_analytique_SQL($g_connection);
+        $a_sql=[
+            'delete from poste_analytique',
+            "delete from  plan_analytique",
+            "INSERT INTO public.plan_analytique
+(pa_id, pa_name, pa_description)
+VALUES(1, 'ACTIVITE', 'Activité commerciale Alchimerys sprl');
+",
+            "INSERT INTO poste_analytique 
(po_id,po_name,pa_id,po_amount,po_description,ga_id) VALUES 
+(1,'PHPCOMPTA',1,0.0000,'E/S pour le projet PHPCOMPTA',NULL)
+,(2,'CONSULTING',1,0.0000,'Consulting',NULL)
+,(3,'DEVELOPPEMENT',1,0.0000,'Développement',NULL)
+,(4,'DOCUMENTATION',1,0.0000,NULL,NULL)"];
+
+        for ($i=0; $i<count($a_sql); $i++)
+        {
+            $g_connection->exec_sql($a_sql[$i]);
+        }
+    }
+
+    /**
+     * Tears down the fixture, for example, closes a network connection.
+     * This method is called after a test is executed.
+     */
+    protected function tearDown()
+    {
+        
+    }
+
+    //@covers Noalyss_SQL::save
+    public function testsave()
+    {
+        global $g_connection;
+        // Create a new accounting
+        $this->object->set("po_name", "Nouveau poste");
+        $this->object->set("pa_id", "1");
+        $this->object->set("po_amount", "0");
+        $this->object->save();
+        $id=$this->object->get("po_id");
+        $this->assertFalse(empty($id));
+        $this->assertGreaterThan(4, $id);
+        $this->assertTrue(is_numeric($id));
+        // update a accounting
+        $obj=new Poste_analytique_SQL($g_connection, 2);
+        $this->assertEquals($obj->get("po_name"), 'CONSULTING');
+        $obj->set("po_description", "testing update");
+        $obj->update();
+        $obj_compare=new Poste_analytique_SQL($g_connection, 2);
+        $this->assertEquals($obj_compare->get("po_description"), 'testing 
update');
+    }
+
+    //@covers Noalyss_SQL::get
+    public function testget()
+    {
+        $this->object->set("po_id", 3);
+        $this->object->load();
+        $this->assertEquals($this->object->get("po_name"), "DEVELOPPEMENT");
+    }
+
+    //@covers Noalyss_SQL::set
+    public function testset()
+    {
+        $this->object->set("po_id", 3);
+        $this->object->load();
+        $this->assertEquals($this->object->get("po_name"), "DEVELOPPEMENT");
+    }
+
+    //@covers Noalyss_SQL::getp
+    public function testgetp()
+    {
+        $this->object->set("po_id", 3);
+        $this->object->load();
+        $this->assertEquals($this->object->get("po_name"), "DEVELOPPEMENT");
+    }
+
+    //@covers Noalyss_SQL::setp
+    public function testsetp()
+    {
+        $this->object->set("po_id", 3);
+        $this->object->load();
+        $this->assertEquals($this->object->get("po_name"), "DEVELOPPEMENT");
+    }
+
+    //@covers Noalyss_SQL::insert
+    public function testinsert()
+    {
+        global $g_connection;
+        // Create a new accounting
+        $this->object->set("po_name", "Nouveau poste");
+        $this->object->set("pa_id", "1");
+        $this->object->set("po_amount", "1250");
+        $this->object->save();
+        $id=$this->object->get("po_id");
+        $this->assertFalse(empty($id));
+        $this->assertGreaterThan(4, $id);
+        $this->assertTrue(is_numeric($id));
+    }
+
+    //@covers Noalyss_SQL::delete
+    public function testdelete()
+    {
+        $this->object->set("po_id", 2);
+        $this->object->load();
+        $id=$this->object->get("po_id");
+        $this->assertEquals($id, 2);
+        $this->object->delete();
+        $this->object->load();
+        $id=$this->object->get("po_id");
+        $this->assertEquals($id, -1);
+    }
+
+    //@covers Noalyss_SQL::update
+    public function testupdate()
+    {
+        global $g_connection;
+        // update a accounting
+        $obj=new Poste_analytique_SQL($g_connection, 2);
+        $this->assertEquals($obj->get("po_name"), 'CONSULTING');
+        $obj->set("po_description", "testing update");
+        $obj->update();
+        $obj_compare=new Poste_analytique_SQL($g_connection, 2);
+        $this->assertEquals($obj_compare->get("po_description"), 'testing 
update');
+    }
+
+    //@covers Noalyss_SQL::set_pk_value
+    public function testset_pk_value()
+    {
+        $this->object->set_pk_value("pa_id");
+        $this->assertEquals($this->object->get_pk_value(), 'pa_id');
+    }
+
+    //@covers Noalyss_SQL::get_pk_value
+    public function testget_pk_value()
+    {
+        $pk=$this->object->get_pk_value();
+        $this->assertEquals(-1, $pk);
+    }
+
+    //@covers Noalyss_SQL::load
+    public function testload()
+    {
+        $this->object->set("po_id", 2);
+        $this->object->load();
+        $id=$this->object->get("po_id");
+        $this->assertEquals($id, 2);
+    }
+
+    //@covers Noalyss_SQL::get_info
+    public function testget_info()
+    {
+        $str=$this->object->get_info();
+        $this->assertFalse(empty($str));
+        $this->assertEquals(var_export($this->object, true), $str);
+    }
+
+    //@covers Noalyss_SQL::verify
+    public function testverify()
+    {
+        $this->assertEquals($this->object->verify(), 0);
+    }
+
+    //@covers Noalyss_SQL::from_array
+    public function testfrom_array()
+    {
+        $this->object->from_array(["po_id"=>6, "po_name"=>"Test Unitaire", 
"po_description"=>"", "po_amount"=>0, "pa_id"=>1]);
+        $this->object->insert();
+        $this->object->load();
+        $this->assertEquals($this->object->get("po_name"), "TESTUNITAIRE");
+    }
+
+    //@covers Noalyss_SQL::to_array
+    public function testto_array()
+    {
+        $this->object->set("po_id", "4");
+        $this->object->load();
+        $array=$this->object->to_array();
+
+        $this->assertTrue(is_array($array));
+        $this->assertFalse(empty($array["po_name"]));
+        $this->assertEquals($array["po_name"], "DOCUMENTATION");
+    }
+
+    //@covers Noalyss_SQL::seek
+    function testseek()
+    {
+        $this->assertFalse(empty($this->object->seek("order by po_id")));
+    }
+
+    //@covers Noalyss_SQL::next
+    public function testnext()
+    {
+        $ret=$this->object->seek("order by po_name");
+        $nb_count=Database::num_row($ret);
+        $this->assertEquals($nb_count, 4);
+        $po_name=["CONSULTING", "DEVELOPPEMENT", "DOCUMENTATION", "PHPCOMPTA"];
+        for ($i=0; $i<$nb_count; $i++)
+        {
+            $array=$this->object->next($ret, $i);
+            $this->assertEquals($po_name[$i], $array->get('po_name'));
+        }
+    }
+
+    //@covers Noalyss_SQL::get_object
+    public function testget_object()
+    {
+        $ret=$this->object->seek("order by po_name");
+        $nb_count=Database::num_row($ret);
+        $this->assertEquals($nb_count, 4);
+        $po_name=["CONSULTING", "DEVELOPPEMENT", "DOCUMENTATION", "PHPCOMPTA"];
+        for ($i=0; $i<$nb_count; $i++)
+        {
+            $array=$this->object->get_object($ret, $i);
+            $this->assertEquals($po_name[$i], $array->get('po_name'));
+        }
+    }
+
+    //@covers Noalyss_SQL::collect_objects
+    function testcollect_objects()
+    {
+        $array=$this->object->collect_objects(" where po_id > $1 ",[2]);
+        $this->assertFalse(empty($array));
+        $this->assertTrue(is_array($array));
+        $this->assertEquals(count($array),2);
+    }
+
+    //@covers Noalyss_SQL::count
+    public function testcount()
+    {
+        $cn=$this->object->count(" where po_id > $1 ",[2]);
+        $this->assertEquals($cn,2);
+    }
+
+    //@covers Noalyss_SQL::exist
+    public function testexist()
+    {
+        $this->object->set("po_id", "3");
+        $this->object->load();
+        $this->assertEquals($this->object->exist(),1);
+        $this->object->set("po_id", "7");
+        $this->object->load();
+        $this->assertEquals($this->object->exist(),0);
+    }
+
+    //@covers Noalyss_SQL::build_query
+    public function testbuild_query()
+    {
+        $str=$this->object->build_query();
+        $expected=" select po_id,po_name,pa_id,po_amount,po_description,ga_id 
from public.poste_analytique where po_id = $1";
+        $this->assertEquals($str,$expected);
+    }
+
+    //@covers Noalyss_SQL::get_all_to_array
+    public function testget_all_to_array()
+    {
+        $array=$this->object->get_all_to_array("po_name");
+        $this->assertFalse(empty($array));
+        $this->assertEquals(count($array),4);
+        $po_name=["CONSULTING", "DEVELOPPEMENT", "DOCUMENTATION", "PHPCOMPTA"];
+
+        for ($i=0;$i<count($array);$i++)
+        {
+            $this->assertTrue(isset($array[$po_name[$i]]));
+        }
+
+    }
+
+}
diff --git a/unit-test/test-file.sh b/unit-test/test-file.sh
index dec82b1..0f906ce 100755
--- a/unit-test/test-file.sh
+++ b/unit-test/test-file.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
 
-PHPUNIT=~/Program/phpunit-7.5.16.phar
+PHPUNIT=./phpunit
 if [ ! -f "$1" ] ; then
        echo "File $1 not found"
        exit 1



reply via email to

[Prev in Thread] Current Thread [Next in Thread]