Files
services/db/handler/integration_test.go
2021-11-11 11:53:13 +00:00

235 lines
5.2 KiB
Go

package handler
import (
"context"
"encoding/json"
"testing"
"database/sql"
"github.com/micro/micro/v3/service/auth"
db "github.com/micro/services/db/proto"
"google.golang.org/protobuf/types/known/structpb"
)
const dbAddr = "postgresql://postgres:postgres@postgres:5432/postgres?sslmode=disable"
func getHandler(t *testing.T) *Db {
sqlDB, err := sql.Open("pgx", dbAddr)
if err != nil {
t.Fatalf("Failed to open connection to DB %s", err)
}
h := &Db{}
h.DBConn(sqlDB)
return h
}
func TestBasic(t *testing.T) {
h := getHandler(t)
ctx := auth.ContextWithAccount(context.Background(), &auth.Account{Issuer: "basic_test", ID: "test"})
rs := []map[string]interface{}{
{
"name": "Jane",
"age": 42,
"isActive": true,
"id": "1",
},
{
"name": "Joe",
"age": 112,
"isActive": false,
"id": "2",
},
}
for _, v := range rs {
record, _ := json.Marshal(v)
rec := &structpb.Struct{}
err := rec.UnmarshalJSON(record)
if err != nil {
t.Fatal(err)
}
err = h.Create(ctx, &db.CreateRequest{
Table: "users",
Record: rec,
}, &db.CreateResponse{})
if err != nil {
t.Fatal(err)
}
}
t.Run("number ==", func(t *testing.T) {
readRsp := &db.ReadResponse{}
err := h.Read(ctx, &db.ReadRequest{
Table: "users",
Query: "age == 112",
}, readRsp)
if err != nil {
t.Fatal(err)
}
if len(readRsp.Records) != 1 || readRsp.Records[0].AsMap()["id"].(string) != "2" {
t.Fatal(readRsp)
}
})
t.Run("number <", func(t *testing.T) {
readRsp := &db.ReadResponse{}
err := h.Read(ctx, &db.ReadRequest{
Table: "users",
Query: "age < 100",
}, readRsp)
if err != nil {
t.Fatal(err)
}
if len(readRsp.Records) != 1 || readRsp.Records[0].AsMap()["id"].(string) != "1" {
t.Fatal(readRsp)
}
})
t.Run("number >", func(t *testing.T) {
readRsp := &db.ReadResponse{}
err := h.Read(ctx, &db.ReadRequest{
Table: "users",
Query: "age > 100",
}, readRsp)
if err != nil {
t.Fatal(err)
}
if len(readRsp.Records) != 1 || readRsp.Records[0].AsMap()["id"].(string) != "2" {
t.Fatal(readRsp)
}
})
t.Run("number !=", func(t *testing.T) {
readRsp := &db.ReadResponse{}
err := h.Read(ctx, &db.ReadRequest{
Table: "users",
Query: "age != 42",
}, readRsp)
if err != nil {
t.Fatal(err)
}
if len(readRsp.Records) != 1 || readRsp.Records[0].AsMap()["id"].(string) != "2" {
t.Fatal(readRsp)
}
})
t.Run("bool ==", func(t *testing.T) {
readRsp := &db.ReadResponse{}
err := h.Read(ctx, &db.ReadRequest{
Table: "users",
Query: "isActive == false",
}, readRsp)
if err != nil {
t.Fatal(err)
}
if len(readRsp.Records) != 1 || readRsp.Records[0].AsMap()["id"].(string) != "2" {
t.Fatal(readRsp)
}
})
t.Run("bool !=", func(t *testing.T) {
readRsp := &db.ReadResponse{}
err := h.Read(ctx, &db.ReadRequest{
Table: "users",
Query: "isActive != false",
}, readRsp)
if err != nil {
t.Fatal(err)
}
if len(readRsp.Records) != 1 || readRsp.Records[0].AsMap()["id"].(string) != "1" {
t.Fatal(readRsp)
}
})
t.Run("string ==", func(t *testing.T) {
readRsp := &db.ReadResponse{}
err := h.Read(ctx, &db.ReadRequest{
Table: "users",
Query: "name == 'Jane'",
}, readRsp)
if err != nil {
t.Fatal(err)
}
if len(readRsp.Records) != 1 || readRsp.Records[0].AsMap()["id"].(string) != "1" {
t.Fatal(readRsp)
}
})
t.Run("string !=", func(t *testing.T) {
readRsp := &db.ReadResponse{}
err := h.Read(ctx, &db.ReadRequest{
Table: "users",
Query: "name != 'Jane'",
}, readRsp)
if err != nil {
t.Fatal(err)
}
if len(readRsp.Records) != 1 || readRsp.Records[0].AsMap()["id"].(string) != "2" {
t.Fatal(readRsp)
}
})
t.Run("order number asc", func(t *testing.T) {
readRsp := &db.ReadResponse{}
err := h.Read(ctx, &db.ReadRequest{
Table: "users",
OrderBy: "age",
Order: "asc",
}, readRsp)
if err != nil {
t.Fatal(err)
}
if len(readRsp.Records) != 2 || readRsp.Records[0].AsMap()["id"].(string) != "1" || readRsp.Records[1].AsMap()["id"].(string) != "2" {
t.Fatal(readRsp)
}
})
t.Run("order number desc", func(t *testing.T) {
readRsp := &db.ReadResponse{}
err := h.Read(ctx, &db.ReadRequest{
Table: "users",
OrderBy: "age",
Order: "desc",
}, readRsp)
if err != nil {
t.Fatal(err)
}
if len(readRsp.Records) != 2 || readRsp.Records[0].AsMap()["id"].(string) != "2" || readRsp.Records[1].AsMap()["id"].(string) != "1" {
t.Fatal(readRsp)
}
})
t.Run("order number desc, limit", func(t *testing.T) {
readRsp := &db.ReadResponse{}
err := h.Read(ctx, &db.ReadRequest{
Table: "users",
OrderBy: "age",
Order: "desc",
Limit: 1,
}, readRsp)
if err != nil {
t.Fatal(err)
}
if len(readRsp.Records) != 1 || readRsp.Records[0].AsMap()["id"].(string) != "2" {
t.Fatal(readRsp)
}
})
t.Run("order number desc, limit, offset", func(t *testing.T) {
readRsp := &db.ReadResponse{}
err := h.Read(ctx, &db.ReadRequest{
Table: "users",
OrderBy: "age",
Order: "desc",
Limit: 1,
Offset: 1,
}, readRsp)
if err != nil {
t.Fatal(err)
}
if len(readRsp.Records) != 1 || readRsp.Records[0].AsMap()["id"].(string) != "1" {
t.Fatal(readRsp)
}
})
}