test: started internal/db test cases

- we use github.com/bitcomplete/sqltestutil to spin up a postgresql
container to test against
- minor error variable refactoring
This commit is contained in:
2023-11-21 13:58:59 -06:00
parent 459b71a109
commit f95cc2cae7
6 changed files with 167 additions and 10 deletions

View File

@@ -44,8 +44,8 @@ func (db *DBHandler) NewAccount(Login, Password string) (*Account, error) {
}
var (
LoginErrorInvalidID = fmt.Errorf("Invalid Login ID!")
LoginErrorInvalidPassword = fmt.Errorf("Invalid ID && Password combo!")
ErrLoginInvalidID = fmt.Errorf("invalid Login ID")
ErrLoginInvalidPassword = fmt.Errorf("invalid ID && Password combo")
)
func (db *DBHandler) TryLogin(Login, Password string) (*Account, error) {
@@ -58,11 +58,11 @@ func (db *DBHandler) TryLogin(Login, Password string) (*Account, error) {
row.Next()
if err := sqlscan.ScanRow(&account, row); err != nil {
log.Printf("Error scanning row: %v", err)
return nil, LoginErrorInvalidID
return nil, ErrLoginInvalidID
}
if bcrypt.CompareHashAndPassword([]byte(account.Password), []byte(Password)) != nil {
return nil, LoginErrorInvalidPassword
return nil, ErrLoginInvalidPassword
}
// else, login was a success

50
internal/db/db_test.go Normal file
View File

@@ -0,0 +1,50 @@
package db
import (
"context"
"os"
"testing"
"github.com/bitcomplete/sqltestutil"
)
var (
testDB *DBHandler
)
func TestMain(m *testing.M) {
ctx := context.Background()
psql, err := sqltestutil.StartPostgresContainer(ctx, "latest")
if err != nil {
panic(err)
}
defer psql.Shutdown(ctx)
testDB, err = OpenFromConnectionString("postgres", psql.ConnectionString()+"?sslmode=disable")
if err != nil {
panic(err)
}
defer testDB.Close()
if err := testDB.Setup(); err != nil {
panic(err)
}
os.Exit(m.Run())
}
func TestDBAccount(t *testing.T) {
if _, err := testDB.NewAccount("test", "test"); err != nil {
t.Error(err)
}
// now try to retrieve account data
acc, err := testDB.TryLogin("test", "test")
if err != nil {
t.Error(err)
}
if acc.Login != "test" {
t.Error("account username is not test")
}
}

View File

@@ -21,10 +21,8 @@ type DBHandler struct {
//go:embed migrations/new.sql
var createDBQuery string
func OpenPostgresDB(dbAddr string) (*DBHandler, error) {
fmt := fmt.Sprintf("postgresql://%s:%s@%s/%s?sslmode=disable", config.GetDBUser(), config.GetDBPass(), dbAddr, config.GetDBName())
db, err := sql.Open("postgres", fmt)
func OpenFromConnectionString(driverName, connectionString string) (*DBHandler, error) {
db, err := sql.Open(driverName, connectionString)
if err != nil {
return nil, err
}
@@ -32,6 +30,11 @@ func OpenPostgresDB(dbAddr string) (*DBHandler, error) {
return &DBHandler{db}, nil
}
func OpenPostgresDB(dbAddr string) (*DBHandler, error) {
fmt := fmt.Sprintf("postgresql://%s:%s@%s/%s?sslmode=disable", config.GetDBUser(), config.GetDBPass(), dbAddr, config.GetDBName())
return OpenFromConnectionString("postgres", fmt)
}
func (db *DBHandler) Query(query string, args ...any) (*sql.Rows, error) {
return db.db.Query(query, args...)
}