@@ -9,17 +9,25 @@ import { afterAll } from 'vitest';
9
9
export async function createTestDb ( ) {
10
10
const systemClient = knex ( {
11
11
client : 'mysql2' ,
12
- connection : {
13
- host : process . env . MYSQL_HOST ,
14
- port : Number . parseInt ( process . env . MYSQL_PORT ! ) ,
15
- user : process . env . MYSQL_USER ,
16
- password : process . env . MYSQL_PASSWORD ,
17
- database : 'mysql' ,
18
- timezone : '+00:00' ,
19
- } ,
12
+ connection : process . env . MYSQL_SOCKET_PATH
13
+ ? {
14
+ socketPath : process . env . MYSQL_SOCKET_PATH ,
15
+ user : process . env . MYSQL_USER ,
16
+ password : process . env . MYSQL_PASSWORD ,
17
+ database : 'mysql' ,
18
+ timezone : '+00:00' ,
19
+ }
20
+ : {
21
+ host : process . env . MYSQL_HOST ,
22
+ port : Number . parseInt ( process . env . MYSQL_PORT ! ) ,
23
+ user : process . env . MYSQL_USER ,
24
+ password : process . env . MYSQL_PASSWORD ,
25
+ database : 'mysql' ,
26
+ timezone : '+00:00' ,
27
+ } ,
20
28
} ) ;
21
29
22
- const dbName = `test_${ randomBytes ( 16 ) . toString ( 'hex' ) } ` ;
30
+ const dbName = `${ process . env . MYSQL_DATABASE ?. includes ( 'pr-' ) ? ` ${ process . env . MYSQL_DATABASE . replace ( / - / g , '_' ) } _` : '' } test_${ randomBytes ( 16 ) . toString ( 'hex' ) } ` ;
23
31
24
32
await systemClient . raw ( `CREATE DATABASE ${ dbName } ` ) ;
25
33
@@ -29,37 +37,60 @@ export async function createTestDb() {
29
37
30
38
// Clone each table structure
31
39
for ( const { TABLE_NAME } of tables [ 0 ] ) {
32
- await systemClient . raw (
33
- `CREATE TABLE ${ dbName } . ${ TABLE_NAME } LIKE ${ process . env . MYSQL_DATABASE } . ${ TABLE_NAME } ` ,
40
+ const [ createTableResult ] = await systemClient . raw (
41
+ `SHOW CREATE TABLE \` ${ process . env . MYSQL_DATABASE } \`.\` ${ TABLE_NAME } \` ` ,
34
42
) ;
43
+ const createTableSql = createTableResult [ 0 ] [ 'Create Table' ]
44
+ . replace ( 'CREATE TABLE ' , `CREATE TABLE \`${ dbName } \`.` )
45
+ . split ( '\n' )
46
+ . filter ( ( line : string ) => ! line . trim ( ) . startsWith ( 'CONSTRAINT' ) )
47
+ . join ( '\n' )
48
+ . replace ( / , \n \) / , '\n)' ) ; // clean up trailing comma
49
+ await systemClient . raw ( createTableSql ) ;
35
50
}
36
51
37
52
await systemClient . destroy ( ) ;
38
53
39
54
const dbClient = knex ( {
40
55
client : 'mysql2' ,
41
- connection : {
42
- host : process . env . MYSQL_HOST ,
43
- port : Number . parseInt ( process . env . MYSQL_PORT ! ) ,
44
- user : process . env . MYSQL_USER ,
45
- password : process . env . MYSQL_PASSWORD ,
46
- database : dbName ,
47
- timezone : '+00:00' ,
48
- } ,
56
+ connection : process . env . MYSQL_SOCKET_PATH
57
+ ? {
58
+ socketPath : process . env . MYSQL_SOCKET_PATH ,
59
+ user : process . env . MYSQL_USER ,
60
+ password : process . env . MYSQL_PASSWORD ,
61
+ database : dbName ,
62
+ timezone : '+00:00' ,
63
+ }
64
+ : {
65
+ host : process . env . MYSQL_HOST ,
66
+ port : Number . parseInt ( process . env . MYSQL_PORT ! ) ,
67
+ user : process . env . MYSQL_USER ,
68
+ password : process . env . MYSQL_PASSWORD ,
69
+ database : dbName ,
70
+ timezone : '+00:00' ,
71
+ } ,
49
72
} ) ;
50
73
51
74
afterAll ( async ( ) => {
52
75
await dbClient . destroy ( ) ;
53
76
const systemClient = knex ( {
54
77
client : 'mysql2' ,
55
- connection : {
56
- host : process . env . MYSQL_HOST ,
57
- port : Number . parseInt ( process . env . MYSQL_PORT ! ) ,
58
- user : process . env . MYSQL_USER ,
59
- password : process . env . MYSQL_PASSWORD ,
60
- database : 'mysql' ,
61
- timezone : '+00:00' ,
62
- } ,
78
+ connection : process . env . MYSQL_SOCKET_PATH
79
+ ? {
80
+ socketPath : process . env . MYSQL_SOCKET_PATH ,
81
+ user : process . env . MYSQL_USER ,
82
+ password : process . env . MYSQL_PASSWORD ,
83
+ database : 'mysql' ,
84
+ timezone : '+00:00' ,
85
+ }
86
+ : {
87
+ host : process . env . MYSQL_HOST ,
88
+ port : Number . parseInt ( process . env . MYSQL_PORT ! ) ,
89
+ user : process . env . MYSQL_USER ,
90
+ password : process . env . MYSQL_PASSWORD ,
91
+ database : 'mysql' ,
92
+ timezone : '+00:00' ,
93
+ } ,
63
94
} ) ;
64
95
await systemClient . raw ( `DROP DATABASE ${ dbName } ` ) ;
65
96
await systemClient . destroy ( ) ;
0 commit comments