codebase: Cleanup various things (#1935)

* codebase: Rid base64/hex to string common funcs

* codebase: Rid local scope variable usage and other improvements

* codebase: Refactor currency pair usage across multiple exchanges

- Updated HitBTC tests to use the new currency pair format.
- Modified Kraken futures types to use currency.Pair instead of string for Symbol.
- Adjusted Kraken wrapper methods to handle currency pairs correctly.
- Refined OKX tests and types to utilize currency.Pair for instrument IDs.
- Enhanced Poloniex tests to consistently use predefined currency pairs.
- Streamlined order and orderbook tests to replace string pairs with currency.NewBTCUSD().
- Improved Yobit tests to utilize a standardized currency pair format.
- Updated validator wrapper to use currency pairs directly instead of string conversions.

* codebase: Use types.Number where possible

* refactor: update PayoutFee type to types.Number for consistency

* Refactor: Remove crypto functions to use standard library and other minor changes

- Removed custom crypto functions for SHA256, SHA512, and MD5 from the common/crypto package.
- Replaced usages of removed functions with standard library implementations in various files including:
  - cmd/websocket_client/main.go
  - engine/apiserver.go
  - exchanges/kraken/kraken.go
  - exchanges/lbank/lbank.go
  - exchanges/okx/okx_business_websocket.go
  - exchanges/kucoin/kucoin_websocket.go
  - gctscript/vm/vm.go
- Updated tests to reflect changes in the crypto functions.
- Renamed several functions for clarity, particularly in the context of order book updates across multiple exchanges.

* refactor: replace assert with require for consistency in test assertions

* refactor: Improve Binance futures candlestick test, standardise orderbook update function names and improve test parallelism

* refactor: Replace require.Len with require.Equal for better output in TestGetFuturesKlineData
This commit is contained in:
Adrian Gallagher
2025-06-12 14:12:36 +10:00
committed by GitHub
parent ce134a0a1d
commit d5ba674fc4
115 changed files with 1327 additions and 3112 deletions

View File

@@ -7,6 +7,8 @@ import (
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/thrasher-corp/gocryptotrader/database"
"github.com/thrasher-corp/gocryptotrader/database/drivers"
"github.com/thrasher-corp/gocryptotrader/database/testhelpers"
@@ -31,7 +33,7 @@ func TestMain(m *testing.M) {
}
func TestAudit(t *testing.T) {
testCases := []struct {
for _, tc := range []struct {
name string
config *database.Config
runner func(t *testing.T)
@@ -44,7 +46,6 @@ func TestAudit(t *testing.T) {
Driver: database.DBSQLite3,
ConnectionDetails: drivers.ConnectionDetails{Database: "./testdb"},
},
writeAudit,
testhelpers.CloseDatabase,
nil,
@@ -55,7 +56,6 @@ func TestAudit(t *testing.T) {
Driver: database.DBSQLite3,
ConnectionDetails: drivers.ConnectionDetails{Database: "./testdb"},
},
readHelper,
testhelpers.CloseDatabase,
nil,
@@ -74,25 +74,18 @@ func TestAudit(t *testing.T) {
nil,
nil,
},
}
for _, test := range testCases {
t.Run(test.name, func(t *testing.T) {
if !testhelpers.CheckValidConfig(&test.config.ConnectionDetails) {
} {
t.Run(tc.name, func(t *testing.T) {
if !testhelpers.CheckValidConfig(&tc.config.ConnectionDetails) {
t.Skip("database not configured skipping test")
}
dbConn, err := testhelpers.ConnectToDatabase(test.config)
if err != nil {
t.Fatal(err)
dbConn, err := testhelpers.ConnectToDatabase(tc.config)
require.NoError(t, err)
if tc.runner != nil {
tc.runner(t)
}
if test.runner != nil {
test.runner(t)
}
if test.closer != nil {
err = test.closer(dbConn)
if err != nil {
t.Log(err)
}
if tc.closer != nil {
assert.NoError(t, tc.closer(dbConn))
}
})
}

View File

@@ -56,7 +56,7 @@ func TestMain(m *testing.M) {
}
func TestInsert(t *testing.T) {
testCases := []struct {
for _, tc := range []struct {
name string
config *database.Config
seedDB func(includeOHLCVData bool) error
@@ -76,60 +76,36 @@ func TestInsert(t *testing.T) {
},
seedDB: seedDB,
},
}
for x := range testCases {
test := testCases[x]
t.Run(test.name, func(t *testing.T) {
if !testhelpers.CheckValidConfig(&test.config.ConnectionDetails) {
} {
t.Run(tc.name, func(t *testing.T) {
if !testhelpers.CheckValidConfig(&tc.config.ConnectionDetails) {
t.Skip("database not configured skipping test")
}
dbConn, err := testhelpers.ConnectToDatabase(test.config)
if err != nil {
t.Fatal(err)
}
dbConn, err := testhelpers.ConnectToDatabase(tc.config)
require.NoError(t, err)
if test.seedDB != nil {
err = test.seedDB(false)
if err != nil {
t.Fatal(err)
}
if tc.seedDB != nil {
require.NoError(t, tc.seedDB(false))
}
data, err := genOHCLVData()
if err != nil {
t.Fatal(err)
}
require.NoError(t, err)
r, err := Insert(&data)
if err != nil {
t.Fatal(err)
}
require.NoError(t, err)
if r != 365 {
t.Errorf("unexpected number inserted: %v", r)
}
assert.Equal(t, uint64(365), r)
d, err := DeleteCandles(&data)
if err != nil {
t.Fatal(err)
}
if d != 365 {
t.Errorf("unexpected number deleted: %v", d)
}
err = testhelpers.CloseDatabase(dbConn)
if err != nil {
t.Error(err)
}
require.NoError(t, err)
assert.Equal(t, int64(365), d)
assert.NoError(t, testhelpers.CloseDatabase(dbConn))
})
}
}
func TestInsertFromCSV(t *testing.T) {
testCases := []struct {
for _, tc := range []struct {
name string
config *database.Config
seedDB func(includeOHLCVData bool) error
@@ -149,48 +125,32 @@ func TestInsertFromCSV(t *testing.T) {
},
seedDB: seedDB,
},
}
for x := range testCases {
test := testCases[x]
t.Run(test.name, func(t *testing.T) {
if !testhelpers.CheckValidConfig(&test.config.ConnectionDetails) {
} {
t.Run(tc.name, func(t *testing.T) {
if !testhelpers.CheckValidConfig(&tc.config.ConnectionDetails) {
t.Skip("database not configured skipping test")
}
dbConn, err := testhelpers.ConnectToDatabase(test.config)
if err != nil {
t.Fatal(err)
}
dbConn, err := testhelpers.ConnectToDatabase(tc.config)
require.NoError(t, err)
if test.seedDB != nil {
err = test.seedDB(false)
if err != nil {
t.Fatal(err)
}
if tc.seedDB != nil {
require.NoError(t, tc.seedDB(false))
}
exchange.ResetExchangeCache()
testFile := filepath.Join("..", "..", "..", "testdata", "binance_BTCUSDT_24h_2019_01_01_2020_01_01.csv")
count, err := InsertFromCSV(testExchanges[0].Name, "BTC", "USDT", 86400, "spot", testFile)
if err != nil {
t.Fatal(err)
}
if count != 365 {
t.Fatalf("expected 365 results to be inserted received: %v", count)
}
require.NoError(t, err)
assert.Equal(t, uint64(365), count)
err = testhelpers.CloseDatabase(dbConn)
if err != nil {
t.Error(err)
}
assert.NoError(t, testhelpers.CloseDatabase(dbConn))
})
}
}
func TestSeries(t *testing.T) {
testCases := []struct {
for _, tc := range []struct {
name string
config *database.Config
seedDB func(includeOHLCVData bool) error
@@ -210,46 +170,30 @@ func TestSeries(t *testing.T) {
},
seedDB: seedDB,
},
}
for x := range testCases {
test := testCases[x]
t.Run(test.name, func(t *testing.T) {
if !testhelpers.CheckValidConfig(&test.config.ConnectionDetails) {
} {
t.Run(tc.name, func(t *testing.T) {
if !testhelpers.CheckValidConfig(&tc.config.ConnectionDetails) {
t.Skip("database not configured skipping test")
}
dbConn, err := testhelpers.ConnectToDatabase(test.config)
if err != nil {
t.Fatal(err)
}
dbConn, err := testhelpers.ConnectToDatabase(tc.config)
require.NoError(t, err)
if test.seedDB != nil {
err = test.seedDB(true)
if err != nil {
t.Fatal(err)
}
if tc.seedDB != nil {
require.NoError(t, tc.seedDB(true))
}
start := time.Date(2019, 1, 1, 0, 0, 0, 0, time.UTC)
end := time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC)
ret, err := Series(testExchanges[0].Name,
"BTC", "USDT",
86400, "spot",
start, end)
if err != nil {
t.Fatal(err)
}
if len(ret.Candles) != 365 {
t.Errorf("unexpected number of results received: %v", len(ret.Candles))
}
ret, err := Series(testExchanges[0].Name, "BTC", "USDT", 86400, "spot", start, end)
require.NoError(t, err)
assert.Equal(t, 365, len(ret.Candles))
_, err = Series("", "", "", 0, "", start, end)
require.ErrorIs(t, err, errInvalidInput)
_, err = Series(testExchanges[0].Name, "BTC", "MOON", 864000, "spot", start, end)
require.ErrorIs(t, err, ErrNoCandleDataFound)
assert.ErrorIs(t, err, ErrNoCandleDataFound)
assert.NoError(t, testhelpers.CloseDatabase(dbConn))
})
}

View File

@@ -10,6 +10,7 @@ import (
"github.com/gofrs/uuid"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/thrasher-corp/gocryptotrader/currency"
"github.com/thrasher-corp/gocryptotrader/database"
"github.com/thrasher-corp/gocryptotrader/database/drivers"
@@ -71,7 +72,8 @@ func seedDB() error {
}
func TestDataHistoryJob(t *testing.T) {
testCases := []struct {
t.Parallel()
for _, tc := range []struct {
name string
config *database.Config
seedDB func() error
@@ -91,31 +93,22 @@ func TestDataHistoryJob(t *testing.T) {
},
seedDB: seedDB,
},
}
for x := range testCases {
test := testCases[x]
t.Run(test.name, func(t *testing.T) {
if !testhelpers.CheckValidConfig(&test.config.ConnectionDetails) {
} {
t.Run(tc.name, func(t *testing.T) {
t.Parallel()
if !testhelpers.CheckValidConfig(&tc.config.ConnectionDetails) {
t.Skip("database not configured skipping test")
}
dbConn, err := testhelpers.ConnectToDatabase(test.config)
if err != nil {
t.Fatal(err)
}
dbConn, err := testhelpers.ConnectToDatabase(tc.config)
require.NoError(t, err)
if test.seedDB != nil {
err = test.seedDB()
if err != nil {
t.Error(err)
}
if tc.seedDB != nil {
require.NoError(t, tc.seedDB())
}
db, err := Setup(dbConn)
if err != nil {
log.Fatal(err)
}
require.NoError(t, err)
var jerberinos, jerberoos []*DataHistoryJob
for i := range 20 {
@@ -134,9 +127,8 @@ func TestDataHistoryJob(t *testing.T) {
})
}
err = db.Upsert(jerberinos...)
if err != nil {
t.Fatal(err)
}
require.NoError(t, err)
// insert the same jerbs to test conflict resolution
for i := range 20 {
uu, _ := uuid.NewV4()
@@ -158,103 +150,66 @@ func TestDataHistoryJob(t *testing.T) {
jerberoos = append(jerberoos, j)
}
err = db.Upsert(jerberoos...)
if err != nil {
t.Fatal(err)
}
require.NoError(t, err)
_, err = db.GetJobsBetween(time.Now(), time.Now().Add(time.Hour))
if err != nil {
t.Fatal(err)
}
require.NoError(t, err)
resp, err := db.GetByNickName("TestDataHistoryJob19")
if err != nil {
t.Fatal(err)
}
if !strings.EqualFold(resp.Nickname, "TestDataHistoryJob19") {
t.Fatal("the database no longer functions")
}
require.NoError(t, err)
assert.True(t, strings.EqualFold("TestDataHistoryJob19", resp.Nickname))
results, err := db.GetAllIncompleteJobsAndResults()
assert.NoError(t, err)
if len(results) != 19 {
t.Errorf("expected 19, received %v", len(results))
}
require.NoError(t, err)
assert.Len(t, results, 19)
jerb, err := db.GetJobAndAllResults(jerberoos[0].Nickname)
if err != nil {
t.Fatal(err)
}
if !strings.EqualFold(jerb.Nickname, jerberoos[0].Nickname) {
t.Errorf("expected %v, received %v", jerb.Nickname, jerberoos[0].Nickname)
}
require.NoError(t, err)
assert.True(t, strings.EqualFold(jerberoos[0].Nickname, jerb.Nickname))
results, err = db.GetJobsBetween(time.Now().Add(-time.Hour), time.Now())
assert.NoError(t, err)
if len(results) != 20 {
t.Errorf("expected 20, received %v", len(results))
}
require.NoError(t, err)
require.Len(t, results, 20)
jerb, err = db.GetJobAndAllResults(results[0].Nickname)
assert.NoError(t, err)
require.NoError(t, err)
if !strings.EqualFold(jerb.Nickname, results[0].Nickname) {
t.Errorf("expected %v, received %v", jerb.Nickname, jerberoos[0].Nickname)
}
assert.Equal(t, jerb.Nickname, results[0].Nickname)
err = db.SetRelationshipByID(results[0].ID, results[1].ID, 1337)
assert.NoError(t, err)
require.NoError(t, err)
jerb, err = db.GetByID(results[1].ID)
assert.NoError(t, err)
if jerb.Status != 1337 {
t.Error("expected 1337")
}
require.NoError(t, err)
assert.Equal(t, int64(1337), jerb.Status)
rel, err := db.GetRelatedUpcomingJobs(results[0].Nickname)
assert.NoError(t, err)
if len(rel) != 1 {
t.Fatal("expected 1")
}
if rel[0].ID != results[1].ID {
t.Errorf("received %v expected %v", rel[0].ID, results[1].ID)
}
require.NoError(t, err)
require.Len(t, rel, 1)
assert.Equal(t, rel[0].ID, results[1].ID)
err = db.SetRelationshipByID(results[0].ID, results[2].ID, 1337)
assert.NoError(t, err)
rel, err = db.GetRelatedUpcomingJobs(results[0].Nickname)
assert.NoError(t, err)
if len(rel) != 2 {
t.Fatal("expected 2")
}
for i := range rel {
if rel[i].ID != results[1].ID && rel[i].ID != results[2].ID {
t.Errorf("received %v expected %v or %v", rel[i].ID, results[1].ID, results[2].ID)
}
}
require.NoError(t, err)
require.Len(t, rel, 2)
expectedIDs := []string{results[1].ID, results[2].ID}
actualIDs := []string{rel[0].ID, rel[1].ID}
assert.ElementsMatch(t, expectedIDs, actualIDs)
jerb, err = db.GetPrerequisiteJob(results[1].Nickname)
assert.NoError(t, err)
require.NoError(t, err)
if jerb.ID != results[0].ID {
t.Errorf("received %v expected %v", jerb.ID, results[0].ID)
}
assert.Equal(t, jerb.ID, results[0].ID)
jerb, err = db.GetPrerequisiteJob(results[2].Nickname)
assert.NoError(t, err)
require.NoError(t, err)
if jerb.ID != results[0].ID {
t.Errorf("received %v expected %v", jerb.ID, results[0].ID)
}
assert.Equal(t, jerb.ID, results[0].ID)
err = db.SetRelationshipByNickname(results[4].Nickname, results[2].Nickname, 0)
assert.NoError(t, err)
require.NoError(t, err)
err = db.SetRelationshipByNickname(results[2].Nickname, results[2].Nickname, 0)
assert.ErrorIs(t, err, errCannotSetSamePrerequisite)
@@ -265,18 +220,12 @@ func TestDataHistoryJob(t *testing.T) {
// ensure only one prerequisite can be associated at once
// after setting the prerequisite twice
rel, err = db.GetRelatedUpcomingJobs(results[4].Nickname)
assert.NoError(t, err)
if len(rel) != 0 {
t.Errorf("received %v expected %v", len(rel), 0)
}
require.NoError(t, err)
assert.Empty(t, rel)
rel, err = db.GetRelatedUpcomingJobs(results[3].Nickname)
assert.NoError(t, err)
if len(rel) != 1 {
t.Errorf("received %v expected %v", len(rel), 1)
}
require.NoError(t, err)
assert.Len(t, rel, 1)
err = testhelpers.CloseDatabase(dbConn)
assert.NoError(t, err)

View File

@@ -1,7 +1,6 @@
package datahistoryjobresult
import (
"database/sql"
"fmt"
"log"
"os"
@@ -9,6 +8,8 @@ import (
"time"
"github.com/gofrs/uuid"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/thrasher-corp/gocryptotrader/database"
"github.com/thrasher-corp/gocryptotrader/database/drivers"
"github.com/thrasher-corp/gocryptotrader/database/repository/exchange"
@@ -68,6 +69,7 @@ func seedDB() error {
}
func TestDataHistoryJob(t *testing.T) {
t.Parallel()
testCases := []struct {
name string
config *database.Config
@@ -90,52 +92,35 @@ func TestDataHistoryJob(t *testing.T) {
},
}
for x := range testCases {
test := testCases[x]
t.Run(test.name, func(t *testing.T) {
if !testhelpers.CheckValidConfig(&test.config.ConnectionDetails) {
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
t.Parallel()
if !testhelpers.CheckValidConfig(&tc.config.ConnectionDetails) {
t.Skip("database not configured skipping test")
}
dbConn, err := testhelpers.ConnectToDatabase(test.config)
if err != nil {
t.Fatal(err)
}
dbConn, err := testhelpers.ConnectToDatabase(tc.config)
require.NoError(t, err)
if test.seedDB != nil {
err = test.seedDB()
if err != nil {
t.Error(err)
}
if tc.seedDB != nil {
require.NoError(t, tc.seedDB())
}
db, err := Setup(dbConn)
if err != nil {
t.Fatal(err)
}
require.NoError(t, err)
// postgres requires job for tests to function
var id string
if test.name == "postgresql" {
var selectID *sql.Rows
selectID, err = db.sql.Query("select id from datahistoryjob where nickname = 'testdatahistoryjob1'")
if err != nil {
t.Fatal(err)
}
if tc.name == "postgresql" {
selectID, err := db.sql.Query("select id from datahistoryjob where nickname = 'testdatahistoryjob1'")
require.NoError(t, err)
defer func() {
err = selectID.Close()
if err != nil {
t.Fatal(err)
}
if selectID.Err() != nil {
t.Fatal(selectID.Err())
}
require.NoError(t, selectID.Close())
require.NoError(t, selectID.Err())
}()
selectID.Next()
err = selectID.Scan(&id)
if err != nil {
t.Error(err)
}
assert.NoError(t, err)
}
var resulterinos, resultaroos []*DataHistoryJobResult
@@ -152,9 +137,7 @@ func TestDataHistoryJob(t *testing.T) {
})
}
err = db.Upsert(resulterinos...)
if err != nil {
t.Fatal(err)
}
require.NoError(t, err)
// insert the same results to test conflict resolution
for i := range 20 {
uu, _ := uuid.NewV4()
@@ -174,30 +157,18 @@ func TestDataHistoryJob(t *testing.T) {
resultaroos = append(resultaroos, j)
}
err = db.Upsert(resultaroos...)
if err != nil {
t.Fatal(err)
}
require.NoError(t, err)
results, err := db.GetByJobID(id)
if err != nil {
t.Fatal(err)
}
if len(results) == 0 {
t.Error("expected job results")
}
require.NoError(t, err)
assert.NotEmpty(t, results)
results, err = db.GetJobResultsBetween(id, time.Now().Add(time.Hour*23), time.Now().Add(time.Hour*25))
if err != nil {
t.Fatal(err)
}
if len(results) == 0 {
t.Errorf("expected job result, received %v", len(results))
}
require.NoError(t, err)
assert.NotEmpty(t, results)
err = testhelpers.CloseDatabase(dbConn)
if err != nil {
t.Error(err)
}
assert.NoError(t, err)
})
}
}

View File

@@ -6,6 +6,8 @@ import (
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/thrasher-corp/gocryptotrader/database"
"github.com/thrasher-corp/gocryptotrader/database/drivers"
"github.com/thrasher-corp/gocryptotrader/database/testhelpers"
@@ -55,7 +57,8 @@ func TestMain(m *testing.M) {
}
func TestInsertMany(t *testing.T) {
testCases := []struct {
t.Parallel()
for _, tc := range []struct {
name string
config *database.Config
seedDB func() error
@@ -75,43 +78,30 @@ func TestInsertMany(t *testing.T) {
},
seedDB: seed,
},
}
for x := range testCases {
test := testCases[x]
t.Run(test.name, func(t *testing.T) {
if !testhelpers.CheckValidConfig(&test.config.ConnectionDetails) {
} {
t.Run(tc.name, func(t *testing.T) {
t.Parallel()
if !testhelpers.CheckValidConfig(&tc.config.ConnectionDetails) {
t.Skip("database not configured skipping test")
}
dbConn, err := testhelpers.ConnectToDatabase(test.config)
if err != nil {
t.Fatal(err)
dbConn, err := testhelpers.ConnectToDatabase(tc.config)
require.NoError(t, err)
if tc.seedDB != nil {
require.NoError(t, tc.seedDB())
}
if test.seedDB != nil {
err = test.seedDB()
if err != nil {
t.Error(err)
}
}
err = InsertMany(testExchanges)
if err != nil {
t.Fatal(err)
}
require.NoError(t, InsertMany(testExchanges))
err = testhelpers.CloseDatabase(dbConn)
if err != nil {
t.Error(err)
}
assert.NoError(t, err)
})
}
}
func TestOneAndOneByUUID(t *testing.T) {
testCases := []struct {
for _, tc := range []struct {
name string
config *database.Config
seedDB func() error
@@ -131,45 +121,27 @@ func TestOneAndOneByUUID(t *testing.T) {
},
seedDB: seed,
},
}
for x := range testCases {
test := testCases[x]
t.Run(test.name, func(t *testing.T) {
if !testhelpers.CheckValidConfig(&test.config.ConnectionDetails) {
} {
t.Run(tc.name, func(t *testing.T) {
if !testhelpers.CheckValidConfig(&tc.config.ConnectionDetails) {
t.Skip("database not configured skipping test")
}
dbConn, err := testhelpers.ConnectToDatabase(test.config)
if err != nil {
t.Fatal(err)
}
dbConn, err := testhelpers.ConnectToDatabase(tc.config)
require.NoError(t, err)
if test.seedDB != nil {
err = test.seedDB()
if err != nil {
t.Error(err)
}
if tc.seedDB != nil {
require.NoError(t, tc.seedDB())
}
ret, err := One("one")
if err != nil {
t.Fatal(err)
}
require.NoError(t, err)
ret2, err := OneByUUID(ret.UUID)
if err != nil {
t.Fatal(err)
}
require.NoError(t, err)
if ret.Name != ret2.Name {
t.Fatalf("unexpected value received: %v", ret2.Name)
}
err = testhelpers.CloseDatabase(dbConn)
if err != nil {
t.Error(err)
}
assert.Equal(t, ret.Name, ret2.Name)
assert.NoError(t, testhelpers.CloseDatabase(dbConn))
})
}
}

View File

@@ -3,11 +3,13 @@ package repository
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/thrasher-corp/gocryptotrader/database"
)
func TestGetSQLDialect(t *testing.T) {
testCases := []struct {
for _, tc := range []struct {
driver string
expectedReturn string
}{
@@ -27,22 +29,13 @@ func TestGetSQLDialect(t *testing.T) {
"invalid",
database.DBInvalidDriver,
},
}
for x := range testCases {
test := testCases[x]
t.Run(test.driver, func(t *testing.T) {
} {
t.Run(tc.driver, func(t *testing.T) {
cfg := &database.Config{
Driver: test.driver,
}
err := database.DB.SetConfig(cfg)
if err != nil {
t.Error(err)
}
ret := GetSQLDialect()
if ret != test.expectedReturn {
t.Fatalf("unexpected return: %v", ret)
Driver: tc.driver,
}
require.NoError(t, database.DB.SetConfig(cfg))
assert.Equal(t, tc.expectedReturn, GetSQLDialect())
})
}
}

View File

@@ -7,6 +7,8 @@ import (
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/thrasher-corp/gocryptotrader/database"
"github.com/thrasher-corp/gocryptotrader/database/drivers"
"github.com/thrasher-corp/gocryptotrader/database/testhelpers"
@@ -43,7 +45,8 @@ func TestMain(m *testing.M) {
}
func TestScript(t *testing.T) {
testCases := []struct {
t.Parallel()
for _, tc := range []struct {
name string
config *database.Config
runner func()
@@ -67,29 +70,22 @@ func TestScript(t *testing.T) {
nil,
nil,
},
}
for x := range testCases {
test := testCases[x]
t.Run(test.name, func(t *testing.T) {
if !testhelpers.CheckValidConfig(&test.config.ConnectionDetails) {
} {
t.Run(tc.name, func(t *testing.T) {
t.Parallel()
if !testhelpers.CheckValidConfig(&tc.config.ConnectionDetails) {
t.Skip("database not configured skipping test")
}
dbConn, err := testhelpers.ConnectToDatabase(test.config)
if err != nil {
t.Fatal(err)
dbConn, err := testhelpers.ConnectToDatabase(tc.config)
require.NoError(t, err)
if tc.runner != nil {
tc.runner()
}
if test.runner != nil {
test.runner()
}
if test.closer != nil {
err = test.closer(dbConn)
if err != nil {
t.Log(err)
}
if tc.closer != nil {
assert.NoError(t, tc.closer(dbConn))
}
})
}

View File

@@ -9,6 +9,8 @@ import (
"time"
"github.com/gofrs/uuid"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/thrasher-corp/gocryptotrader/currency"
"github.com/thrasher-corp/gocryptotrader/database"
"github.com/thrasher-corp/gocryptotrader/database/drivers"
@@ -54,7 +56,8 @@ func TestMain(m *testing.M) {
}
func TestTrades(t *testing.T) {
testCases := []struct {
t.Parallel()
for _, tc := range []struct {
name string
config *database.Config
seedDB func() error
@@ -74,33 +77,22 @@ func TestTrades(t *testing.T) {
},
seedDB: seedDB,
},
}
for x := range testCases {
test := testCases[x]
t.Run(test.name, func(t *testing.T) {
if !testhelpers.CheckValidConfig(&test.config.ConnectionDetails) {
} {
t.Run(tc.name, func(t *testing.T) {
t.Parallel()
if !testhelpers.CheckValidConfig(&tc.config.ConnectionDetails) {
t.Skip("database not configured skipping test")
}
dbConn, err := testhelpers.ConnectToDatabase(test.config)
if err != nil {
t.Fatal(err)
}
dbConn, err := testhelpers.ConnectToDatabase(tc.config)
require.NoError(t, err)
if test.seedDB != nil {
err = test.seedDB()
if err != nil {
t.Error(err)
}
if tc.seedDB != nil {
require.NoError(t, tc.seedDB())
}
tradeSQLTester(t)
err = testhelpers.CloseDatabase(dbConn)
if err != nil {
t.Error(err)
}
assert.NoError(t, testhelpers.CloseDatabase(dbConn))
})
}
}

View File

@@ -6,6 +6,8 @@ import (
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/thrasher-corp/gocryptotrader/database"
"github.com/thrasher-corp/gocryptotrader/database/drivers"
)
@@ -31,11 +33,11 @@ func TestMain(m *testing.M) {
}
func TestDatabaseConnect(t *testing.T) {
testCases := []struct {
name string
config *database.Config
closer func(dbConn *database.Instance) error
output any
for _, tc := range []struct {
name string
config *database.Config
closer func(dbConn *database.Instance) error
expError error
}{
{
"SQLite",
@@ -60,35 +62,18 @@ func TestDatabaseConnect(t *testing.T) {
{
name: "Postgres",
config: PostgresTestDatabase,
output: nil,
},
}
for x := range testCases {
test := testCases[x]
t.Run(test.name, func(t *testing.T) {
if !CheckValidConfig(&test.config.ConnectionDetails) {
} {
t.Run(tc.name, func(t *testing.T) {
if !CheckValidConfig(&tc.config.ConnectionDetails) {
t.Skip("database not configured skipping test")
}
dbConn, err := ConnectToDatabase(test.config)
if err != nil {
switch v := test.output.(type) {
case error:
if v.Error() != err.Error() {
t.Fatal(err)
}
return
default:
break
}
}
dbConn, err := ConnectToDatabase(tc.config)
require.ErrorIs(t, err, tc.expError)
if test.closer != nil {
err = test.closer(dbConn)
if err != nil {
t.Log(err)
}
if tc.closer != nil {
assert.NoError(t, tc.closer(dbConn))
}
})
}