Add basic users

This commit is contained in:
Nicolas Duhamel 2016-02-06 16:13:38 +01:00
parent 3347c43055
commit 2aeb634287
4 changed files with 106 additions and 0 deletions

39
sqltest/sqltest.go Normal file
View File

@ -0,0 +1,39 @@
package sqltest
import (
"fmt"
"strings"
"testing"
"github.com/jmoiron/sqlx"
)
func MultiExec(e sqlx.Execer, query string) error {
stmts := strings.Split(query, ";\n")
if len(strings.Trim(stmts[len(stmts)-1], " \n\t\r")) == 0 {
stmts = stmts[:len(stmts)-1]
}
for _, s := range stmts {
_, err := e.Exec(s)
if err != nil {
return fmt.Errorf("%s\n%s", err, s)
}
}
return nil
}
func RunWithSchema(db *sqlx.DB, create, drop string, t *testing.T, test func(db *sqlx.DB, t *testing.T)) {
defer func() {
err := MultiExec(db, drop)
if err != nil {
t.Fatalf("%s", err.Error())
}
}()
err := MultiExec(db, create)
if err != nil {
t.Fatalf("%s", err.Error())
}
test(db, t)
}

33
users.go Normal file
View File

@ -0,0 +1,33 @@
package users
import "github.com/jmoiron/sqlx"
const usersCreate = `
CREATE TABLE users (
id SERIAL,
name text NOT NULL
);
`
const addUserQuery = `INSERT INTO users (name) VALUES ($1);`
// User represents an user
type User struct {
ID int
Name string
}
// Add user to database or raises an error
func (u *User) Add(ex sqlx.Execer) error {
_, err := ex.Exec(addUserQuery, u.Name)
return err
}
// Update user on database or raise an error
func (u *User) Update(ex *sqlx.Execer) error {
return nil
}
// Delete user from database or raise an error
func (u *User) Delete(ex *sqlx.Execer) error {
return nil
}

34
users_test.go Normal file
View File

@ -0,0 +1,34 @@
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 TestAdd(t *testing.T) {
sqltest.RunWithSchema(db, usersCreate, drop, t, func(db *sqlx.DB, t *testing.T) {
})
}