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) }