Add some unit tests for DBQueryParser (more to come)

This commit is contained in:
Kijin Sung 2020-07-06 14:16:13 +09:00
parent 8bb01edf86
commit 10302ea44e
4 changed files with 186 additions and 0 deletions

View file

@ -0,0 +1,21 @@
<query id="selectJoinTest1" action="select">
<tables>
<table name="documents" />
<table name="member" />
</tables>
<columns>
<column name="member.member_srl" />
<column name="COUNT(*)" alias="count" />
</columns>
<conditions>
<condition operation="equal" column="documents.member_srl" var="member.member_srl" />
<condition operation="equal" column="documents.member_srl" default="member.member_srl" />
<condition operation="in" column="documents.document_srl" var="document_srl_list" pipe="and" />
</conditions>
<groups>
<group column="member.member_srl" />
<having>
<condition operation="notequal" column="member.member_srl" var="exclude_member_srl" notnull="notnull" />
</having>
</groups>
</query>

View file

@ -0,0 +1,17 @@
<query id="selectJoinTest2" action="select">
<tables>
<table name="documents" />
<table name="member" type="left join">
<conditions>
<condition operation="equal" column="documents.member_srl" default="member.member_srl" />
</conditions>
</table>
</tables>
<columns>
<column name="documents.*" />
<column name="member.regdate" alias="member_regdate" />
</columns>
<conditions>
<condition operation="in" column="documents.document_srl" var="document_srl_list" pipe="and" />
</conditions>
</query>

View file

@ -0,0 +1,21 @@
<query id="selectTest" action="select">
<tables>
<table name="documents" />
</tables>
<columns distinct="true">
<column name="*" />
</columns>
<conditions>
<condition operation="in" column="member_srl" var="member_srl" filter="number" notnull="notnull" />
<group pipe="and">
<condition operation="gte" column="regdate" var="regdate_more" notnull="notnull" />
<condition operation="equal" column="status" var="status_list" default="PUBLIC" pipe="or" />
</group>
</conditions>
<navigation>
<index var="sort_index" default="list_order" order="order_type" />
<list_count var="list_count" default="20" />
<page_count var="page_count" default="10" />
<page var="page" default="1" />
</navigation>
</query>

View file

