Files
cms-server/data/event_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

206 lines
4.8 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 makeEvent(owner uuid.UUID) *data.Event {
now := time.Now()
return data.NewEvent(
data.WithEventName("Test Event "+uuid.New().String()[:8]),
data.WithEventType("party"),
data.WithEventSubtitle("A test event"),
data.WithEventStartTime(now.Add(24*time.Hour)),
data.WithEventEndTime(now.Add(48*time.Hour)),
data.WithOwner(owner),
data.WithQuota(100),
data.WithLimit(50),
)
}
func TestEventCreate(t *testing.T) {
testutil.Setup(t)
ctx := context.Background()
owner := uuid.New()
ev := makeEvent(owner)
require.NoError(t, ev.Create(ctx))
assert.NotEqual(t, uuid.Nil, ev.EventId)
}
func TestEventGetById(t *testing.T) {
testutil.Setup(t)
ctx := context.Background()
owner := uuid.New()
ev := makeEvent(owner)
require.NoError(t, ev.Create(ctx))
got, err := new(data.Event).GetEventById(ctx, ev.EventId)
require.NoError(t, err)
require.NotNil(t, got)
assert.Equal(t, ev.EventId, got.EventId)
assert.Equal(t, ev.Name, got.Name)
}
func TestEventGetByIdNotFound(t *testing.T) {
testutil.Setup(t)
ctx := context.Background()
got, err := new(data.Event).GetEventById(ctx, uuid.New())
require.NoError(t, err)
assert.Nil(t, got)
}
func TestEventDeleteById(t *testing.T) {
testutil.Setup(t)
ctx := context.Background()
owner := uuid.New()
ev := makeEvent(owner)
require.NoError(t, ev.Create(ctx))
require.NoError(t, new(data.Event).DeleteEventById(ctx, ev.EventId))
got, err := new(data.Event).GetEventById(ctx, ev.EventId)
require.NoError(t, err)
assert.Nil(t, got)
}
func TestEventDeleteByIdNotFound(t *testing.T) {
testutil.Setup(t)
ctx := context.Background()
err := new(data.Event).DeleteEventById(ctx, uuid.New())
require.Error(t, err)
}
func TestEventPatch(t *testing.T) {
testutil.Setup(t)
ctx := context.Background()
owner := uuid.New()
ev := makeEvent(owner)
require.NoError(t, ev.Create(ctx))
require.NoError(t, ev.PatchByEventId(ctx, ev.EventId,
data.WithEventName("Updated Name"),
data.WithEventSubtitle("Updated subtitle"),
))
got, err := new(data.Event).GetEventById(ctx, ev.EventId)
require.NoError(t, err)
assert.Equal(t, "Updated Name", got.Name)
assert.Equal(t, "Updated subtitle", got.Subtitle)
}
func TestEventListWithOptions(t *testing.T) {
testutil.Setup(t)
ctx := context.Background()
owner := uuid.New()
for _, typ := range []string{"party", "party", "official"} {
ev := makeEvent(owner)
ev.Type = typ
require.NoError(t, ev.Create(ctx))
}
results, total, err := new(data.Event).ListEventsWithOptions(ctx, data.EventListOptions{
TypeFilter: "party",
Limit: 10,
})
require.NoError(t, err)
assert.Equal(t, int64(2), total)
assert.Len(t, *results, 2)
}
func TestEventListWithOwnerFilter(t *testing.T) {
testutil.Setup(t)
ctx := context.Background()
owner1 := uuid.New()
owner2 := uuid.New()
for i := 0; i < 3; i++ {
require.NoError(t, makeEvent(owner1).Create(ctx))
}
require.NoError(t, makeEvent(owner2).Create(ctx))
results, total, err := new(data.Event).ListEventsWithOptions(ctx, data.EventListOptions{
OwnerId: &owner1,
Limit: 10,
})
require.NoError(t, err)
assert.Equal(t, int64(3), total)
assert.Len(t, *results, 3)
}
func TestEventFastList(t *testing.T) {
testutil.Setup(t)
ctx := context.Background()
owner := uuid.New()
for i := 0; i < 5; i++ {
require.NoError(t, makeEvent(owner).Create(ctx))
}
limit, offset := int64(3), int64(0)
results, err := new(data.Event).FastListEvents(ctx, limit, offset)
require.NoError(t, err)
assert.Len(t, *results, 3)
}
func TestEventGetEventsByUserId(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))
ev3 := makeEvent(owner)
require.NoError(t, ev3.Create(ctx))
u := data.NewUser(
data.WithEmail(uuid.New().String()+"@test.com"),
data.WithUsername(uuid.New().String()),
data.WithPermissionLevel(10),
)
require.NoError(t, u.Create(ctx))
for _, evId := range []uuid.UUID{ev1.EventId, ev2.EventId} {
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.Event).GetEventsByUserId(ctx, u.UserId, 10, 0)
require.NoError(t, err)
require.NotNil(t, results)
assert.Len(t, *results, 2)
}
func TestEventGetEventsByUserIdEmpty(t *testing.T) {
testutil.Setup(t)
ctx := context.Background()
results, err := new(data.Event).GetEventsByUserId(ctx, uuid.New(), 10, 0)
require.NoError(t, err)
require.NotNil(t, results)
assert.Empty(t, *results)
}