Skip to content

Commit

Permalink
Improve json import database model
Browse files Browse the repository at this point in the history
  • Loading branch information
starker-xp committed Oct 31, 2018
1 parent 5d479db commit e9a2c91
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 19 deletions.
9 changes: 9 additions & 0 deletions src/Exception/JsonInvalidFormatException.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?php

namespace Starkerxp\DatabaseChecker\Exception;


class JsonInvalidFormatException extends \Exception
{

}
25 changes: 11 additions & 14 deletions src/Factory/JsonDatabaseFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Starkerxp\DatabaseChecker\Factory;

use Starkerxp\DatabaseChecker\Exception\JsonInvalidFormatException;
use Starkerxp\DatabaseChecker\Exception\TablenameHasNotDefinedException;
use Starkerxp\DatabaseChecker\LoggerTrait;
use Starkerxp\DatabaseChecker\Structure\MysqlDatabase;
Expand Down Expand Up @@ -42,12 +43,11 @@ public function __construct($json)
public function generate($databaseName): MysqlDatabase
{
$tables = [];
$mysqlDatabase = new MysqlDatabase($databaseName);
try {
$dataTables = $this->resolve();
} catch (\Exception $e) {
$this->error('An unexpected error are throw when you check json syntax');

return [];
throw new JsonInvalidFormatException('An unexpected error are throw when you check json syntax');
}
foreach ($dataTables as $tableName => $dataTable) {
try {
Expand All @@ -58,30 +58,30 @@ public function generate($databaseName): MysqlDatabase
if (isset($dataTable['collate'])) {
$table->setCollate($dataTable['collate']);
}
foreach ((array)$dataTable['columns'] as $columnName => $row) {
foreach ((array) $dataTable['columns'] as $columnName => $row) {
$column = new MysqlDatabaseColumn($columnName, $row['type'], $row['length'], $row['nullable'], $row['defaultValue'], $row['extra']);
if (isset($row['collate']) || $table->getCollate()) {
$column->setCollate($row['collate']);
}
$table->addColumn($column);

}
foreach ((array)$dataTable['indexes'] as $row) {
foreach ((array) $dataTable['indexes'] as $row) {
$table->addIndex($row['columns'], $row['name']);
}
if (isset($dataTable['primary'])) {
$table->addPrimary((array)$dataTable['primary']);
$table->addPrimary((array) $dataTable['primary']);
}
foreach ((array)$dataTable['uniques'] as $row) {
foreach ((array) $dataTable['uniques'] as $row) {
$table->addUnique($row['columns'], $row['name']);
}
$tables[] = $table;
}

$mysqlDatabase = new MysqlDatabase($databaseName);
foreach($tables as $table){
foreach ($tables as $table) {
$mysqlDatabase->addTable($table);
}

return $mysqlDatabase;
}

Expand Down Expand Up @@ -136,17 +136,14 @@ protected function resolve(): array
);
$export = [];
$data = $data['tables'];
if(empty($data['tables'])){
return [];
}

foreach ($data as $nomTable => $table) {
$dataTable = $resolverTable->resolve($table);
foreach ((array)$dataTable['columns'] as $columnName => $column) {
foreach ((array) $dataTable['columns'] as $columnName => $column) {
$dataTable['columns'][$columnName] = $resolverColumns->resolve($column);
}
foreach (['indexes', 'uniques'] as $indexKey) {
foreach ((array)$dataTable[$indexKey] as $keyIndex => $index) {
foreach ((array) $dataTable[$indexKey] as $keyIndex => $index) {
$dataTable[$indexKey][$keyIndex] = $resolverIndex->resolve($index);
}
}
Expand Down
19 changes: 14 additions & 5 deletions tests/Factory/JsonDatabaseFactoryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@


use PHPUnit\Framework\TestCase;
use Starkerxp\DatabaseChecker\Exception\JsonInvalidFormatException;
use Starkerxp\DatabaseChecker\Factory\JsonDatabaseFactory;
use Starkerxp\DatabaseChecker\Structure\MysqlDatabaseColumn;
use Starkerxp\DatabaseChecker\Structure\MysqlDatabaseTable;
Expand Down Expand Up @@ -79,15 +80,23 @@ public function testGenerateEmptyTablenameSinceJsonException(): void
* @group factory
* @group exception
*/
public function testGenerateInvalidJsonException(): void
public function testGenerateNullJsonException(): void
{
$factoryJsonDatabase = new JsonDatabaseFactory(null);
$tableOut = $factoryJsonDatabase->generate('myTestDatabase');
$this->assertEquals([], $tableOut);
$this->expectException(JsonInvalidFormatException::class);
$factoryJsonDatabase->generate('myTestDatabase');
}

/**
* @group factory
* @group exception
*/
public function testGenerateInvalidJsonException(): void
{
$factoryJsonDatabase = new JsonDatabaseFactory('"');
$tableOut = $factoryJsonDatabase->generate('myTestDatabase');
$this->assertEquals([], $tableOut);
$this->expectException(JsonInvalidFormatException::class);
$factoryJsonDatabase->generate('myTestDatabase');

}

}

0 comments on commit e9a2c91

Please sign in to comment.