feat: 方案100%匹配 — RBAC动态权限+Grafana监控+目录库独立微服务+全国目录中心+标识同步
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/tcs-iptv/tcs/internal/model"
|
||||
)
|
||||
|
||||
func TestAdminService_OrgCRUD(t *testing.T) {
|
||||
a := NewAdminService()
|
||||
|
||||
// 创建组织
|
||||
org, err := a.CreateOrg(model.Organization{
|
||||
Name: "陕西IPTV运营公司", OrgNode: "6101", Province: "陕西", Type: model.OrgTypeRegulator,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
assert.NotEmpty(t, org.ID)
|
||||
assert.Equal(t, model.OrgStatusActive, org.Status)
|
||||
|
||||
// 查询组织
|
||||
got, err := a.GetOrg(org.ID)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "陕西IPTV运营公司", got.Name)
|
||||
|
||||
// 更新组织
|
||||
updated, err := a.UpdateOrg(org.ID, model.Organization{Name: "陕西IPTV"})
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "陕西IPTV", updated.Name)
|
||||
|
||||
// 列出组织
|
||||
orgs := a.ListOrgs(model.OrgTypeRegulator)
|
||||
assert.Len(t, orgs, 1)
|
||||
|
||||
// 禁用组织
|
||||
require.NoError(t, a.DisableOrg(org.ID))
|
||||
got, _ = a.GetOrg(org.ID)
|
||||
assert.Equal(t, model.OrgStatusDisabled, got.Status)
|
||||
}
|
||||
|
||||
func TestAdminService_UserCRUD(t *testing.T) {
|
||||
a := NewAdminService()
|
||||
|
||||
// 先创建组织
|
||||
org, err := a.CreateOrg(model.Organization{
|
||||
Name: "测试CP公司", Type: model.OrgTypeCP,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
// 创建用户
|
||||
user, err := a.CreateUser(model.User{
|
||||
Username: "testuser", FullName: "测试用户", OrgID: org.ID, Role: "cp",
|
||||
})
|
||||
require.NoError(t, err)
|
||||
assert.NotEmpty(t, user.ID)
|
||||
assert.NotEmpty(t, user.APIKey)
|
||||
assert.NotEmpty(t, user.APISecret)
|
||||
assert.Equal(t, model.UserStatusActive, user.Status)
|
||||
|
||||
// 用户名唯一性校验
|
||||
_, err = a.CreateUser(model.User{
|
||||
Username: "testuser", OrgID: org.ID, Role: "cp",
|
||||
})
|
||||
assert.Error(t, err)
|
||||
|
||||
// 不存在的组织
|
||||
_, err = a.CreateUser(model.User{
|
||||
Username: "user2", OrgID: "nonexistent", Role: "cp",
|
||||
})
|
||||
assert.Error(t, err)
|
||||
|
||||
// 查询用户
|
||||
got, err := a.GetUser(user.ID)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "testuser", got.Username)
|
||||
|
||||
// 更新用户
|
||||
updated, err := a.UpdateUser(user.ID, model.User{FullName: "更新用户名"})
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, "更新用户名", updated.FullName)
|
||||
|
||||
// 列出用户
|
||||
users := a.ListUsers(org.ID, "")
|
||||
assert.Len(t, users, 1)
|
||||
|
||||
// API Key 查找
|
||||
secret, role, ok := a.LookupByAPIKey(user.APIKey)
|
||||
require.True(t, ok)
|
||||
assert.Equal(t, user.APISecret, secret)
|
||||
assert.Equal(t, "cp", role)
|
||||
|
||||
// 重置 API Key
|
||||
newUser, err := a.ResetAPIKey(user.ID)
|
||||
require.NoError(t, err)
|
||||
assert.NotEqual(t, user.APIKey, newUser.APIKey)
|
||||
|
||||
// 旧 Key 失效
|
||||
_, _, ok = a.LookupByAPIKey(user.APIKey)
|
||||
assert.False(t, ok)
|
||||
|
||||
// 新 Key 生效
|
||||
_, _, ok = a.LookupByAPIKey(newUser.APIKey)
|
||||
assert.True(t, ok)
|
||||
|
||||
// 禁用用户
|
||||
require.NoError(t, a.DisableUser(user.ID))
|
||||
_, _, ok = a.LookupByAPIKey(newUser.APIKey)
|
||||
assert.False(t, ok)
|
||||
}
|
||||
Reference in New Issue
Block a user