mirror of
https://github.com/VinGarcia/ksql.git
synced 2025-04-28 05:32:47 +00:00
Refactor tests so the error descriptions are more clear
This commit is contained in:
parent
ea4f56fadd
commit
a51e9730c3
278
adapters_test.go
278
adapters_test.go
@ -94,15 +94,17 @@ func RunTestsForAdapter(t *testing.T, config testConfig) {
|
|||||||
return db, close
|
return db, close
|
||||||
}
|
}
|
||||||
|
|
||||||
QueryTest(t, config, newDBAdapter)
|
t.Run(config.adapterName+"."+config.driver, func(t *testing.T) {
|
||||||
QueryOneTest(t, config, newDBAdapter)
|
QueryTest(t, config, newDBAdapter)
|
||||||
QueryOneTest(t, config, newDBAdapter)
|
QueryOneTest(t, config, newDBAdapter)
|
||||||
InsertTest(t, config, newDBAdapter)
|
QueryOneTest(t, config, newDBAdapter)
|
||||||
DeleteTest(t, config, newDBAdapter)
|
InsertTest(t, config, newDBAdapter)
|
||||||
UpdateTest(t, config, newDBAdapter)
|
DeleteTest(t, config, newDBAdapter)
|
||||||
QueryChunksTest(t, config, newDBAdapter)
|
UpdateTest(t, config, newDBAdapter)
|
||||||
TransactionTest(t, config, newDBAdapter)
|
QueryChunksTest(t, config, newDBAdapter)
|
||||||
ScanRowsTest(t, config, newDBAdapter)
|
TransactionTest(t, config, newDBAdapter)
|
||||||
|
ScanRowsTest(t, config, newDBAdapter)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func QueryTest(
|
func QueryTest(
|
||||||
@ -110,7 +112,7 @@ func QueryTest(
|
|||||||
config testConfig,
|
config testConfig,
|
||||||
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
||||||
) {
|
) {
|
||||||
t.Run(config.driver, func(t *testing.T) {
|
t.Run("QueryTest", func(t *testing.T) {
|
||||||
variations := []struct {
|
variations := []struct {
|
||||||
desc string
|
desc string
|
||||||
queryPrefix string
|
queryPrefix string
|
||||||
@ -506,7 +508,7 @@ func QueryOneTest(
|
|||||||
config testConfig,
|
config testConfig,
|
||||||
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
||||||
) {
|
) {
|
||||||
t.Run(config.driver, func(t *testing.T) {
|
t.Run("QueryOne", func(t *testing.T) {
|
||||||
variations := []struct {
|
variations := []struct {
|
||||||
desc string
|
desc string
|
||||||
queryPrefix string
|
queryPrefix string
|
||||||
@ -685,7 +687,7 @@ func InsertTest(
|
|||||||
config testConfig,
|
config testConfig,
|
||||||
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
||||||
) {
|
) {
|
||||||
t.Run(config.driver, func(t *testing.T) {
|
t.Run("Insert", func(t *testing.T) {
|
||||||
t.Run("success cases", func(t *testing.T) {
|
t.Run("success cases", func(t *testing.T) {
|
||||||
t.Run("single primary key tables", func(t *testing.T) {
|
t.Run("single primary key tables", func(t *testing.T) {
|
||||||
err := createTables(config.driver)
|
err := createTables(config.driver)
|
||||||
@ -1021,7 +1023,7 @@ func DeleteTest(
|
|||||||
config testConfig,
|
config testConfig,
|
||||||
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
||||||
) {
|
) {
|
||||||
t.Run(config.driver, func(t *testing.T) {
|
t.Run("Delete", func(t *testing.T) {
|
||||||
err := createTables(config.driver)
|
err := createTables(config.driver)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal("could not create test table!, reason:", err.Error())
|
t.Fatal("could not create test table!, reason:", err.Error())
|
||||||
@ -1323,7 +1325,7 @@ func UpdateTest(
|
|||||||
config testConfig,
|
config testConfig,
|
||||||
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
||||||
) {
|
) {
|
||||||
t.Run(config.driver, func(t *testing.T) {
|
t.Run("Update", func(t *testing.T) {
|
||||||
err := createTables(config.driver)
|
err := createTables(config.driver)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal("could not create test table!, reason:", err.Error())
|
t.Fatal("could not create test table!, reason:", err.Error())
|
||||||
@ -1508,7 +1510,7 @@ func QueryChunksTest(
|
|||||||
config testConfig,
|
config testConfig,
|
||||||
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
||||||
) {
|
) {
|
||||||
t.Run(config.driver, func(t *testing.T) {
|
t.Run("QueryChunks", func(t *testing.T) {
|
||||||
variations := []struct {
|
variations := []struct {
|
||||||
desc string
|
desc string
|
||||||
queryPrefix string
|
queryPrefix string
|
||||||
@ -2022,7 +2024,7 @@ func TransactionTest(
|
|||||||
config testConfig,
|
config testConfig,
|
||||||
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
||||||
) {
|
) {
|
||||||
t.Run(config.driver, func(t *testing.T) {
|
t.Run("Transaction", func(t *testing.T) {
|
||||||
t.Run("should query a single row correctly", func(t *testing.T) {
|
t.Run("should query a single row correctly", func(t *testing.T) {
|
||||||
err := createTables(config.driver)
|
err := createTables(config.driver)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -2094,134 +2096,136 @@ func ScanRowsTest(
|
|||||||
config testConfig,
|
config testConfig,
|
||||||
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
||||||
) {
|
) {
|
||||||
t.Run("should scan users correctly", func(t *testing.T) {
|
t.Run("ScanRows", func(t *testing.T) {
|
||||||
err := createTables(config.driver)
|
t.Run("should scan users correctly", func(t *testing.T) {
|
||||||
if err != nil {
|
err := createTables(config.driver)
|
||||||
t.Fatal("could not create test table!, reason:", err.Error())
|
if err != nil {
|
||||||
}
|
t.Fatal("could not create test table!, reason:", err.Error())
|
||||||
|
|
||||||
dialect := supportedDialects[config.driver]
|
|
||||||
ctx := context.TODO()
|
|
||||||
db, closer := newDBAdapter(t)
|
|
||||||
defer closer.Close()
|
|
||||||
c := newTestDB(db, config.driver)
|
|
||||||
_ = c.Insert(ctx, UsersTable, &User{Name: "User1", Age: 22})
|
|
||||||
_ = c.Insert(ctx, UsersTable, &User{Name: "User2", Age: 14})
|
|
||||||
_ = c.Insert(ctx, UsersTable, &User{Name: "User3", Age: 43})
|
|
||||||
|
|
||||||
rows, err := db.QueryContext(ctx, "SELECT * FROM users WHERE name='User2'")
|
|
||||||
assert.Equal(t, nil, err)
|
|
||||||
defer rows.Close()
|
|
||||||
|
|
||||||
assert.Equal(t, true, rows.Next())
|
|
||||||
|
|
||||||
var u User
|
|
||||||
err = scanRows(dialect, rows, &u)
|
|
||||||
assert.Equal(t, nil, err)
|
|
||||||
|
|
||||||
assert.Equal(t, "User2", u.Name)
|
|
||||||
assert.Equal(t, 14, u.Age)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("should ignore extra columns from query", func(t *testing.T) {
|
|
||||||
err := createTables(config.driver)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal("could not create test table!, reason:", err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
dialect := supportedDialects[config.driver]
|
|
||||||
ctx := context.TODO()
|
|
||||||
db, closer := newDBAdapter(t)
|
|
||||||
defer closer.Close()
|
|
||||||
c := newTestDB(db, config.driver)
|
|
||||||
_ = c.Insert(ctx, UsersTable, &User{Name: "User1", Age: 22})
|
|
||||||
|
|
||||||
rows, err := db.QueryContext(ctx, "SELECT * FROM users WHERE name='User1'")
|
|
||||||
assert.Equal(t, nil, err)
|
|
||||||
defer rows.Close()
|
|
||||||
|
|
||||||
assert.Equal(t, true, rows.Next())
|
|
||||||
|
|
||||||
var user struct {
|
|
||||||
ID int `ksql:"id"`
|
|
||||||
Age int `ksql:"age"`
|
|
||||||
|
|
||||||
// Omitted for testing purposes:
|
|
||||||
// Name string `ksql:"name"`
|
|
||||||
}
|
|
||||||
err = scanRows(dialect, rows, &user)
|
|
||||||
assert.Equal(t, nil, err)
|
|
||||||
|
|
||||||
assert.Equal(t, 22, user.Age)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("should report error for closed rows", func(t *testing.T) {
|
|
||||||
err := createTables(config.driver)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal("could not create test table!, reason:", err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
dialect := supportedDialects[config.driver]
|
|
||||||
ctx := context.TODO()
|
|
||||||
db, closer := newDBAdapter(t)
|
|
||||||
defer closer.Close()
|
|
||||||
|
|
||||||
rows, err := db.QueryContext(ctx, "SELECT * FROM users WHERE name='User2'")
|
|
||||||
assert.Equal(t, nil, err)
|
|
||||||
|
|
||||||
var u User
|
|
||||||
err = rows.Close()
|
|
||||||
assert.Equal(t, nil, err)
|
|
||||||
err = scanRows(dialect, rows, &u)
|
|
||||||
assert.NotEqual(t, nil, err)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("should report if record is not a pointer", func(t *testing.T) {
|
|
||||||
err := createTables(config.driver)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal("could not create test table!, reason:", err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
dialect := supportedDialects[config.driver]
|
|
||||||
ctx := context.TODO()
|
|
||||||
db, closer := newDBAdapter(t)
|
|
||||||
defer closer.Close()
|
|
||||||
|
|
||||||
rows, err := db.QueryContext(ctx, "SELECT * FROM users WHERE name='User2'")
|
|
||||||
tt.AssertNoErr(t, err)
|
|
||||||
// Some drivers will hang forever if Next() is not called:
|
|
||||||
defer func() {
|
|
||||||
for rows.Next() {
|
|
||||||
}
|
}
|
||||||
}()
|
|
||||||
|
|
||||||
var u User
|
dialect := supportedDialects[config.driver]
|
||||||
err = scanRows(dialect, rows, u)
|
ctx := context.TODO()
|
||||||
tt.AssertErrContains(t, err, "ksql", "expected", "pointer to struct", "User")
|
db, closer := newDBAdapter(t)
|
||||||
})
|
defer closer.Close()
|
||||||
|
c := newTestDB(db, config.driver)
|
||||||
|
_ = c.Insert(ctx, UsersTable, &User{Name: "User1", Age: 22})
|
||||||
|
_ = c.Insert(ctx, UsersTable, &User{Name: "User2", Age: 14})
|
||||||
|
_ = c.Insert(ctx, UsersTable, &User{Name: "User3", Age: 43})
|
||||||
|
|
||||||
t.Run("should report if record is not a pointer to struct", func(t *testing.T) {
|
rows, err := db.QueryContext(ctx, "SELECT * FROM users WHERE name='User2'")
|
||||||
err := createTables(config.driver)
|
assert.Equal(t, nil, err)
|
||||||
if err != nil {
|
defer rows.Close()
|
||||||
t.Fatal("could not create test table!, reason:", err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
dialect := supportedDialects[config.driver]
|
assert.Equal(t, true, rows.Next())
|
||||||
ctx := context.TODO()
|
|
||||||
db, closer := newDBAdapter(t)
|
|
||||||
defer closer.Close()
|
|
||||||
|
|
||||||
rows, err := db.QueryContext(ctx, "SELECT * FROM users WHERE name='User2'")
|
var u User
|
||||||
tt.AssertNoErr(t, err)
|
err = scanRows(dialect, rows, &u)
|
||||||
// Some drivers will hang forever if Next() is not called:
|
assert.Equal(t, nil, err)
|
||||||
defer func() {
|
|
||||||
for rows.Next() {
|
assert.Equal(t, "User2", u.Name)
|
||||||
|
assert.Equal(t, 14, u.Age)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("should ignore extra columns from query", func(t *testing.T) {
|
||||||
|
err := createTables(config.driver)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal("could not create test table!, reason:", err.Error())
|
||||||
}
|
}
|
||||||
}()
|
|
||||||
|
|
||||||
var u map[string]interface{}
|
dialect := supportedDialects[config.driver]
|
||||||
err = scanRows(dialect, rows, &u)
|
ctx := context.TODO()
|
||||||
tt.AssertErrContains(t, err, "ksql", "expected", "pointer to struct", "map[string]interface")
|
db, closer := newDBAdapter(t)
|
||||||
|
defer closer.Close()
|
||||||
|
c := newTestDB(db, config.driver)
|
||||||
|
_ = c.Insert(ctx, UsersTable, &User{Name: "User1", Age: 22})
|
||||||
|
|
||||||
|
rows, err := db.QueryContext(ctx, "SELECT * FROM users WHERE name='User1'")
|
||||||
|
assert.Equal(t, nil, err)
|
||||||
|
defer rows.Close()
|
||||||
|
|
||||||
|
assert.Equal(t, true, rows.Next())
|
||||||
|
|
||||||
|
var user struct {
|
||||||
|
ID int `ksql:"id"`
|
||||||
|
Age int `ksql:"age"`
|
||||||
|
|
||||||
|
// Omitted for testing purposes:
|
||||||
|
// Name string `ksql:"name"`
|
||||||
|
}
|
||||||
|
err = scanRows(dialect, rows, &user)
|
||||||
|
assert.Equal(t, nil, err)
|
||||||
|
|
||||||
|
assert.Equal(t, 22, user.Age)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("should report error for closed rows", func(t *testing.T) {
|
||||||
|
err := createTables(config.driver)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal("could not create test table!, reason:", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
dialect := supportedDialects[config.driver]
|
||||||
|
ctx := context.TODO()
|
||||||
|
db, closer := newDBAdapter(t)
|
||||||
|
defer closer.Close()
|
||||||
|
|
||||||
|
rows, err := db.QueryContext(ctx, "SELECT * FROM users WHERE name='User2'")
|
||||||
|
assert.Equal(t, nil, err)
|
||||||
|
|
||||||
|
var u User
|
||||||
|
err = rows.Close()
|
||||||
|
assert.Equal(t, nil, err)
|
||||||
|
err = scanRows(dialect, rows, &u)
|
||||||
|
assert.NotEqual(t, nil, err)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("should report if record is not a pointer", func(t *testing.T) {
|
||||||
|
err := createTables(config.driver)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal("could not create test table!, reason:", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
dialect := supportedDialects[config.driver]
|
||||||
|
ctx := context.TODO()
|
||||||
|
db, closer := newDBAdapter(t)
|
||||||
|
defer closer.Close()
|
||||||
|
|
||||||
|
rows, err := db.QueryContext(ctx, "SELECT * FROM users WHERE name='User2'")
|
||||||
|
tt.AssertNoErr(t, err)
|
||||||
|
// Some drivers will hang forever if Next() is not called:
|
||||||
|
defer func() {
|
||||||
|
for rows.Next() {
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
var u User
|
||||||
|
err = scanRows(dialect, rows, u)
|
||||||
|
tt.AssertErrContains(t, err, "ksql", "expected", "pointer to struct", "User")
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("should report if record is not a pointer to struct", func(t *testing.T) {
|
||||||
|
err := createTables(config.driver)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal("could not create test table!, reason:", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
dialect := supportedDialects[config.driver]
|
||||||
|
ctx := context.TODO()
|
||||||
|
db, closer := newDBAdapter(t)
|
||||||
|
defer closer.Close()
|
||||||
|
|
||||||
|
rows, err := db.QueryContext(ctx, "SELECT * FROM users WHERE name='User2'")
|
||||||
|
tt.AssertNoErr(t, err)
|
||||||
|
// Some drivers will hang forever if Next() is not called:
|
||||||
|
defer func() {
|
||||||
|
for rows.Next() {
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
var u map[string]interface{}
|
||||||
|
err = scanRows(dialect, rows, &u)
|
||||||
|
tt.AssertErrContains(t, err, "ksql", "expected", "pointer to struct", "map[string]interface")
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user