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:
parent
c9a8cb8780
commit
e1650ab3e3
4 changed files with 46 additions and 13 deletions
|
@ -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)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue