<?php
// undoTestCases.php
require_once('class.undo.php');
require_once('PEAR/PHPUnit.php');
$undoTestId = -1;
$undoDummyId = -1;
class undoTestCases extends PHPUnit_TestCase
{
var $t_conf = 'jsrs-adr-php/config.inc.php'; // test conf : the db configuration file
var $t_undo; // test dbUndo object
var $test_id = 0; // a record created by the testcase
var $pc_applied = false;
// constructor of the test suite
function undoTestCases($name, $fconf='config.inc.php') {
$this->PHPUnit_TestCase($name);
if (!empty($fconf) and file_exists($fconf))
$this->t_conf = $fconf; // a config.inc.php file
//$this->peri_constructor();
}
function peri_constructor() {
global $undoTestId;
if ($this->pc_applied)
return;
$this->pc_applied = true;
$this->t_undo = new dbUndo();
$this->t_undo->verb = 1;
$this->t_undo->init($this->t_conf);
// connect to the database
$this->t_undo->dbConnect();
// create data ... in the undo_tbl
$tbl = 'adresse';
$col = 'rue';
$data = 'blvd du mail poupoule';
$new_dum_id = $this->t_undo->mark_dummy_record($tbl);
$this->t_undo->update_col_dummy($tbl,$new_dum_id,$col,$data);
$col = 'commune';
$data = 'REVE sur Plage';
$this->t_undo->update_col_dummy($tbl,$new_dum_id,$col,$data);
// apply all these to a new 'real record' in $tbl
$this->test_id = $this->t_undo->apply_all_recent_updates($tbl,$new_dum_id);
$undoTestId = $this->test_id;
}
// called before the test functions will be executed
// this function is defined in PHPUnit_TestCase and overwritten
// here
function setUp() {
// create a new instance of dbUndo with the
// conf t_conf
$this->t_undo = new dbUndo();
$this->t_undo->init($this->t_conf);
// connect to the database
$this->t_undo->dbConnect();
$this->t_undo->verb = 1;
}
// called after the test functions are executed
// this function is defined in PHPUnit_TestCase and overwritten
// here
function tearDown() {
// delete the test instance
unset($this->t_undo);
}
// test suite
function testDbConnect()
{
// assume that config.inc.php or the provided fconf is well-defined
$this->assertTrue($this->t_undo->dbConnect(),'invalid db connect info in ... '.$this->t_conf);
}
function testSetup(){
$this->assertTrue($this->t_undo->setup(),'invalid db setup info ');
}
function test_peri_constructor(){
global $undoTestId;
$this->peri_constructor(); // check $this->test_id
$this->assertTrue($undoTestId != 0 ,"test_peri_constructor could not create a real record ");
}
function test_check_record(){
global $undoTestId;
//-1 adresse
$tbl = 'adresse';
$id = $undoTestId;
$check = $this->t_undo->check_record($tbl,$id, $tbl_keyname='id');
$this->assertTrue($check ,"check_record detected invalid record table ".$tbl." id: ".$id." ");
//-2 makes
$tbl = 'makes';
$id = $undoTestId;
$check = $this->t_undo->check_record($tbl,$id, $tbl_keyname='id');
$this->assertFalse($check ,"check_record detected invalid record table ".$tbl." id: ".$id." ");
}
function test_mark_record(){
global $undoTestId;
$tbl = 'adresse';
$id = $undoTestId;
$check = $this->t_undo->mark_record($tbl,$id, $tbl_keyname='id');
$this->assertTrue($check ,"mark_record detected invalid record table ".$tbl." id: ".$id." or could not insert the mark in the undo table ");
}
function test_mark_dummy_record(){
$tbl = 'adresse';
$check = $this->t_undo->mark_dummy_record($tbl);
$this->assertTrue($check ,"mark_dummy_record detected invalid record table ".$tbl." or could not insert the mark in the undo table ");
}
function test_mark_record_upd(){
global $undoTestId;
$col = 'rue';
$this->t_undo->cur_tbl = 'adresse';
$this->t_undo->cur_id = $undoTestId;
$check = $this->t_undo->mark_record_upd($col);
$this->assertTrue($check ,"mark_record_upd detected invalid record column ".$col." or could not insert the mark in the undo table ");
}
function test_update_col_0(){
global $undoTestId;
// test no change case: feed again the old data
$col = 'rue';
$this->t_undo->cur_tbl = 'adresse';
$this->t_undo->cur_id = $undoTestId;
$old_data = $this->t_undo->mark_record_upd($col);
$data = $this->t_undo->update_col($col,$old_data);
$this->assertTrue($data == $old_data ,"update_col(0) detected a change in record column ".$col." or could not insert the mark in the undo table ");
}
function test_update_col_1(){
global $undoTestId;
// test no change case: feed again the old data
$col = 'rue';
$this->t_undo->cur_tbl = 'adresse';
$this->t_undo->cur_id = $undoTestId;
$old_data = $this->t_undo->mark_record_upd($col);
$new_data = str_shuffle($old_data);
$data = $this->t_undo->update_col($col,$new_data);
$this->assertTrue($data != $new_data && $old_data == $data,"update_col(1) detected no change in record column ".$col." or could not insert the mark in the undo table ");
}
function test_undo_all_recent_updates(){
global $undoTestId;
$tbl = 'adresse';
$id = $undoTestId;
$check = $this->t_undo->undo_all_recent_updates($tbl,$id); // $check should be the nbr of rows involved in these recent updates
$this->assertTrue($check ,"undo_all_recent_updates detected no change in record column ".$col." or could not insert the mark in the undo table ");
}
function test_update_col_dummy(){
global $undoDummyId;
$tbl = 'adresse';
$undoDummyId = $this->t_undo->mark_dummy_record($tbl); // create a dummy undo-record
echo "mark_dummy_record ".$undoDummyId." created!<br />\n";
$col = 'rue';
$data = 'blvd du cours pilpoule';
$check = $this->t_undo->update_col_dummy($tbl,$undoDummyId,$col,$data);
$this->assertTrue($check==$data ,"update_col_dummy detected a change in record column ".$col." or could not insert the update in the undo table ");
}
function test_undo_all_recent_col_updates(){
global $undoTestId;
$tbl = 'adresse';
$id = $undoTestId;
$col = 'rue';
$check = $this->t_undo->undo_all_recent_col_updates($tbl,$id,$col);
$this->assertTrue($check>0 ,"undo_all_recent_col_updates did not or could not undo changes in record ".$id." (column ".$col.") or could not insert the update in the undo table ");
}
function test_apply_updates(){
global $undoTestId;
$field_values = array( 'rue' => 'blvd du mail poupoule',
'commune' => 'REVE de cinglés'
);
$tbl = 'adresse';
$id = $undoTestId;
$check = $this->t_undo->apply_updates($tbl,$id, $field_values);
$this->assertTrue($check ,"apply_updates did not or could not apply changes to the table: ".$tbl." record: ".$id);
}
function test_apply_all_recent_updates(){
global $undoDummyId;
$tbl = 'adresse';
$id = $undoDummyId; //created by test_update_col_dummy
$check = $this->t_undo->apply_all_recent_updates($tbl,$id);
$this->assertTrue($check ,"apply_all_recent_updates did not or could not find changes to the table: ".$tbl." record: ".$id);
}
function test_delete_recent_undo_data(){
// delete all the undo data introduced by this test suite
$n_test = 4; // tests generate inserts, 17 generate tags '--#tag#--'
for($i=0;$i<$n_test;$i++){
$check = $this->t_undo->delete_recent_undo_data();
$this->assertTrue($check ,"delete_recent_undo_data: could not find and remove undo records from the undo table ");
}
}
/*
function test_re_apply_updates(){
$field_values = array( 'rue' => 'rue Riboutté',
'commune' => 'Paris'
);
$tbl = 'adresse';
$id = $this->test_id;
$check = $this->t_undo->apply_updates($tbl,$id, $field_values);
$this->assertTrue($check ,"apply_updates did not or could not apply changes to the table: ".$tbl." record: ".$id);
}
*/
}
$suite = new PHPUnit_TestSuite("undoTestCases");
$result = PHPUnit::run($suite);
echo $result -> toHTML();
?>
|