1
0
Fork 0
mirror of https://github.com/Eggbertx/gochan.git synced 2025-08-26 10:36:23 -07:00

Add public function for creating sqlmock-based tests in other packages

This commit is contained in:
Eggbertx 2024-04-01 11:27:41 -07:00
parent c9a8cb8780
commit e1650ab3e3
4 changed files with 46 additions and 13 deletions

View file

@ -7,6 +7,7 @@ import (
"testing"
"github.com/DATA-DOG/go-sqlmock"
"github.com/gochan-org/gochan/pkg/config"
"github.com/stretchr/testify/assert"
)
@ -66,10 +67,13 @@ type argsApproveAppeal struct {
func testRunnerGetAppeals(t *testing.T, tC *testCaseGetAppeals, driver string) {
t.Helper()
mock, err := setupMockDB(t, driver, "gochan")
db, mock, err := sqlmock.New()
if !assert.NoError(t, err) {
return
}
if !assert.NoError(t, SetTestingDB(driver, "gochan", "", db)) {
return
}
query := `SELECT id, staff_id, ip_ban_id, appeal_text, staff_response, is_denied FROM ip_ban_appeals`
if tC.args.banID > 0 {
@ -121,6 +125,7 @@ func TestGetAppeals(t *testing.T) {
for _, tC := range testCasesGetAppeals {
for _, driver := range testingDBDrivers {
t.Run(fmt.Sprintf("%s (%s)", tC.name, driver), func(t *testing.T) {
config.SetTestDBConfig(driver, "localhost", "gochan", "gochan", "gochan", "")
testRunnerGetAppeals(t, &tC, driver)
})
}
@ -129,10 +134,13 @@ func TestGetAppeals(t *testing.T) {
func testRunnerApproveAppeal(t *testing.T, tC *testCaseApproveAppeals, sqlDriver string) {
t.Helper()
mock, err := setupMockDB(t, sqlDriver, "gochan")
db, mock, err := sqlmock.New()
if !assert.NoError(t, err) {
return
}
if !assert.NoError(t, SetTestingDB(sqlDriver, "gochan", "", db)) {
return
}
deactivateQuery := `UPDATE ip_ban SET is_active = FALSE WHERE id = \(\s+` +
`SELECT ip_ban_id FROM ip_ban_appeals WHERE id = `
@ -176,6 +184,7 @@ func TestApproveAppeal(t *testing.T) {
for _, tC := range testCasesApproveAppeals {
for _, sqlDriver := range testingDBDrivers {
t.Run(fmt.Sprintf("%s (%s)", tC.name, sqlDriver), func(t *testing.T) {
config.SetTestDBConfig(sqlDriver, "localhost", "gochan", "gochan", "gochan", "")
testRunnerApproveAppeal(t, &tC, sqlDriver)
})
}

View file

@ -1,9 +1,13 @@
package gcsql
import (
"database/sql"
"os"
"regexp"
"strings"
"github.com/gochan-org/gochan/pkg/config"
"github.com/gochan-org/gochan/pkg/gcutil/testutil"
)
var (
@ -17,6 +21,23 @@ func ConnectToDB(host, driver, dbName, username, password, prefix string) error
return err
}
func SetTestingDB(dbDriver string, dbName string, dbPrefix string, db *sql.DB) (err error) {
testutil.PanicIfNotTest()
systemCriticalCfg := config.GetSystemCriticalConfig()
if systemCriticalCfg.DBname == "" {
return ErrNotConnected
}
gcdb, err = setupDBConn(systemCriticalCfg.DBhost, dbDriver, systemCriticalCfg.DBname,
systemCriticalCfg.DBusername, systemCriticalCfg.DBpassword,
systemCriticalCfg.DBprefix)
if err != nil {
return
}
gcdb.db = db
return
}
// RunSQLFile cuts a given sql file into individual statements and runs it.
func RunSQLFile(path string) error {
sqlBytes, err := os.ReadFile(path)

View file

@ -3,6 +3,7 @@ package gcsql
import (
"testing"
"github.com/DATA-DOG/go-sqlmock"
"github.com/gochan-org/gochan/pkg/config"
"github.com/gochan-org/gochan/pkg/gcutil/testutil"
"github.com/stretchr/testify/assert"
@ -29,10 +30,13 @@ func TestProvision(t *testing.T) {
return
}
mock, err := setupMockDB(t, driver, "gochan")
db, mock, err := sqlmock.New()
if !assert.NoError(t, err) {
return
}
if !assert.NoError(t, SetTestingDB(driver, "gochan", "", db)) {
return
}
if !assert.NoError(t, setupAndProvisionMockDB(t, mock, driver, "gochan")) {
return

View file

@ -8,7 +8,6 @@ import (
"testing"
"github.com/DATA-DOG/go-sqlmock"
"github.com/stretchr/testify/assert"
)
var (
@ -89,15 +88,15 @@ var (
}
)
func setupMockDB(t *testing.T, dbType string, dbName string) (mock sqlmock.Sqlmock, err error) {
gcdb, err = setupDBConn("localhost", dbType, dbName, "gochan", "gochan", "")
if !assert.NoError(t, err) {
return
}
gcdb.db, mock, err = sqlmock.New()
assert.NoError(t, err)
return
}
// func setupMockDB(t *testing.T, dbType string, dbName string) (mock sqlmock.Sqlmock, err error) {
// gcdb, err = setupDBConn("localhost", dbType, dbName, "gochan", "gochan", "")
// if !assert.NoError(t, err) {
// return
// }
// gcdb.db, mock, err = sqlmock.New()
// assert.NoError(t, err)
// return
// }
func setupAndProvisionMockDB(t *testing.T, mock sqlmock.Sqlmock, dbType string, dbName string) error {
t.Helper()