Skip to content

Commit 7af5679

Browse files
authored
Merge pull request #16 from recca0120/feat/connections
connections
2 parents 06796d7 + ecf0d33 commit 7af5679

File tree

4 files changed

+77
-7
lines changed

4 files changed

+77
-7
lines changed

.github/workflows/run-tests.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,33 @@ jobs:
2525
- name: Checkout code
2626
uses: actions/checkout@v4
2727

28+
- name: Setup MySQL
29+
uses: shogo82148/actions-setup-mysql@v1
30+
with:
31+
mysql-version: ${{ matrix.mysql }}
32+
root-password: ''
33+
my-cnf: |
34+
innodb_log_file_size=256MB
35+
innodb_buffer_pool_size=512MB
36+
max_allowed_packet=16MB
37+
max_connections=50
38+
local_infile=1
39+
log-output=NONE
40+
slow-query-log=0
41+
innodb_flush_log_at_trx_commit=0
42+
innodb_log_buffer_size=3M
43+
innodb_buffer_pool_size=180M
44+
innodb_doublewrite=0
45+
datadir=/dev/shm/mysql
46+
47+
- name: Show MySQL Variables
48+
run: mysql -uroot -h127.0.0.1 -e 'show variables'
49+
50+
- name: Create Database
51+
run: |
52+
mysql -uroot -h127.0.0.1 -e 'create database testbench;'
53+
mysql -uroot -h127.0.0.1 -e 'create database test;'
54+
2855
- name: Setup cache environment
2956
id: extcache
3057
uses: shivammathur/cache-extensions@v1

config/laravel-erd.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@
99
'erd-go' => env('LARAVEL_ERD_GO', '/usr/local/bin/erd-go'),
1010
'dot' => env('LARAVEL_ERD_DOT', '/usr/local/bin/dot'),
1111
],
12+
'connections' => [],
1213
];

src/Console/Commands/GenerateErd.php

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,9 @@ public function handle(Factory $factory, TemplateFactory $templateFactory): int
6767

6868
private function runMigrate(?string $database): int
6969
{
70+
$default = config('database.default');
7071
$arguments = array_filter([
71-
'--database' => $database,
72+
'--database' => $default === $database ? null : $database,
7273
'--path' => $this->option('path'),
7374
]);
7475

@@ -84,11 +85,15 @@ private function runMigrate(?string $database): int
8485

8586
private function setupFakeDatabase(?string $database): void
8687
{
88+
$default = config('database.default');
89+
$database = $database ?? $default;
90+
$connections = config('laravel-erd.connections');
91+
8792
$this->backup['cache.default'] = config('cache.default');
8893
$this->backup['database.connections'] = config('database.connections');
8994

9095
config(['cache.default' => 'array']);
91-
config(Arr::dot(array_map(static fn (array $config) => [
96+
config(Arr::dot(array_map(static fn (array $config) => $connections[$database] ?? [
9297
'driver' => 'sqlite',
9398
'database' => ':memory:',
9499
'prefix' => $config['prefix'] ?? '',
@@ -98,12 +103,21 @@ private function setupFakeDatabase(?string $database): void
98103
'synchronous' => null,
99104
], $this->backup['database.connections']), 'database.connections.'));
100105

101-
DB::purge($database ?? config('database.default'));
106+
DB::purge($database);
102107
}
103108

104109
private function restoreDatabase(?string $database): void
105110
{
106-
DB::purge($database ?? config('database.default'));
111+
$default = config('database.default');
112+
$arguments = array_filter([
113+
'--database' => $default === $database ? null : $database,
114+
'--path' => $this->option('path'),
115+
]);
116+
117+
$output = new BufferedOutput;
118+
$this->runCommand('migrate:rollback', $arguments, $output);
119+
120+
DB::purge($database);
107121

108122
config(['cache.default' => $this->backup['cache.default']]);
109123
config(['database.connections' => $this->backup['database.connections']]);

tests/Console/Commands/GenerateErdTest.php

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ class GenerateErdTest extends TestCase
1010
{
1111
private string $storagePath;
1212

13-
private string $file = 'actual_artisan.svg';
14-
1513
protected function setUp(): void
1614
{
1715
parent::setUp();
@@ -27,6 +25,7 @@ protected function setUp(): void
2725
'telescope.storage.database.connection' => 'testbench',
2826
]);
2927

28+
$this->app['config']->set('database.default', 'testbench');
3029
$this->app['config']->set('database.connections.testbench', [
3130
'driver' => 'mysql',
3231
'url' => '',
@@ -74,10 +73,39 @@ protected function tearDown(): void
7473
parent::tearDown();
7574
}
7675

77-
public function test_generate_default_svg(): void
76+
public function test_generate_testbench_svg(): void
77+
{
78+
$file = 'testbench.svg';
79+
80+
$parameters = $this->givenParameters(['--file' => $file]);
81+
$this->artisan('erd:generate', $parameters)->execute();
82+
83+
$contents = file_get_contents($this->storagePath.'/'.$file);
84+
self::assertStringContainsString('<!-- cars -->', $contents);
85+
self::assertStringContainsString('<!-- phones&#45;&#45;users -->', $contents);
86+
}
87+
88+
public function test_customize_fake_database(): void
7889
{
7990
$file = 'testbench.svg';
8091

92+
$this->app['config']->set('laravel-erd.connections.testbench', [
93+
'driver' => 'mysql',
94+
'host' => '127.0.0.1',
95+
'port' => '3306',
96+
'database' => 'test',
97+
'username' => 'root',
98+
'password' => '',
99+
'unix_socket' => '',
100+
'charset' => 'utf8mb4',
101+
'collation' => 'utf8mb4_unicode_ci',
102+
'prefix' => '',
103+
'prefix_indexes' => true,
104+
'strict' => false,
105+
'engine' => null,
106+
'options' => [],
107+
]);
108+
81109
$parameters = $this->givenParameters(['--file' => $file]);
82110
$this->artisan('erd:generate', $parameters)->execute();
83111

0 commit comments

Comments
 (0)