diff --git a/users.go b/users.go index 6207710..4298a2a 100644 --- a/users.go +++ b/users.go @@ -9,8 +9,10 @@ CREATE TABLE users ( ); ` const ( - addUserQuery = `INSERT INTO users (name) VALUES ($1) RETURNING id;` - getUserQuery = `SELECT * FROM users WHERE name=$1;` + addUserQuery = `INSERT INTO users (name) VALUES ($1) RETURNING id;` + getUserQuery = `SELECT * FROM users WHERE name=$1;` + updateUserQuery = `UPDATE users SET (name)=(:name);` + deleteUseQuery = `DELETE FROM users WHERE id=:id;` ) // User represents an user @@ -41,11 +43,19 @@ func (u *User) Add(q sqlx.Queryer) error { } // Update user on database or raise an error -func (u *User) Update(ex *sqlx.Execer) error { +func (u *User) Update(ex *sqlx.DB) error { + _, err := ex.NamedExec(updateUserQuery, u) + if err != nil { + return err + } return nil } // Delete user from database or raise an error -func (u *User) Delete(ex *sqlx.Execer) error { +func (u *User) Delete(ex *sqlx.DB) error { + _, err := ex.NamedExec(deleteUseQuery, u) + if err != nil { + return err + } return nil } diff --git a/users_test.go b/users_test.go index 093cbc3..0d9f841 100644 --- a/users_test.go +++ b/users_test.go @@ -8,7 +8,6 @@ import ( "gitlab.quimbo.fr/odwrtw/canape-sql/sqltest" "github.com/jmoiron/sqlx" - "github.com/kr/pretty" "github.com/lib/pq" ) @@ -28,7 +27,7 @@ func init() { } } -func TestAdd(t *testing.T) { +func TestUser(t *testing.T) { sqltest.RunWithSchema(db, usersCreate, drop, t, func(db *sqlx.DB, t *testing.T) { // Add a new user @@ -50,9 +49,48 @@ func TestAdd(t *testing.T) { t.Fatal(err) } - u, err = Get(db, "plop") + // Get it + u2, err := Get(db, "plop") + if err != nil { + t.Fatal(err) + } + if u2.ID != u.ID { + t.Fatal("ID are different") + } - pretty.Println(err) - pretty.Println(u) + // 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") + } }) }