93 lines
3.3 KiB
Go
93 lines
3.3 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"
|
|
authlogictest "spark-server/internal/module/auth/logictest"
|
|
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"
|
|
msgmodel "spark-server/internal/module/message/model"
|
|
momentlogic "spark-server/internal/module/moment/logic"
|
|
momentmodel "spark-server/internal/module/moment/model"
|
|
uploadlogic "spark-server/internal/module/upload/logic"
|
|
"spark-server/internal/module/user/logictest"
|
|
"spark-server/internal/pkg/errs"
|
|
)
|
|
|
|
func testMomentEngine(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()),
|
|
)
|
|
moments := momentlogic.NewService(momentmodel.NewMemoryRepo(), friends, users, nil, ids)
|
|
files := uploadlogic.NewService(&stubPresign{}, uploadlogic.Options{})
|
|
r := NewEngine(zap.NewNop(), &EngineDeps{
|
|
Auth: j, Login: authlogictest.LoginService(j, users), Users: users,
|
|
Friends: friends, Moments: moments, Files: files,
|
|
})
|
|
return &ginEngineBundle{engine: r}
|
|
}
|
|
|
|
func TestMomentPublishFeedLikeHTTP(t *testing.T) {
|
|
h := testMomentEngine(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"}`)
|
|
if apply.Code != "0" {
|
|
t.Fatalf("apply %+v", apply)
|
|
}
|
|
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)
|
|
}
|
|
pub := authJSON(t, h, &a, http.MethodPost, "/v1/moments", `{"text":"hello moments"}`)
|
|
if pub.Code != "0" {
|
|
t.Fatalf("publish %+v", pub)
|
|
}
|
|
var post momentlogic.View
|
|
if err := json.Unmarshal(pub.Data, &post); err != nil || post.Text != "hello moments" || post.ID == 0 {
|
|
t.Fatalf("post %s %v", pub.Data, err)
|
|
}
|
|
feed := authJSON(t, h, &b, http.MethodGet, "/v1/moments", "")
|
|
if feed.Code != "0" {
|
|
t.Fatalf("feed %+v", feed)
|
|
}
|
|
like := authJSON(t, h, &b, http.MethodPut, fmt.Sprintf("/v1/moments/%d/like", post.ID), "")
|
|
if like.Code != "0" {
|
|
t.Fatalf("like %+v", like)
|
|
}
|
|
cred := authJSON(t, h, &a, http.MethodPost, "/v1/files", `{"purpose":"moment_image","mime":"image/jpeg","size":1024}`)
|
|
if cred.Code != "0" {
|
|
t.Fatalf("cred %+v", cred)
|
|
}
|
|
stranger := loginUser(t, h, "test03@spark.com", 3)
|
|
album := authJSON(t, h, &stranger, http.MethodGet, fmt.Sprintf("/v1/moments/users/%d", a.UserID), "")
|
|
if album.Code != errs.ErrNotFound.Code {
|
|
t.Fatalf("stranger album %+v", album)
|
|
}
|
|
}
|