@ -0,0 +1,127 @@
<?php
class DBQueryParserTest extends \Codeception\TestCase\Test
{
public function testLoadXML()
{
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectTest.xml');
$this->assertTrue($query instanceof Rhymix\Framework\Parsers\DBQuery\Query);
$this->assertEquals('selectTest', $query->name);
$this->assertEquals('SELECT', $query->type);
$this->assertTrue($query->select_distinct);
$this->assertTrue($query->tables['documents'] instanceof Rhymix\Framework\Parsers\DBQuery\Table);
$this->assertEquals('documents', $query->tables['documents']->alias);
$this->assertEquals(1, count($query->columns));
$this->assertEquals('*', $query->columns[0]->name);
$this->assertTrue($query->columns[0]->is_expression);
$this->assertTrue($query->columns[0]->is_wildcard);
$this->assertEquals(2, count($query->conditions));
$this->assertTrue($query->conditions[0] instanceof Rhymix\Framework\Parsers\DBQuery\Condition);
$this->assertTrue($query->conditions[1] instanceof Rhymix\Framework\Parsers\DBQuery\ConditionGroup);
$this->assertTrue($query->conditions[1]->conditions[0] instanceof Rhymix\Framework\Parsers\DBQuery\Condition);
$this->assertTrue($query->conditions[1]->conditions[1] instanceof Rhymix\Framework\Parsers\DBQuery\Condition);
$this->assertEquals('regdate', $query->conditions[1]->conditions[0]->column);
$this->assertEquals('gte', $query->conditions[1]->conditions[0]->operation);
$this->assertTrue($query->conditions[1]->conditions[0]->not_null);
$this->assertEquals('status_list', $query->conditions[1]->conditions[1]->var);
$this->assertEquals('PUBLIC', $query->conditions[1]->conditions[1]->default);
$this->assertFalse($query->conditions[1]->conditions[1]->not_null);
$this->assertEquals('OR', $query->conditions[1]->conditions[1]->pipe);
$this->assertTrue($query->navigation instanceof Rhymix\Framework\Parsers\DBQuery\Navigation);
$this->assertTrue($query->navigation->orderby[0] instanceof Rhymix\Framework\Parsers\DBQuery\OrderBy);
$this->assertEquals('sort_index', $query->navigation->orderby[0]->var);
$this->assertEquals('list_order', $query->navigation->orderby[0]->default);
$this->assertEquals('order_type', $query->navigation->orderby[0]->order_var);
$this->assertEquals('ASC', $query->navigation->orderby[0]->order_default);
$this->assertTrue($query->navigation->list_count instanceof Rhymix\Framework\Parsers\DBQuery\VariableBase);
$this->assertEquals('list_count', $query->navigation->list_count->var);
$this->assertEquals('20', $query->navigation->list_count->default);
$this->assertTrue($query->navigation->page instanceof Rhymix\Framework\Parsers\DBQuery\VariableBase);
$this->assertEquals('page', $query->navigation->page->var);
$this->assertEquals('1', $query->navigation->page->default);
}
public function testJoin1()
{
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectJoinTest1.xml');
$this->assertTrue($query instanceof Rhymix\Framework\Parsers\DBQuery\Query);
$this->assertEquals(2, count($query->tables));
$this->assertTrue($query->tables['documents'] instanceof Rhymix\Framework\Parsers\DBQuery\Table);
$this->assertTrue($query->tables['member'] instanceof Rhymix\Framework\Parsers\DBQuery\Table);
$this->assertNull($query->tables['member']->join_type);
$this->assertEmpty($query->tables['member']->join_conditions);
$this->assertEquals(2, count($query->columns));
$this->assertEquals('member.member_srl', $query->columns[0]->name);
$this->assertFalse($query->columns[0]->is_expression);
$this->assertFalse($query->columns[0]->is_wildcard);
$this->assertEquals('COUNT(*)', $query->columns[1]->name);
$this->assertEquals('count', $query->columns[1]->alias);
$this->assertTrue($query->columns[1]->is_expression);
$this->assertFalse($query->columns[1]->is_wildcard);
$this->assertEquals(3, count($query->conditions));
$this->assertEquals('documents.member_srl', $query->conditions[0]->column);
$this->assertEquals('member.member_srl', $query->conditions[0]->default);
$this->assertNull($query->conditions[0]->var);
$this->assertEquals('documents.member_srl', $query->conditions[1]->column);
$this->assertEquals('member.member_srl', $query->conditions[1]->default);
$this->assertNull($query->conditions[1]->var);
$this->assertEquals('AND', $query->conditions[1]->pipe);
$this->assertTrue($query->groupby instanceof Rhymix\Framework\Parsers\DBQuery\GroupBy);
$this->assertEquals('member.member_srl', $query->groupby->columns[0]);
$this->assertEquals(1, count($query->groupby->having));
$this->assertTrue($query->groupby->having[0] instanceof Rhymix\Framework\Parsers\DBQuery\Condition);
$this->assertEquals('member.member_srl', $query->groupby->having[0]->column);
$this->assertEquals('notequal', $query->groupby->having[0]->operation);
}
public function testJoin2()
{
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/selectJoinTest2.xml');
$this->assertTrue($query instanceof Rhymix\Framework\Parsers\DBQuery\Query);
$this->assertEquals(2, count($query->tables));
$this->assertTrue($query->tables['documents'] instanceof Rhymix\Framework\Parsers\DBQuery\Table);
$this->assertTrue($query->tables['member'] instanceof Rhymix\Framework\Parsers\DBQuery\Table);
$this->assertEquals('LEFT JOIN', $query->tables['member']->join_type);
$this->assertEquals(1, count($query->tables['member']->join_conditions));
$this->assertTrue($query->tables['member']->join_conditions[0] instanceof Rhymix\Framework\Parsers\DBQuery\Condition);
$this->assertEquals('documents.member_srl', $query->tables['member']->join_conditions[0]->column);
$this->assertEquals('member.member_srl', $query->tables['member']->join_conditions[0]->default);
$this->assertNull($query->tables['member']->join_conditions[0]->var);
$this->assertEquals(2, count($query->columns));
$this->assertEquals('documents.*', $query->columns[0]->name);
$this->assertTrue($query->columns[0]->is_expression);
$this->assertTrue($query->columns[0]->is_wildcard);
$this->assertEquals('member.regdate', $query->columns[1]->name);
$this->assertEquals('member_regdate', $query->columns[1]->alias);
$this->assertFalse($query->columns[1]->is_expression);
$this->assertFalse($query->columns[1]->is_wildcard);
}
public function testSubquery()
{
}
public function testInsertQuery()
{
}
public function testUpdateQuery()
{
}
public function testDeleteQuery()
{
}
}