mirror of
https://github.com/CPunch/gopenfusion.git
synced 2025-10-05 01:00:41 +00:00
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:
@@ -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
50
internal/db/db_test.go
Normal 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")
|
||||
}
|
||||
}
|
@@ -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...)
|
||||
}
|
||||
|
Reference in New Issue
Block a user