mirror of
https://github.com/VinGarcia/ksql.git
synced 2025-05-06 07:31:06 +00:00
Refactor TestTransaction() so its decoupled from the adapters
This commit is contained in:
parent
90f63e5f14
commit
cea28ace2b
144
ksql_test.go
144
ksql_test.go
@ -2069,74 +2069,88 @@ func QueryChunksTest(
|
|||||||
|
|
||||||
func TestTransaction(t *testing.T) {
|
func TestTransaction(t *testing.T) {
|
||||||
for _, config := range supportedConfigs {
|
for _, config := range supportedConfigs {
|
||||||
t.Run(config.driver, func(t *testing.T) {
|
TransactionTest(t,
|
||||||
t.Run("should query a single row correctly", func(t *testing.T) {
|
config,
|
||||||
err := createTables(config.driver)
|
func(t *testing.T) (DBAdapter, io.Closer) {
|
||||||
if err != nil {
|
db, close := connectDB(t, config)
|
||||||
t.Fatal("could not create test table!, reason:", err.Error())
|
return db, close
|
||||||
}
|
},
|
||||||
|
)
|
||||||
db, closer := connectDB(t, config)
|
|
||||||
defer closer.Close()
|
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, config.driver)
|
|
||||||
|
|
||||||
_ = c.Insert(ctx, UsersTable, &User{Name: "User1"})
|
|
||||||
_ = c.Insert(ctx, UsersTable, &User{Name: "User2"})
|
|
||||||
|
|
||||||
var users []User
|
|
||||||
err = c.Transaction(ctx, func(db Provider) error {
|
|
||||||
db.Query(ctx, &users, "SELECT * FROM users ORDER BY id ASC")
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
assert.Equal(t, nil, err)
|
|
||||||
|
|
||||||
assert.Equal(t, 2, len(users))
|
|
||||||
assert.Equal(t, "User1", users[0].Name)
|
|
||||||
assert.Equal(t, "User2", users[1].Name)
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("should rollback when there are errors", func(t *testing.T) {
|
|
||||||
err := createTables(config.driver)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal("could not create test table!, reason:", err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
db, closer := connectDB(t, config)
|
|
||||||
defer closer.Close()
|
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
c := newTestDB(db, config.driver)
|
|
||||||
|
|
||||||
u1 := User{Name: "User1", Age: 42}
|
|
||||||
u2 := User{Name: "User2", Age: 42}
|
|
||||||
_ = c.Insert(ctx, UsersTable, &u1)
|
|
||||||
_ = c.Insert(ctx, UsersTable, &u2)
|
|
||||||
|
|
||||||
err = c.Transaction(ctx, func(db Provider) error {
|
|
||||||
err = db.Insert(ctx, UsersTable, &User{Name: "User3"})
|
|
||||||
assert.Equal(t, nil, err)
|
|
||||||
err = db.Insert(ctx, UsersTable, &User{Name: "User4"})
|
|
||||||
assert.Equal(t, nil, err)
|
|
||||||
_, err = db.Exec(ctx, "UPDATE users SET age = 22")
|
|
||||||
assert.Equal(t, nil, err)
|
|
||||||
|
|
||||||
return errors.New("fake-error")
|
|
||||||
})
|
|
||||||
assert.NotEqual(t, nil, err)
|
|
||||||
assert.Equal(t, "fake-error", err.Error())
|
|
||||||
|
|
||||||
var users []User
|
|
||||||
err = c.Query(ctx, &users, "SELECT * FROM users ORDER BY id ASC")
|
|
||||||
assert.Equal(t, nil, err)
|
|
||||||
|
|
||||||
assert.Equal(t, []User{u1, u2}, users)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TransactionTest(
|
||||||
|
t *testing.T,
|
||||||
|
config testConfig,
|
||||||
|
newDBAdapter func(t *testing.T) (DBAdapter, io.Closer),
|
||||||
|
) {
|
||||||
|
t.Run(config.driver, func(t *testing.T) {
|
||||||
|
t.Run("should query a single row correctly", func(t *testing.T) {
|
||||||
|
err := createTables(config.driver)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal("could not create test table!, reason:", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
db, closer := connectDB(t, config)
|
||||||
|
defer closer.Close()
|
||||||
|
|
||||||
|
ctx := context.Background()
|
||||||
|
c := newTestDB(db, config.driver)
|
||||||
|
|
||||||
|
_ = c.Insert(ctx, UsersTable, &User{Name: "User1"})
|
||||||
|
_ = c.Insert(ctx, UsersTable, &User{Name: "User2"})
|
||||||
|
|
||||||
|
var users []User
|
||||||
|
err = c.Transaction(ctx, func(db Provider) error {
|
||||||
|
db.Query(ctx, &users, "SELECT * FROM users ORDER BY id ASC")
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
assert.Equal(t, nil, err)
|
||||||
|
|
||||||
|
assert.Equal(t, 2, len(users))
|
||||||
|
assert.Equal(t, "User1", users[0].Name)
|
||||||
|
assert.Equal(t, "User2", users[1].Name)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("should rollback when there are errors", func(t *testing.T) {
|
||||||
|
err := createTables(config.driver)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal("could not create test table!, reason:", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
db, closer := connectDB(t, config)
|
||||||
|
defer closer.Close()
|
||||||
|
|
||||||
|
ctx := context.Background()
|
||||||
|
c := newTestDB(db, config.driver)
|
||||||
|
|
||||||
|
u1 := User{Name: "User1", Age: 42}
|
||||||
|
u2 := User{Name: "User2", Age: 42}
|
||||||
|
_ = c.Insert(ctx, UsersTable, &u1)
|
||||||
|
_ = c.Insert(ctx, UsersTable, &u2)
|
||||||
|
|
||||||
|
err = c.Transaction(ctx, func(db Provider) error {
|
||||||
|
err = db.Insert(ctx, UsersTable, &User{Name: "User3"})
|
||||||
|
assert.Equal(t, nil, err)
|
||||||
|
err = db.Insert(ctx, UsersTable, &User{Name: "User4"})
|
||||||
|
assert.Equal(t, nil, err)
|
||||||
|
_, err = db.Exec(ctx, "UPDATE users SET age = 22")
|
||||||
|
assert.Equal(t, nil, err)
|
||||||
|
|
||||||
|
return errors.New("fake-error")
|
||||||
|
})
|
||||||
|
assert.NotEqual(t, nil, err)
|
||||||
|
assert.Equal(t, "fake-error", err.Error())
|
||||||
|
|
||||||
|
var users []User
|
||||||
|
err = c.Query(ctx, &users, "SELECT * FROM users ORDER BY id ASC")
|
||||||
|
assert.Equal(t, nil, err)
|
||||||
|
|
||||||
|
assert.Equal(t, []User{u1, u2}, users)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func TestScanRows(t *testing.T) {
|
func TestScanRows(t *testing.T) {
|
||||||
t.Run("should scan users correctly", func(t *testing.T) {
|
t.Run("should scan users correctly", func(t *testing.T) {
|
||||||
err := createTables("sqlite3")
|
err := createTables("sqlite3")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user