@@ -55,3 +55,88 @@ func TestRunDBMaintenance_Sqlite_WithMock_Failure(t *testing.T) {
5555 t .Fatalf ("expected error when PRAGMA optimize fails" )
5656 }
5757}
58+
59+ func TestRunDBMaintenance_Postgres_WithMock_Success (t * testing.T ) {
60+ dbMock , mock , err := sqlmock .New ()
61+ if err != nil {
62+ t .Fatalf ("sqlmock.New: %v" , err )
63+ }
64+ defer dbMock .Close ()
65+
66+ orig := sqlOpenFunc
67+ sqlOpenFunc = func (driverName , dsn string ) (* sql.DB , error ) { return dbMock , nil }
68+ defer func () { sqlOpenFunc = orig }()
69+
70+ mock .ExpectExec ("VACUUM ANALYZE" ).WillReturnResult (sqlmock .NewResult (0 , 0 ))
71+
72+ if err := RunDBMaintenance ("postgres" , "dsn" ); err != nil {
73+ t .Fatalf ("expected postgres maintenance to succeed, got: %v" , err )
74+ }
75+
76+ if err := mock .ExpectationsWereMet (); err != nil {
77+ t .Fatalf ("unmet expectations: %v" , err )
78+ }
79+ }
80+
81+ func TestRunDBMaintenance_MySQL_WithMock_Success (t * testing.T ) {
82+ dbMock , mock , err := sqlmock .New ()
83+ if err != nil {
84+ t .Fatalf ("sqlmock.New: %v" , err )
85+ }
86+ defer dbMock .Close ()
87+
88+ orig := sqlOpenFunc
89+ sqlOpenFunc = func (driverName , dsn string ) (* sql.DB , error ) { return dbMock , nil }
90+ defer func () { sqlOpenFunc = orig }()
91+
92+ // Return one table name from SHOW TABLES
93+ rows := sqlmock .NewRows ([]string {"Tables_in_db" }).AddRow ("users" )
94+ mock .ExpectQuery ("SHOW TABLES" ).WillReturnRows (rows )
95+ mock .ExpectExec ("OPTIMIZE TABLE users" ).WillReturnResult (sqlmock .NewResult (0 , 0 ))
96+
97+ if err := RunDBMaintenance ("mysql" , "dsn" ); err != nil {
98+ t .Fatalf ("expected mysql maintenance to succeed, got: %v" , err )
99+ }
100+
101+ if err := mock .ExpectationsWereMet (); err != nil {
102+ t .Fatalf ("unmet expectations: %v" , err )
103+ }
104+ }
105+
106+ func TestRunDBMaintenance_Postgres_WithMock_Failure (t * testing.T ) {
107+ dbMock , mock , err := sqlmock .New ()
108+ if err != nil {
109+ t .Fatalf ("sqlmock.New: %v" , err )
110+ }
111+ defer dbMock .Close ()
112+
113+ orig := sqlOpenFunc
114+ sqlOpenFunc = func (driverName , dsn string ) (* sql.DB , error ) { return dbMock , nil }
115+ defer func () { sqlOpenFunc = orig }()
116+
117+ mock .ExpectExec ("VACUUM ANALYZE" ).WillReturnError (errors .New ("vacuum fail" ))
118+
119+ if err := RunDBMaintenance ("postgres" , "dsn" ); err == nil {
120+ t .Fatalf ("expected error when VACUUM ANALYZE fails" )
121+ }
122+ }
123+
124+ func TestRunDBMaintenance_MySQL_WithMock_Failure (t * testing.T ) {
125+ dbMock , mock , err := sqlmock .New ()
126+ if err != nil {
127+ t .Fatalf ("sqlmock.New: %v" , err )
128+ }
129+ defer dbMock .Close ()
130+
131+ orig := sqlOpenFunc
132+ sqlOpenFunc = func (driverName , dsn string ) (* sql.DB , error ) { return dbMock , nil }
133+ defer func () { sqlOpenFunc = orig }()
134+
135+ rows := sqlmock .NewRows ([]string {"Tables_in_db" }).AddRow ("users" )
136+ mock .ExpectQuery ("SHOW TABLES" ).WillReturnRows (rows )
137+ mock .ExpectExec ("OPTIMIZE TABLE users" ).WillReturnError (errors .New ("optimize fail" ))
138+
139+ if err := RunDBMaintenance ("mysql" , "dsn" ); err == nil {
140+ t .Fatalf ("expected error when OPTIMIZE TABLE fails" )
141+ }
142+ }
0 commit comments