89 lines
3.0 KiB
Go
89 lines
3.0 KiB
Go
package service_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
roomv1 "hyapp.local/api/proto/room/v1"
|
|
"hyapp/pkg/appcode"
|
|
"hyapp/services/room-service/internal/integration"
|
|
roomservice "hyapp/services/room-service/internal/room/service"
|
|
"hyapp/services/room-service/internal/router"
|
|
"hyapp/services/room-service/internal/testutil/mysqltest"
|
|
)
|
|
|
|
func TestRegionalPinOrdersPublicRoomList(t *testing.T) {
|
|
ctx := context.Background()
|
|
repository := mysqltest.NewRepository(t)
|
|
svc := roomservice.New(roomservice.Config{
|
|
NodeID: "node-pin-test",
|
|
LeaseTTL: 10 * time.Second,
|
|
RankLimit: 20,
|
|
SnapshotEveryN: 1,
|
|
}, router.NewMemoryDirectory(), repository, followTestWallet{}, integration.NewNoopRoomEventPublisher(), integration.NewNoopOutboxPublisher())
|
|
|
|
createPinnedListRoom(t, ctx, svc, "room-pin-low", "pin-low", 3001, 9001)
|
|
createPinnedListRoom(t, ctx, svc, "room-hot-high", "hot-high", 3002, 9001)
|
|
createPinnedListRoom(t, ctx, svc, "room-hot-mid", "hot-mid", 3003, 9001)
|
|
repository.SetRoomSortScore("room-pin-low", 10)
|
|
repository.SetRoomSortScore("room-hot-high", 300)
|
|
repository.SetRoomSortScore("room-hot-mid", 200)
|
|
repository.PinRoom("room-pin-low", 9001, 99, time.Now().UTC().Add(24*time.Hour).UnixMilli())
|
|
|
|
firstPage, err := svc.ListRooms(ctx, &roomv1.ListRoomsRequest{
|
|
Meta: &roomv1.RequestMeta{AppCode: appcode.Default},
|
|
ViewerUserId: 4001,
|
|
VisibleRegionId: 9001,
|
|
Tab: "hot",
|
|
Limit: 1,
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("list pinned first page failed: %v", err)
|
|
}
|
|
if len(firstPage.GetRooms()) != 1 || firstPage.GetRooms()[0].GetRoomId() != "room-pin-low" {
|
|
t.Fatalf("regional pin must be first even with lower hot score: %+v", firstPage.GetRooms())
|
|
}
|
|
if firstPage.GetNextCursor() == "" {
|
|
t.Fatalf("first page should return cursor")
|
|
}
|
|
|
|
secondPage, err := svc.ListRooms(ctx, &roomv1.ListRoomsRequest{
|
|
Meta: &roomv1.RequestMeta{AppCode: appcode.Default},
|
|
ViewerUserId: 4001,
|
|
VisibleRegionId: 9001,
|
|
Tab: "hot",
|
|
Limit: 2,
|
|
Cursor: firstPage.GetNextCursor(),
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("list pinned second page failed: %v", err)
|
|
}
|
|
if got := roomIDs(secondPage.GetRooms()); len(got) != 2 || got[0] != "room-hot-high" || got[1] != "room-hot-mid" {
|
|
t.Fatalf("second page should continue with regular hot order, got %+v", got)
|
|
}
|
|
}
|
|
|
|
func createPinnedListRoom(t *testing.T, ctx context.Context, svc *roomservice.Service, roomID string, shortID string, ownerID int64, regionID int64) {
|
|
t.Helper()
|
|
|
|
if _, err := svc.CreateRoom(ctx, &roomv1.CreateRoomRequest{
|
|
Meta: roomservice.NewRequestMeta(roomID, ownerID),
|
|
SeatCount: 10,
|
|
Mode: "voice",
|
|
VisibleRegionId: regionID,
|
|
RoomName: roomID,
|
|
RoomShortId: shortID,
|
|
}); err != nil {
|
|
t.Fatalf("create room %s failed: %v", roomID, err)
|
|
}
|
|
}
|
|
|
|
func roomIDs(rooms []*roomv1.RoomListItem) []string {
|
|
ids := make([]string, 0, len(rooms))
|
|
for _, room := range rooms {
|
|
ids = append(ids, room.GetRoomId())
|
|
}
|
|
return ids
|
|
}
|