Files
cms-server/data/stats_test.go
Asai Neko 82c412d839
All checks were successful
Server Check Build (NixCN CMS) TeamCity build finished
Add more tests for modules co worked by claude
Signed-off-by: Asai Neko <sugar@sne.moe>
2026-03-26 23:36:40 +08:00

147 lines
3.5 KiB
Go

package data_test
import (
"context"
"testing"
"time"
"github.com/google/uuid"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"nixcn-cms/data"
"nixcn-cms/testutil"
)
func TestGlobalStatsTotalUsers(t *testing.T) {
testutil.Setup(t)
ctx := context.Background()
for i := 0; i < 3; i++ {
u := data.NewUser(
data.WithEmail(uuid.New().String()+"@test.com"),
data.WithUsername(uuid.New().String()),
data.WithPermissionLevel(10),
)
require.NoError(t, u.Create(ctx))
}
count, err := new(data.GlobalStats).TotalUsers(ctx)
require.NoError(t, err)
assert.Equal(t, int64(3), count)
}
func TestGlobalStatsUsersPerPermissionLevel(t *testing.T) {
testutil.Setup(t)
ctx := context.Background()
for _, lvl := range []uint{10, 10, 30} {
u := data.NewUser(
data.WithEmail(uuid.New().String()+"@test.com"),
data.WithUsername(uuid.New().String()),
data.WithPermissionLevel(lvl),
)
require.NoError(t, u.Create(ctx))
}
results, err := new(data.GlobalStats).UsersPerPermissionLevel(ctx)
require.NoError(t, err)
require.NotNil(t, results)
countMap := make(map[uint]int64)
for _, r := range *results {
countMap[r.PermissionLevel] = r.Count
}
assert.Equal(t, int64(2), countMap[10])
assert.Equal(t, int64(1), countMap[30])
}
func TestGlobalStatsEventJoinCheckinCounts(t *testing.T) {
testutil.Setup(t)
ctx := context.Background()
owner := uuid.New()
ev := makeEvent(owner)
require.NoError(t, ev.Create(ctx))
for i, checkin := range []bool{true, false} {
u := data.NewUser(
data.WithEmail(uuid.New().String()+"@test.com"),
data.WithUsername(uuid.New().String()),
data.WithPermissionLevel(10),
)
require.NoError(t, u.Create(ctx))
a := data.NewAttendance(
data.WithEventId(ev.EventId),
data.WithUserId(u.UserId),
data.WithKycId(uuid.Nil),
data.WithRole("attendee"),
data.WithState("success"),
)
if checkin {
a.CheckinAt = time.Now()
}
_ = i
_, err := a.Create(ctx)
require.NoError(t, err)
}
results, err := new(data.GlobalStats).EventJoinCheckinCounts(ctx)
require.NoError(t, err)
require.NotNil(t, results)
require.Len(t, *results, 1)
stat := (*results)[0]
assert.Equal(t, ev.EventId, stat.EventId)
assert.Equal(t, int64(2), stat.JoinCount)
assert.Equal(t, int64(1), stat.CheckinCount)
}
func TestGlobalStatsEventJoinCheckinCountsEmpty(t *testing.T) {
testutil.Setup(t)
ctx := context.Background()
results, err := new(data.GlobalStats).EventJoinCheckinCounts(ctx)
require.NoError(t, err)
require.NotNil(t, results)
assert.Empty(t, *results)
}
func TestGlobalStatsEventJoinCheckinMultipleEvents(t *testing.T) {
testutil.Setup(t)
ctx := context.Background()
owner := uuid.New()
ev1 := makeEvent(owner)
require.NoError(t, ev1.Create(ctx))
ev2 := makeEvent(owner)
require.NoError(t, ev2.Create(ctx))
for _, evId := range []uuid.UUID{ev1.EventId, ev2.EventId} {
u := data.NewUser(
data.WithEmail(uuid.New().String()+"@test.com"),
data.WithUsername(uuid.New().String()),
data.WithPermissionLevel(10),
)
require.NoError(t, u.Create(ctx))
a := data.NewAttendance(
data.WithEventId(evId),
data.WithUserId(u.UserId),
data.WithKycId(uuid.Nil),
data.WithRole("attendee"),
data.WithState("success"),
)
_, err := a.Create(ctx)
require.NoError(t, err)
}
results, err := new(data.GlobalStats).EventJoinCheckinCounts(ctx)
require.NoError(t, err)
require.NotNil(t, results)
assert.Len(t, *results, 2)
for _, stat := range *results {
assert.Equal(t, int64(1), stat.JoinCount)
assert.Equal(t, int64(0), stat.CheckinCount)
}
}