canape/users_test.go

97 lines
1.6 KiB
Go

package users
import (
"fmt"
"os"
"testing"
"gitlab.quimbo.fr/odwrtw/canape-sql/sqltest"
"github.com/jmoiron/sqlx"
"github.com/lib/pq"
)
const drop = `DROP TABLE users;`
var db *sqlx.DB
func init() {
var err error
pgdsn := os.Getenv("POSTGRES_DSN")
db, err = sqlx.Connect("postgres", pgdsn)
if err != nil {
fmt.Printf("Unavailable PG tests:\n %v\n", err)
os.Exit(1)
}
}
func TestUser(t *testing.T) {
sqltest.RunWithSchema(db, usersCreate, drop, t, func(db *sqlx.DB, t *testing.T) {
// Add a new user
u := &User{Name: "plop"}
err := u.Add(db)
if err != nil {
t.Fatal(err)
}
// Try add it twice
err = u.Add(db)
if err != nil {
if err, ok := err.(*pq.Error); ok {
if err.Code.Name() != "unique_violation" {
t.Fatal(err)
}
}
} else {
t.Fatal(err)
}
// Get it
u2, err := Get(db, "plop")
if err != nil {
t.Fatal(err)
}
if u2.ID != u.ID {
t.Fatal("ID are different")
}
// Update it
u2.Name = "toto"
err = u2.Update(db)
if err != nil {
t.Fatal(err)
}
u3, err := Get(db, "toto")
if err != nil {
t.Fatal(err)
}
if u3.ID != u2.ID {
t.Fatal("ID are different")
}
if u3.Name != "toto" {
t.Fatalf("Unexpected name %q", u3.Name)
}
// Delete it
err = u3.Delete(db)
if err != nil {
t.Fatal(err)
}
u, err = Get(db, "toto")
if err == nil {
t.Fatal("We expect an error here, the user didn't exist anymore")
}
if err.Error() != "sql: no rows in result set" {
t.Fatalf("Unexpected error: %q", err)
}
if u != nil {
t.Fatal("User have to be nil here")
}
})
}