From 10302ea44eb2d8be1f1647acd820f3e9d246bc44 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Mon, 6 Jul 2020 14:16:13 +0900 Subject: [PATCH] Add some unit tests for DBQueryParser (more to come) --- tests/_data/dbquery/selectJoinTest1.xml | 21 +++ tests/_data/dbquery/selectJoinTest2.xml | 17 +++ tests/_data/dbquery/selectTest.xml | 21 +++ .../framework/parsers/DBQueryParserTest.php | 127 ++++++++++++++++++ 4 files changed, 186 insertions(+) create mode 100644 tests/_data/dbquery/selectJoinTest1.xml create mode 100644 tests/_data/dbquery/selectJoinTest2.xml create mode 100644 tests/_data/dbquery/selectTest.xml create mode 100644 tests/unit/framework/parsers/DBQueryParserTest.php diff --git a/tests/_data/dbquery/selectJoinTest1.xml b/tests/_data/dbquery/selectJoinTest1.xml new file mode 100644 index 000000000..a62262c65 --- /dev/null +++ b/tests/_data/dbquery/selectJoinTest1.xml @@ -0,0 +1,21 @@ + + + +
+ + + + + + + + + + + + + + + + + diff --git a/tests/_data/dbquery/selectJoinTest2.xml b/tests/_data/dbquery/selectJoinTest2.xml new file mode 100644 index 000000000..7314da715 --- /dev/null +++ b/tests/_data/dbquery/selectJoinTest2.xml @@ -0,0 +1,17 @@ + + +
+
+ + + +
+
+ + + + + + + +
diff --git a/tests/_data/dbquery/selectTest.xml b/tests/_data/dbquery/selectTest.xml new file mode 100644 index 000000000..6ece56c98 --- /dev/null +++ b/tests/_data/dbquery/selectTest.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/unit/framework/parsers/DBQueryParserTest.php b/tests/unit/framework/parsers/DBQueryParserTest.php new file mode 100644 index 000000000..f9edf2e24 --- /dev/null +++ b/tests/unit/framework/parsers/DBQueryParserTest.php @@ -0,0 +1,127 @@ +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() + { + + } +}