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  }