Add unit tests for if="var" support in XML query

This commit is contained in:
Kijin Sung 2025-02-15 22:42:11 +09:00
parent 658a28dfd8
commit ae0e13eca9
3 changed files with 67 additions and 1 deletions

View file

@ -0,0 +1,18 @@
<query id="ifVarTest" action="select">
<tables>
<table name="documents" if="if_table" />
</tables>
<columns>
<column name="module_srl" />
<column name="document_srl" if="if_column" />
</columns>
<conditions>
<condition operation="equal" column="module_srl" var="module_srl" if="if_condition" />
</conditions>
<navigation>
<index var="sort_index" default="list_order" order="desc" if="if_sort_index" />
<list_count var="list_count" default="20" if="if_list_count" />
<page_count var="page_count" default="10" if="if_page_count" />
<page var="page" default="3" if="if_page" />
</navigation>
</query>

View file

@ -554,4 +554,48 @@ class DBQueryParserTest extends \Codeception\Test\Unit
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE `module_srl` IS NULL AND `member_srl` IS NOT NULL', $sql);
$this->assertEquals([], $query->getQueryParams());
}
public function testIfVar()
{
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/ifVarTest.xml');
$sql = $query->getQueryString('rx_', array(
'if_table' => true,
'module_srl' => 1234,
));
$this->assertEquals('SELECT `module_srl` FROM `rx_documents` AS `documents`', $sql);
$sql = $query->getQueryString('rx_', array(
'if_table' => true,
'if_column' => true,
'if_condition' => true,
));
$this->assertEquals('SELECT `module_srl`, `document_srl` FROM `rx_documents` AS `documents`', $sql);
$sql = $query->getQueryString('rx_', array(
'if_table' => true,
'if_column' => true,
'if_condition' => true,
'module_srl' => 1234,
));
$this->assertEquals('SELECT `module_srl`, `document_srl` FROM `rx_documents` AS `documents` WHERE `module_srl` = ?', $sql);
$this->assertFalse($query->requires_pagination);
$sql = $query->getQueryString('rx_', array(
'if_table' => true,
'if_sort_index' => true,
));
$this->assertEquals('SELECT `module_srl` FROM `rx_documents` AS `documents` ORDER BY `list_order` DESC', $sql);
$this->assertFalse($query->requires_pagination);
$sql = $query->getQueryString('rx_', array(
'if_table' => true,
'if_sort_index' => true,
'if_list_count' => true,
'if_page_count' => true,
'if_page' => true,
));
$this->assertEquals('SELECT `module_srl` FROM `rx_documents` AS `documents` ORDER BY `list_order` DESC LIMIT 40, 20', $sql);
$this->assertTrue($query->requires_pagination);
}
}