Current File : //opt/RZphp5/includes/test/MDB_QueryTool/tests/simpletest_tests/mdb_querytool_testGet.php |
<?php
// $Id: mdb_querytool_testGet.php,v 1.11 2007/01/29 12:33:16 quipo Exp $
require_once dirname(__FILE__).'/mdb_querytool_test_base.php';
class TestOfMDB_QueryTool_Get extends TestOfMDB_QueryTool
{
function TestOfMDB_QueryTool_Get($name = __CLASS__) {
$this->UnitTestCase($name);
}
function test_AddGet() {
$this->qt = new MDB_QT(TABLE_USER);
$newData = $this->_getSampleData(1);
$id = $this->qt->add($newData);
$this->assertTrue($id != false);
$newData['id'] = $id;
$this->assertEqual($newData, $this->qt->get($id));
$newData = $this->_getSampleData(2);
$id = $this->qt->add($newData);
$this->assertTrue($id != false);
$newData['id'] = $id;
$this->assertEqual($newData, $this->qt->get($id));
}
function test_GetTrimmed() {
$this->qt = new MDB_QT(TABLE_USER);
$newData = $this->_getSampleData(1);
$newData['name'] = str_repeat($newData['name'], 10); //exceeds field size
$newData['address_id'] = 123456789012; //within 11 bytes - more than 11 digits
$id = $this->qt->add($newData);
$this->assertTrue($id != false);
$newData['id'] = $id;
$retrieved = $this->qt->get($id);
$this->assertEqual($newData['name'], $retrieved['name']);
$this->assertEqual($newData['address_id'], $retrieved['address_id']);
}
function test_AddGetPKNotInteger() {
$this->qt = new MDB_QT(TABLE_TRANSLATION);
$this->qt->primaryCol = 'string';
$newData = array('string' => 'aaa', 'translation' => 'AAA');
$id = $this->qt->add($newData);
$this->assertTrue($id != false);
$this->assertEqual($newData, $this->qt->get($id));
$newData = array('string' => 'bbb', 'translation' => 'BBB');
$id = $this->qt->add($newData);
$this->assertTrue($id != false);
$this->assertEqual($newData, $this->qt->get($id));
}
function test_GetOne() {
$this->qt =& new MDB_QT(TABLE_USER);
$this->qt->table = TABLE_USER;
//$this->qt->primaryCol = 'id';
$newData1 = $this->_getSampleData(1);
$id = $this->qt->add($newData1);
$this->assertTrue($id != false);
$newData2 = $this->_getSampleData(2);
$id = $this->qt->add($newData2);
$this->assertTrue($id != false);
$this->qt->setSelect('name');
$this->assertEqual($newData1['name'], $this->qt->getOne());
$this->qt->setSelect('COUNT(*)');
$this->assertEqual(2, $this->qt->getOne());
}
// test if column==table works, using the table TABLE_QUESTION
function test_tableEqualsColumn()
{
$this->qt = new MDB_QT(TABLE_QUESTION);
$newData = array(TABLE_QUESTION => 'Why does this not work?');
$id = $this->qt->add($newData);
$this->assertTrue($id != false);
$newData['id'] = $id;
$this->assertEqual($newData, $this->qt->get($id));
}
function test_tableEqualsColumnGetAll()
{
$this->qt = new MDB_QT(TABLE_QUESTION);
$newData = array(TABLE_QUESTION => 'Why does this not work?');
$id = $this->qt->add($newData);
$this->assertTrue($id != false);
$newData['id'] = $id;
$data = $this->qt->getAll();
// assertEquals doesn't sort arrays recursively, so we have to extract the data :-(
// we can't do this:
$this->assertEqual(array($newData), $this->qt->getAll());
//$this->assertEqual($newData, $data[0]);
}
// test if column==table works, using the table TABLE_QUESTION
// this fails in v0.9.3
// a join makes it fail!!!, the tests above are just convenience tests
// they are actually meant to work !always! :-)
function test_tableEqualsColumnJoinedGetAll()
{
$theQuestion = 'Why does this not work?';
$theAnswer = 'I dont know!';
$question = new MDB_QT(TABLE_QUESTION);
$question->removeAll();
$newQuest = array(TABLE_QUESTION => $theQuestion);
$qid = $question->add($newQuest);
$answer = new MDB_QT(TABLE_ANSWER);
$answer->removeAll();
$newAnswer = array(TABLE_QUESTION.'_id' => $qid, TABLE_ANSWER => $theAnswer);
$aid = $answer->add($newAnswer);
$question->autoJoin(TABLE_ANSWER);
//$newData['id'] = $id;
$data = $question->getAll();
if (DB_TYPE == 'ibase') {
$expected = array(
't_answer_id' => $aid,
't_answer_answer' => $theAnswer,
't_answer_question_id' => $qid,
'id' => $qid,
'question' => $theQuestion,
);
} else {
$expected = array(
'_answer_id' => $aid,
'_answer_answer' => $theAnswer,
'_answer_question_id' => $qid,
'id' => $qid,
'question' => $theQuestion,
);
}
// assertEquals doesn't sort arrays recursively, so we have to extract the data :-(
// we can't do this: $this->assertEquals(array($newData),$question->getAll());
$this->assertEqual($expected, $data[0]);
}
function test_innerJoin()
{
$theQuestion = 'Why does this not work?';
$theAnswer = 'I dont know!';
$question = new MDB_QT(TABLE_QUESTION);
$question->removeAll();
$newQuest = array(TABLE_QUESTION => $theQuestion);
$qid = $question->add($newQuest);
$answer = new MDB_QT(TABLE_ANSWER);
$answer->removeAll();
$newAnswer = array(TABLE_QUESTION.'_id' => $qid, TABLE_ANSWER => $theAnswer);
$aid = $answer->add($newAnswer);
$question->setJoin(TABLE_ANSWER ,TABLE_QUESTION.'.id = '.TABLE_ANSWER.'.question_id' , 'inner');
$data = $question->getAll();
if (DB_TYPE == 'ibase') {
$expected = array(
't_answer_id' => $aid,
't_answer_answer' => $theAnswer,
't_answer_question_id' => $qid,
'id' => $qid,
'question' => $theQuestion,
);
} else {
$expected = array(
'_answer_id' => $aid,
'_answer_answer' => $theAnswer,
'_answer_question_id' => $qid,
'id' => $qid,
'question' => $theQuestion,
);
}
// assertEquals doesnt sort arrays recursively, so we have to extract the data :-(
// we cant do this: $this->assertEquals(array($newData),$question->getAll());
$this->assertEqual($expected, $data[0]);
}
/**
* This method actually checks if the functionality that needs to be changed
* for the above test to work will still work after the change ...
*
* check if stuff like MAX(id), LOWER(question), etc. will be converted to
* MAX(TABLE_QUESTION.id), LOWER(TABLE_QUESTION.question)
* this is done for preventing ambiguous column names, that's why it only applies
* in joined queries ...
*/
function test_sqlFunction()
{
$theQuestion = 'Why does this not work?';
$theAnswer = 'I dont know!';
$question = new MDB_QT(TABLE_QUESTION);
$newQuest = array(TABLE_QUESTION => $theQuestion);
$qid = $question->add($newQuest);
$answer = new MDB_QT(TABLE_ANSWER);
$newAnswer = array(TABLE_QUESTION.'_id' => $qid, TABLE_ANSWER => $theAnswer);
$aid = $answer->add($newAnswer);
$question->autoJoin(TABLE_ANSWER);
// $question->setSelect('id, '.TABLE_QUESTION.' as question, '.TABLE_ANSWER.' as answer');
$question->setSelect('MAX(id),'.TABLE_ANSWER.'.id');
//$this->assertTrue(strpos($question->_buildSelectQuery(), 'MAX('.TABLE_QUESTION.'.'.$question->db->quoteIdentifier('id').')'));
$this->assertTrue(strpos($question->_buildSelectQuery(), 'MAX('.TABLE_QUESTION.'.id)'));
// check '(question)'
$question->setSelect('LOWER(question),'.TABLE_ANSWER.'.*');
//$this->assertTrue(strpos($question->_buildSelectQuery(), 'LOWER('.TABLE_QUESTION.'.'.$question->db->quoteIdentifier('question').')'));
$this->assertTrue(strpos($question->_buildSelectQuery(), 'LOWER('.TABLE_QUESTION.'.question)'));
// check 'id,'
$question->setSelect('id, '.TABLE_ANSWER.'.*');
$this->assertTrue(strpos($question->_buildSelectQuery(), TABLE_QUESTION.'.id'));
// check 'id as qid'
$question->setSelect('id as qid, '.TABLE_ANSWER.'.*');
$this->assertTrue(strpos($question->_buildSelectQuery(), TABLE_QUESTION.'.'.$question->db->quoteIdentifier('id').' AS qid'));
// check 'id as qid'
$question->setSelect('LOWER(question), '.TABLE_ANSWER.'.*');
//$this->assertTrue(strpos($question->_buildSelectQuery(), 'LOWER('.TABLE_QUESTION.'.'.$question->db->quoteIdentifier('question').')'));
$this->assertTrue(strpos($question->_buildSelectQuery(), 'LOWER('.TABLE_QUESTION.'.question)'));
}
/**
* This method checks if the setJoin() method is working correctly
*
* check if stuff like MAX(id), LOWER(question), etc. will be converted to
* MAX(TABLE_QUESTION.id), LOWER(TABLE_QUESTION.question)
* this is done for preventing ambiguous column names, that's why it only applies
* in joined queries ...
*/
function test_setJoin()
{
$theQuestion = 'Why does this not work?';
$theAnswer = 'I dont know!';
$question = new MDB_QT(TABLE_QUESTION);
$newQuest = array(TABLE_QUESTION => $theQuestion);
$qid = $question->add($newQuest);
$this->assertTrue($qid != false);
$answer = new MDB_QT(TABLE_ANSWER);
$newAnswer = array(TABLE_QUESTION.'_id' => $qid, TABLE_ANSWER => $theAnswer);
$aid = $answer->add($newAnswer);
$this->assertTrue($aid != false);
$joinOn = TABLE_QUESTION.'.id='.TABLE_ANSWER.'.question_id';
$question->setJoin(TABLE_ANSWER, $joinOn);
if (DB_TYPE == 'ibase') {
$expected = array(
't_answer_id' => $aid,
't_answer_answer' => $theAnswer,
't_answer_question_id' => $qid,
'id' => $qid,
'question' => $theQuestion,
);
} else {
$expected = array(
'_answer_id' => $aid,
'_answer_answer' => $theAnswer,
'_answer_question_id' => $qid,
'id' => $qid,
'question' => $theQuestion,
);
}
$this->assertEqual($expected, $question->get($qid));
}
/**
* This method checks if the getJoin() method is working correctly
*/
function test_getJoin()
{
$question = new MDB_QT(TABLE_QUESTION);
$joinOn1 = TABLE_QUESTION.'.id='.TABLE_ANSWER.'.question_id';
$question->setJoin(TABLE_ANSWER, $joinOn1);
$all = array(
'default' => array(TABLE_ANSWER => $joinOn1),
);
$tables = array(TABLE_ANSWER);
$right = array();
$left = array();
$this->assertEqual($all, $question->getJoin());
$this->assertEqual($tables, $question->getJoin('tables'));
$this->assertEqual($right, $question->getJoin('right'));
$this->assertEqual($left, $question->getJoin('left'));
//--------------------------------------------------------
$joinOn2 = TABLE_USER.'.id='.TABLE_ANSWER.'.question_id';
$question->setRightJoin(TABLE_USER, $joinOn2);
$all = array(
'default' => array(TABLE_ANSWER => $joinOn1),
'right' => array(TABLE_USER => $joinOn2),
);
$tables = array(TABLE_ANSWER, TABLE_USER);
$right = array(TABLE_USER => $joinOn2);
$left = array();
$this->assertEqual($all, $question->getJoin());
$this->assertEqual($tables, $question->getJoin('tables'));
$this->assertEqual($right, $question->getJoin('right'));
$this->assertEqual($left, $question->getJoin('left'));
}
}
if (!defined('TEST_RUNNING')) {
define('TEST_RUNNING', true);
$test = &new TestOfMDB_QueryTool_Get();
$test->run(new HtmlReporter());
}
?>