Add basic users
This commit is contained in:
parent
3347c43055
commit
2aeb634287
39
sqltest/sqltest.go
Normal file
39
sqltest/sqltest.go
Normal 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
33
users.go
Normal 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
34
users_test.go
Normal 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) {
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user