11// Copyright the DMorph contributors.
22// SPDX-License-Identifier: MPL-2.0
33
4- package dmorph
4+ package dmorph_test
55
66import (
7- "database/sql"
8- "os"
9- "regexp"
107 "testing"
118
129 "github.com/stretchr/testify/assert"
10+ "github.com/stretchr/testify/require"
11+
12+ "github.com/AlphaOne1/dmorph"
1313)
1414
1515// TestDialectStatements verifies that each database dialect has valid and
@@ -19,19 +19,17 @@ func TestDialectStatements(t *testing.T) {
1919 // that the statements for the databases are somehow filled
2020 tests := []struct {
2121 name string
22- caller func () BaseDialect
22+ caller func () dmorph. BaseDialect
2323 }{
24- {name : "CSVQ" , caller : DialectCSVQ },
25- {name : "DB2" , caller : DialectDB2 },
26- {name : "MSSQL" , caller : DialectMSSQL },
27- {name : "MySQL" , caller : DialectMySQL },
28- {name : "Oracle" , caller : DialectOracle },
29- {name : "Postgres" , caller : DialectPostgres },
30- {name : "SQLite" , caller : DialectSQLite },
24+ {name : "CSVQ" , caller : dmorph . DialectCSVQ },
25+ {name : "DB2" , caller : dmorph . DialectDB2 },
26+ {name : "MSSQL" , caller : dmorph . DialectMSSQL },
27+ {name : "MySQL" , caller : dmorph . DialectMySQL },
28+ {name : "Oracle" , caller : dmorph . DialectOracle },
29+ {name : "Postgres" , caller : dmorph . DialectPostgres },
30+ {name : "SQLite" , caller : dmorph . DialectSQLite },
3131 }
3232
33- re := regexp .MustCompile ("%s" )
34-
3533 for k , v := range tests {
3634 d := v .caller ()
3735
@@ -40,83 +38,54 @@ func TestDialectStatements(t *testing.T) {
4038 }
4139 assert .Contains (t , d .CreateTemplate , "%s" ,
4240 "no table name placeholder in create template for" , v .name )
43- assert .Regexp (t , re , d .CreateTemplate )
4441
4542 if len (d .AppliedTemplate ) < 10 {
4643 t .Errorf ("%v: applied template is too short for %v" , k , v .name )
4744 }
4845 assert .Contains (t , d .AppliedTemplate , "%s" ,
4946 "no table name placeholder in applied template for" , v .name )
50- assert .Regexp (t , re , d .AppliedTemplate )
5147
5248 if len (d .RegisterTemplate ) < 10 {
5349 t .Errorf ("%v: register template is too short for %v" , k , v .name )
5450 }
5551 assert .Contains (t , d .RegisterTemplate , "%s" ,
5652 "no table name placeholder in register template for" , v .name )
57- assert .Regexp (t , re , d .RegisterTemplate )
5853 }
5954}
6055
6156// TestCallsOnClosedDB verifies that methods fail as expected when called on a closed database connection.
6257func TestCallsOnClosedDB (t * testing.T ) {
63- dbFile , dbFileErr := prepareDB ()
64-
65- if dbFileErr != nil {
66- t .Errorf ("DB file could not be created: %v" , dbFileErr )
67- } else {
68- defer func () { _ = os .Remove (dbFile ) }()
69- }
70-
71- db , dbErr := sql .Open ("sqlite" , dbFile )
72-
73- if dbErr != nil {
74- t .Errorf ("DB file could not be created: %v" , dbErr )
75- } else {
76- _ = db .Close ()
77- }
58+ db := openTempSQLite (t )
59+ require .NoError (t , db .Close ())
7860
7961 assert .Error (t ,
80- DialectSQLite ().EnsureMigrationTableExists (db , "irrelevant" ),
62+ dmorph . DialectSQLite ().EnsureMigrationTableExists (t . Context (), db , "irrelevant" ),
8163 "expected error on closed database" )
8264
83- _ , err := DialectSQLite ().AppliedMigrations (db , "irrelevant" )
65+ _ , err := dmorph . DialectSQLite ().AppliedMigrations (t . Context (), db , "irrelevant" )
8466 assert .Error (t , err , "expected error on closed database" )
8567}
8668
8769// TestEnsureMigrationTableExistsSQLError tests the EnsureMigrationTableExists function
8870// for handling SQL errors during execution.
8971func TestEnsureMigrationTableExistsSQLError (t * testing.T ) {
90- d := BaseDialect {
72+ dialect := dmorph. BaseDialect {
9173 CreateTemplate : `
9274 CRATE TABLE test (
9375 id VARCHAR(255) PRIMARY KEY,
9476 create_ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
9577 )` ,
9678 }
9779
98- dbFile , dbFileErr := prepareDB ()
99-
100- if dbFileErr != nil {
101- t .Errorf ("DB file could not be created: %v" , dbFileErr )
102- } else {
103- defer func () { _ = os .Remove (dbFile ) }()
104- }
80+ db := openTempSQLite (t )
10581
106- db , dbErr := sql .Open ("sqlite" , dbFile )
107-
108- if dbErr != nil {
109- t .Errorf ("DB file could not be created: %v" , dbErr )
110- } else {
111- defer func () { _ = db .Close () }()
112- }
113-
114- assert .Error (t , d .EnsureMigrationTableExists (db , "test" ), "expected error" )
82+ assert .Error (t , dialect .EnsureMigrationTableExists (t .Context (), db , "test" ), "expected error" )
11583}
11684
117- // TestEnsureMigrationTableExistsCommitError tests the behavior of EnsureMigrationTableExists when a commit error occurs.
85+ // TestEnsureMigrationTableExistsCommitError tests the behavior of EnsureMigrationTableExists
86+ // when a commit error occurs.
11887func TestEnsureMigrationTableExistsCommitError (t * testing.T ) {
119- d := BaseDialect {
88+ dialect := dmorph. BaseDialect {
12089 CreateTemplate : `
12190 CREATE TABLE t0 (
12291 id INTEGER PRIMARY KEY
@@ -134,25 +103,11 @@ func TestEnsureMigrationTableExistsCommitError(t *testing.T) {
134103 DELETE FROM t0 WHERE id = 1;` ,
135104 }
136105
137- dbFile , dbFileErr := prepareDB ()
138-
139- if dbFileErr != nil {
140- t .Errorf ("DB file could not be created: %v" , dbFileErr )
141- } else {
142- defer func () { _ = os .Remove (dbFile ) }()
143- }
144-
145- db , dbErr := sql .Open ("sqlite" , dbFile )
146-
147- if dbErr != nil {
148- t .Errorf ("DB file could not be created: %v" , dbErr )
149- } else {
150- defer func () { _ = db .Close () }()
151- }
106+ db := openTempSQLite (t )
152107
153- _ , execErr := db .Exec ( "PRAGMA foreign_keys = ON" )
108+ _ , execErr := db .ExecContext ( t . Context (), "PRAGMA foreign_keys = ON" )
154109
155- assert .NoError (t , execErr , "foreign keys checking could not be enabled" )
110+ require .NoError (t , execErr , "foreign keys checking could not be enabled" )
156111
157- assert .Error (t , d .EnsureMigrationTableExists (db , "test" ), "expected error" )
112+ assert .Error (t , dialect .EnsureMigrationTableExists (t . Context (), db , "test" ), "expected error" )
158113}
0 commit comments