111 lines
2.8 KiB
Go
111 lines
2.8 KiB
Go
package scopes
|
|
|
|
import (
|
|
tbase "testing"
|
|
|
|
lib "git.sr.ht/~cco/go-scopes"
|
|
"git.sr.ht/~cco/go-scopes/common/testing"
|
|
"git.sr.ht/~cco/go-scopes/core/message"
|
|
sql "git.sr.ht/~cco/go-scopes/storage"
|
|
"git.sr.ht/~cco/go-scopes/storage/db/pgsql"
|
|
_ "git.sr.ht/~cco/go-scopes/storage/db/sqlite"
|
|
msgstore "git.sr.ht/~cco/go-scopes/storage/message"
|
|
"git.sr.ht/~cco/go-scopes/storage/tracking"
|
|
"git.sr.ht/~cco/go-scopes/tests/etc"
|
|
)
|
|
|
|
func TestSqlite(tb *tbase.T) {
|
|
t := testing.SetUp(tb)
|
|
cfg := etc.ConfigSqlite()
|
|
db := sql.Open(cfg)
|
|
resetSqlite(db)
|
|
DoTests(t, cfg, db)
|
|
}
|
|
|
|
func TestPgsql(tb *tbase.T) {
|
|
t := testing.SetUp(tb)
|
|
cfg := etc.ConfigPgsql()
|
|
db := sql.Open(cfg)
|
|
db.Params["idType"] = pgsql.IdType
|
|
db.Params["jsonType"] = pgsql.JsonType
|
|
resetPgsql(db)
|
|
DoTests(t, cfg, db)
|
|
}
|
|
|
|
func DoTests(t *testing.T, cfg *sql.Cfg, db *sql.Storage) {
|
|
t.Run("base", func(t *testing.T) { BaseTest(t, cfg, db) })
|
|
t.Run("message", func(t *testing.T) { MessageTest(t, cfg, db) })
|
|
t.Run("tracking", func(t *testing.T) { TrackingTest(t, cfg, db) })
|
|
}
|
|
|
|
type greet struct {
|
|
id int64
|
|
label string
|
|
}
|
|
|
|
func (g greet) Scan(rows *sql.Rows) (greet, error) {
|
|
err := rows.Scan(&g.id, &g.label)
|
|
return g, err
|
|
}
|
|
|
|
func (g *greet) ScanP(rows *sql.Rows) error {
|
|
return rows.Scan(&g.id, &g.label)
|
|
}
|
|
|
|
func BaseTest(t *testing.T, cfg *sql.Cfg, db *sql.Storage) {
|
|
db.Exec(sql_insert)
|
|
//data := sql.QueryCol[string](db, query, 2)
|
|
data := sql.QueryData[greet](db, sql_query)
|
|
t.AssertEqual(len(data), 2)
|
|
t.AssertEqual(data[0].label, "Hello World")
|
|
t.AssertEqual(data[1].label, "Good Afternoon")
|
|
data = sql.QueryDataP[*greet](db, sql_query)
|
|
t.AssertEqual(len(data), 2)
|
|
t.AssertEqual(data[0].label, "Hello World")
|
|
t.AssertEqual(data[1].label, "Good Afternoon")
|
|
}
|
|
|
|
func TrackingTest(t *testing.T, cfg *sql.Cfg, db *sql.Storage) {
|
|
cont := tracking.SimpleContainer(db)
|
|
cont.CreateTable()
|
|
track := tracking.SimpleTrack("t01", "john", lib.Map{})
|
|
cont.Insert(&track)
|
|
t.AssertEqual(track.TrackId(), lib.Ident(1))
|
|
}
|
|
|
|
func MessageTest(t *testing.T, cfg *sql.Cfg, db *sql.Storage) {
|
|
msg := message.SimpleMessage("data")
|
|
msgstore.StoreDB(db, msg)
|
|
}
|
|
|
|
func resetSqlite(db *sql.Storage) {
|
|
db.DropTable("test")
|
|
db.DropTable("tracks")
|
|
db.Exec(sqlite_create_table)
|
|
}
|
|
|
|
func resetPgsql(db *sql.Storage) {
|
|
db.DropTable("test")
|
|
db.DropTable("testing.tracks")
|
|
db.Exec(pgsql_create_table)
|
|
}
|
|
|
|
// SQL statements
|
|
|
|
const (
|
|
sql_insert = `insert into test (label) values
|
|
('Hello World'),
|
|
('Good Afternoon')`
|
|
|
|
sql_query = `select id, label from test ` //where id = $1`
|
|
|
|
// database-specific SQL statements
|
|
// note: ... integer ... primary key ... automatically fills row sequentially
|
|
sqlite_create_table = `create table test (
|
|
id integer not null primary key,
|
|
label text)`
|
|
|
|
pgsql_create_table = `create table test (
|
|
id serial not null primary key,
|
|
label text)`
|
|
)
|