All checks were successful
Server Check Build (NixCN CMS) TeamCity build finished
Signed-off-by: Asai Neko <sugar@sne.moe>
163 lines
4.0 KiB
Go
163 lines
4.0 KiB
Go
package data_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"nixcn-cms/data"
|
|
"nixcn-cms/testutil"
|
|
)
|
|
|
|
func TestUserCreateAndGetByEmail(t *testing.T) {
|
|
testutil.Setup(t)
|
|
ctx := context.Background()
|
|
|
|
u := data.NewUser(
|
|
data.WithEmail("alice@example.com"),
|
|
data.WithUsername("alice"),
|
|
data.WithPermissionLevel(10),
|
|
)
|
|
require.NoError(t, u.Create(ctx))
|
|
assert.NotEqual(t, uuid.Nil, u.UserId)
|
|
|
|
got, err := new(data.User).GetByEmail(ctx, &u.Email)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, u.Email, got.Email)
|
|
assert.Equal(t, u.UserId, got.UserId)
|
|
}
|
|
|
|
func TestUserGetByEmailNotFound(t *testing.T) {
|
|
testutil.Setup(t)
|
|
ctx := context.Background()
|
|
|
|
email := "nobody@example.com"
|
|
_, err := new(data.User).GetByEmail(ctx, &email)
|
|
require.Error(t, err)
|
|
}
|
|
|
|
func TestUserGetByUserId(t *testing.T) {
|
|
testutil.Setup(t)
|
|
ctx := context.Background()
|
|
|
|
u := data.NewUser(
|
|
data.WithEmail("bob@example.com"),
|
|
data.WithUsername("bob"),
|
|
data.WithPermissionLevel(20),
|
|
)
|
|
require.NoError(t, u.Create(ctx))
|
|
|
|
got, err := new(data.User).GetByUserId(ctx, &u.UserId)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, got)
|
|
assert.Equal(t, u.Email, got.Email)
|
|
}
|
|
|
|
func TestUserGetByUserIdNotFound(t *testing.T) {
|
|
testutil.Setup(t)
|
|
ctx := context.Background()
|
|
|
|
missing := uuid.New()
|
|
got, err := new(data.User).GetByUserId(ctx, &missing)
|
|
require.NoError(t, err)
|
|
assert.Nil(t, got)
|
|
}
|
|
|
|
func TestUserPatchByUserId(t *testing.T) {
|
|
testutil.Setup(t)
|
|
ctx := context.Background()
|
|
|
|
u := data.NewUser(data.WithEmail("carol@example.com"), data.WithUsername("carol"), data.WithPermissionLevel(10))
|
|
require.NoError(t, u.Create(ctx))
|
|
|
|
require.NoError(t, new(data.User).PatchByUserId(ctx, u.UserId,
|
|
data.WithNickname("Carol Smith"),
|
|
data.WithPermissionLevel(20),
|
|
))
|
|
|
|
got, err := new(data.User).GetByUserId(ctx, &u.UserId)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "Carol Smith", got.Nickname)
|
|
assert.Equal(t, uint(20), got.PermissionLevel)
|
|
}
|
|
|
|
func TestUserPatchByUserIdNoOp(t *testing.T) {
|
|
testutil.Setup(t)
|
|
ctx := context.Background()
|
|
|
|
u := data.NewUser(data.WithEmail("dave@example.com"), data.WithUsername("dave"), data.WithPermissionLevel(10))
|
|
require.NoError(t, u.Create(ctx))
|
|
|
|
require.NoError(t, new(data.User).PatchByUserId(ctx, u.UserId))
|
|
}
|
|
|
|
func TestUserFastListUsers(t *testing.T) {
|
|
testutil.Setup(t)
|
|
ctx := context.Background()
|
|
|
|
for i := 0; i < 5; i++ {
|
|
u := data.NewUser(
|
|
data.WithEmail(uuid.New().String()+"@example.com"),
|
|
data.WithUsername(uuid.New().String()),
|
|
data.WithPermissionLevel(10),
|
|
)
|
|
require.NoError(t, u.Create(ctx))
|
|
}
|
|
|
|
limit, offset := 3, 0
|
|
results, err := new(data.User).FastListUsers(ctx, &limit, &offset)
|
|
require.NoError(t, err)
|
|
assert.Len(t, *results, 3)
|
|
}
|
|
|
|
func TestUserListUsersFiltered(t *testing.T) {
|
|
testutil.Setup(t)
|
|
ctx := context.Background()
|
|
|
|
for _, lvl := range []uint{10, 10, 30} {
|
|
u := data.NewUser(
|
|
data.WithEmail(uuid.New().String()+"@example.com"),
|
|
data.WithUsername(uuid.New().String()),
|
|
data.WithPermissionLevel(lvl),
|
|
)
|
|
require.NoError(t, u.Create(ctx))
|
|
}
|
|
|
|
lvl := uint(10)
|
|
results, total, err := new(data.User).ListUsersFiltered(ctx, data.UserListOptions{
|
|
PermissionLevel: &lvl,
|
|
Limit: 10,
|
|
Offset: 0,
|
|
})
|
|
require.NoError(t, err)
|
|
assert.Equal(t, int64(2), total)
|
|
assert.Len(t, *results, 2)
|
|
}
|
|
|
|
func TestUserListUsersSortAndPaginate(t *testing.T) {
|
|
testutil.Setup(t)
|
|
ctx := context.Background()
|
|
|
|
for _, lvl := range []uint{10, 20, 30} {
|
|
u := data.NewUser(
|
|
data.WithEmail(uuid.New().String()+"@example.com"),
|
|
data.WithUsername(uuid.New().String()),
|
|
data.WithPermissionLevel(lvl),
|
|
)
|
|
require.NoError(t, u.Create(ctx))
|
|
}
|
|
|
|
results, total, err := new(data.User).ListUsersFiltered(ctx, data.UserListOptions{
|
|
SortBy: "permission_level",
|
|
SortOrder: "desc",
|
|
Limit: 2,
|
|
Offset: 0,
|
|
})
|
|
require.NoError(t, err)
|
|
assert.Equal(t, int64(3), total)
|
|
assert.Len(t, *results, 2)
|
|
assert.GreaterOrEqual(t, (*results)[0].PermissionLevel, (*results)[1].PermissionLevel)
|
|
}
|