mirror of
https://github.com/kevin-DL/services.git
synced 2026-01-11 19:04:35 +00:00
235 lines
5.2 KiB
Go
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)
|
|
}
|
|
})
|
|
}
|