/
sqlite.go
55 lines (44 loc) · 1.26 KB
/
sqlite.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package testutils
import (
"fmt"
"os"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"github.com/Ozoniuss/casheer/internal/store"
_ "github.com/mattn/go-sqlite3"
)
// Setup creates a temporary sqlite3 database folder, returning a database
// connection.
func Setup(migrationsDir string) (*gorm.DB, string, error) {
var err error
dbfile, err := os.CreateTemp(".", "*.testdb")
if err != nil {
return nil, "", err
}
dbname := dbfile.Name()
dbfile.Close()
db, err := gorm.Open(sqlite.Open(dbname), &gorm.Config{
Logger: logger.Default.LogMode(logger.Silent),
})
if err != nil {
return nil, "", fmt.Errorf("could not open database file: %w", err)
}
err = store.RunMigrations(db, migrationsDir)
if err != nil {
return nil, "", fmt.Errorf("initializing database: %s", err.Error())
}
return db, dbname, nil
}
// Teardown closes the sqlite3 database connection, and removes the database
// file.
func Teardown(db *gorm.DB, dbname string) error {
instance, _ := db.DB()
// Attempt to close the instance, do nothing in case of error.
instance.Close()
err := os.Remove(dbname)
if err != nil {
return fmt.Errorf("removing temporary database %s: %s", dbname, err.Error())
}
return nil
}