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") } }) }