113 lines
4.4 KiB
Go
113 lines
4.4 KiB
Go
package api
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"git.ipao.vip/rogee/creator-hub/internal/creator"
|
|
"github.com/gofiber/fiber/v3"
|
|
)
|
|
|
|
func TestCreatorCommentAggregationRoutes(t *testing.T) {
|
|
app := fiber.New()
|
|
registerCreatorWithServices(app, nil, nil, nil, nil)
|
|
for _, query := range []string{"", "source_type=other", "source_type=owned&hours=bad", "source_type=owned&hours=2", "source_type=owned&page=bad", "source_type=owned&page=0", "source_type=owned&page_size=101"} {
|
|
response, err := app.Test(httptest.NewRequest(http.MethodGet, "/api/creator/comments/aggregation?"+query, nil))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
response.Body.Close()
|
|
if response.StatusCode != http.StatusBadRequest {
|
|
t.Fatalf("query=%s status=%d", query, response.StatusCode)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestCreatorCommentAggregationRouteIntegration(t *testing.T) {
|
|
databaseURL := os.Getenv("CREATORHUB_POSTGRES_TEST_URL")
|
|
if databaseURL == "" {
|
|
t.Skip("set CREATORHUB_POSTGRES_TEST_URL")
|
|
}
|
|
store, _, ctx := openCreatorIntegrationStoreForAPITest(t, databaseURL)
|
|
now := time.Now().UTC()
|
|
competitor, err := store.UpsertCompetitor(ctx, creator.CompetitorInput{Platform: creator.PlatformDouyin, PlatformAccountKey: "aggregation-rival", Nickname: "竞品账号", HomepageURL: "https://www.douyin.com/user/aggregation-rival"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
work, _, err := store.UpsertWork(ctx, creator.WorkInput{Platform: creator.PlatformDouyin, WorkKey: "aggregation-work", SourceType: creator.SourceCompetitor, SourceID: competitor.ID, Title: "作品"}, now)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
comment, _, err := store.SaveComment(ctx, creator.CommentInput{Platform: creator.PlatformDouyin, WorkID: work.ID, CommentKey: "aggregation-comment", Content: "评论", CommentType: "top_level", PublishedAt: &now})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
app := fiber.New()
|
|
registerCreatorWithServices(app, store, nil, nil, nil)
|
|
response, err := app.Test(httptest.NewRequest(http.MethodGet, "/api/creator/comments/aggregation?source_type=competitor&source_id="+competitor.ID, nil))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer response.Body.Close()
|
|
if response.StatusCode != http.StatusOK {
|
|
t.Fatalf("status=%d", response.StatusCode)
|
|
}
|
|
var page creator.Page[creator.AggregatedComment]
|
|
if err := json.NewDecoder(response.Body).Decode(&page); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if page.Page != 1 || page.PageSize != 25 || page.Total != 1 || len(page.Data) != 1 || page.Data[0].ID != comment.ID || page.Data[0].SourceName != "竞品账号" {
|
|
t.Fatalf("page=%+v", page)
|
|
}
|
|
if err := store.Close(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
response, err = app.Test(httptest.NewRequest(http.MethodGet, "/api/creator/comments/aggregation?source_type=competitor", nil))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
response.Body.Close()
|
|
if response.StatusCode != http.StatusInternalServerError {
|
|
t.Fatalf("database failure status=%d", response.StatusCode)
|
|
}
|
|
}
|
|
|
|
func TestCreatorCommentAggregationFilter(t *testing.T) {
|
|
app := fiber.New()
|
|
app.Get("/", func(c fiber.Ctx) error {
|
|
filter, err := creatorCommentAggregationFilter(c)
|
|
if err != nil {
|
|
return creatorError(c, err)
|
|
}
|
|
return c.JSON(filter)
|
|
})
|
|
for _, query := range []string{"source_type=owned", "source_type=competitor&source_id=account-1&hours=6", "source_type=owned&hours=168"} {
|
|
response, err := app.Test(httptest.NewRequest(http.MethodGet, "/?"+query, nil))
|
|
if err != nil || response.StatusCode != http.StatusOK {
|
|
t.Fatalf("query=%s response=%v err=%v", query, response, err)
|
|
}
|
|
var filter creator.CommentAggregationFilter
|
|
if err := json.NewDecoder(response.Body).Decode(&filter); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
response.Body.Close()
|
|
if query == "source_type=owned" && filter.Hours != 24 {
|
|
t.Fatalf("default=%+v", filter)
|
|
}
|
|
if query == "source_type=competitor&source_id=account-1&hours=6" && (filter.SourceType != creator.SourceCompetitor || filter.SourceID != "account-1" || filter.Hours != 6) {
|
|
t.Fatalf("filter=%+v", filter)
|
|
}
|
|
}
|
|
for _, query := range []string{"", "source_type=other", "source_type=owned&hours=bad", "source_type=owned&hours=0", "source_type=owned&hours=-1", "source_type=owned&hours=2", "source_type=owned&hours=169"} {
|
|
response, err := app.Test(httptest.NewRequest(http.MethodGet, "/?"+query, nil))
|
|
if err != nil || response.StatusCode != http.StatusBadRequest {
|
|
t.Fatalf("query=%s response=%v err=%v", query, response, err)
|
|
}
|
|
response.Body.Close()
|
|
}
|
|
}
|