109 lines
3.9 KiB
Go
109 lines
3.9 KiB
Go
package httpx
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
"testing"
|
|
|
|
"go.uber.org/zap"
|
|
|
|
"spark-server/internal/infrastructure/id"
|
|
authlogic "spark-server/internal/module/auth/logic"
|
|
convlogic "spark-server/internal/module/conversation/logic"
|
|
convmodel "spark-server/internal/module/conversation/model"
|
|
delivermodel "spark-server/internal/module/deliver/model"
|
|
friendlogic "spark-server/internal/module/friend/logic"
|
|
friendmodel "spark-server/internal/module/friend/model"
|
|
grouplogic "spark-server/internal/module/group/logic"
|
|
groupmodel "spark-server/internal/module/group/model"
|
|
msgmodel "spark-server/internal/module/message/model"
|
|
"spark-server/internal/module/user/logictest"
|
|
)
|
|
|
|
func testGroupEngine(t *testing.T) *ginEngineBundle {
|
|
t.Helper()
|
|
j, err := authlogic.NewJWT(&authlogic.Options{Secret: "test-secret-test-secret", Issuer: "spark-im"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
ids, err := id.New(1)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
users, _ := logictest.UsersAndSMS(ids, nil)
|
|
friends := friendlogic.NewService(
|
|
friendmodel.NewMemoryRepo(), users, ids,
|
|
friendlogic.NewGreeter(convlogic.NewP2PService(convmodel.NewMemoryP2P(), ids), msgmodel.NewMemoryRepo(), ids, delivermodel.NewMemoryQueue()),
|
|
)
|
|
groups := grouplogic.NewService(groupmodel.NewMemoryRepo(), users, friends, ids, msgmodel.NewMemoryRepo(), delivermodel.NewMemoryQueue(), nil)
|
|
r := NewEngine(zap.NewNop(), &EngineDeps{
|
|
Auth: j,
|
|
Login: authlogic.NewLoginService(j, users),
|
|
Users: users,
|
|
Friends: friends,
|
|
Groups: groups,
|
|
})
|
|
return &ginEngineBundle{engine: r}
|
|
}
|
|
|
|
func TestGroupCreateHTTP(t *testing.T) {
|
|
h := testGroupEngine(t).engine
|
|
a := loginUser(t, h, "test01@spark.com", 1)
|
|
b := loginUser(t, h, "test02@spark.com", 2)
|
|
|
|
apply := authJSON(t, h, &a, http.MethodPost, "/v1/friends/requests", `{"email":"test02@spark.com"}`)
|
|
var applied friendlogic.ApplyResult
|
|
if err := json.Unmarshal(apply.Data, &applied); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
acc := authJSON(t, h, &b, http.MethodPost, "/v1/friends", fmt.Sprintf(`{"request_id":%d}`, applied.RequestID))
|
|
if acc.Code != "0" {
|
|
t.Fatalf("accept %+v", acc)
|
|
}
|
|
|
|
created := authJSON(t, h, &a, http.MethodPost, "/v1/groups", fmt.Sprintf(`{"name":"周末局","member_uids":[%d]}`, b.UserID))
|
|
if created.Code != "0" {
|
|
t.Fatalf("create %+v", created)
|
|
}
|
|
var g grouplogic.View
|
|
if err := json.Unmarshal(created.Data, &g); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if g.ID != 1 || g.ConversationID == 0 || g.ConversationID == g.ID || g.Name != "周末局" {
|
|
t.Fatalf("%+v", g)
|
|
}
|
|
got := authJSON(t, h, &b, http.MethodGet, fmt.Sprintf("/v1/groups/%d", g.ID), "")
|
|
if got.Code != "0" {
|
|
t.Fatalf("get %+v", got)
|
|
}
|
|
members := authJSON(t, h, &b, http.MethodGet, fmt.Sprintf("/v1/groups/%d/members", g.ID), "")
|
|
if members.Code != "0" {
|
|
t.Fatalf("members %+v", members)
|
|
}
|
|
ann := authJSON(t, h, &a, http.MethodPatch, fmt.Sprintf("/v1/groups/%d", g.ID), `{"announcement":"今晚九点","name":"周末局"}`)
|
|
if ann.Code != "0" {
|
|
t.Fatalf("announce %+v", ann)
|
|
}
|
|
denied := authJSON(t, h, &b, http.MethodPatch, fmt.Sprintf("/v1/groups/%d", g.ID), `{"announcement":"x"}`)
|
|
if denied.Code == "0" {
|
|
t.Fatal("member announcement")
|
|
}
|
|
role := authJSON(t, h, &a, http.MethodPatch, fmt.Sprintf("/v1/groups/%d/members/%d", g.ID, b.UserID), `{"role":2}`)
|
|
if role.Code != "0" {
|
|
t.Fatalf("admin %+v", role)
|
|
}
|
|
self := authJSON(t, h, &b, http.MethodPatch, fmt.Sprintf("/v1/groups/%d/members/%d", g.ID, b.UserID), `{"nickname":"球","remark":"球友群"}`)
|
|
if self.Code != "0" {
|
|
t.Fatalf("self card %+v", self)
|
|
}
|
|
card := authJSON(t, h, &b, http.MethodGet, fmt.Sprintf("/v1/groups/%d", g.ID), "")
|
|
if card.Code != "0" {
|
|
t.Fatalf("get card %+v", card)
|
|
}
|
|
var view grouplogic.View
|
|
if err := json.Unmarshal(card.Data, &view); err != nil || view.Announcement != "今晚九点" || view.Remark != "球友群" || view.GroupNickname != "球" || view.Role != 2 {
|
|
t.Fatalf("card %+v %v", view, err)
|
|
}
|
|
}
|