All checks were successful
Server Check Build (NixCN CMS) TeamCity build finished
Signed-off-by: Asai Neko <sugar@sne.moe>
147 lines
3.5 KiB
Go
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)
|
|
}
|
|
}
|