2019-04-07 09:58:12 +02:00
|
|
|
package tests
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"database/sql"
|
|
|
|
|
"fmt"
|
2019-06-05 17:56:24 +02:00
|
|
|
"github.com/go-jet/jet/tests/.test_files/dvd_rental/dvds/model"
|
2019-04-14 17:55:10 +02:00
|
|
|
_ "github.com/lib/pq"
|
2019-05-20 17:37:55 +02:00
|
|
|
"github.com/pkg/profile"
|
2019-05-01 18:23:19 +02:00
|
|
|
"gotest.tools/assert"
|
2019-04-07 09:58:12 +02:00
|
|
|
"os"
|
2019-05-24 13:13:13 +02:00
|
|
|
"reflect"
|
2019-04-07 09:58:12 +02:00
|
|
|
"testing"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
const (
|
2019-05-24 13:13:13 +02:00
|
|
|
host = "localhost"
|
|
|
|
|
port = 5432
|
|
|
|
|
user = "postgres"
|
|
|
|
|
password = "postgres"
|
|
|
|
|
dbname = "dvd_rental"
|
2019-04-07 09:58:12 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var connectString = fmt.Sprintf("host=%s port=%d user=%s "+"password=%s dbname=%s sslmode=disable", host, port, user, password, dbname)
|
|
|
|
|
var db *sql.DB
|
2019-04-14 17:55:10 +02:00
|
|
|
|
|
|
|
|
//var tx *sql.Tx
|
2019-04-07 09:58:12 +02:00
|
|
|
|
2019-05-24 13:13:13 +02:00
|
|
|
//go:generate generator -host=localhost -port=5432 -user=postgres -password=postgres -dbname=dvd_rental -schema dvds -path .test_files
|
|
|
|
|
//go:generate generator -host=localhost -port=5432 -user=postgres -password=postgres -dbname=dvd_rental -sslmode=disable -schema test_sample -path .test_files
|
2019-04-07 09:58:12 +02:00
|
|
|
|
|
|
|
|
func TestMain(m *testing.M) {
|
|
|
|
|
fmt.Println("Begin")
|
|
|
|
|
|
2019-05-20 17:37:55 +02:00
|
|
|
defer profile.Start().Stop()
|
|
|
|
|
|
2019-04-07 09:58:12 +02:00
|
|
|
var err error
|
|
|
|
|
db, err = sql.Open("postgres", connectString)
|
|
|
|
|
if err != nil {
|
|
|
|
|
panic("Failed to connect to test db")
|
|
|
|
|
}
|
2019-04-14 17:55:10 +02:00
|
|
|
//tx, _ = db.Begin()
|
2019-04-07 09:58:12 +02:00
|
|
|
defer cleanUp()
|
|
|
|
|
|
|
|
|
|
dbInit()
|
|
|
|
|
|
|
|
|
|
ret := m.Run()
|
|
|
|
|
|
|
|
|
|
cleanUp()
|
|
|
|
|
fmt.Println("END")
|
|
|
|
|
|
|
|
|
|
os.Exit(ret)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func cleanUp() {
|
|
|
|
|
fmt.Println("CLEAN UP")
|
|
|
|
|
|
2019-04-14 17:55:10 +02:00
|
|
|
//tx.Rollback()
|
2019-04-07 09:58:12 +02:00
|
|
|
db.Close()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func dbInit() {
|
|
|
|
|
linkTableCreate := `
|
|
|
|
|
DROP TABLE IF EXISTS test_sample.link;
|
|
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS test_sample.link (
|
|
|
|
|
ID serial PRIMARY KEY,
|
|
|
|
|
url VARCHAR (255) NOT NULL,
|
|
|
|
|
name VARCHAR (255) NOT NULL,
|
|
|
|
|
description VARCHAR (255),
|
|
|
|
|
rel VARCHAR (50)
|
2019-05-20 17:37:55 +02:00
|
|
|
);
|
|
|
|
|
|
|
|
|
|
DROP TABLE IF EXISTS test_sample.employee;
|
|
|
|
|
|
|
|
|
|
CREATE TABLE test_sample.employee (
|
|
|
|
|
employee_id INT PRIMARY KEY,
|
|
|
|
|
first_name VARCHAR (255) NOT NULL,
|
|
|
|
|
last_name VARCHAR (255) NOT NULL,
|
|
|
|
|
manager_id INT,
|
|
|
|
|
FOREIGN KEY (manager_id)
|
|
|
|
|
REFERENCES test_sample.employee (employee_id)
|
|
|
|
|
ON DELETE CASCADE
|
|
|
|
|
);
|
|
|
|
|
INSERT INTO test_sample.employee (
|
|
|
|
|
employee_id,
|
|
|
|
|
first_name,
|
|
|
|
|
last_name,
|
|
|
|
|
manager_id
|
|
|
|
|
)
|
|
|
|
|
VALUES
|
|
|
|
|
(1, 'Windy', 'Hays', NULL),
|
|
|
|
|
(2, 'Ava', 'Christensen', 1),
|
|
|
|
|
(3, 'Hassan', 'Conner', 1),
|
|
|
|
|
(4, 'Anna', 'Reeves', 2),
|
|
|
|
|
(5, 'Sau', 'Norman', 2),
|
|
|
|
|
(6, 'Kelsie', 'Hays', 3),
|
|
|
|
|
(7, 'Tory', 'Goff', 3),
|
|
|
|
|
(8, 'Salley', 'Lester', 3);
|
|
|
|
|
|
|
|
|
|
`
|
2019-04-07 09:58:12 +02:00
|
|
|
|
|
|
|
|
result, err := db.Exec(linkTableCreate)
|
|
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
panic(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fmt.Println(result)
|
|
|
|
|
|
|
|
|
|
}
|
2019-05-01 18:23:19 +02:00
|
|
|
|
2019-05-24 13:13:13 +02:00
|
|
|
func TestGenerateModel(t *testing.T) {
|
2019-05-20 17:37:55 +02:00
|
|
|
|
2019-05-24 13:13:13 +02:00
|
|
|
actor := model.Actor{}
|
2019-05-20 17:37:55 +02:00
|
|
|
|
2019-05-24 13:13:13 +02:00
|
|
|
assert.Equal(t, reflect.TypeOf(actor.ActorID).String(), "int32")
|
|
|
|
|
actorIDField, ok := reflect.TypeOf(actor).FieldByName("ActorID")
|
|
|
|
|
assert.Assert(t, ok)
|
|
|
|
|
assert.Equal(t, actorIDField.Tag.Get("sql"), "unique")
|
|
|
|
|
assert.Equal(t, reflect.TypeOf(actor.FirstName).String(), "string")
|
|
|
|
|
assert.Equal(t, reflect.TypeOf(actor.LastName).String(), "string")
|
|
|
|
|
assert.Equal(t, reflect.TypeOf(actor.LastUpdate).String(), "time.Time")
|
2019-05-20 17:37:55 +02:00
|
|
|
|
2019-05-24 13:13:13 +02:00
|
|
|
filmActor := model.FilmActor{}
|
2019-05-20 17:37:55 +02:00
|
|
|
|
2019-05-24 13:13:13 +02:00
|
|
|
assert.Equal(t, reflect.TypeOf(filmActor.FilmID).String(), "int16")
|
|
|
|
|
filmIDField, ok := reflect.TypeOf(filmActor).FieldByName("FilmID")
|
|
|
|
|
assert.Assert(t, ok)
|
|
|
|
|
assert.Equal(t, filmIDField.Tag.Get("sql"), "unique")
|
2019-05-01 18:23:19 +02:00
|
|
|
|
2019-05-24 13:13:13 +02:00
|
|
|
assert.Equal(t, reflect.TypeOf(filmActor.ActorID).String(), "int16")
|
|
|
|
|
actorIDField, ok = reflect.TypeOf(filmActor).FieldByName("ActorID")
|
|
|
|
|
assert.Assert(t, ok)
|
|
|
|
|
assert.Equal(t, filmIDField.Tag.Get("sql"), "unique")
|
2019-05-01 18:23:19 +02:00
|
|
|
|
2019-05-24 13:13:13 +02:00
|
|
|
staff := model.Staff{}
|
2019-05-01 18:23:19 +02:00
|
|
|
|
2019-05-24 13:13:13 +02:00
|
|
|
assert.Equal(t, reflect.TypeOf(staff.Email).String(), "*string")
|
2019-05-27 13:11:15 +02:00
|
|
|
assert.Equal(t, reflect.TypeOf(staff.Picture).String(), "[]uint8")
|
2019-05-01 18:23:19 +02:00
|
|
|
}
|