ksql/postgres_test.go

178 lines
3.2 KiB
Go

package gpostgres
import (
"context"
"testing"
"time"
"github.com/ditointernet/go-assert"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/sqlite"
)
type User struct {
ID uint
Name string
CreatedAt time.Time
}
func TestFind(t *testing.T) {
err := createTable()
if err != nil {
t.Fatal("could not create test table!")
}
t.Run("should return 0 results correctly", func(t *testing.T) {
db := connectDB(t)
defer db.Close()
ctx := context.Background()
c := Client{
db: db,
tableName: "users",
}
u := User{}
err := c.Find(ctx, &u, `SELECT * FROM users WHERE id=1;`)
assert.Equal(t, err, nil)
assert.Equal(t, User{}, u)
})
t.Run("should return a user correctly", func(t *testing.T) {
db := connectDB(t)
defer db.Close()
db.Create(&User{
Name: "Bia",
})
ctx := context.Background()
c := Client{
db: db,
tableName: "users",
}
u := User{}
err = c.Find(ctx, &u, `SELECT * FROM users WHERE name=?;`, "Bia")
assert.Equal(t, err, nil)
assert.Equal(t, "Bia", u.Name)
assert.NotEqual(t, 0, u.ID)
})
}
func TestInsert(t *testing.T) {
err := createTable()
if err != nil {
t.Fatal("could not create test table!")
}
t.Run("should ignore empty lists of users", func(t *testing.T) {
db := connectDB(t)
defer db.Close()
ctx := context.Background()
c := Client{
db: db,
tableName: "users",
}
err = c.Insert(ctx)
assert.Equal(t, err, nil)
})
t.Run("should insert one user correctly", func(t *testing.T) {
db := connectDB(t)
defer db.Close()
ctx := context.Background()
c := Client{
db: db,
tableName: "users",
}
u := User{
Name: "Fernanda",
}
err := c.Insert(ctx, &u)
assert.Equal(t, err, nil)
result := User{}
it := c.db.Raw("SELECT * FROM users WHERE id=?", u.ID)
it.Scan(&result)
assert.Equal(t, it.Error, nil)
assert.Equal(t, u.Name, result.Name)
assert.Equal(t, u.CreatedAt.Format(time.RFC3339), result.CreatedAt.Format(time.RFC3339))
})
}
func TestDelete(t *testing.T) {
err := createTable()
if err != nil {
t.Fatal("could not create test table!")
}
t.Run("should ignore empty lists of users", func(t *testing.T) {
db := connectDB(t)
defer db.Close()
ctx := context.Background()
c := Client{
db: db,
tableName: "users",
}
err = c.Delete(ctx)
assert.Equal(t, err, nil)
})
t.Run("should delete one user correctly", func(t *testing.T) {
db := connectDB(t)
defer db.Close()
ctx := context.Background()
c := Client{
db: db,
tableName: "users",
}
u := User{
Name: "Fernanda",
}
err := c.Insert(ctx, &u)
assert.Equal(t, err, nil)
err = c.Delete(ctx, &u)
assert.Equal(t, err, nil)
result := User{}
it := c.db.Raw("SELECT * FROM users WHERE id=?", u.ID)
it.Scan(&result)
assert.Equal(t, it.Error, nil)
assert.Equal(t, uint(0), result.ID)
assert.Equal(t, "", result.Name)
})
}
func createTable() error {
db, err := gorm.Open("sqlite3", "/tmp/test.db")
if err != nil {
return err
}
defer db.Close()
db.DropTableIfExists(&User{})
db.CreateTable(&User{})
return nil
}
func connectDB(t *testing.T) *gorm.DB {
db, err := gorm.Open("sqlite3", "/tmp/test.db")
if err != nil {
t.Fatal(err.Error())
}
return db
}