From 8bb01edf86d48ddf63ce1029b01e0e4940d79d45 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Mon, 6 Jul 2020 13:43:56 +0900 Subject: [PATCH] Add unit tests for DBTableParser --- tests/_data/dbtable/example.xml | 14 +++++ .../framework/parsers/DBTableParserTest.php | 53 +++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 tests/_data/dbtable/example.xml create mode 100644 tests/unit/framework/parsers/DBTableParserTest.php diff --git a/tests/_data/dbtable/example.xml b/tests/_data/dbtable/example.xml new file mode 100644 index 000000000..e10b7c6b2 --- /dev/null +++ b/tests/_data/dbtable/example.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + +
diff --git a/tests/unit/framework/parsers/DBTableParserTest.php b/tests/unit/framework/parsers/DBTableParserTest.php new file mode 100644 index 000000000..efdb67bfa --- /dev/null +++ b/tests/unit/framework/parsers/DBTableParserTest.php @@ -0,0 +1,53 @@ +assertTrue($table instanceof Rhymix\Framework\Parsers\DBTable\Table); + $this->assertEquals('example', $table->name); + $this->assertTrue($table->columns['example_srl'] instanceof Rhymix\Framework\Parsers\DBTable\Column); + $this->assertEquals('bigint', $table->columns['example_srl']->type); + $this->assertEquals('bignumber', $table->columns['example_srl']->xetype); + $this->assertNull($table->columns['example_srl']->size); + $this->assertTrue($table->columns['example_srl']->not_null); + $this->assertTrue($table->columns['example_srl']->is_primary_key); + $this->assertEquals('bigint', $table->columns['module_srl']->type); + $this->assertEquals('number', $table->columns['module_srl']->xetype); + $this->assertTrue($table->columns['module_srl']->is_indexed); + $this->assertTrue($table->columns['list_order']->is_unique); + + $this->assertEquals(6, count($table->indexes)); + $this->assertEquals(['module_srl' => 0, 'document_srl' => 0], $table->indexes['idx_module_document_srl']->columns); + $this->assertEquals(['status' => 6], $table->indexes['idx_status']->columns); + $this->assertTrue($table->indexes['unique_list_order']->is_unique); + + $this->assertEquals(2, count($table->constraints)); + $this->assertEquals('FOREIGN KEY', $table->constraints[0]->type); + $this->assertEquals('module_srl', $table->constraints[0]->column); + $this->assertEquals('module.module_srl', $table->constraints[0]->references); + $this->assertEquals('CASCADE', $table->constraints[0]->on_delete); + $this->assertEquals('RESTRICT', $table->constraints[0]->on_update); + $this->assertEquals('CHECK', $table->constraints[1]->type); + $this->assertEquals('list_order < 0', $table->constraints[1]->condition); + } + + public function testGetCreateQuery() + { + $table = Rhymix\Framework\Parsers\DBTableParser::loadXML(\RX_BASEDIR . 'tests/_data/dbtable/example.xml'); + $sql = $table->getCreateQuery('rx_'); + $this->assertContains('CREATE TABLE `rx_example` (', $sql); + $this->assertContains('`comment_srl` BIGINT NOT NULL,', $sql); + $this->assertContains('`status` VARCHAR(20) DEFAULT \'PUBLIC\',', $sql); + $this->assertContains('PRIMARY KEY (`example_srl`),', $sql); + $this->assertContains('INDEX `idx_document_srl` (`document_srl`),', $sql); + $this->assertContains('INDEX `idx_module_document_srl` (`module_srl`, `document_srl`),', $sql); + $this->assertContains('INDEX `idx_status` (`status`(6)),', $sql); + $this->assertContains('UNIQUE `unique_list_order` (`list_order`),', $sql); + $this->assertContains('FOREIGN KEY (`module_srl`) REFERENCES `rx_module` (`module_srl`) ON DELETE CASCADE ON UPDATE RESTRICT', $sql); + $this->assertContains('CHECK (list_order < 0)', $sql); + $this->assertContains('CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci', $sql); + $this->assertContains('ENGINE = InnoDB', $sql); + } +}