56 lines
2.1 KiB
Go
56 lines
2.1 KiB
Go
package host
|
|
|
|
import (
|
|
"context"
|
|
"regexp"
|
|
"testing"
|
|
|
|
"github.com/DATA-DOG/go-sqlmock"
|
|
"hyapp/pkg/appcode"
|
|
hostdomain "hyapp/services/user-service/internal/domain/host"
|
|
)
|
|
|
|
func TestGetHostEngagementStatsAggregatesOwnedFacts(t *testing.T) {
|
|
db, mock, err := sqlmock.New()
|
|
if err != nil {
|
|
t.Fatalf("create sqlmock: %v", err)
|
|
}
|
|
defer db.Close()
|
|
|
|
mock.ExpectQuery("FROM user_mic_daily_stats").
|
|
WithArgs(validMicDayThresholdMS, "fami", int64(42), "2026-07-06", "2026-07-12").
|
|
WillReturnRows(sqlmock.NewRows([]string{"mic_ms", "valid_days"}).AddRow(int64(5400000), int64(1)))
|
|
mock.ExpectQuery("FROM user_private_message_events").
|
|
WithArgs("fami", int64(42), int64(1783296000000), int64(1783900800000)).
|
|
WillReturnRows(sqlmock.NewRows([]string{"senders"}).AddRow(int64(6)))
|
|
mock.ExpectQuery("FROM user_follow_events").
|
|
WithArgs("fami", int64(42), int64(1783296000000), int64(1783900800000)).
|
|
WillReturnRows(sqlmock.NewRows([]string{"followers"}).AddRow(int64(4)))
|
|
mock.ExpectQuery(regexp.QuoteMeta(`
|
|
SELECT created_at_ms, last_heartbeat_at_ms
|
|
FROM auth_sessions
|
|
WHERE app_code = ? AND user_id = ?
|
|
AND last_heartbeat_at_ms >= ? AND created_at_ms < ?`)).
|
|
WithArgs("fami", int64(42), int64(1783296000000), int64(1783900800000)).
|
|
WillReturnRows(sqlmock.NewRows([]string{"created_at_ms", "last_heartbeat_at_ms"}).
|
|
AddRow(int64(1783299600000), int64(1783303200000)).
|
|
AddRow(int64(1783301400000), int64(1783306800000)))
|
|
|
|
repo := New(db)
|
|
stats, err := repo.GetHostEngagementStats(appcode.WithContext(context.Background(), "fami"), hostdomain.EngagementStatsQuery{
|
|
HostUserID: 42,
|
|
StartAtMS: 1783296000000,
|
|
EndAtMS: 1783900800000,
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("GetHostEngagementStats failed: %v", err)
|
|
}
|
|
// 两个重叠 session 按当天最早开始到最晚心跳合并,不能相加成重复在线时长。
|
|
if stats.OnlineDurationMS != 7200000 || stats.ValidMicDurationMS != 5400000 || stats.ValidMicDays != 1 || stats.PrivateMessageSenders != 6 || stats.NewFollowers != 4 {
|
|
t.Fatalf("unexpected engagement stats: %+v", stats)
|
|
}
|
|
if err := mock.ExpectationsWereMet(); err != nil {
|
|
t.Fatalf("unmet SQL expectations: %v", err)
|
|
}
|
|
}
|