package exchange import ( "fmt" "os" "path/filepath" "testing" "github.com/thrasher-corp/gocryptotrader/database" "github.com/thrasher-corp/gocryptotrader/database/drivers" "github.com/thrasher-corp/gocryptotrader/database/testhelpers" ) var ( verbose = false testExchanges = []Details{ { Name: "one", }, { Name: "two", }, { Name: "three", }, } ) func TestMain(m *testing.M) { if verbose { err := testhelpers.EnableVerboseTestOutput() if err != nil { fmt.Printf("failed to enable verbose test output: %v", err) os.Exit(1) } } var err error testhelpers.PostgresTestDatabase = testhelpers.GetConnectionDetails() testhelpers.TempDir, err = os.MkdirTemp("", "gct-temp") if err != nil { fmt.Printf("failed to create temp file: %v", err) os.Exit(1) } t := m.Run() err = os.RemoveAll(testhelpers.TempDir) if err != nil { fmt.Printf("Failed to remove temp db file: %v", err) } os.Exit(t) } func TestInsertMany(t *testing.T) { testCases := []struct { name string config *database.Config seedDB func() error runner func(t *testing.T) closer func(dbConn *database.Instance) error }{ { name: "postgresql", config: testhelpers.PostgresTestDatabase, seedDB: seed, }, { name: "SQLite", config: &database.Config{ Driver: database.DBSQLite3, ConnectionDetails: drivers.ConnectionDetails{Database: "./testdb"}, }, seedDB: seed, }, } for x := range testCases { test := testCases[x] t.Run(test.name, func(t *testing.T) { if !testhelpers.CheckValidConfig(&test.config.ConnectionDetails) { t.Skip("database not configured skipping test") } dbConn, err := testhelpers.ConnectToDatabase(test.config) if err != nil { t.Fatal(err) } if test.seedDB != nil { err = test.seedDB() if err != nil { t.Error(err) } } err = InsertMany(testExchanges) if err != nil { t.Fatal(err) } err = testhelpers.CloseDatabase(dbConn) if err != nil { t.Error(err) } }) } } func TestOneAndOneByUUID(t *testing.T) { testCases := []struct { name string config *database.Config seedDB func() error runner func(t *testing.T) closer func(dbConn *database.Instance) error }{ { name: "postgresql", config: testhelpers.PostgresTestDatabase, seedDB: seed, }, { name: "SQLite", config: &database.Config{ Driver: database.DBSQLite3, ConnectionDetails: drivers.ConnectionDetails{Database: "./testdb"}, }, seedDB: seed, }, } for x := range testCases { test := testCases[x] t.Run(test.name, func(t *testing.T) { if !testhelpers.CheckValidConfig(&test.config.ConnectionDetails) { t.Skip("database not configured skipping test") } dbConn, err := testhelpers.ConnectToDatabase(test.config) if err != nil { t.Fatal(err) } if test.seedDB != nil { err = test.seedDB() if err != nil { t.Error(err) } } ret, err := One("one") if err != nil { t.Fatal(err) } ret2, err := OneByUUID(ret.UUID) if err != nil { t.Fatal(err) } if ret.Name != ret2.Name { t.Fatalf("unexpected value received: %v", ret2.Name) } err = testhelpers.CloseDatabase(dbConn) if err != nil { t.Error(err) } }) } } func seed() error { return InsertMany(testExchanges) } func TestLoadCSV(t *testing.T) { testData := filepath.Join("..", "..", "..", "testdata", "exchangelist.csv") if _, err := LoadCSV(testData); err != nil { t.Fatal(err) } }