github.com/monkeswag33/noter-go@v0.0.0-20220505233910-9d72ccb0bdb6/db/db_test.go (about) 1 package db 2 3 import ( 4 "os" 5 "path" 6 "runtime" 7 "testing" 8 9 "github.com/monkeswag33/noter-go/env" 10 "github.com/monkeswag33/noter-go/types" 11 "github.com/sirupsen/logrus" 12 "github.com/stretchr/testify/assert" 13 ) 14 15 var user User = User{ 16 Username: "user", 17 Password: "password", 18 } 19 20 var note Note = Note{ 21 Name: "test", 22 Body: "test", 23 } 24 25 // "go test" by default will run tests in subdirectory 26 // However, this means that the script cannot access the .env file 27 // The changeDir will move the current directory down so that it can access the .env file 28 func changeDir(location string) error { 29 _, current, _, _ := runtime.Caller(0) 30 down := path.Join(path.Dir(current), location) 31 if err := os.Chdir(down); err != nil { 32 return err 33 } 34 return nil 35 } 36 37 func TestMain(m *testing.M) { 38 if err := changeDir(".."); err != nil { 39 logrus.Fatal(err) 40 } 41 code := m.Run() 42 os.Exit(code) 43 } 44 45 func TestGetLogLevel(t *testing.T) { 46 var database DB 47 for logLevel, lvl := range types.GormLogLevels { 48 database.LogLevel.GormLogLevel = logLevel 49 assert.Equal(t, lvl, database.getLogLevel()) 50 } 51 } 52 53 func TestInitTesterDB(t *testing.T) { 54 database, err := InitTesterDB() 55 assert.NoError(t, err) 56 assert.IsType(t, &DB{}, database) 57 } 58 59 func TestInit(t *testing.T) { 60 env.SetupViper() 61 var database DB = DB{ 62 LogLevel: types.LogLevelParams{ 63 GormLogLevel: "warn", 64 }, 65 } 66 assert.NoError(t, database.Init()) 67 _, err := database.GetUsers(User{}) 68 assert.NoError(t, err) 69 } 70 71 func TestSetupDB(t *testing.T) { 72 env.SetupViper() 73 assert.NoError(t, SetupDB(types.LogLevelParams{ 74 GormLogLevel: "warn", 75 })) 76 assert.IsType(t, &DB{}, Database) 77 _, err := Database.GetUsers(User{}) 78 assert.NoError(t, err) 79 } 80 81 func TestClose(t *testing.T) { 82 SetupDB(types.LogLevelParams{ 83 GormLogLevel: "warn", 84 }) 85 assert.NoError(t, Database.Close()) 86 sqlDB, err := Database.DB.DB() 87 assert.NoError(t, err) 88 assert.Error(t, sqlDB.Ping()) // Ping should error out if connection was closed 89 } 90 91 func TestShutdownDB(t *testing.T) { 92 SetupDB( 93 types.LogLevelParams{ 94 GormLogLevel: "warn", 95 }, 96 ) 97 assert.NoError(t, ShutdownDB()) 98 if Database != nil { 99 t.Fatal("Database is not null") 100 } 101 }